《機器學習實戰》學習筆記之k 近鄰演算法3

2021-07-27 06:36:56 字數 2051 閱讀 6224

2.3 手寫識別系統

從os模組中匯入listdir函式,用來讀取給定目錄中的檔名

from os import listdir
關於zeros函式的使用,

**及注釋

#image convert to vector

def img2vector(filename):

returnvect = zeros((1,1024))

fr = open(filename)

for i in range(32):

linestr=fr.readline()

for j in range(32):

returnvect[0,32*i+j] = int(linestr[j])

return returnvect

def handwritingclasstest():

hwlabels =

trainingfilelist = listdir('digits/trainingdigits')

m = len(trainingfilelist)#訓練樣本的個數

trainingmat = zeros((m,1024))#建立訓練矩陣,每行有1024個元素,表示乙個訓練樣本

for i in range(m):

filenamestr = trainingfilelist[i]#第i個訓練樣本

filestr = filenamestr.split('.')[0]

classnumstr = int(filestr.split('_')[0])#樣本命名的第乙個數字表示實際的分類

trainingmat[i,:] = img2vector('digits/trainingdigits/%s'%filenamestr)#將所有樣本轉換成矩陣,得到訓練樣本集

testfilelist = listdir('digits/testdigits')

errorcount = 0.0

mtest = len(testfilelist)

for i in range(mtest):

filenamestr = testfilelist[i]

filestr =filenamestr.split('.')[0]

classnumstr = int(filestr.split('_')[0])#同樣方法得到乙個測試樣本的分類

vectorundertest = img2vector('digits/testdigits/%s'%filenamestr)#將乙個測試樣本轉成矩陣

classifierresult = classify0(vectorundertest,trainingmat,hwlabels,3)#執行分類

print "the classifier came back with:%d, the real answer is:%d"%(classifierresult,classnumstr)

if(classifierresult != classnumstr):errorcount+=1.0

print "\nthe total number of errors is:%d"%errorcount

print "\nthe total error rate is:%f"%(errorcount/float(mtest))

終端結果

k-近鄰演算法總結:摘自《機器學習實戰》

簡單的說,該演算法採用測量不同特徵值之間的距離方法進行分類,缺陷:

1. 必須儲存全部資料集,如果訓練資料集很大,必須使用大量的儲存空間

2.必須對每個資料計算距離值,耗時大

3.無法給出任何資料的基礎結構資訊,無法知曉平均例項樣本和典型例項樣本具有什麼特徵

機器學習實戰之K 近鄰演算法

k 近鄰演算法工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的資料進行比較,然後演算法提取樣本集中特徵最相似資料 最鄰近 的分類標籤。一般來說,我們只選取樣本資料集...

機器學習實戰之 k 近鄰演算法

k 近鄰演算法 knn 採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用資料範圍 數值型和標稱型。描述 存在乙個樣本資料集合,樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸人沒有標籤的新資料...

機器學習實戰之k近鄰演算法

k近鄰演算法 或者說k最近鄰 knn,k nearestneighbor 在乙個空間中有許多樣本,這時候來了乙個新的樣本即測試點,那麼如何判斷這個樣本的類別。做法就是求測試點和空間中每個樣本的距離,用距離最近的前k個判斷。比如下圖新來了乙個點,這時候k 3,離它最近的3個點就是乙個為正方形,兩個為三...