机器学习——5.案例: 乳腺癌预测

案例目的

通过已标注的数据,训练出模型来预测患者是否有患乳腺癌。

该问题属于二分类问题,所以可以使用Sigmoid激活函数,损失用BCE函数

代码逻辑步骤

  1. 读取数据
  2. 训练集与测试集拆分
  3. 数据标准化
  4. 数据转化为Pytorch张量
  5. label维度转换
  6. 定义模型
  7. 定义损失计算函数
  8. 定义优化器
  9. 定义梯度下降函数
  10. 模型训练(正向传播、计算损失、反向传播、梯度清空)
  11. 模型测试
  12. 精度计算

代码实现

python 复制代码
import torch
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler


df = pd.read_csv('/Volumes/Sophia/机器学习/day03/code/breast_cancer.csv')
X = df[df.columns[0:-1]].values
Y = df[df.columns[-1]].values
# 数据集拆分
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2,random_state=5)

# 数据标准化
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)

# 转化为张量
X_train = torch.from_numpy(X_train.astype(np.float32))
X_test = torch.from_numpy(X_test.astype(np.float32))
Y_train = torch.from_numpy(Y_train.astype(np.float32))
Y_test = torch.from_numpy(Y_test.astype(np.float32))
# 标签转化为二维数据
# print(Y_train.shape)
Y_train = Y_train.view(Y_train.shape[0],-1)
Y_test = Y_test.view(Y_test.shape[0],-1)

# 定义模型
class Model(torch.nn.Module):
    def __init__(self,n_input_features):
        super(Model,self).__init__()
        self.linear = torch.nn.Linear(n_input_features,1)
    def forward(self,x):
        y = torch.sigmoid(self.linear(x))
        return y

n_features = X_train.shape[1]    
# 定义损失函数
model = Model(n_features)
loss = torch.nn.BCELoss()
# 定义优化器
# 学习率
learning_rate = 0.001
optimzier = torch.optim.SGD(model.parameters(),lr=learning_rate)
# 定义梯度下降函数
def gradient_descent():
    pre_y = model(X_train)
    l = loss(pre_y,Y_train)
    l.backward()
    optimzier.step()
    optimzier.zero_grad()
    return l,list(model.parameters())

# 模型训练
for i in range(500):
    l,pa = gradient_descent()
    if i % 50 == 0:
        print(l,pa)

# 模型测试
index = np.random.randint(0,X_test.shape[0])
pre = model(X_test[index])
print(pre,Y_test[index])

# 计算模型准确率
pres_y = model(X_test).round()
result = np.where(pres_y==Y_test,1,0)
ac = np.sum(result)/result.size
print(ac)
相关推荐
格林威3 分钟前
机器视觉检测的光源基础知识及光源选型
人工智能·深度学习·数码相机·yolo·计算机视觉·视觉检测
今天也要学习吖36 分钟前
谷歌nano banana官方Prompt模板发布,解锁六大图像生成风格
人工智能·学习·ai·prompt·nano banana·谷歌ai
Hello123网站36 分钟前
glean-企业级AI搜索和知识发现平台
人工智能·产品运营·ai工具
AKAMAI37 分钟前
Queue-it 为数十亿用户增强在线体验
人工智能·云原生·云计算
索迪迈科技43 分钟前
INDEMIND亮相2025科技创变者大会,以机器人空间智能技术解锁具身智能新边界
人工智能·机器人·扫地机器人·空间智能·陪伴机器人
栒U1 小时前
一文从零部署vLLM+qwen0.5b(mac本地版,不可以实操GPU单元)
人工智能·macos·vllm
沫儿笙1 小时前
FANUC发那科焊接机器人铝材焊接节气
人工智能·机器人
THMAIL2 小时前
量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
linux·人工智能·python·深度学习·机器学习·金融
~-~%%2 小时前
从PyTorch到ONNX:模型部署性能提升
人工智能·pytorch·python
xcnn_2 小时前
深度学习基础概念回顾(Pytorch架构)
人工智能·pytorch·深度学习