首页 文章

在scikit中限制来自SGDRegressor的预测 - 学习正值

提问于
浏览
2

我正在研究Kaggle的知识问题,其标签是正数 . 我尝试在scikit中使用SGDRegressor学习训练和测试模型 . 然而,来自学习模型的一些预测是否定的 .

因此,我想知道是否有办法限制像SGD这样的回归量(在scikit学习中)的预测只有正值 . 在我得到预测之后,我知道有蛮力技术来限制值,但我并不热衷于遵循这种方法,因为它不代表真正的模型 .

2 回答

  • 5

    您可能希望适合 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 方法以在内部对目标变量进行此更改

  • 1

    我知道这是一个老线程,但我在搜索后发现它基于与原始帖子相同的经验 . 我尝试了给出的答案,我无法使用我的数据 . 在进一步研究之后,我能够在扩展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 .

相关问题