在学习机器学习实战这本书过程中,代码实现部分往往有一些小的错误。下面进行一些总结,方便交流学习!
报错原因:map方法和int不兼容。
解决办法:在map方法外加上一个list()如下
fltLine = list(map(float,curLine))
报错代码
for splitVal in set(dataSet[:,featIndex]):
主要原因:dataSet是矩阵,将其转换成列表即可。
解决办法如下:用tolist方法强制转换为列表
for splitVal in set(dataSet[:,featIndex].T.tolist()[0]):
报错代码
mat0 = dataSet[np.nonzero(dataSet[:,feature] > value)[0],:][0]
mat1 = dataSet[np.nonzero(dataSet[:,feature] > value)[0],:][0]
原因:
经过逐步调试发现,其中mato和mat1都只取了切片好的的一行数据,随着迭代的进行,会超出矩阵范围出错
解决办法:将【0】去掉,取切分好的全部数据,这里极度怀疑书印刷出错了
mat0 = dataSet[np.nonzero(dataSet[:,feature] > value)[0],:]
mat1 = dataSet[np.nonzero(dataSet[:,feature] <= value)[0],:]
代码
reDraw.canvas = FigureCanvasTkAgg(reDraw.f,master=root)
reDraw.canvas.show()
报错,FigureCanvasTkAgg类中没有show方法,查看了FigureCanvasTkAgg的源代码,发现FigureCanvasTkAgg类中的show方法已经被draw方法替代了,可能是Tkinter库的版本更新了
做出如下修改即可
reDraw.canvas.draw()
报错原因:
reDraw.a.scatter(reDraw.rawDat[:,0], lreDraw.rawDat[:,1], s=5)
scatter方法画散点图,点的坐标必须是一维的,而上面代码中的坐标是两个矩阵型,可能不是以为的,将其转换成列表即可
reDraw.a.scatter(list(reDraw.rawDat[:,0]), list(reDraw.rawDat[:,1]), s=5)