【问题标题】:Restrict the predictions from SGDRegressor in scikit-learn to positive values将 scikit-learn 中 SGDRegressor 的预测限制为正值
【发布时间】:2015-01-09 22:55:11
【问题描述】:

我正在研究 Kaggle 中的一个知识问题,其标签是正数。我尝试在 scikit-learn 中使用 SGDRegressor 来训练和测试模型。然而,学习模型的一些预测是负面的。

因此,我想知道是否有办法将来自回归器(如 SGD)(在 scikit learn 中)的预测限制为只有正值。我知道在获得预测后会使用蛮力技术来限制值,但我不热衷于遵循这种方法,因为它不能代表真实的模型。

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    您可能希望适合z = np.log(y) 而不是ymodel = SGDRegressor(**params).fit(X_train, np.log(y_train)),然后是y_predicted = np.exp(model.predict(X_test))

    如果您希望能够在这样的模型上使用 sklearn 的 cross_val_scoreGridSearchCV 工具,您可以继承 SGDRegressor 以重载 fitpredict 方法以在内部对目标变量进行此更改

    【讨论】:

    • 如果 y 中的值为零,则可能是 z = log(1 + y)y_pred = exp(z_pred) - 1
    • 感谢您的快速回复。我了解您解决方案的第一部分,即 y 或 1+y 的对数转换。但是,您能否详细说明或指出第二部分的示例,我们可以将 SGDRegressor 子类化以重载拟合和预测方法。我是 ML 和 scikit-learn 的新手 - 非常感谢任何帮助!
    • 我只是说你不想包装样板代码来一遍又一遍地手动进行转换,你可以将它分解到一个类中,你可以通过实现一个类来做到这一点sklearn 约定:scikit-learn.org/stable/developers/… 这将使它可以与交叉验证工具一起使用。
    • 感谢您的说明!对此,我真的非常感激。另外,很抱歉,由于我没有足够的代表,我无法对您的答案进行投票。
    【解决方案2】:

    我知道这是一个老帖子,但我是根据与原帖相同的经验搜索后才找到的。我尝试了给出的答案,但我无法使用我的数据。在进一步研究之后,在缩放我的 X 中的列之后,我能够让 SGDRegressor 工作(即,给出非常适合我的数据的积极预测)......

    # add to imports
    from sklearn.preprocessing import StandardScaler
    
    # add to code before training SGDRegressor model
    scaler = StandardScaler()
    scaler.fit(X)
    Xs = scaler.transform(X)
    
    # I used train_test_split, so I changed first parameter from X to Xs
    X_train, X_test, y_train, y_test = train_test_split(Xs, y, test_size=0.3, random_state=26)
    
    # train model
    sgd = linear_model.SGDRegressor()
    sgd.fit(X_train, y_train)
    
    # test model
    y_predicted = sgd.predict(X_test)
    

    在添加用于缩放输入的部分之前,我得到了所有负面预测,即使 y(训练和测试)都是正面的。添加缩放后,y_predicted 都是正数并且非常接近 y_test [当然我基于 X 为该数据创建了 y,所以我期待良好的性能]。发布此答案以防对其他人有帮助。

    有关文档,请访问 HERE

    【讨论】:

      猜你喜欢
      • 2015-08-03
      • 2018-02-03
      • 2021-03-25
      • 1970-01-01
      • 2023-03-11
      • 2015-12-19
      • 2018-01-09
      • 2015-03-11
      • 2019-08-27
      相关资源
      最近更新 更多