1.加载 sklearn 自带的数据集,探索数据。
2.划分训练集与测试集。
3.建立 BP 模型,训练模型。
4.进行模型预测,对真实数据和预测数据进行可视化(用 Axes3D 绘制 3d 散点图)。
5.进行模型评估,并进行预测结果指标统计(统计每一类别的预测准确率、召回率、 F1 分数)。
6.计算混淆矩阵,并用热力图显示。
本项目是利用基于威斯康星乳腺癌数据集,搭建BP神经网络,实现肿瘤预测与分析,然后进行模型的评估,计算每一类别的预测准确率、召回率、 F1 分数,最后计算混淆矩阵用热力图显示。
(1)导入包。
代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns#导入绘图包
from mpl_toolkits.mplot3d import Axes3D#导入三维显示工具
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier#导入BP模型
#导入预测指标计算函数和混淆矩阵计算函数
from sklearn.metrics import classification_report,confusion_matrix
(2)加载 sklearn 自带的数据集,探索数据。
代码如下:
cancers = load_breast_cancer()
print("data:",cancers.data)
print("target:",cancers.target)
(3)划分训练集和测试集。
代码如下:
x_train, x_test, y_train, y_test = train_test_split(
cancers.data, cancers.target, test_size=0.20)
print("x_train.shape:", x_train.shape)
print("y_train.shape:", y_train.shape)
print("x_test.shape:", x_test.shape)
print("y_test.shape:", y_test.shape)
(4)建立 BP 模型,训练模型。
代码如下:
# 建立 BP 模型, 采用Adam优化器,relu非线性映射函数
BP = MLPClassifier(solver='adam',activation = 'relu',max_iter = 1000,alpha = 1e-3,hidden_layer_sizes = (64,32, 32),random_state = 1)
BP.fit(x_train, y_train)
MLPClassifier(alpha=0.001, hidden_layer_sizes=(64, 32, 32), max_iter=1000,
random_state=1)
(5)进行模型预测,对真实数据和预测数据进行可视化(用 Axes3D 绘制 3d 散点图)。
代码如下:
predict_train = BP.predict(x_train)
#打印模型分数(预测精度)
print('测试数据集得分:{:.2f}%'.format(BP.score(x_test,y_test)*100))
print()
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=20, azim=20)
ax.scatter(x_train[:, 0], x_train[:, 1], x_train[:, 2], marker='o', c=y_train)
plt.title('True Label Map')
plt.show()
# 可视化预测数据
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=20, azim=20)
ax.scatter(x_train[:, 0], x_train[:, 1], x_train[:, 2], marker='o', c=predict_train)
plt.title('Cancer with BP Model')
plt.show()
(6)进行模型评估,并进行预测结果指标统计(统计每一类别的预测准确率、召回率、 F1 分数)。
代码如下:
# 显示预测分数
print("预测准确率: {:.4f}".format(BP.score(x_test, y_test)))
# 进行测试集数据的类别预测
predict_test = BP.predict(x_test)
print("测试集的真实标签:\n", y_test)
print("测试集的预测标签:\n", predict_test)
print(classification_report(y_test, predict_test))
(7)计算混淆矩阵,并用热力图显示。
代码如下:
confusion_mat = confusion_matrix(y_test, predict_test)
# 打混淆矩阵
print('混淆矩阵:',confusion_mat)
# 将混淆矩阵以热力图显示
sns.set()
figure, ax = plt.subplots()
# 画热力图
sns.heatmap(confusion_mat, cmap="YlGnBu_r", annot=True, ax=ax)
# 标题
ax.set_title('confusion matrix')
# x轴为预测类别
ax.set_xlabel('predict')
# y轴实际类别
ax.set_ylabel('true')
plt.show()
(1)问题:如何绘制3D散点图
利用Axes3D的方法,通过查询百度,博客等学会了如何绘制
1.加载 sklearn 自带的数据集,探索数据。
2.划分训练集与测试集。
3.进行模型预测,对真实数据和预测数据进行可视化(用 Axes3D 绘制 3d 散点图)。
4.进行模型评估,并进行预测结果指标统计(统计每一类别的预测准确率、召回率、 F1 分数)
5.计算混淆矩阵,并用热力图显示。
1.通过此实验了解了神经网络模型如何构建,训练,预测,以及评估。
2.学会了混淆矩阵的每一列代表了预测类别 ,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别 ,每一行的数据总数表示该类别的数据实例的数目。