1. 程式人生 > >統計學習方法例2.1實現(轉)

統計學習方法例2.1實現(轉)

對應李航《統計學習方法》 P29的 例2.1

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# @Author: appleyuchi
# @Date:   2018-10-02 21:54:30
# @Last Modified by:   appleyuchi
# @Last Modified time: 2018-10-02 21:55:51
#-*- coding:utf-8 -*-
import os
import sys
from numpy import *

reload(sys)
sys.setdefaultencoding('utf-8')
#首先將書上的訓練集輸入
def loadDataset():
    dataset=[[3,3],[4,3],[1,1]]
    labels=[1,1,-1]
    return dataset,labels

#定義sign函式
def function_sign(x):
    if x>=0:return 1
    else:return -1

#演算法主程式
def perceptron(dataSet,labels):
    dataMat=mat(dataSet) #將資料集轉換成矩陣用於計算
    m,n=shape(dataMat)
    w=mat(zeros((n,1)));b=0 #建立與示例維度相同的初始化w
    while([function_sign(i) for i in array(dataMat * w+b)]) != labels:  #當預測結果與實際結果不符時則迴圈更新我,w,b
        for i in xrange(m):
            if labels[i]*(dataMat[i]*w+b)<=0:
                w += labels[i]*dataMat[i].T
                b += labels[i]
    return w,b
if __name__ == '__main__':
    dataSet,labels=loadDataset()
    w,b=perceptron(dataSet,labels)
    print w,'\n',b