实验6 神经网络 实操项目: 肿瘤预测与分析(神经网络)


实验6 神经网络 实操项目: 肿瘤预测与分析(神经网络)

【实验内容】

基于威斯康星乳腺癌数据集,搭建BP神经网络,实现肿瘤预测与分析。
In [ ]

【实验要求】

1.加载sklearn自带的数据集,探索数据。

2.划分训练集与测试集。

3.建立BP模型(评估后可进行调参,从而选择最优参数)。

4.进行模型训练。

5.进行模型预测,对真实数据和预测数据进行可视化(用Axes3D绘制3d散点图)。

6.进行模型评估,并进行预测结果指标统计(统计每一类别的预测准确率、召回率、F1分数)。

7.计算混淆矩阵,并用热力图显示。

注:混淆矩阵(confusion matrix)衡量的是一个分类器分类的准确程度。

混淆矩阵的每一列代表了预测类别 ,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别 ,每一行的数据总数表示该类别的数据实例的数目。


# 导入乳腺癌数据集
from sklearn.datasets import load_breast_cancer
# 导入BP模型
from sklearn.neural_network import MLPClassifier
# 导入训练集分割方法
from sklearn.model_selection import train_test_split 
# 导入预测指标计算函数和混淆矩阵计算函数
from sklearn.metrics import classification_report, confusion_matrix
# 导入绘图包
import seaborn as sns
import matplotlib
# 导入三维显示工具
from mpl_toolkits.mplot3d import Axes3D
# 画图库导入
import matplotlib.pyplot as plt 
# 导入乳腺癌数据集
cancer = load_breast_cancer()


# 查看数据集信息
print('breast_cancer数据集的长度为:',len(cancer))
print('breast_cancer数据集的类型为:',type(cancer))
# 分割数据为训练集和测试集
cancer_data = cancer['data']
print('cancer_data数据维度为:',cancer_data.shape)
cancer_target = cancer['target']
print('cancer_target标签维度为:',cancer_target.shape)
cancer_names = cancer['feature_names']
cancer_desc = cancer['DESCR']
#分为训练集与测试集
cancer_data_train,cancer_data_test = train_test_split(cancer_data,test_size=0.2,random_state=42)#训练集
cancer_target_train,cancer_target_test = train_test_split(cancer_target,test_size=0.2,random_state=42)#测试集

# 建立 BP 模型, 采用Adam优化器,relu非线性映射函数
BP = MLPClassifier(solver='lbfgs',activation = 'logistic')
# 进行模型训练
BP.fit(cancer_data_train, cancer_target_train)


# 进行模型预测
predict_train_labels = BP.predict(cancer_data_train)
# 可视化真实数据
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=20, azim=20) cancer_data_train[:, 2], marker='o', c=cancer_target_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(cancer_data_train[:, 0], cancer_data_train[:, 1], cancer_data_train[:, 2], marker='o', c=predict_train_labels)
plt.title('Cancer with BP Model')
plt.show()


# 显示预测分数
print("预测准确率: {:.4f}".format(BP.score(cancer_data_test, cancer_target_test)))
# 进行测试集数据的类别预测
predict_test_labels = BP.predict(cancer_data_test)
print("测试集的真实标签:\n", cancer_target_test)
print("测试集的预测标签:\n", predict_test_labels)


# 进行预测结果指标统计 统计每一类别的预测准确率、召回率、F1分数
print(classification_report(cancer_target_test, predict_test_labels))


# 计算混淆矩阵
confusion_mat = confusion_matrix(cancer_target_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()

猜你喜欢

转载自blog.csdn.net/m0_52896752/article/details/127682332#comments_27291856