У меня есть вход, который представляет собой массив из 3 элементов, и я использую двоичную классификацию.
Вот мой код:
import numpy as np
import os
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
os.environ["TF_CPP_MIN_LOG_LEVEL"]="2"
X_train = [
[0,1,2],
[0,2,4],
[0,6,12],
[0,7,14],
[0,8,16],
[0,11,22]
]
X_train = np.array(X_train)
y_train = [
0,
0,
0,
1,
1,
1
]
y_train = np.array(y_train)
X_test= [
[0,3,6],
[0,5,10],
[0,10,20],
[0,9,18],
[0,0,100], # << outlier data
]
X_test = np.array(X_test)
y_test = [
0,0,1,1,1
]
y_test = np.array(y_test)
model = Sequential()
model.add(Dense(1, input_shape=(3,), activation="sigmoid"))
model.compile(Adam(lr=0.05), 'binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=500, verbose=1)
eval_result = model.evaluate(X_test, y_test)
print("Test loss:", eval_result[0], "Test accuracy:", eval_result[1])
Я добавил строку [0,0,100], # << данные выброса </em>, которая является тестовыми данными, которые не являются линейными.Я классифицировал его как 1. Когда я запускаю модель. Оценить, точность теста составляет 100%, и я ожидаю, что она должна быть меньше 100% (точность 80% из-за ошибки 20% = 1 ошибка из 5 данных теста) какЯ предполагаю, что существует линейное разделение [0,6.5,13].
Я попытался изменить данные выбросов на [0, -50,100], # << данные выбросов </em>, и яполучил точность теста 80%, чего я ожидал от [0,0,100].Я полагаю, что упускаю что-то фундаментальное здесь, но не могу понять, что это такое.