Я хотел бы начать с более простого подхода, прежде чем переходить к более сложным алгоритмам, таким как LSTM .
Здесь, в StackOverflow, вам следует объективно задать некоторые сомнения относительно кода. Так что, если вы поделитесь частью своего кода здесь, мы можем попытаться помочь вам.
Учитывая, что у вас есть такой временной ряд (пример в вашей ссылке):
pollution dew temp press wnd_dir wnd_spd snow rain
date
2010-01-02 00:00:00 129.0 -16 -4.0 1020.0 SE 1.79 0 0
2010-01-02 01:00:00 148.0 -15 -4.0 1020.0 SE 2.68 0 0
2010-01-02 02:00:00 159.0 -11 -5.0 1021.0 SE 3.57 0 0
2010-01-02 03:00:00 181.0 -7 -5.0 1022.0 SE 5.36 1 0
2010-01-02 04:00:00 138.0 -7 -5.0 1022.0 SE 6.25 2 0
более простой подход: MLP Regressor
В более простом подходе, предполагая, что вы хотелиЧтобы предсказать загрязнение, вы можете построить MLP Regressor , поэтому на этапе обучения вы должны разделить данные на 7 функций (роса, температура, нажатие, wnd_dir, wnd_spd, снег, дождь), чтобы предсказатьзагрязнение окружающей среды. Вот пример:
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from sklearn import metrics
data = dataset.values
# integer encode WIND direction
encoder = LabelEncoder()
data[:,4] = encoder.fit_transform(data[:,4])
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(data)
y, X = np.split(data,[1],axis=1)
mlp = MLPRegressor(learning_rate_init=0.001)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
print (X_train.shape, y_train.shape)
print (X_test.shape, y_test.shape)
mlp.fit(X_train,y_train)
y_prediction = mlp.predict(X_test)
print("R2 score:", metrics.r2_score(y_test, y_prediction))
Вывод:
R2 score: 0.30376681842945985
в LSTM (Вам необходимо: 3D [сэмплы, временные шаги, функции])
NOW , предположим, что некоторая особенность (ветер, давление воздуха и т. Д.) В настоящий момент ** t-1 **, ** t-2 ** (1 час, 2 часа) оказывает некоторое влияние на момент ** t**. Итак, теперь вы намереваетесь решить свою проблему как временной ряд, фиксируя некоторое изменение скорости ветра (например) в течение некоторого времени. Поэтому теперь имеет смысл использовать LSTM.
Итак, функция series_to_supervised (пример вашей ссылки) поможет вам создавать новые функции ...
Функция series_to_supervised имеет 4 аргумента:
- data: последовательность наблюдений в виде списка или двумерного массива NumPy.
- n_in: количество наблюдений с задержкой в качестве входных данных (X),Значения могут быть между [1..len (data)]
- n_out: количество наблюдений в качестве выходных данных (y). Значения могут быть в диапазоне [0..len (data) -1].
- dropnan: Boolean: отбрасывать строки со значениями NaN или нет
Итак, предположим, что эта серия единственнаяодна функция X и метка y:
X y
2018-01-01 00:00:00 1 2
2018-01-01 01:00:00 2 3
2018-01-01 02:00:00 3 4
2018-01-01 03:00:00 4 5
2018-01-01 04:00:00 5 6
2018-01-01 05:00:00 6 7
2018-01-01 06:00:00 7 8
2018-01-01 07:00:00 8 9
2018-01-01 08:00:00 9 10
2018-01-01 09:00:00 10 11
Использование этой функции series_to_supervised (df.values, n_in = 2, n_out = 1, dropnan = False) у вас будет что-то подобное(Я сделал несколько улучшений, чтобы понять):
X(t-2) y(t-2) X(t-1) y(t-1) X(t) y(t)
2018-01-01 00:00:00 NaN NaN NaN NaN 1 2
2018-01-01 01:00:00 NaN NaN 1.0 2.0 2 3
2018-01-01 02:00:00 1.0 2.0 2.0 3.0 3 4
2018-01-01 03:00:00 2.0 3.0 3.0 4.0 4 5
2018-01-01 04:00:00 3.0 4.0 4.0 5.0 5 6
2018-01-01 05:00:00 4.0 5.0 5.0 6.0 6 7
2018-01-01 06:00:00 5.0 6.0 6.0 7.0 7 8
2018-01-01 07:00:00 6.0 7.0 7.0 8.0 8 9
2018-01-01 08:00:00 7.0 8.0 8.0 9.0 9 10
2018-01-01 09:00:00 8.0 9.0 9.0 10.0 10 11
Итак, в этом подходе мы считаем, что для прогнозирования мы будем иметь как минимум две записи X (t-2, t-1) и y(t-2, t-1), чтобы предсказать y (t), будущее.
Почему вам нужно сделать ЭТО? Теперь я думаю, что начну отвечать на ваш вопрос. В LSTM вам необходимо преобразовать ваши данные в 2D в 3D-пространстве.
Итак, после этого вам нужно изменить форму ввода, чтобы он был трехмерным [выборками, временными шагами, функциями] перед использованием LSTM, Итак, преобразование (с помощью этой функции) ваших данных - это просто подготовка.
Ответ на ваш вопрос. Вам не нужно добавлять только один столбец. Вам НУЖНО преобразовать ваши данные, чтобы ИМЕТЬ новые функции в tn, t-3, t-2, t-1, чтобы предсказать некоторую особенность в t.
Я рекомендую вам сначала выполнить шаги по делу о загрязнении (цитируемом вами) в этом блоге, прежде чем пытаться адаптироваться к вашему делу.