ValueError:未知标签类型:DecisionTreeClassifier() 中的“连续”

Posted

技术标签:

【中文标题】ValueError:未知标签类型:DecisionTreeClassifier() 中的“连续”【英文标题】:ValueError: Unknown label type: 'continuous' in DecisionTreeClassifier() 【发布时间】:2021-04-04 09:49:17 【问题描述】:

我正在尝试创建一个模型来预测下面的结果列:

    Date    Open    High    Close   Result
1/22/2010   25.95   31.29   30.89   0.176104
2/19/2010   23.98   24.22   23.60   -0.343760
3/19/2010   21.46   23.16   22.50   0.124994
4/23/2010   21.32   21.77   21.06   -0.765601
5/21/2010   55.41   55.85   49.06   0.302556

我使用的代码是:

import pandas
from sklearn.tree import DecisionTreeClassifier
dataset = pandas.read_csv('data.csv')
X = dataset.drop(columns=['Date','Result'])
y = dataset.drop(columns=['Date', 'Open', 'High', 'Close'])
model = DecisionTreeClassifier()
model.fit(X, y)

但我收到一个错误:

ValueError: Unknown label type: 'continuous'

也欢迎提出使用其他算法的建议。

【问题讨论】:

顺便说一句,标签中有连续值(用于回归任务)。但是您正在执行分类器。这将采用离散值(二进制或多类)使用DecisionTreeRegressor 【参考方案1】:

在 ML 中,首先要考虑问题的性质,这一点很重要。是regression or classification 问题吗?您是否有目标数据(supervised learning) 或者这是您没有目标并想了解更多有关数据的固有结构的问题(例如unsupervised learning)。然后,考虑您需要在管道中采取哪些步骤来准备数据 (preprocessing)。

在这种情况下,您将浮点数(浮点数)传递给分类器(DecisionTreeClassifier)。这样做的问题是分类器通常将不同的类分开,因此该分类器需要stringinteger 类型来区分不同的类(这称为“目标”)。您可以在introduction to classifiers 中阅读更多相关信息。

您要解决的问题是确定一个连续的数值输出,Result。这称为回归问题,因此您需要使用回归算法(例如DecisionTreeRegressor)。一旦你有了这个简单的回归算法,你就可以尝试其他回归算法,这是一个很好的起点,因为它是一个相当简单易懂的算法,它相当透明,速度快,易于实现 - 所以决策树是一个很好的起点!

进一步说明,考虑预处理数据很重要。您只需将目标与输入数据分开即可完成其中的一些工作:

X = dataset.drop(columns=['Date','Result'])
y = dataset.drop(columns=['Date', 'Open', 'High', 'Close'])

但是,您可能希望进一步研究预处理,特别是您的数据的standardisation。这通常是您实施的任何 ML 算法都必须执行的步骤,以便能够解释您的数据。有句话叫:“垃圾进,垃圾出”。

部分预处理有时需要您更改给定列的数据类型。从表面上看,您的问题中发布的错误导致人们认为手头的问题是您需要更改数据类型。但是,正如所解释的,对于您的问题,这样做无济于事,因为您寻求使用回归来确定连续输出。

【讨论】:

能告诉我DecisionTreeRegressor()准确率的计算方法吗? 当然,在这方面,您希望了解“指标”或'model evaluation'。它可能有点压倒性,但您正在寻找“回归”指标。一个常用的指标是mean squared error。要使用它,您将实际值和您的预测传递给它,它会为您提供一个衡量您做得如何的指标。【参考方案2】:

您正在使用DecisionTreeClassifier,它是一个分类器,只会预测分类值,例如01,但您的Result 列是连续的,因此您应该使用DecisionTreeRegressor

【讨论】:

【参考方案3】:

一些建议

    你的方法是一个很好的尝试,但我认为这不是正确的方法。 在 ML 建模中,主要有 3 类模型
      回归:你了解牛顿定律吗?这些是有助于识别数据中隐藏规则和逻辑的 ML 模型。 分类:这些是 ML 模型的类型,用于将数据分成不同的类别。 时间序列 ML 模型:这类似于股票市场数据分析。与上面不同的是,这里在日期 X 的值取决于 X-1、X-2、X-3 等等..on。这有点接近Regression,但这些需要像 ARIMA 这样的模型。

至于错误DecisionTreeClassifier 应该用于识别诸如 1、2、3、4 等类别,但仅用于有限的类集。

对于像 Results 这样的连续和分数系列,您应该使用回归模型或时间序列 ML 模型的 ARIMA。

【讨论】:

以上是关于ValueError:未知标签类型:DecisionTreeClassifier() 中的“连续”的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:未知标签类型

MLP 分类器:“ValueError:未知标签类型”

ValueError:未知标签类型:DecisionTreeClassifier() 中的“连续”

ValueError:未知标签类型:SVM 中的“连续”错误

Python ValueError:未知标签类型:“连续”

ValueError:未知标签类型:拟合数据时的“连续多输出”