【问题标题】:sk-learn: cannot train decision tree with big dataframessklearn:无法用大数据框训练决策树
【发布时间】:2015-06-27 10:15:08
【问题描述】:

我正在使用 Python 和 sk-learn 进行我的第一个项目。 在项目中,我必须根据可用数据进行预测。 为此,我想使用 DesicionTreeClassifier。 我确实加载并清理了数据并开始生成一些树。 在生成过程中,一些数据集确实无法生成树,而另一些则有效。 当我仔细观察时,我发现可以训练一棵树的数据集少于 30 行,每行 9 列。看来这棵树的深度不能超过 4。

Traceback (most recent call last):
  File "/usr/local/bin/decisionTree/readAnPrepareData.py", line 57, in <module>
    trainForest()
  File "/usr/local/bin/decisionTree/readAnPrepareData.py", line 39, in trainForest
    model.fit(X_train, Y)
  File "/usr/lib/pymodules/python2.7/sklearn/tree/tree.py", line 524, in fit
    X_argsorted=X_argsorted)
  File "/usr/lib/pymodules/python2.7/sklearn/tree/tree.py", line 340, in build
    recursive_partition(X, X_argsorted, y, sample_mask, 0, -1, False)
  File "/usr/lib/pymodules/python2.7/sklearn/tree/tree.py", line 306, in recursive_partition
    depth + 1, node_id, True)
  File "/usr/lib/pymodules/python2.7/sklearn/tree/tree.py", line 306, in recursive_partition
    depth + 1, node_id, True)
  File "/usr/lib/pymodules/python2.7/sklearn/tree/tree.py", line 306, in recursive_partition
    depth + 1, node_id, True)
  File "/usr/lib/pymodules/python2.7/sklearn/tree/tree.py", line 306, in recursive_partition
    depth + 1, node_id, True)
  File "/usr/lib/pymodules/python2.7/sklearn/tree/tree.py", line 272, in recursive_partition
    min_samples_leaf, max_features, criterion, random_state)
  File "_tree.pyx", line 533, in sklearn.tree._tree._find_best_split (sklearn/tree/_tree.c:4812)
ValueError: ndarray is not Fortran contiguous

我是这样创建树的:

model = DecisionTreeClassifier()
model.fit(X_train, Y)

什么可能导致这种情况?这可能是因为溢出吗?那会是很奇怪的想法,因为这只是一点点数据……

Numpy 在 1.9.2 版本上运行 scikit-learn '0.16.1'

【问题讨论】:

  • 您能否提及您正在运行的 sklearn 和 NumPy 版本?
  • 我添加了版本。应该是当前的
  • @JohnGalt Ehm 我刚刚升级到这个版本。我看起来它现在可以工作了......但我会先仔细看看
  • @JohnGalt 是的,升级到当前版本就可以了。我以为我已经有了当前版本,但你却不这样认为。你会很好,可以把它变成一个答案,我很高兴将它标记为解决方案:)

标签: python pandas runtime-error scikit-learn decision-tree


【解决方案1】:

@HerrDerb 对其进行了测试。这似乎是版本回归错误。

升级到最新的 scikit-learn,也可以选择 NumPy 来解决这个问题。

我猜,相关讨论可以阅读#1793#1678

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 2016-08-09
    • 2015-07-30
    • 2012-06-02
    • 2019-06-01
    • 2016-05-24
    • 2021-04-09
    • 2018-06-23
    • 2018-08-14
    相关资源
    最近更新 更多