机器学习实验6 肿瘤预测与分析(神经网络)

实验内容

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

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

3.建立 BP 模型,训练模型。

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

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

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

实验过程

1.对该题目的理解

本项目是利用基于威斯康星乳腺癌数据集,搭建BP神经网络,实现肿瘤预测与分析,然后进行模型的评估,计算每一类别的预测准确率、召回率、 F1 分数,最后计算混淆矩阵用热力图显示。

2.实现过程

(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()

3.遇到的问题及解决办法

(1)问题:如何绘制3D散点图

利用Axes3D的方法,通过查询百度,博客等学会了如何绘制

实验结果

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

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

 

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

 

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

 

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

实验总结

1.通过此实验了解了神经网络模型如何构建,训练,预测,以及评估。

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

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
神经网络实验步骤详细分析具体-神经网络大作业(一).doc 本人做的神经网络实验,步骤详细,分析具体,适合做入门学习用-I do neural network experiments, the steps detailed analysis of specific, suitable for entry to study 截取某些内容,方便参考: 用BP网络识别雷达测速的三类信号 一.数据来源      此信号来自一部测速雷达获得的三种目标的回波信号,三种目标分别是行人W、自行车B和卡车T,信号中包含目标的速度信息。 二.信号的分析与处理      根据所给的三类信号的样本,每一个样本中均包含1024个数据,由于每一个样本的数据量较大,不可能将所有1024个数据全都作为神经元的输入,计算量太大,所以必须首先对信号进行分析,提取最有价值的特征信息。      首先可以看看每一个样本中的数据图,以各类信号中的第一个样本为例,如图1所示。 (1)                                       (2)                                        (3) 图1 (1)行人数据图  (2)自行车数据图  (3)卡车数据图              从上图的时域数据基本上观察不出规律,因此我们要对数据进行傅立叶变换,从频域分析数据的特征,如下图2所示。 图2 行人数据频谱图 从上图中看到行人的数据的频谱的幅度很小,原因是因为信号在零点处的值特别大,所以要将在零点处的值去掉,得到如图3所示。 图3 行人数据去掉零点后的频谱图 这时可以观察到信号的一些特征,从图中发现信号的频谱图是基本对称分布的,而且信号的峰值也很大,可以对它首先进行归一化,如下图4所示。 图4 (1)行人数据归一化后的频谱图 (2)取绝对值后的频谱图 同时将自行车和卡车的频谱图来做比较如图5,6所示 图5 (1)自行车数据归一化后的频谱图        (2)取绝对值后的频谱图 图6 (1)卡车数据归一化后的频谱图              (2)取绝对值后的频谱图 从上面三幅图中,可以观察到信号都有明显的峰值,但是出现的位置不同,另外,信号的均值和方差明显不同。但是考虑到雷达所测数据中,会有一些速度反常规的游离数据,所以考虑采用受游离数据影响小的平均绝对值偏差来代替样本方差作为输入特征。同时,以数据的样本中位数来作为输入特征来减少游离数据的影响。根据这些特征进行提取来作为输入。 三.特征提取 1.取信号归一化后的均值作为一个特征量。 2.取信号归一化后的平均绝对值偏差作为一个特征量。 3.取信号归一化后的样本中位数作为一个特征量。 4.由三幅图的比较可以发现,信号的每两点之间的起伏程度也不尽相同,所以可以设定一个特征量,来纪录信号两点间的起伏程度的大小。 5.信号在经过归一化后,可以将信号全部的值加起来,用这个总的值来作为一个特征量。 除了上述的特征,还有很多特征可以提取,但是特征越多,需要的输入神经元越多,依照隐层神经元约为输入神经元的两倍的原则,隐层的神经元也将越多。则网络训练的时间将花费很大。所以,本实验只提取了上述特征中的1,2,3。 四.算法与实现 根据提取的特征的维数,来决定输入神经元的个数。因为提取的三个特征的维数分别为8,1和1,所以输入神经元的个数为10。输出神经元的个数定为3个,考虑到被识别的三种信号分别对应三个输出,虽然用两个神经元就可以表示三种输出状态,但是用三个神经元能更好地分辨,减少出错的概率。至于隐层的神经元个数则按照约为输入神经元个数的两倍的原则,设为20个。当然还可以在调试过程中根据输出的识别率来找到一个一个较为合适的个数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shallen.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值