我正在研究Kaggle的知识问题,其标签是正数。我尝试在scikit中使用SGDRegressor学习训练和测试模型。然而,来自学习模型的一些预测是否定的。
因此,我想知道是否有办法限制像SGD这样的回归量(在scikit学习中)的预测只有正值。我知道在获得预测后使用暴力技术来限制值,但我并不热衷于遵循这种方法,因为它不代表真正的模型。
答案 0 :(得分:5)
您可能希望适合z = np.log(y)
而不是y
:model = SGDRegressor(**params).fit(X_train, np.log(y_train))
,然后y_predicted = np.exp(model.predict(X_test))
。
如果您希望能够使用sklearn' s {{1>,可以将SGDRegressor
子类化为重载fit
和predict
方法以在内部对目标变量进行此更改这种模型上的}和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。