1. 程式人生 > >機器學習實戰(一)--k近鄰演算法

機器學習實戰(一)--k近鄰演算法

機器學習實戰(一)–k近鄰演算法

最近在學習機器學習,順便做個記錄,一方面給自己加深印象,另一方面與大家共勉,希望能給大家一些幫助,我也是剛入門的新手,有不對的地方還請多多指教。
我用的Python3.5,有些程式碼與書上不太一樣。

程式清單2-1 k-近鄰演算法
iteritems()函式在Python3.5中沒有了,使用items()代替

程式清單2-2 將文字記錄轉換成Numpy的解析程式
classLabelVector.append(int(listFromLine[-1]))這句程式執行報錯ValueError,好像是因為listFromLine[-1]存放的是LargeDoses等字串,不是數字字串。
修改為如下:
if listFromLine[-1] == ‘largeDoses’:
classLabelVector.append(3)
elif listFromLine[-1] == ‘smallDoses’:
classLabelVector.append(2)
elif listFromLine[-1] == ‘didntLike’:
classLabelVector.append(1)

修改kNN.py後,需要使用reload()函式重新載入到控制檯,但reload函式在Python3以後移到imp標準庫中,使用reload需要執行
from imp import reload

建立圖2-5時,沒有給出操作程式碼,操作程式碼如下:
import numpy as np
fig=plt.figure()
fig.add_subplot(111)

idx1=np.array(datingLabels) == 1
idx2=np.array(datingLabels) == 2
idx3=np.array(datingLabels) == 3

plt.scatter(datingDataMat[idx1,0],datingDataMat[idx1,1],marker=’+’,s=50,c=’b’,label=”Don’t Like”)
plt.scatter(datingDataMat[idx2,0],datingDataMat[idx2,1],marker=’o’,s=30,c=’m’,label=’Small Doses’)
plt.scatter(datingDataMat[idx3,0],datingDataMat[idx3,1],marker=’x’,s=80,c=’c’,label=’Large Doses’)

plt.legend(loc=’upper left’)

程式清單2-4
print函式不一樣,需要使用Python3.0後的print函式
程式清單2-5
raw_input函式在Python3.0後不再使用,改用input()。
datingTestSet2.txt與datingTestSet.txt的區別就是最後一列是smalldoses等還是數字,前面我們處理的就是datingTestSet.txt,這裡接著使用這個,否則還需要修改函式file2matrix,其實作者前面寫的file2matrix函式就是用的datingTestSet2.txt