機器學習——Perceptron實踐
阿新 • • 發佈:2018-10-10
!= 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 fork 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實踐