【问题标题】:Sklearn: How to Feed Data to sklearn RandomForestClassifierSklearn:如何将数据提供给 sklearn RandomForestClassifier
【发布时间】:2013-03-29 19:28:27
【问题描述】:

我有这些数据:

print training_data
print labels

# prints

[[1, 0, 1, 1], [1, 1, 1, 1], [1, 0, 1, 1], [1, 1, 1, 0], [1, 1, 0, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0,0], [1, 1, 1, 1], [1, 0, 1, 1]]
['a', 'b', 'a', 'b', 'a', 'b', 'b', 'a', 'a', 'a', 'b']

我正在尝试将它提供给 sklearn python 库中的 RandomForestClassifier。

classifier = RandomForestClassifier(n_estimators=10)
classifier.fit(training_data, labels)

但收到此错误:

Traceback (most recent call last):
  File "learn.py", line 52, in <module>
    main()
  File "learn.py", line 48, in main
    classifier = train_classifier()
  File "learn.py", line 33, in train_classifier
    classifier.fit(training_data, labels)
  File "/Library/Python/2.7/site-packages/scikit_learn-0.14_git-py2.7-macosx-10.8-intel.egg/sklearn/ensemble/forest.py", line 348, in fit
    y = np.ascontiguousarray(y, dtype=DOUBLE)
  File "/Library/Python/2.7/site-packages/numpy-1.8.0.dev_bbcfcf6_20130307-py2.7-macosx-10.8-intel.egg/numpy/core/numeric.py", line 419, in ascontiguousarray
    return array(a, dtype, copy=False, order='C', ndmin=1)
ValueError: could not convert string to float: a

我的猜测是我没有正确格式化这些数据以进行拟合。但我不明白为什么来自the documentation

这似乎是一个非常基本、简单的问题。有人知道答案吗?

【问题讨论】:

  • 大胆猜测,尝试使用数值:例如而不是 'a'/'b'0/1
  • 好的,我会的,但这将是一个很大的失望,因为对于决策树,标签不需要是数字的。我无法想象 sklearn 的作者会这样做。

标签: python scikit-learn random-forest


【解决方案1】:

您可以使用分类器自动识别的numpy数组,如下所示:

import numpy as np
from sklearn.ensemble import RandomForestClassifier
np_training = np.array(training_data)
np_labels = np.array(labels)

clf = RandomForestClassifier(n_estimators=20, max_depth=5)
clf.fit(np_training, np_labels)

应该可以的

【讨论】:

    【解决方案2】:

    尝试使用 LabelEncoder 预先转换您的标签。

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 2019-08-03
      • 2019-08-18
      • 2017-11-26
      • 2021-08-19
      • 2014-06-11
      • 2018-02-13
      • 2020-11-01
      • 2018-12-30
      相关资源
      最近更新 更多