【问题标题】:Python/Scikit-Learn - Can't handle mix of multiclass and continuousPython/Scikit-Learn - 无法处理多类和连续的混合
【发布时间】:2016-09-18 22:36:13
【问题描述】:

我正在尝试将 SGDRegressor 拟合到我的数据中,然后检查准确性。拟合效果很好,但是预测与原始目标数据的数据类型不同(?),我得到了错误

ValueError: Can't handle mix of multiclass and continuous

拨打print "Accuracy:", ms.accuracy_score(y_test,predictions)时。

数据看起来像这样(只有 20 万多行):

Product_id/Date/product_group1/Price/Net price/Purchase price/Hour/Quantity/product_group2
0   107 12/31/2012  10  300 236 220 10  1   108

代码如下:

from sklearn.preprocessing import StandardScaler
import numpy as np
from sklearn.linear_model import SGDRegressor
import numpy as np
from sklearn import metrics as ms

msk = np.random.rand(len(beers)) < 0.8

train = beers[msk]
test = beers[~msk]

X = train [['Price', 'Net price', 'Purchase price','Hour','Product_id','product_group2']]
y = train[['Quantity']]
y = y.as_matrix().ravel()

X_test = test [['Price', 'Net price', 'Purchase price','Hour','Product_id','product_group2']]
y_test = test[['Quantity']]
y_test = y_test.as_matrix().ravel()

clf = SGDRegressor(n_iter=2000)
clf.fit(X, y)
predictions = clf.predict(X_test)
print "Accuracy:", ms.accuracy_score(y_test,predictions)

我应该做些什么不同的事情?谢谢!

【问题讨论】:

  • 您可以考虑通过使用 round 函数将连续值四舍五入到最接近的整数来将连续值转换为离散值。 natbusa回答的类似问题请参考此link
  • 杜策是对的。或者您可以使用y_preds = y_preds &gt; 0.5 更改为离散。在这里您可以设置自己的阈值。
  • @SharkDeng 你错了,就像之前的评论一样;问题的根本原因已在下面的答案中指出(链接的答案也是错误的)

标签: python scikit-learn


【解决方案1】:

准确度是一个分类指标。您不能将其与回归一起使用。有关各种指标的信息,请参阅 the documentation

【讨论】:

  • 那么我如何准确地预测我的模型?我的意思是,如果clf.predict(X_test) 给我的输出与原始输出不同,我应该如何使用它?这让我很困惑。
  • @lte__:一般来说,你不能期望从回归模型中得到完全正确的结果。您希望的是您的预测总体上接近真实值。要确定它们是否足够接近,您需要使用不同的评估指标(回归指标之一)。请参阅我提供的文档链接,其中解释了许多指标。
【解决方案2】:

准确度分数仅适用于分类问题。对于回归问题,您可以使用:R2 分数、MSE(均方误差)、RMSE(均方根误差)。

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 2017-04-03
    • 2012-10-15
    • 2019-06-24
    • 2018-08-05
    • 2012-12-24
    • 2021-12-20
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多