Повышение точности прогноза Алгоритм - PullRequest
0 голосов
/ 15 октября 2019

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

https://drive.google.com/file/d/1fWf6dX8kOCRB3GpX42AF6UvTmd0g9zXp/view?usp=sharing

Я пытался предсказать значения столбца F на основе значений столбца от A до E. Код, для которого приведен ниже

import numpy as np
import pandas as pn
from keras.layers import Dense, Activation
from keras.models import Sequential
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import linear_model
import matplotlib.pyplot as plt
dataset = pn.read_excel(r"G:\Machine learning\data\database.xlsx", "Sheet5")
dataset.columns = ['A','B','C','D','E','F']

print (dataset)
#check= dataset.iloc[0:,3 :13]
X = dataset.iloc[0:,0 :5]
print(X)
Y = dataset.iloc[0:, 5 :6]


print(Y)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.15, random_state = 0)
print(X_test)
print(Y_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
#
model = Sequential()
##
### Adding the input layer and the first hidden layer
model.add(Dense(32, activation = 'relu', input_dim = 5, kernel_initializer='normal'))
##
### Adding the second hidden layer
model.add(Dense(units = 16, activation = 'relu'))
model.add(Dense(units = 64, activation = 'relu'))
model.add(Dense(units = 8, activation = 'relu'))
model.add(Dense(units = 16, activation = 'relu'))
#model.add(Dense(units = 8, activation = 'linear'))
###
#### Adding the third hidden layer
#model.add(Dense(units = 16, activation = 'relu'))
#model.add(Dense(units = 16, activation = 'relu'))
#model.add(Dense(units = 16, activation = 'relu'))
##
### Adding the output layer
model.add(Dense(units = 1))
##
model.add(Dense(units = 1))
##
model.add(Dense(1))
### Compiling the ANN
model.compile(optimizer = 'nadam', loss = 'mean_squared_error',metrics= ['accuracy'])
##
### Fitting the ANN to the Training set
history = model.fit(X_train, Y_train, epochs=125, batch_size=5,  verbose=1, validation_split=0.1)
##
y_pred = model.predict(X_test)
##


y_pred1 = model.predict(X_train)
print (y_pred1)
Y_test.reset_index(drop= True, inplace= True)
print (Y_train)
Y_train.reset_index(drop= True, inplace= True)
plt.plot(y_pred1)
plt.plot(Y_train)
plt.show()
plt.plot(y_pred)
plt.plot(Y_test)
plt.show()
print (y_pred)
print (Y_test)
plt.plot((Y_test-y_pred)*100/Y_test)
plt.show()

Подгонка, которую я получаю из этого кода, показана ниже. 100 Fit Теперь, когда я прогнозирую, в некоторых случаях ошибка огромна, как показано ниже Prediction

Может кто-нибудь подсказать мне, как импровизировать код, чтобы получитьлучший прогноз?



1 Ответ

0 голосов
/ 15 октября 2019

Для небольшого набора данных, который вы предоставили, возможно, ваша модель нейронной сети слишком сложна (4 скрытых слоя и максимум 64 нейрона).

Что вы можете попробовать, так это уменьшить количество вручнуюслои, чтобы увидеть, если точность повышается. Но в будущем, если вы захотите более практично настроить гиперпараметры или оптимизировать параметры модели, вам следует рассмотреть возможность использования таких методов, как поиск в произвольном порядке / в сетке, перекрестная проверка и регуляризация.

Случайный поиск: https://scikit -learn.org / стабильный / модули / генерироваться / sklearn.model_selection.RandomizedSearchCV.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...