我认为这是可能的,因为在fit
函数it says的def中:
X:类似数组,shape = [n_samples,n_features]
现在我有,
我当然可以生成决策树的字符串表示,然后用实际的功能名称替换X[]
。但是我想知道fit
函数是否可以直接将特征名称作为输入的一部分?我为每个样本尝试了以下格式
[1,2,“feature_1”,“feature_2”]
[[1,2],[“feature_1”,“feature_2”]]
但都没有奏效。 shape
是什么意思?你能举个例子吗?
答案 0 :(得分:13)
fit
函数本身不支持这样的东西。但是,您可以使用export_graphviz
成员函数绘制决策树,包括要素标签。 (这不是你如何生成上面的树?)。基本上,你会做这样的事情:
iris = load_iris()
t = tree.DecisionTreeClassifier()
fitted_tree = t.fit(iris.data, iris.targets)
outfile = tree.export_graphviz(fitted_tree, out_file='filename.dot', feature_names=iris.feature_names)
outfile.close()
这将生成一个'dot'文件,graphviz(必须单独安装)然后可以“渲染”成传统的图像格式(postscript,png等)例如,要创建一个png文件,你' d run:
dot -Tpng filename.dot > filename.png
点文件本身是一种纯文本格式,相当不言自明。如果您想调整文本,可以使用您选择的文本编辑器中的简单查找替换。还有python模块可以直接与graphviz及其文件进行交互。 PyDot似乎非常受欢迎,但也有其他人。
shape
文档中的fit
引用只是指X
的布局,即训练数据矩阵。具体来说,它期望第一个索引在训练示例中变化,而第二个索引则指向特征。例如,假设您的数据shape
为({1}},则为iris.data
。 fit
函数将其解释为包含150个训练样例,每个示例包含四个值。
答案 1 :(得分:1)
X
应为2维numpy ndarray
,其中每行对应一个样本,每列代表一个要素的值。 shape
指的是要素数据X
的行数和列数。
有效X
的示例,其中包含3个样本和2个要素:
import numpy as np
X = np.array([[2,2],[2,0],[0,2]])
y = np.array([0,1,1])
print X.shape # Output (2,2)
其中第一个样本的值分别为第一个和第二个的第2个和第二个。
如果您在dict
列表中有特征数据的表示(每个dict
对应一个样本),那么
D = [
{'feature1': 2, 'feature2': 2},
{'feature1': 2, 'feature2': 0},
{'feature1': 0, 'feature2': 2}
]
然后您可以使用DictVectorizer
生成矩阵X
:
from sklearn.feature_extraction import DictVectorizer
v = DictVectorizer(sparse=False)
X = v.fit_transform(D)