skflow回归预测多个值 [英] skflow regression predict multiple values
问题描述
我正在尝试预测时间序列:给定50个先前值,我想预测5个下一个值.
I'm trying to forecast a time series: given 50 previous values, I want to predict the 5 next values.
为此,我使用了skflow
包(基于TensorFlow),这个问题相对接近
To do so, I'm using the skflow
package (based on TensorFlow), and this problem is relatively close to the 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和y_pred具有不同数量的输出(1!= 5)
ValueError: y_true and y_pred have different number of output (1!=5)
在培训结束时
.
at the end of the training.
当我尝试预测时,我遇到了同样的问题
And when I try to predict, I have the same kind of problem
ypred = regressor.predict(X_test)
print ypred.shape, y_test.shape
(200,1)(200,5)
(200, 1) (200, 5)
因此,我们可以看到模型以某种方式仅预测了1个值,而不是5个期望/希望的值.
We can therefore see that the model is somehow predicting only 1 value instead of the 5 wanted/hoped.
如何使用相同的模型来预测多个值的值?
How could I use the same model to predict values for several values ?
推荐答案
I've just added support for multi-output regression into skflow
since this #e443c734, so please reinstall the package are try again. If it doesn't work, please follow up on Github.
# 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))
这篇关于skflow回归预测多个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!