bp神经网络及ROC曲线绘制
首先需要导入要用到的包
from tensorflow import keras
import pandas as pd
import numpy as np
从文本中读取训练数据
data = pd.read_csv('test.txt', sep='\t')
data_train = data.iloc[:500]
x_train = np.array(data_train[['title1', 'title2', 'title3', 'title4', 'title5']])
y_train = np.array(data_train['result'])
data_test = data.iloc[500:]
x_test = np.array(data_test[['title1', 'title2', 'title3', 'title4', 'title5']])
y_test = np.array(data_test['result'])
使用keras来构建一个简单的bp神经网络
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(5,)),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(2, activation='softmax')
])
model.compile(optimizer='RMSprop',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=1000)
然后用测试数据评估模型
model.evaluate(x_test, y_test)
之后对模型进行保存
model.save('my_model.h5')
至此便完成了bp神经网络的构建及训练
接下来加载保存的模型,并画出ROC曲线,先导入需要用到的包
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt
from tensorflow import keras
import numpy as np
import pandas as pd
然后加载模型
model = keras.models.load_model('my_model.h5')
因另起脚本,所以需要再次加载测试数据
data = pd.read_csv('test.txt', sep='\t')
data_test = data.iloc[500:]
x_test = np.array(data_test[['title1', 'title2', 'title3', 'title4', 'title5']])
y_test = np.array(data_test['result'])
然后通过sklearn中的auc及roc_curve获取画图所需数据
y_pred_keras = model.predict(x_test)[:, 1]
fpr_keras, tpr_keras, thresholds_keras = roc_curve(y_test, y_pred_keras)
auc_keras = auc(fpr_keras, tpr_keras)
然后画图
plt.figure()
plt.plot([0, 1], [0, 1], 'k--')
plt.plot(fpr_keras, tpr_keras, label='Keras (area = {:.3f})'.format(auc_keras))
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.title('ROC curve')
plt.legend()
plt.show()
图片效果如下