ValueError:Unknownlabeltype:'continuous'inDecisionTreeClassifier()
我正在尝试创建一个模型来预测下面的结果列:
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
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)
也欢迎使用其他算法的建议。
回答
在机器学习中,首先考虑问题的性质很重要。这是回归问题还是分类问题?您是否有目标数据(监督学习)或者这是一个您没有目标并想了解更多关于您的数据的内在结构(例如无监督学习)的问题。然后,考虑您需要在管道中采取哪些步骤来准备数据(预处理)。
在这种情况下,您将浮点数(浮点数)传递给分类器 (DecisionTreeClassifier)。这样做的问题是分类器通常将不同的类分开,因此该分类器期望一个string
或一个integer
类型来区分不同的类(这称为“目标”)。您可以在分类器简介中阅读有关此内容的更多信息。
您要解决的问题是确定连续的数值输出Result
。这称为回归问题,因此您需要使用回归算法(例如DecisionTreeRegressor)。一旦你有了这个简单的回归算法,你就可以尝试其他回归算法,这是一个很好的起点,因为它是一个相当简单易懂的方法,它相当透明,它快速且易于实现 - 所以决策树是一个很好的起点选择!
进一步说明,重要的是要考虑预处理您的数据。通过将目标与输入数据分开,您已经完成了其中的一些工作:
X = dataset.drop(columns=['Date','Result'])
y = dataset.drop(columns=['Date', 'Open', 'High', 'Close'])
但是,您可能希望进一步研究预处理,尤其是数据的标准化。对于您实现的任何 ML 算法来说,这通常是一个必需的步骤,以便能够解释您的数据。俗话说:“进垃圾,出垃圾”。
部分预处理有时需要您更改给定列的数据类型。从表面上看,您的问题中发布的错误让人认为手头的问题是您需要更改数据类型。但是,正如所解释的,对于您的问题,鉴于您试图使用回归来确定连续输出,这样做无济于事。
- Certainly, in this regard you're looking to understand 'metrics' or ['model evaluation'](https://scikit-learn.org/stable/modules/model_evaluation.html). It can be a bit overwhelming, but you're looking specifically for "regression" metrics. A commonly used metric is the [mean squared error](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error). To use it, you pass it the actual values, and your prediction, and it gives you a measure of how well you're doing.
THE END
二维码