Предсказать следующий исход MLP нейронной сети Python - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь предсказать следующий набор чисел в моей последовательности наборов данных, однако с помощью функции предиката классифицирует весь набор данных, как я могу изменить свой код, чтобы он предсказывал следующий результат в последовательности?

Я следовал этому уроку, и его модель выводит 80 из 50,60,70 в качестве его набора данных.И все же мой прогнозирует весь набор данных? Как начать глубокое обучение для прогнозирования временных рядов (7-дневный мини-курс)

Это мой набор данных

enter image description here

и это код:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import classification_report,confusion_matrix

from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
# load the dataset
col_names = ['N1', 'N2', 'N3', 'N4', 'N5', 'L1', 'L2','label']
# load dataset 
pima = pd.read_csv("dataset.csv", header=None, names=col_names)
pima.head()

feature_cols = ['N1', 'N2', 'N3', 'N4', 'N5', 'L1', 'L2']
X = pima[feature_cols] # Features
y = pima.label 

model = Sequential()
model.add(Dense(122, input_dim=7, activation='relu'))
model.add(Dense(20, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=2000, batch_size=10)
# =======================
_, accuracy = model.evaluate(X, y)
print('Accuracy: %.2f' % (accuracy*100))

yhat = model.predict(X, verbose=0)
print(yhat) <- this outputs the predictions for the entire dataset and not the next prediction

Редактировать:

Вывод, который я получаю, для всего набора данных:

enter image description here

Набор данных работает от 1 до 1251 строк, и я хочу предсказать строку 1252 с выходными данными N1, N2, N3, N4, N5, L1, L2.

1 Ответ

0 голосов
/ 27 сентября 2019

В качестве последнего слоя у вас есть активация сигмоида, которая дает выходные данные в диапазоне [-1, 1], а это не то, что вам нужно для вашего последнего слоя, поскольку вы предсказываете следующее число.

model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

попробуйте изменить это значение на

model.add(Dense(1))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

Кроме того, вам лучше использовать функцию потерь MSE для этого типа задач, BCE больше используется для задач классификации, вы можете проверить это здесь

Почему метод кросс-энтропии предпочтительнее среднего квадрата ошибки?В каких случаях это не сработает?

model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])

надеюсь, что это решит вашу проблему

...