2014-10-27 32 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