2015-12-11 16 views
6

私は時系列を予測しようとしています:以前の50個の値を与えて、私は次の5個の値を予測したいと思います。skflow回帰は複数の値を予測する

これを行うには、skflowパッケージ(TensorFlowベース)を使用しています。この問題は、Boston example provided in the Github repoに比較的近いです。次のように

私のコードは次のとおりです。

%matplotlib inline 
import pandas as pd 

import skflow 
from sklearn import cross_validation, metrics 
from sklearn import preprocessing 

filepath = 'CSV/FILE.csv' 
ts = pd.Series.from_csv(filepath) 

nprev = 50 
deltasuiv = 5 

def load_data(data, n_prev = nprev, delta_suiv=deltasuiv): 

    docX, docY = [], [] 
    for i in range(len(data)-n_prev-delta_suiv): 
     docX.append(np.array(data[i:i+n_prev])) 
     docY.append(np.array(data[i+n_prev:i+n_prev+delta_suiv])) 
    alsX = np.array(docX) 
    alsY = np.array(docY) 

    return alsX, alsY 

X, y = load_data(ts.values) 
# Scale data to 0 mean and unit std dev. 
scaler = preprocessing.StandardScaler() 
X = scaler.fit_transform(X) 
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, 
    test_size=0.2, random_state=42) 
regressor = skflow.TensorFlowDNNRegressor(hidden_units=[30, 50], 
    steps=5000, learning_rate=0.1, batch_size=1) 
regressor.fit(X_train, y_train) 
score = metrics.mean_squared_error(regressor.predict(X_test), y_test) 
print('MSE: {0:f}'.format(score)) 

これはにつながる:研修の最後に

ValueError: y_true and y_pred have different number of output (1!=5)

そして、私は予測しようとすると、私たちはそのためのモデルは何とかのみ1値を予測する代わりに5されることを期待/たかったことがわかります問題

ypred = regressor.predict(X_test) 
print ypred.shape, y_test.shape 

(200, 1) (200, 5)

の同じ種類を持っています。

同じモデルを使用して、複数の値の値を予測するにはどうすればよいですか?

答えて

6

skflowに多出力回帰のサポートを追加しましたので、#e443c734ですので、再度インストールしてください。動作しない場合は、Githubにフォローアップしてください。

私もexamples folderに多出力回帰の例を追加しました:これを追加するための

# Create random dataset. 
rng = np.random.RandomState(1) 
X = np.sort(200 * rng.rand(100, 1) - 100, axis=0) 
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T 

# Fit regression DNN model. 
regressor = skflow.TensorFlowDNNRegressor(hidden_units=[5, 5]) 
regressor.fit(X, y) 
score = mean_squared_error(regressor.predict(X), y) 
print("Mean Squared Error: {0:f}".format(score)) 
+0

感謝を!それは動作します:) – Julian

+1

私はこのコードがもう働くとは思わない。 'fit()'が呼び出されると、 'Shapes(?、1)と(?、2)は互換性がありません.'というエラーがスローされます。 (私はバージョン '0.10.0rc0'を使用しています)この問題に関する新しい質問を作成しました:http://stackoverflow.com/questions/39192107/multiple-target-column-with-skflow-tensorflownnregressor – twiz

+1

これに対する返答質問????!!!! – user40780

関連する問題