目前我的代码如下所示:
clf = RandomForestClassifier(n_estimators=10, criterion='entropy')
clf = clf.fit(X, Y)
但是 X 是一个数组,如下所示:
X = [[0, 1], [1, 1]]
我更喜欢像这样使用 X:
X = [{'avg': 0, 'stddev': 1}, {'avg': 1, 'stddev': 1}]
仅仅因为当您阅读X[0]['avg']
而不是X[0][0]
时,绘制树(如此处所述:http://scikit-learn.org/stable/modules/tree.html#classification)更有意义。可能吗?使用字典或熊猫?
您可以使用 DictVectorizer 类将此类字典列表转换为稀疏矩阵或密集 numpy 数组。
scikit-learn永远不会使用dict对象作为内部存储记录的主要数据结构,因为与Numpy数组或Sipy稀疏矩阵相比,这根本不是内存效率。
这是"larsmans"的一个很好的例子,说明如何在将数据拟合模型之前构建特征字典并使用DictVectorizer。请注意,默认情况下,DictVectorizer 类使用 scipy.sparse 矩阵(而不是 numpy.ndarray)来使生成的数据结构能够适应内存。由于并非所有 sklearn 学习模型都支持稀疏矩阵,因此您可能希望在构造函数中使用 sparse=False 选项来获取密集数组
dv = DictVectorizer(sparse=False)
或者,您可以在使用 export_graphviz
时指定功能名称。这将生成在测试节点上具有更有意义的标签的树。
请参阅 http://scikit-learn.org/dev/modules/generated/sklearn.tree.export_graphviz.html#sklearn.tree.export_graphviz 中的feature_names
参数