【问题标题】:Is it possible to use labelled data in SKLearn?是否可以在 SKLearn 中使用标记数据?
【发布时间】:2013-10-16 21:00:02
【问题描述】:

目前我的代码如下:

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

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

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

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

    【讨论】:

    • 您可以使用vectorizer.get_feature_names() 获取映射到数据矩阵列的特征的原始名称。
    • 我没有看到你是 scikit-learn 的开发者之一,非常感谢你的工作!
    【解决方案2】:

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

    dv = DictVectorizer(sparse=False)
    

    【讨论】:

      【解决方案3】:

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

      http://scikit-learn.org/dev/modules/generated/sklearn.tree.export_graphviz.html#sklearn.tree.export_graphviz 处查看feature_names 参数

      【讨论】:

      • 从哪里获得列表以作为feature_names 参数提供?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2013-06-09
      • 2020-04-15
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      相关资源
      最近更新 更多