Я использую набор данных от 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.