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

时间:2014-11-12 22:34:01

标签: scikit-learn

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

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

2 个答案:

答案 0 :(得分:5)

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

如果您希望能够使用sklearn' s {{1>,可以将SGDRegressor子类化为重载fitpredict方法以在内部对目标变量进行此更改这种模型上的}和cross_val_score工具

答案 1 :(得分: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