如何在scikit学习回归中不标准化目标数据

Ped*_*ñoz 5 python machine-learning svm predict scikit-learn

我试图以csv格式预测铜矿企业数据的数据集中的未来利润数据.

我读了数据:

data = pd.read_csv('data.csv')
Run Code Online (Sandbox Code Playgroud)

我拆分数据:

data_target = data[target].astype(float)
data_used = data.drop(['Periodo', 'utilidad_operativa_dolar'], axis=1)
x_train, x_test, y_train, y_test = train_test_split(data_used, data_target, test_size=0.4,random_state=33)
Run Code Online (Sandbox Code Playgroud)

创建一个svr预测器:

clf_svr= svm.SVR(kernel='rbf')
Run Code Online (Sandbox Code Playgroud)

标准化数据:

from sklearn.preprocessing import StandardScaler
scalerX = StandardScaler().fit(x_train)
scalery = StandardScaler().fit(y_train)

x_train = scalerX.transform(x_train)
y_train = scalery.transform(y_train)
x_test = scalerX.transform(x_test)
y_test = scalery.transform(y_test)

print np.max(x_train), np.min(x_train), np.mean(x_train), np.max(y_train), np.min(y_train), np.mean(y_train)
Run Code Online (Sandbox Code Playgroud)

然后预测:

y_pred=clf.predict(x_test)
Run Code Online (Sandbox Code Playgroud)

并且预测数据也是标准化的.我希望预测数据采用原始格式,我该怎么做?

eic*_*erg 7

您可能希望使用inverse_transformy-scaler 的方法.请注意,您可以使用管道更简洁地完成所有这些操作,如下所示

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR

pipeline = Pipeline([('scaler', StandardScaler()), ('estimator', SVR(kernel="rbf"))])

y_scaler = StandardScaler()
y_train = y_scaler.fit_transform(y_train)
pipeline.fit(x_train, y_train)
y_pred = y_scaler.inverse_transform(pipeline.predict(x_test))
Run Code Online (Sandbox Code Playgroud)

许多人只会在全球范围内扩大目标并在没有太多过度拟合的情况下逃脱.但是你并没有因此而堕落.AFAIK对代码中显示的y数据使用单独的缩放器是唯一的方法.


Oli*_*ier 5

我知道这个问题很旧,当时的答案是正确的,但是现在有一种scikit-learn方法可以做到这一点。

http://scikit-learn.org/dev/modules/compose.html#transforming-target-in-regression