Как определить, не переоснащается ли моя модель? 99,96% точность - PullRequest
0 голосов
/ 05 мая 2020

После обучения моего набора данных через 10 эпох я достиг следующей точности:

511767/511767 [======================= =======] - 189s 370us / sample - потеря: 0,0036 - точность: 0,9996 - val_loss: 0,0019 - val_accuracy: 0,9998

В этом наборе данных: https://www.kaggle.com/mlg-ulb/creditcardfraud

Я использовал SMOTE для увеличения класса меньшинства и использовал LSTM для своей модели.

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

array ([[28370, 9], [5, 28479]] , dtype = int64)

Итак, как я могу определить, переоснащается ли моя модель?

Кажется, все идет хорошо, а точность .9996 кажется очень высокой, увы, я убедился для тренировки на одинаковом наборе данных

Вот моя модель

#Model configuration
model = Sequential()
model.add(LSTM(128, input_shape=(1,29), activation='relu', return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='softmax'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))

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

model.fit(x_train, y_train, epochs=10, validation_data=(x_test,y_test))

Вот мой код передискретизации

#Data pre processing, splitting and resampling
scaler = MinMaxScaler()
transactions = pd.read_csv('creditcard.csv').drop('Time', axis=1)
transactions['Amount'] = transactions['Amount'] / 25691.160000
X = np.array(transactions.drop('Class', axis=1))
y = np.array(transactions['Class'])
X, y = BorderlineSMOTE().fit_resample(X, y)
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
x_train = np.reshape(x_train, (x_train.shape[0], 1, x_train.shape[1]))
x_test = np.reshape(x_test, (x_test.shape[0], 1, x_test.shape[1]))

...