《机器学习实战》第九章 解决python3运行代码出现的BUG问题

参靠博文1
参考博文2

在学习到《机器学习实战》第九章(回归树)的时候遇到的几个报错的解决方案归总:

Bug 1.TypeError: unsupported operand type(s) for /: ‘map’ and ‘int’
此错误的发生位置是在loadData函数的位置,问题是map方法和int不兼容
网上的解决发难如下所示:在map外面加一个list

def loadDataSet(fileName):      #general function to parse tab -delimited floats
    dataMat = []                #assume last column is target value
    fr = open(fileName)
    for line in fr.readlines():
        curLine = line.strip().split('\t')
        fltLine = list(map(float,curLine) #map all elements to float())
        dataMat.append(fltLine)
    return dataMat
上述方法亲测不可用,在博客上搜索到另一个解决方案,代码片段如下:
def loadDataSet(fileName):     
    dataMat = []              
    fr = open(fileName)
    for line in fr.readlines():
        curLine = line.strip().split('\t')
        fltLine = []
        for i in curLine:
           fltLine.append(float(i))
        dataMat.append(fltLine)
    return dataMat

使用上述方案可以解决第一个错误,但是接下来却导致了另一个错误的出现,错误如下Bug2.

Bug2.TypeError: unhashable type: ‘matrix’
此错误的发生位置是在chooseBestSplit函数,问题是matrix类型不能被hash。

for splitVal in set(dataSet[:,featIndex]):

参考博客一个解决方案是,此处修改为

for splitVal in set(dataSet[:, featIndex].T.A.tolist()[0]):

但是此处修改后紧接着出现另一个错误,Bug如下

Bug3.TypeError:index 0 is out of bounds for axis 0 with size 0
此处bug的解决只需要修改一下binSplitDataSet函数

def binSplitDataSet(dataSet,feature,value):  
    mat0 = dataSet[nonzero(dataSet[:, feature] > value)[0],:]  
    mat1 = dataSet[nonzero(dataSet[:, feature] <= value)[0],:]  
    return mat0, mat1  

方法亲测可用,之后就可以完美运行代码啦!!NICE!!

你可能感兴趣的:(《机器学习实战》第九章 解决python3运行代码出现的BUG问题)