在使用RobustScalar和Lasso之后,我正在尝试找出如何对我的数据进行缩放(可能使用inverse_transform)来进行预测。下面的数据只是一个例子。我的实际数据更大更复杂,但我希望使用RobustScaler (因为我的数据有异常值)和Lasso (因为我的数据有几十个无用的特征)。
基本上,如果我尝试使用这个模型来预测任何事情,我希望该预测是未缩放的项。当我尝试对示例数据点执行此操作时,我得到一个错误,似乎希望我取消缩放与训练子集相同大小的数据(也称为两个观察值)。我得到以下错误: ValueError: shape (1,1)的不可广播输出操作数与广播shape (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))
发布于 2019-05-16 23:21:45
您不能对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))
https://stackoverflow.com/questions/56169286
复制相似问题