在Lasso和RobustScalar之后如何反变换回归预测?

2024-06-08 07:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想弄清楚,在使用RobustScalar和Lasso之后,如何取消我的数据(大概是使用逆变换)进行预测。下面的数据只是一个例子。我的实际数据要大得多,也很复杂,但我希望使用RobustScaler(因为我的数据有离群值)和Lasso(因为我的数据有很多无用的特性)。在

基本上,如果我试图用这个模型来预测任何事情,我希望这个预测是无标度的。当我试图用示例数据点来做这件事时,我得到了一个错误,它似乎希望我取消缩放与训练子集大小相同的数据(也称为两个观测值)。我得到以下错误:ValueError:具有形状(1,1)的不可广播输出操作数与广播形状(1,2)不匹配

我怎么能取消一个预言?这可能吗?在

import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import RobustScaler

data = [[100, 1, 50],[500 , 3, 25],[1000 , 10, 100]]
df = pd.DataFrame(data,columns=['Cost','People', 'Supplies'])

X = df[['People', 'Supplies']]
y = df[['Cost']]

#Split
X_train,X_test,y_train,y_test = train_test_split(X,y)

#Scale data
transformer = RobustScaler().fit(X_train)
transformer.transform(X_train)

X_rtrain = RobustScaler().fit_transform(X_train)
y_rtrain = RobustScaler().fit_transform(y_train)
X_rtest = RobustScaler().fit_transform(X_test)
y_rtest = RobustScaler().fit_transform(y_test)

#Fit Train Model
lasso = Lasso()
lasso_alg = lasso.fit(X_rtrain,y_rtrain)

train_score =lasso_alg.score(X_rtrain,y_rtrain)
test_score = lasso_alg.score(X_rtest,y_rtest)

print ("training score:", train_score)
print ("test score:", test_score)

#Predict example 
example = [[10,100]]
transformer.inverse_transform(lasso_alg.predict(example).reshape(-1, 1))

Tags: 数据fromtestimporttransformtrainsklearnfit
1条回答
网友
1楼 · 发布于 2024-06-08 07:17:27

不能对X和y使用相同的tranformer对象。在片段中,transformer是针对X的,它是2D,因此在转换预测结果时会出错,即1D。(实际上,您很幸运地得到了一个错误;如果X是1D,则会得到无意义的结果)。在

这样的方法应该有效:

transformer_x = RobustScaler().fit(X_train)
transformer_y = RobustScaler().fit(y_train) 
X_rtrain = transformer_x.transform(X_train)
y_rtrain = transformer_y.transform(y_train)
X_rtest = transformer_x.transform(X_test)
y_rtest = transformer_y.transform(y_test)

#Fit Train Model
lasso = Lasso()
lasso_alg = lasso.fit(X_rtrain,y_rtrain)

train_score =lasso_alg.score(X_rtrain,y_rtrain)
test_score = lasso_alg.score(X_rtest,y_rtest)

print ("training score:", train_score)
print ("test score:", test_score)

example = [[10,100]]
transformer_y.inverse_transform(lasso.predict(example).reshape(-1, 1))

相关问题 更多 >

    热门问题