是否可以在SKLearn中使用带标签的数据?

时间:2013-10-13 16:16:52

标签: scikit-learn

目前我的代码如下:

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)更有意义。可能吗?使用字典或熊猫?

3 个答案:

答案 0 :(得分:3)

您可以使用DictVectorizer类将这样的dicts列表转换为稀疏矩阵或密集numpy数组。

scikit-learn永远不会使用dict对象作为内部存储记录的主要数据结构,因为与numpy数组或scipy稀疏矩阵相比,这根本不具有内存效率。

答案 1 :(得分:2)

Here是'larsmans'关于如何在数据上拟合模型之前构建特征字典并使用DictVectorizer的一个很好的例子。请注意,默认情况下,DictVectorizer类使用scipy.sparse矩阵(而不是numpy.ndarray)来使结果数据结构能够适合内存。由于并非所有sklearn学习模型都支持稀疏矩阵,因此您可能希望在构造函数中使用sparse = False选项来获取密集数组

dv = DictVectorizer(sparse=False)

答案 2 :(得分:2)

或者,您可以在使用export_graphviz时指定功能名称。这将产生 在测试节点上具有更有意义的标签的树。

请参阅http://scikit-learn.org/dev/modules/generated/sklearn.tree.export_graphviz.html#sklearn.tree.export_graphviz

上的feature_names参数
相关问题