《机器学习实战》 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[] 
即可
--------------------- 
 

猜你喜欢

转载自blog.csdn.net/youhuakongzhi/article/details/85238535
今日推荐