Оценка точности модели регрессионной нейронной сети - PullRequest
0 голосов
/ 24 августа 2018

Я новичок в машинном обучении и создал нейронную сеть для вывода регрессии.У меня есть ~ 95000 учебных примеров и ~ 24000 тестовых примеров.Я хочу знать, как я могу оценить свою модель и получить ошибки при обучении и тестировании?Как узнать точность этой регрессионной модели?Мои значения переменных Y в диапазоне от 100-200 до X имеют 9 входных объектов в наборе данных.

Вот мой код:

import pandas as pd
from keras.layers import Dense, Activation,Dropout
from keras.models import Sequential
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from matplotlib import pyplot

# Importing the dataset
# Importing the dataset
dataset = pd.read_csv('data2csv.csv')

X = dataset.iloc[:,1:10].values
y = dataset.iloc[:, :1].values

# Splitting the dataset into the Training set and Test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size = 0.2, random_state = 0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Initialising the ANN
model = Sequential()

# Adding the input layer and the first hidden layer

model.add(Dense(10, activation = 'relu', input_dim = 9))

# Adding the second hidden layer
model.add(Dense(units = 5, activation = 'sigmoid'))
model.add(Dropout(0.2))

# Adding the third hidden layer
model.add(Dense(units = 5, activation = 'relu'))
model.add(Dropout(0.2))

model.add(Dense(units = 5, activation = 'relu'))
model.add(Dense(units = 5, activation = 'relu'))

# Adding the output layer

model.add(Dense(units = 1))

#model.add(Dense(1))
# Compiling the ANN
model.compile(optimizer = 'adam', loss = 'mean_squared_error',metrics=['mae','mse','mape','cosine'])

# Fitting the ANN to the Training set
history=model.fit(X_train, y_train,validation_data=(X_val, y_val) ,batch_size = 1000, epochs = 100)
test_loss = model.evaluate(X_test,y_test)

loss = history.history['loss']
acc = history.history['mean_absolute_error']
val_loss = history.history['val_loss']
val_acc = history.history['val_mean_absolute_error']
mape_loss=history.history['mean_absolute_percentage_error']
cosine_los=history.history['cosine_proximity']
pyplot.plot(history.history['mean_squared_error'])
pyplot.plot(history.history['mean_absolute_error'])
pyplot.plot(history.history['mean_absolute_percentage_error'])
pyplot.plot(history.history['cosine_proximity'])
pyplot.show()
epochs = range(1, len(loss)+1)
plt.plot(epochs, loss, 'ro', label='Training loss')
plt.legend()
plt.show()

y_pred = model.predict(X_test)

plt.plot(y_test, color = 'red', label = 'Real data')
plt.plot(y_pred, color = 'blue', label = 'Predicted data')
plt.title('Prediction')
plt.legend()
plt.show()

[Results]

Мой тестовый проигрыш после model.evaluate.Обратите внимание, что здесь есть 5 функций потерь, как показано в коде.

1) 84.69654303799824 2) 7.030169963975834 3) 84.69654303799824 4) 5.241855282313331 5) -0.9999999996023872

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Чтобы показать потери при проверке во время обучения:

model.fit(X_train, y_train, batch_size = 1000, epochs = 100, validation_data = (y_train,y_test))

Я не думаю, что вы можете легко получить точность путем построения графиков, поскольку ваш ввод является 9-мерным, вы можете построить прогнозируемый y для каждого объекта, простоотключите линии, которые соединяют точки, т.е. plt.plot (x, y, 'k.'), обратите внимание на 'k', так что никакой строки, но я не уверен, будет ли это полезно.

0 голосов
/ 24 августа 2018

Для оценки вашей модели вы можете использовать evaluate метод:

test_loss = model.evaluate(X_test, y_test)

Возвращает потери по данным тестовых данных, рассчитанные с использованием той же функции потерь, которую вы использовали во время обучения (т.е. mean_squared_error). Кроме того, если вы хотите получить потерю обучения в конце каждой эпохи, вы можете использовать History объект , который возвращается методом fit:

history = model.fit(...)
loss = history.history['loss']

loss - это список, содержащий значения потерь обучения в конце каждой эпохи. Если вы использовали данные проверки при обучении модели (т. Е. model.fit(..., validation_data=(X_val, y_val)) или использовали другие метрики, например mean_absolute_error (т. Е. model.compile(..., metrics=['mae'])), вы также можете получить доступ к их значениям:

acc = history.history['mae']
val_loss = history.history['val_loss']
val_acc = history.history['val_mae']

Бонус: Для построения кривой тренировочных потерь:

epochs = range(1, len(loss)+1)
plt.plot(epochs, loss, 'ro', label='Training loss')
plt.legend()
plt.show()
...