После обучения моего набора данных через 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]))