MLP classifier_for multi class - PullRequest
       27

MLP classifier_for multi class

0 голосов
/ 10 мая 2018

Я новичок на Керасе,

Я стараюсь следовать учебному пособию Keras для Multilayer Perceptron (MLP) для многоклассовой классификации softmax, используя мой набор данных. Мои данные имеют 3 класса и только одну особенность, но я не понимаю, почему результат всегда показывает только 0,3 точности, и модель предсказывала все тренировочные данные как первый класс. тогда матрица путаницы такая.

Матрица путаницы

Вот кодировка:

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
import pandas as pd
import numpy as np



# Importing the dataset
dataset = pd.read_csv('StatusAll.csv')
X = dataset.iloc[:, 1:].values
y = dataset.iloc[:, 0:1].values


# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

from keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

model = Sequential()

# Dense(64) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:
# here, 20-dimensional vectors.
model.add(Dense(64, activation='tanh', input_dim=1))
model.add(Dropout(0.5))
model.add(Dense(64, activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])

history = model.fit(x_train, y_train,
          epochs=100,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
print('Test score:', score[0])
print('Test accuracy:', score[1])


from sklearn import metrics

prediction = model.predict(x_test)
prediction = np.around(prediction)

y_test_non_category = [ np.argmax(t) for t in y_test ]
y_predict_non_category = [ np.argmax(t) for t in prediction ]

from sklearn.metrics import confusion_matrix
conf_mat = confusion_matrix(y_test_non_category, y_predict_non_category)

print (conf_mat)         

Надеюсь, я смогу получить совет, спасибо.

Пример x_train x_train

y_train до преобразования в категориальные

введите описание изображения здесь

1 Ответ

0 голосов
/ 10 мая 2018

Ваш последний плотный слой имеет 4 выхода, похоже, вы классифицируете 4 вместо 3.

model.add(Dense(3, activation='softmax')) # Number of classes 3

Было бы полезно посмотреть примеры данных из x_train и y_train, чтобы убедиться в правильности предварительной обработки. Поскольку у вас есть только 1 функция, MLP может быть излишним. дерево решений было бы проще, если вы не хотите экспериментировать с MLP.

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