问题遇到的现象和发生背景
绘制决策树时类型出错
问题相关代码,请勿粘贴截图
def createTree(data, labels, names, method = 'id3'):
data = np.asarray(data)
labels = np.asarray(labels)
names = np.asarray(names)
# 如果结果为单一结果
if len(set(labels)) == 1:
return labels[0]
# 如果没有待分类特征
elif data.size == 0:
return voteLabel(labels)
# 其他情况则选取特征
bestFeat, bestEnt = bestFeature(data, labels, method = method)
# 取特征名称
bestFeatName = names[bestFeat-1]
# 从特征名称列表删除已取得特征名称
names = np.delete(names, [bestFeat])
# 根据选取的特征名称创建树节点
decisionTree = {bestFeatName: {}}
# 根据最优特征进行分割
dataSet, labelSet = splitFeatureData(data, labels, bestFeat)
# 对最优特征的每个特征值所分的数据子集进行计算
for featValue in dataSet.keys():
decisionTree[bestFeatName][featValue] = createTree(dataSet.get(featValue-1), labelSet.get(featValue-1), names, method)
return decisionTree
运行结果及报错内容
TypeError Traceback (most recent call last)
in
----> 1 xgTreeTrain = createTree(x_train, y_train, class_names, method = 'id3')
2 # 画剪枝前的树
3 print("剪枝前的树")
4 createPlot(xgTreeTrain)
in createTree(data, labels, names, method)
22 # 对最优特征的每个特征值所分的数据子集进行计算
23 for featValue in dataSet.keys():
---> 24 decisionTree[bestFeatName][featValue] = createTree(dataSet.get(featValue-1), labelSet.get(featValue-1), names, method)
25 return decisionTree
26
in createTree(data, labels, names, method)
5 names = np.asarray(names)
6 # 如果结果为单一结果
----> 7 if len(set(labels)) == 1:
8 return labels.iloc[0]
9 # 如果没有待分类特征
TypeError: iteration over a 0-d array
我的解答思路和尝试过的方法
将其改为:
如果结果为单一结果
if len(set(labels)) == 1:
return labels.iloc[0]
我想要达到的结果
不出错,画出决策树