《机器学习实战》第十章错误总结

这一章完成后发现自己的基础还不牢固,先来复习下基础
( )———元组tuples
[ ]———列表list
{ }———字典dict
尤其是列表list,一定要看清有多少个[ ]

下边的错误就是由于基础不牢导致的

return np.matrix(centList), clusterAssment

提示错误ValueError: matrix must be 2-dimensional
或者TypeError: list indices must be integers or slices, not tuple
找到centList的赋值语句

centList[bestCentToSplit] = bestNewCents[0, :]
centList.append(bestNewCents[1, :])

根据错误提示可以看出是centList的数值有问题,加一条语句

print(centList)

可以看到输出大概是这样的

[matrix([[-122.54868607,   45.51882187]]), 
matrix([[-122.65589505,   45.49371211]]), 
matrix([[-122.842918,   45.646831]]), 
matrix([[-122.7680632,   45.4665528]]), 
matrix([[-122.68216889,   45.56573522]])]

所以很容易就知道怎么改了,赋值语句不应该把matrix型数据直接赋过去,应该先把数据转换格式再赋值,即

centList[bestCentToSplit] = bestNewCents[0, :].tolist()
centList.append(bestNewCents[1, :].tolist())

我满心欢喜地以为应该成功了,结果提示错误

ValueError: matrix must be 2-dimensional

输出的centList为

[[[-122.55924017857146, 45.52238271428571]], 
[[-122.65691647999998, 45.50956080000001]], 
[[-122.755383, 45.5949895]], 
[[-122.7680632, 45.4665528]], 
[[-122.40092849999999, 45.46897]]]

根据输出我们可以很容易知道多了一个[ ],使得centList的秩为1,所以接下来就是怎么去掉一个[ ],我想了很久(基础不牢固),后来查了一些资料,发现应该改成这样

centList[bestCentToSplit] = bestNewCents[0, :].tolist()[0]
centList.append(bestNewCents[1, :].tolist()[0])

然后,成功。

你可能感兴趣的:(机器学习实战,《机器学习实战》学习过程)