Python线性网络实现分类糖尿病病例

 更新时间:2022年10月18日 15:23:54   作者:Henry_zs  
什么是线性规划?想象一下,您有一个线性方程组和不等式系统。这样的系统通常有许多可能的解决方案。线性规划是一组数学和计算工具,可让您找到该系统的特定解,该解对应于某些其他线性函数的最大值或最小值

1. 加载数据集

这次我们搭建一个小小的多层线性网络对糖尿病的病例进行分类

首先先导入需要的库文件

先来看看我们的数据集

观察可以发现,前八列是我们的feature ,根据这八个特征可以判断出病人是否得了糖尿病。所以最后一列是1,0 的一个二分类问题

我们使用numpy 去导入数据集,delimiter 是定义分隔符,这里我们用逗号(,)分割

将前八列的特征放到我们的x_data里面,作为特征输入,最后一列放到y_data作为label

Tip :这里y_data 里面的 [-1] 中括号不可以省略,否则y_data会变成向量的形式

如果不习惯这种写法,可以用view改变一下形状就行

y_data = torch.from_numpy(xy[:,-1]).view(-1,1) #将y_data 的代码改成这样就可以了

下面是xy , x_data , y_data 打印出前两行的结果

2. 搭建网络+优化器

搭建网络的时候,要保证两层网络之间的维数能对应上

首先第一层的时候,因为前八列作为我们的x_data ,也就是说我们输入的特征是 8 维度的,那么由于 y = x * wT + b ,因为输入数据的x是(n * 8) 的,而我们定义的y维度是(n * 6) ,所以wT的维度应该是(8,6)

这里不需要知道啥时候转置,啥时候不转置之类的,只要满足线性的方程y = w*x+b,并且维度一致就行了。因为不管是转置,或者w和x谁在前,只是为了保证满足矩阵相乘而已

一个小的技巧就是:只需要看输入特征是多少,然后保证第一层第一个参数对应就行了,然后第一层第二个参数是想输出的维度。其次是第二层的第一个参数对应第一层第二个参数,以此类推....

我们采用的激活函数是ReLU , 由于是二元分类,最后一个网络的输出我们采用sigmoid输出

接下来,搭建实例化我们的网络,然后建立优化器

这里我们选择SGD随机梯度下降算法,学习率设置为0.01

3. 训练网络

训练网络的过程较为简单,大概的过程为

1. 计算预测值

2. 计算损失函数

3. 反向传播,之前要进行梯度清零

4. 梯度更新

5. 重复这个过程,epoch 为所有样本计算一次的周期,这次让epoch 迭代1000次

4. 代码

import torch.nn as nn    # 神经网络库
import matplotlib.pyplot as plt  # 绘图
import torch        # 张量
from torch import optim  # 优化器库
import numpy as np          # 数据处理
xy = np.loadtxt('./diabetes.csv.gz',delimiter=',',dtype=np.float32)    # 加载数据集
x_data = torch.from_numpy(xy[:,:-1])  # 所有行,除了最后一列的元素
y_data = torch.from_numpy(xy[:,-1]).view(-1,1) # -1也能拿出来是向量,但是[-1]会保证拿出来的是个矩阵
epoch_list =[]
loss_list = []
class Model(nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.linear1 = nn.Linear(8,6)
        self.linear2 = nn.Linear(6,3)
        self.linear3 = nn.Linear(3,1)
        self.sigmoid = nn.Sigmoid()
        self.relu = nn.ReLU()
    def forward(self,x):
        x = self.relu(self.linear1(x))
        x = self.relu(self.linear2(x))
        x = self.sigmoid(self.linear3(x))
        return x
model = Model()
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(),lr =0.01)
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)   # 计算损失
    if epoch % 100 ==0:   # 每隔100次打印一下
        print(epoch,loss.item())
    #back propagation
    optimizer.zero_grad()    # 梯度清零
    loss.backward()          # 反向传播
    optimizer.step()         # 梯度更新
    epoch_list.append(epoch)
    loss_list.append(loss.item())
plt.plot(epoch_list,loss_list)
plt.show()

输出结果为:

到此这篇关于Python线性网络实现分类糖尿病病例的文章就介绍到这了,更多相关Python线性网络内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python如何实现同时进行多个浏览器注入

    Python如何实现同时进行多个浏览器注入

    浏览器注入是一种技术,允许我们在运行中的浏览器进程中注入代码,以便执行特定的任务,下面我们就来看看Python如何实现同时进行多个浏览器注入吧
    2025-03-03
  • python登录WeChat 实现自动回复实例详解

    python登录WeChat 实现自动回复实例详解

    在本篇内容里小编给大家整理的是关于python登录WeChat 实现自动回复的相关实例内容以及知识点总结,有兴趣的朋友们参考下。
    2019-05-05
  • Python轻松实现批量邮件自动化详解

    Python轻松实现批量邮件自动化详解

    在日常工作和生活中,我们经常需要发送邮件,手动发送邮件不仅繁琐,而且容易出错,下面我们就来看看如何使用Python实现批量邮件自动化操作吧
    2025-02-02
  • python算法演练_One Rule 算法(详解)

    python算法演练_One Rule 算法(详解)

    下面小编就为大家带来一篇python算法演练_One Rule 算法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • python3使用腾讯企业邮箱发送邮件的实例

    python3使用腾讯企业邮箱发送邮件的实例

    今天小编就为大家分享一篇python3使用腾讯企业邮箱发送邮件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python MNIST手写体识别详解与试练

    Python MNIST手写体识别详解与试练

    MNIST(官方网站)是非常有名的手写体数字识别数据集,在Tensorflow的官方网站里,第一个就拿它来做实战讲解,咱们也以此作为开始的项目
    2021-11-11
  • 在Python程序中操作文件之isatty()方法的使用教程

    在Python程序中操作文件之isatty()方法的使用教程

    这篇文章主要介绍了在Python程序中操作文件之isatty()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • 使用Python实现Wake On Lan远程开机功能

    使用Python实现Wake On Lan远程开机功能

    这篇文章主要介绍了使用Python实现Wake On Lan远程开机功能,文中给大家补充介绍了python通过wakeonlan唤醒内网电脑开机,非常不错,感兴趣的朋友跟随小编一起学习吧
    2020-01-01
  • python空值填充为无的实现方法

    python空值填充为无的实现方法

    我们经常会遇到数据集中存在空值的情况,本文主要介绍了python空值填充为无的实现方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Python sklearn分类决策树方法详解

    Python sklearn分类决策树方法详解

    决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法
    2022-09-09

最新评论