【发布时间】:2020-08-25 11:51:37
【问题描述】:
我正在研究预测心脏病的神经网络。数据来自 kaggle 并经过预处理。我使用了各种模型,例如逻辑回归、随机森林和 SVM,它们都产生了可靠的结果。我正在尝试将相同的数据用于神经网络,以查看 NN 是否可以胜过其他 ML 模型(数据集相当小,这可能解释了结果不佳的原因)。下面是我的网络代码。下面的模型产生 50% 的准确率,显然,这太低而无用。据您所知,是否有任何看起来会破坏模型准确性的事情?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from tensorflow.keras.layers import Dense, Dropout
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.callbacks import EarlyStopping
df = pd.read_csv(r"C:\Users\***\Desktop\heart.csv")
X = df[['age','sex','cp','trestbps','chol','fbs','restecg','thalach']].values
y = df['target'].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(X_train)
scaler.transform(X_test)
nn = tf.keras.Sequential()
nn.add(Dense(30, activation='relu'))
nn.add(Dropout(0.2))
nn.add(Dense(15, activation='relu'))
nn.add(Dropout(0.2))
nn.add(Dense(1, activation='sigmoid'))
nn.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics=
['accuracy'])
early_stop = EarlyStopping(monitor='val_loss',mode='min', verbose=1,
patience=25)
nn.fit(X_train, y_train, epochs = 1000, validation_data=(X_test, y_test),
callbacks=[early_stop])
model_loss = pd.DataFrame(nn.history.history)
model_loss.plot()
predictions = nn.predict_classes(X_test)
from sklearn.metrics import classification_report,confusion_matrix
print(classification_report(y_test,predictions))
print(confusion_matrix(y_test,predictions))
【问题讨论】:
标签: python tensorflow keras neural-network dropout