2.2:示例,使用k鄰近演算法改進約會網站的配對效果 之一
首先是看程式,自行新增註釋:
# 程式清單2-2 將文字記錄到轉換NumPy的解析程式.
def file2matrix(filename):
fr = open(filename) # 開啟文件
arrayOLines = fr.readlines() # 讀取並返回文件中行的列表,即現在arrayOLines是一個列表.
numberOfLines = len(arrayOLines) #讀取列表長度,即文件的行數.
returnMat = zeros((numberOfLines, 3)) #生成一個元組,元組中是一個文件行數行,3列的0矩陣.
classLabelVector = [] # 類標籤向量,初始時為空元組.
index = 0
for line in arrayOLines #對行的列表中的每一行進行操作.
line = line.strip() #規範化,刪除每一行中的空白字元
listFromLine = line.split('\t') #繼續規範化,進行分割.
returnMat[index, :] = listFromLine[0 : 3] #由於特徵有三個,所以這裡放入了三個特徵到矩陣中,序號3不算在內.
classLabelVector.append(int(listFromLine[-1])) #儲存最後一列,即樣本的類別.
index += 1
return returnMat, classLabelVector
試著執行一下,
然而,這裡產生了一個報警:
為什麼?
答案非常簡單,作者在這裡漏了一個冒號,而Python的for語句都需要加冒號,實際上Python下一行需要縮排的地方,在本行都需要加冒號.略懂的我抄著書跟著漏掉了這個冒號.
然後我查閱了英文版,這裡是有一個冒號的...
新增之後,編譯沒有報錯了.
如下執行:
>>> import kNN
>>> datingDataMat, datingLabels = kNN.file2matrix('datingTestSet.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "kNN.py", line 54, in file2matrix
classLabelVector.append(int(listFromLine[-1]))
ValueError: invalid literal for int() with base 10: 'largeDoses'
百度之,是轉換為整數出錯,難道是類別無法轉換為整數?
開啟文件,確實是這樣,第一行對應的類別是” largeDoses”,這個字串自然無法轉換為整數.
那作者是怎麼做下去的呢?
開啟作者的程式文件,發現確實是這麼寫的,英文版書籍上也是,那麼為什麼作者能做下去,而且還能得到結果!(中文版與英文版的結果不同,中文版上是數字,而英文版是字串,如下截圖:)
& &
貌似都可行啊.
既然是轉換出錯,那麼,我不轉換試試?下面是結果:
>>> reload (kNN)
<module 'kNN' from 'kNN.py'>
>>> datingDataMat, datingLabels = kNN.file2matrix('datingTestSet.txt')
>>> datingDataMat
>>> datingDataMat
array([[ 4.09200000e+04, 8.32697600e+00, 9.53952000e-01],
[ 1.44880000e+04, 7.15346900e+00, 1.67390400e+00],
[ 2.60520000e+04, 1.44187100e+00, 8.05124000e-01],
...,
[ 2.65750000e+04, 1.06501020e+01, 8.66627000e-01],
[ 4.81110000e+04, 9.13452800e+00, 7.28045000e-01],
[ 4.37570000e+04, 7.88260100e+00, 1.33244600e+00]])
>>> datingLabels[0 : 20]
['largeDoses', 'smallDoses', 'didntLike', 'didntLike', 'didntLike', 'didntLike', 'largeDoses', 'largeDoses', 'didntLike', 'largeDoses', 'didntLike', 'didntLike', 'smallDoses', 'didntLike', 'didntLike', 'didntLike'
, 'didntLike', 'didntLike', 'smallDoses', 'largeDoses']
看來是這樣了,為什麼要int,中文版中是這麼解釋的:
& 英文的解釋與中文版沒有區別. 問題是我得到的文件儲存的元素值確實是字串,莫非是因為文件不同?假設我需要當作字串處理,確實這個int轉換是錯誤的.
先拋開這個問題,明天繼續.
相關文章
- k-鄰近演算法實現約會網站的配對效果演算法網站
- 2.1 k鄰近演算法之一演算法
- K - 近鄰演算法演算法
- K近鄰演算法演算法
- 機器學習——K近鄰演算法機器學習演算法
- k-近鄰演算法演算法
- K-鄰近均值演算法演算法
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN
- K近鄰模型模型
- 機器學習-11-k近鄰演算法機器學習演算法
- Python:K-近鄰演算法Python演算法
- 2.1 k鄰近演算法之二演算法
- 分類演算法-k 鄰近演算法演算法
- 機器學習演算法之K近鄰演算法機器學習演算法
- k近鄰演算法的實現:kd樹演算法
- 機器學習演算法——kNN(k-近鄰演算法)機器學習演算法KNN
- 機器學習——KNN(K近鄰)機器學習KNN
- 第二篇:基於K-近鄰分類演算法的約會物件智慧匹配系統演算法物件
- 機器學習實戰筆記-k近鄰演算法機器學習筆記演算法
- 機器學習筆記1(K-近鄰演算法)機器學習筆記演算法
- K近鄰演算法:機器學習萌新必學演算法演算法機器學習
- 機器學習演算法(三):K近鄰(k-nearest neighbors)初探機器學習演算法REST
- 用Python實現K-近鄰演算法Python演算法
- k近鄰演算法python實現 -- 《機器學習實戰》演算法Python機器學習
- 用定租問題學透機器學習的K近鄰演算法機器學習演算法
- K近鄰法(KNN)原理小結KNN
- K-近鄰演算法介紹與程式碼實現演算法
- 機器學習實戰----k值近鄰演算法(Python語言)機器學習演算法Python
- scikit-learn K近鄰法類庫使用小結
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法機器學習RESTKNN演算法
- 機器學習_K近鄰Python程式碼詳解機器學習Python
- 【機器學習】機器學習建立演算法第2篇:K-近鄰演算法【附程式碼文件】機器學習演算法
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法的應用機器學習RESTKNN演算法
- Python反反爬系列(一)----K近鄰演算法與CSS動態字型加密Python演算法CSS加密
- 送你一份使用k近鄰演算法實現迴歸的實用指南(附程式碼、連結)演算法
- opencv 學習之 基於K近鄰的數字識別OpenCV
- 一看就懂的K近鄰演算法(KNN),K-D樹,並實現手寫數字識別!演算法KNN