Как интерпретировать результаты бинарной нейронной сети? - PullRequest
0 голосов
/ 08 мая 2020

Я использую набор данных от Kaggle, ориентированный на прогнозы сердечных заболеваний с 8 входами и двоичными выходами. Я протестировал данные с помощью логистической c регрессии, случайных лесов, SVM и простой нейронной сети. Удивительно, но лучшая модель - случайные леса. Однако у меня проблемы с нейронной сетью. Результатом данных является либо 1, либо 0, то есть двоичный. Нейронная сеть работает, но результаты кажутся странными, по крайней мере, для меня.

import tensorflow as tf
from tensorflow import keras

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

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

NN = Sequential()

NN = keras.Sequential([
    keras.layers.Flatten(input_shape=(8,)),
    keras.layers.Dense(16, activation=tf.nn.relu),
    keras.layers.Dense(16, activation=tf.nn.relu),
    keras.layers.Dense(1, activation=tf.nn.sigmoid),
])

NN.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

NN.fit(X_train, y_train, epochs=50, batch_size=1)
test_loss, test_acc = NN.evaluate(X_test, y_test)

y_predd = NN.predict(X_test)

Я ожидаю, что мои результаты будут иметь значение от 0 до 1, поэтому все, что больше 0,5, равно 1, а все, что меньше, равно 0. Но мой прогноз тестового набора дает мне значения от 0 до 9. Любые идея что я сделал не так? Могу ли я переоснастить данные?

Я проверил сеть на известной точке данных:

X_new = [[70,1,0,145,174,0,1,125]]
X_new = sc.fit_transform(X_new)
NN.predict(X_new)

и получил следующий результат, который неверен: 0,99 - должно быть 0.

...