《機器學習實戰》 invalid literal for int() with base 10:‘largeDoses
轉自:https://blog.csdn.net/LiKouSanYou/article/details/62519130
def file2matrix(filename):
fr = open(filename)
numberOfLines = len(fr.readlines()) #get the number of lines in the file
returnMat = zeros((numberOfLines,3)) #prepare matrix to return
classLabelVector = [] #prepare labels return
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1])) # 執行到這裡會報錯
index += 1
return returnMat,classLabelVector
---------------------
可見,不是單純的把字串改為整型資料,而是改成表。所以,修改程式如下
def file2matrix(filename): # 從檔案中讀入訓練資料,並存儲為矩陣
fr = open(filename)
arrayOLines = fr.readlines()
numberOfLines = len(arrayOLines) # 獲取 n=樣本的行數
returnMat = zeros((numberOfLines,3)) # 建立一個2維矩陣用於存放訓練樣本資料,一共有n行,每一行存放3個數據
classLabelVector = [] # 建立一個1維陣列用於存放訓練樣本標籤。
index = 0
for line in arrayOLines :
line = line.strip() # 把回車符號給去掉
listFromLine = line.split('\t') # 把每一行資料用\t分割
returnMat[index, :] = listFromLine[0:3] # 把分割好的資料放至資料集,其中index是該樣本資料的下標,就是放到第幾行
labels = {'didntLike':1,'smallDoses':2,'largeDoses':3} # 新增
classLabelVector.append(labels[listFromLine[-1]]) # 去掉了int
# 把該樣本對應的標籤放至標籤集,順序與樣本集對應。 python語言中可以使用-1表示列表中的最後一列元素
index += 1
return returnMat,classLabelVector
---------------------
增加一個列表作為對應,可得到書中結果
labels = {‘didntLike’:1,’smallDoses’:2,’largeDoses’:3} # 新增
classLabelVector.append(labels[listFromLine[-1]]) # 改成labels[]
即可
---------------------