# 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)
2 回答
您可能希望适合
z = np.log(y)
而不是y
:model = SGDRegressor(**params).fit(X_train, np.log(y_train))
然后y_predicted = np.exp(model.predict(X_test))
.如果你想在这样的模型上使用sklearn的
cross_val_score
和GridSearchCV
工具,你可以继承SGDRegressor
来重载fit
和predict
方法以在内部对目标变量进行此更改我知道这是一个老线程,但我在搜索后发现它基于与原始帖子相同的经验 . 我尝试了给出的答案,我无法使用我的数据 . 在进一步研究之后,我能够在扩展X中的列之后让SGDRegressor工作(即,给出适合我的数据的正面预测)...
在添加用于缩放输入的部分之前,我得到了所有负面预测,即使y(训练和测试)都是正面的 . 添加缩放后,y_predicted都是正数,非常接近y_test [授予我基于X为这些数据创建y,所以我期待良好的性能] . 发布此答案以防其他人帮助 .
有关文档,请访问HERE .