栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ValueError: Length of feature

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ValueError: Length of feature

运行刘建平老师博客中,关于决策树DecisionTreeClassifier实例的代码运行出现:ValueError: Length of feature_names, 4 does not match number of features, 2的错误。
经过一番排查,发现错误原因是因为独热编码的问题。
错误就出在

feature_names=iris.feature_names,

feature_names这一参数的作用是:使决策树图中的各个小块可以显示其对应的特征名

这一参数要求参数值必须与被分析的数据集中的特征名(也叫属性名)对应,数量一致且顺序一致。

我打印了feature_names ,发现feature_names 的个数一共有4个。分别为:

['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

难怪,系统会报错。系统要求的feature的个数为2个,但我却传进去了4个参数。所以我更改后的代码如下所示:

dot_data = tree.export_graphviz(clf, out_file=None,
                                # 这一句是我更改过的代码
                                feature_names=['sepal length','sepal width'],
                                class_names=iris.target_names,
                                filled=True,
                                rounded=True,
                                special_characters=True)

刘建平老师有关决策树实例的博客指路:https://www.cnblogs.com/pinard/p/6056319.html

刘建平老师有关决策树实例的代码(纠错版):

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier

# 仍然使用自带的iris数据
iris = datasets.load_iris()
X = iris.data[:, [0, 2]]  # 特征数据
y = iris.target  # 标签数据
# print(X)
# print(y)
# 训练模型,限制树的最大深度4
clf = DecisionTreeClassifier(max_depth=4)
# 拟合模型
clf.fit(X, y)

# 画图
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),
                     np.arange(y_min, y_max, 0.1))

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 散点图和不同类别的分界线图共同绘制在一张图上
plt.contourf(xx, yy, Z, alpha=0.4)  # plt.contourf用来画出不同分类的边界线
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.show()

# 接着我们可视化我们的决策树
from IPython.display import Image
from sklearn import tree
import pydotplus

print(iris.feature_names)
print(iris.target_names)
dot_data = tree.export_graphviz(clf, out_file=None,
                                feature_names=iris.feature_names,
                                # feature_names=['sepal length','sepal width'],
                                class_names=iris.target_names,
                                filled=True,
                                rounded=True,
                                special_characters=True)

graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())
# 保存图像
graph.write_png("DecisionTree实例.jpeg")
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号