ValueError: Unknown label type: 'continuous' in DecisionTreeClassifier()

ValueError: Unknown label type: 'continuous' in DecisionTreeClassifier()

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

    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'

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

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

在 ML 中,重要的第一步是考虑问题的性质。是regression or classification problem? Do you have target data (supervised learning) or is this a problem where you don't have a target and want to learn more about your data's inherent structure (such as unsupervised learning). Then, consider what steps you need to take in your pipeline to prepare your data (preprocessing).

在这种情况下,您将浮点数(浮点数)传递给分类器 (DecisionTreeClassifier)。这个问题是分类器通常将不同的 类 分开,因此该分类器期望 stringinteger 类型来区分不同的 类(这是称为“目标”)。您可以在 introduction to classifiers.

中阅读更多相关信息

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

进一步说明,考虑预处理数据很重要。通过将目标与输入数据分开,您已经完成了其中的一些工作:

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

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

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

一些建议

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

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

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