Как я могу получить лучшую точность от моей нейронной сети. Что не так с моим кодом? - PullRequest
0 голосов
/ 17 февраля 2020
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing
data = pd.read_csv('Boston.csv')
X1 = data.iloc[:,1:5]
X2 = data.iloc[:,6:14]
X = pd.concat([X1,X2],axis=1)
y = pd.DataFrame(data.iloc[:,14])

'''
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X = sc_X.fit_transform(X)
'''
#X = (X - X.mean(axis=0)) / X.std(axis=0)
X = preprocessing.normalize(X)

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.1)

import keras
from keras.models import Sequential
from keras.layers import Dense

# Initialising the ANN
classifier = Sequential()

classifier.add(Dense(output_dim = 512, init = 'normal', activation = 'relu', input_dim = 12))
classifier.add(Dense(output_dim = 128, init = 'normal', activation = 'relu'))
classifier.add(Dense(output_dim = 1, init = 'normal', activation = 'relu'))

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

classifier.fit(X_train, y_train, batch_size = 10, nb_epoch = 100)

Я пробовал предварительную обработку данных и добавлял больше слоев / нейронов, но все же я получаю точность ниже 2%. Что не так с моим кодом. Я пробовал разные методы предварительной обработки, такие как стандартный скейлер, нормализация и т. Д. c. Я также попробовал многие функции активации, такие как relu, linear, sigmoid. Это мой первый раз, когда я разрабатываю нейронную сеть, так что извините за грязный код ...

РЕДАКТИРОВАТЬ: Набор данных используется набор данных Бостонский корпус. https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html

1 Ответ

1 голос
/ 17 февраля 2020

Вы находитесь в настройке регрессии, где точность не имеет смысла (она имеет значение только для классификации настроек). В таких настройках само MSE является метрикой производительности c (не считая также потери) - см. Собственный ответ (и обсуждение) в Какая функция определяет точность в Keras, когда потеря представляет собой среднеквадратическую ошибку (MSE) ? .

По той же причине вам не следует использовать activation = 'relu' для вашего последнего слоя - в настройках регрессии мы используем activation = 'linear' (или мы оставляем его пустым, поскольку это по умолчанию активация используется в Keras, когда ничего не указано).

...