1. 程式人生 > >機器學習——Perceptron實踐

機器學習——Perceptron實踐

!= col cor mage append nbsp .data arr div

一、題目:使用自己寫的感知機Perceptron實現對鳶尾花數據的分類。

  數據來源:

from sklearn.datasets import load_iris
dataSet = load_iris()

二、註意事項:

  1)該數據中一共有三類,而感知機是個二分類器,因此,可以將該數據兩兩分成三次。

  2)第二類數據與第三類數據很相近,所以可以對數據進行升維處理,再做平方處理。

    例如:一種升維方式: 若x=(x1,x2,...xn) ,x_new=(x1*x1,x1*x2,...x1*xn,x2*x1,x2*x2,...x2*xn,....xn*xn)

        平方處理: 若x=(x1,x2,...xn),x_new=(x1*x1,x2*x2,x3*x3,...,xn*xn)

三、代碼實現

 1 from sklearn.datasets import load_iris
 2 import numpy as np
 3 dataSet = load_iris()
 4 data=dataSet[data] #數據預處理
 5 labelNum=dataSet[target]
 6 label=dataSet[target_names]
 7 x=[];
 8 for i in range( 0,len(data) ):  #數據升維
 9     y=[]
10     for j in range(0,len(data[i])):
11         for
k in range(0,len(data[i])): 12 y.append(data[i][j]*data[i][k]) 13 x.append(y) 14 data=np.array(x); 15 data=data**2 16 def perceptron(data,label,eta=0.05,times=1000): 17 b=0; 18 w=np.zeros(len(data[0])) 19 while(times>0): 20 for i in range(0,len(label)): 21 if
( label[i]*(sum(data[i]*w)+b ) <= 0 ): 22 w=w+eta*data[i]*label[i] 23 b=b+eta*label[i]; 24 times-=1; 25 return w,b 26 def multi_classifier(data,labelNum,label): 27 w={} 28 b={} 29 #多個感知機 30 for i in range(0,len(label)): 31 labelDuplicate=labelNum.copy(); 32 #標簽分類 33 for j in range(0,len(labelDuplicate)): 34 if(labelDuplicate[j]!=i): 35 labelDuplicate[j]=-1; 36 else: 37 labelDuplicate[j]=1; 38 if(i==1): 39 w[ label[i] ],b[ label[i] ]=perceptron(data,labelDuplicate,times=1000); 40 else: 41 w[ label[i] ],b[ label[i] ]=perceptron(data,labelDuplicate,times=100); 42 return w,b 43 def classify(data,w,b,label,labelNum): 44 sumLabel={}; #每類總數 45 corLabel={}; #正確數量 46 for j in label: #初始化 47 sumLabel[j]=0 48 corLabel[j]=0 49 50 for i in range(0,len(data)): 51 print(,i+1,個樣本) 52 for j in label: 53 if( sum(w[j]*data[i])+b[j]>=0 ): 54 if(j==label[labelNum[i]]): 55 corLabel[j]+=1; 56 sumLabel[ label[ labelNum[i]] ]+=1 57 print(j) 58 break; 59 for j in label: 60 print( {0} 類正確率:{1}.format(j, corLabel[j]/ sumLabel[j])); 61 w,b=multi_classifier(data,labelNum,label); 62 classify(data,w,b,label,labelNum);

四、運行結果

技術分享圖片

機器學習——Perceptron實踐