1. 程式人生 > >《機器學習實戰》 invalid literal for int() with base 10:‘largeDoses

《機器學習實戰》 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[] 
即可
---------------------