Я использую данные о раке молочной железы в Висконсине и работаю над этим с ANN в библиотеке Кераса.
Я добавил коды и часть данных ниже, надеюсь, они читабельны и понятны.
Одна строка из набора данных: 1000025,5,1,1,1,2,1,3,1,1,2
Прогнозные результаты:
Испытательные потери: 0.05948319600096771 - Точность испытаний: 0.9809523820877075
Как видно, матрица путаницы выглядит хорошо.
Здесь график потерь c выглядит хорошо, но график точности c меня смутил. Почему training_accuracy начинается с высокого значения и мало что меняет?
Вот основная часть кода после импорта библиотек:
data = pd.read_csv('breast-cancer-wisconsin.data')
data_new = data.drop(['1000025'],axis=1)
X = data_new.iloc[:,0:8].values
Y = data_new.iloc[:,9].values
labelencoder_= LabelEncoder()
Y = labelencoder_.fit_transform(Y)
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.15, random_state = 0)
#Feature Scaling
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
classifier = Sequential()
classifier.add(Dense(8, input_dim=8))
classifier.add(Activation("relu"))
classifier.add(Dropout(0.1))
classifier.add(Dense(32))
classifier.add(Activation("relu"))
classifier.add(Dropout(0.1))
classifier.add(Dense(16))
classifier.add(Activation("relu"))
classifier.add(Dropout(0.1))
classifier.add(Dense(1))
classifier.add(Activation("sigmoid"))
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = classifier.fit(X_train, y_train, epochs=100, batch_size=10, validation_split=0.11)
test_loss, test_acc = classifier.evaluate(X_test, y_test)
print('\nTest Loss:', test_loss)
print('Test Accuracy:', test_acc)
y_pred = classifier.predict(X_test)
И графики графики и путаницы:
#LOSS---
training_loss = history.history['loss']
test_loss = history.history['val_loss']
epoch_count = range(1, len(training_loss) + 1)
plt.plot(epoch_count, training_loss, 'r-')
plt.plot(epoch_count, test_loss, 'b-')
plt.legend(['Training Loss', 'Test Loss'])
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
#ACCURACY---
training_acc = history.history['accuracy']
test_acc = history.history['val_accuracy']
epoch_count2 = range(1, len(training_acc) + 1)
plt.plot(epoch_count2, training_acc, 'r-')
plt.plot(epoch_count2, test_acc, 'b-')
plt.legend(['Training Accuracy','Test Accuracy'])
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.show()
ConfMatrix = confusion_matrix(y_test,pred)
ax = sns.heatmap(ConfMatrix, annot=True, cmap="gray", fmt="d", xticklabels = ['Benign', 'Malignant'], yticklabels = ['Benign', 'Malignant'])
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)
plt.ylabel('True')
plt.xlabel('Prediction')
plt.title("Confusion Matrix");
plt.figure(figsize=(7,17))