北京网站建设 乐云seo/百度站长工具验证
1. 概述
错误表述是指 : 不可用类型:‘矩阵’ ,也就是说矩阵在这里是不能使用的。
2. 举例
在机器学习实战第九章树回归中,运行P164的代码,就会报出这一错误。
Traceback (most recent call last):File "C:/Users/Desktop/Machine Learning in Action/Chapter 9_TreeRegression/regTrees.py", line 83, in <module>createTree(myMat)File "C:/Users/Desktop/Machine Learning in Action/Chapter 9_TreeRegression/regTrees.py", line 69, in createTreefeat, val = chooseBestSplit(dataSet, leafType, errType)File "C:/Users/Desktop/Machine Learning in Action/Chapter 9_TreeRegression/regTrees.py", line 51, in chooseBestSplitfor splitVal in set(dataSet[:, featIndex]):
TypeError: unhashable type: 'matrix'TypeError: unhashable type: 'matrix'
报错信息是在 for splitVal in set(dataSet[:, featIndex]):,这里,因为这里使用了 set() 函数进行去重,而 set() 函数的参数必须是可迭代的序列,因此需要在这里将矩阵转化为列表,如下:
for splitVal in set(dataSet[:, featIndex].tolist()[0]):
在这里顺便提一下,书中binSplitDataSet这一函数有误,
def binSplitDataSet(dataSet, feature, value):mat0 = dataSet[nonzero(dataSet[:, feature] > value)[0], :][0]# 数据集 非零元素的索引值 选择的切分特征 切分特征值 第一个[0]就是取得的索引值 第二个[0]就是第一行mat1 = dataSet[nonzero(dataSet[:, feature] <= value)[0], :][0]return mat0, mat1
应改为:
def binSplitDataSet(dataSet, feature, value):mat0 = dataSet[nonzero(dataSet[:, feature] > value)[0], :]# 数据集 非零元素的索引值 选择的切分特征 切分特征值 第一个[0]就是取得的索引值 mat1 = dataSet[nonzero(dataSet[:, feature] <= value)[0], :]return mat0, mat1
希望能够帮助到大家,有什么问题可以 直接评论即可,喜欢有用的话可以点个赞让更多的人看到,如果不够详细的话也可以说,我会及时回复的。