Pytorch 实践 —— 乳腺癌预测
欢迎关注 “小白玩转Python”,发现更多 “有趣”
1. 数据集
检测乳腺癌一般有30项特征,加载数据集来了解一下这些特征变量:
数据的尺寸
变量及其类型
在检查重复数据和空数据并确认数据集不受此限制之后,是时候检查不必要的数据了。从数据集的33列中,id 和 Unnamed:32 被删除了:
df.drop(['id','Unnamed: 32'],axis=1,inplace=True)
完成第一部分,用 .describe() 函数来了解统计学:
2. 可视化
检查良恶性肿瘤的数量:
有357例良性肿瘤诊断和212例恶性肿瘤诊断,这似乎是一个相当平衡的数据集。
现在可视化其他变量的分布:
每个变量的分布
变量之间的相关性
从上面的数据情况我们可以得到以下的结论:
这是一个相当复杂的模型,能够可视化的相关性
肿瘤平均半径为14.12,最小为6.98,最大为28.11
维度相关的变量是正相关的(例如 area_se 和 perimeter_se)
数据集中62.7% 的肿瘤是良性的,37.3% 是恶性的
3. 为机器学习准备数据
更换标签
我们想要预测的数值在“diagnosis”一栏中ーー这些是标签。我们想预测一个肿瘤是恶性的(M)还是良性的(B)。数据框架中的所有其他列都是模型的预测变量:
标签由字母 M(恶性)和 B(良性)表示。第一步是将这些信息转换成数值型的数据,良性的数据为0,恶性的数据为1:
lab ={'B':0,'M':1}
df = df.replace({'diagnosis':lab})
df.head()
现在,数据可以分为两个部分:
预测变量:我们将提供的数据作为模型的输入,以作出预测
predictors = df.iloc[:, 2:31]
predictors
标签:我们要预测的信息,即根据预测数据集中的信息,预测该肿瘤是恶性的还是良性的
labels = df.iloc[:, 0:1]
labels
转换为张量,并将数据分割为训练和测试子集
使用 scikit learn 库,使用20% 的比例将数据集分成训练和测试数据:
predictors_train, predictors_test, labels_train, labels_test = train_test_split(predictors,labels,test_size = 0.20)
到目前为止,这些数据都存储在 pandas 的数据帧中。由于我们将使用张量流来实现深度学习模型,因此必须将数据转换为张量。首先,将 pandas 数据帧转换为数组:
type(np.array(predictors_train))
Out[20]:
type(np.array(labels_train))
Out[21]:
numpy.ndarray
该模型将使用 PyTorch 实现,因此下一步是将该数组转换为一个 torch 元素:
predictors_train = torch.tensor(np.array(predictors_train), dtype=torch.float)labels_train = torch.tensor(np.array(labels_train), dtype = torch.float)df_tf = torch.utils.data.TensorDataset(predictors_train, labels_train)
type(df_tf)
Pytorch 对模型进行了小批量的训练。有一个名为 DataLoader 的类用于在数据集上执行迭代。批量大小参数给出了在调整模型权重时考虑的样本数:
train_loader = torch.utils.data.DataLoader(df_tf, batch_size=15, shuffle=True)
4. 模型的实现与评估
在本项目中,将实现一个具有两个隐藏层的神经网络。要实现这个模型,我们需要:
定义模型的结构(定义层数,神经元,激活函数)
选择一个训练策略
选择一个优化器
由于问题的复杂性和未知性,这种类型的实现被建模为一个最佳化问题。因此,选择一个优化器是整个过程的一部分。
在最佳化问题中,我们有目标函数(称为成本函数或损失函数)。这就是我们要优化的函数。在神经网络的目标是最小化的误差,因此最小化的损失(或成本)函数。
构建模型
神经网络模型的定义如下:
classifier = nn.Sequential(nn.Linear(in_features=29, out_features=15),nn.ReLU(),nn.Linear(15, 15),nn.ReLU(),nn.Linear(15, 1),nn.Sigmoid()
)
Input features = 29(我们在预测数据集中有29个特性)
2个隐藏层,每层有15个神经元
输出层有一个神经元,输出标记0(良性肿瘤)和1(恶性肿瘤)
ReLu:内部层的非线性激活函数
Sigmoid:输出层的非线性激活函数,返回的概率介于0和1之间
ReLu 是一种非线性激活函数,它的优点是不会同时激活所有的神经元。ReLu 被选中做第一次尝试,以建立更有效的计算成本方面的模型。
据报道,Sigmoid 在分类问题上效果很好。因为我们有一个输出层分类肿瘤良性或恶性,Sigmoid 被选为激活函数。
训练策略
现在,我们必须选择神经网络的训练策略。由于这是一个二元分类任务,选择二元交叉熵准则是:
criterion = nn.BCELoss()
优化器
第三步,也是最后一步:选择优化器。Adam 优化算法是深度学习问题中一种非常流行的选择算法。这是随机梯度下降算法的扩展,但与 SGD 算法不同,Adam 优化器在训练期间并不保持相同的学习速率。
optimizer = torch.optim.Adam(classifier.parameters(), lr=0.001, weight_decay=0.0001)
训练模型
更新后的权重将运行100次,如下面的 for 循环所示:
for epoch in range(100):#To store the error:run_loss = 0.for data in train_loader:inputs, labels = dataoptimizer.zero_grad()outputs = classifier(inputs) error = criterion(outputs, labels)error.backward()optimizer.step() run_loss += error.item()print('Epoch %3d: loss %.5f' % (epoch+1, run_loss/len(train_loader)))
训练数据加载器将训练数据分批加载(这个模型选择的批量大小是15个样本)
zero_grad() 在反向传播过程之前,将梯度设置为零
outputs 计算对模型的预测
error 计算出计算中的误差,并将预测结果与实际数据进行比较
error.backward() 是神经网络中的反向传播过程来更新权值
optimizer.step() 更新权重
评估模型
这个模型的准确率达到了94.73% ,在我们的混淆矩阵中可以看到这一点:
分类器总共做出了114个预测,从中可以看出:
70例标本被正确估计为良性肿瘤
38例标本正确诊断为恶性肿瘤
有3个样本被估计为假阴性,这些应该被分类为恶性肿瘤,但被分类为良性
3个样本被估计为假阳性
· END ·
HAPPY LIFE
Pytorch 实践 —— 乳腺癌预测相关推荐
- 深度学习 神经网络(5)逻辑回归二分类-Pytorch实现乳腺癌预测
深度学习 神经网络 逻辑回归二分类-乳腺癌预测 一.前言 二.代码实现 2.1 引入依赖库 2.2 加载并查看数据集 2.3 数据处理 2.4 数据分割 2.5 迭代训练 2.6 数据验证 一.前言 ...
- 深度学习实验1:pytorch实践与前馈神经网络
深度学习实验1:pytorch实践与前馈神经网络 1.pytorch基本操作 1.使用
- Pytorch kaggle 房价预测实战
Pytorch kaggle 房价预测实战 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候 ...
- 机器学习之乳腺癌预测
机器学习之乳腺癌预测 (一)问题分析 1.问题背景 2.问题分析 3.题目所需的代码及数据 (二).导入数据 1. 认识数据集 2.导入数据 3.数据概述 (三)EDA 数据探索性分析 1.描述性统计 ...
- 在Python中使用LSTM和PyTorch进行时间序列预测
全文链接:http://tecdat.cn/?p=8145 顾名思义,时间序列数据是一种随时间变化的数据类型.例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格(点击文末&quo ...
- svm预测结果为同一个值_实战:用SVM算法进行乳腺癌预测
支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类(binary classification)的广义 ...
- pytorch神经网络因素预测_实战:使用PyTorch构建神经网络进行房价预测
微信公号:ilulaoshi / 个人网站:lulaoshi.info 本文将学习一下如何使用PyTorch创建一个前馈神经网络(或者叫做多层感知机,Multiple-Layer Perceptron ...
- 机器学习之sklearn-KNN近邻算法分类小案例(乳腺癌预测最优模型)
(案例):用sklearn包实现knn分类小案例,通过交叉验证网格搜索获取最优参数模型,进行参数评估. 导包: from sklearn.datasets import load_breast_can ...
- 数据分析之乳腺癌预测
零.定义问题 1.1 数据介绍 http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/bre ...
最新文章
- SuperEdge — Overview
- 《Swift 权威指南》——导读
- restful,RESTful API 设计,GET/PUT/DELETE/POST
- 什么是lamda表达式?
- awvs 13使用_如何解密AWVS?15行代码就够了!
- 打响汽车信息安全战,百度Apollo构建最高等级安全防护盾牌
- javafx 示例_示例介绍:JavaFX 8打印
- 【HDU - 5965】扫雷(dp)
- JAVA进阶教学之(Date日期的处理)
- Mybatis-Plus驼峰命名规则之Date类型字段返回值为null
- [转]网络编程学习指南
- python在win10怎么搭建_Win10下Python环境搭建与配置教程
- Oracle Instant Client环境配置
- 录屏状态监听之防录屏 - iOS
- JavaScript(第四天)—爱创课堂专业前端培训
- 云原生|容器和应用安全运营实践思考
- hangup_after_bridge
- Linux xargs 命令
- waymo数据集总结
- 基于MAXPLUS2的洗衣机控制电路