регрессия skflow предсказывает несколько значений
Я пытаюсь спрогнозировать временной ряд: учитывая 50 предыдущих значений, я хочу предсказать 5 следующих значений.
для этого я использую skflow
пакет (на основе TensorFlow), и эта проблема относительно близка к пример Бостона, приведенный в репо Github.
мой код выглядит следующим образом :
%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)
В конце тренировки.
и когда я пытаюсь предсказать, у меня такая же проблема
ypred = regressor.predict(X_test)
print ypred.shape, y_test.shape
(200, 1) (200, 5)
таким образом, мы видим, что модель каким-то образом предсказывает только 1 значение вместо 5 желаемых/ожидаемых.
как я могу использовать ту же модель для прогнозирования значений для нескольких значений ?
1 ответов
Я только что добавил поддержку многовыходной регрессии в skflow
после этого #e443c734, поэтому, пожалуйста, переустановите пакет, попробуйте еще раз. Если это не сработает, пожалуйста, следите за 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))