2014-10-27 94 views
1

我试图预测csv格式的铜矿企业数据的数据集中未来的利润数据。如何在scikit中不标准化目标数据学习回归

我读出的数据:

data = pd.read_csv('data.csv') 

我分割数据:

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) 

创建SVR预测:

clf_svr= svm.SVR(kernel='rbf') 

Standarize数据:

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) 

然后预测:

y_pred=clf.predict(x_test) 

和预测数据被标化,以及。我想要预测的数据是原始格式,我该怎么做?

回答

4

你会想要使用y-scaler的inverse_transform方法。需要注意的是,你可以做到这一切更简明使用管道,如下

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)) 

很多人只是规模的目标在全球和闪避没有太多的过度拟合。但是你在这方面做得不错。 AFAIK使用代码中显示的y数据的单独缩放程序是唯一的方法。

+1

谢谢!,我没有把我的眼睛放在inverse_transform()上,对我感到羞耻。 – 2014-10-28 05:47:12