【逻辑回归+实战】

原文:https://blog.csdn.net/didiaopao/article/details/126483343

回归和分类区别

回归:
举个例子,输入一个人每日的运动时间、睡眠时间、工作时间、饮食等一些特征来预测一个人的体重,一个人的体重的值可以有无限个值。所以预测的结果是无限的、不确定的连续数值。这样的机器学习任务就是回归任务,如线性回归我们用平方差损失函数。
分类:
如果利用一个人每日的运动时间、睡眠时间、工作时间、饮食等一些特征来判断这个人的身体状况是否健康,那么最终的判断的结果就只有两种健康和不健康。这样的输出结果为离散值,预测的结果也是一个有限的数值来代表种类,如逻辑回归分类我们用交叉熵损失函数。

逻辑回归

虽然有回归,但他是来做二分类的任务,逻辑回归模型通过一个线性组合
y = x 0 w 0 + x 1 w 1 + x 2 w 2 + ⋅ ⋅ ⋅ + x n w n + b y=x_0w_0+x_1w_1+x_2w_2+···+x_nw_n+b y=x0w0+x1w1+x2w2+⋅⋅⋅+xnwn+b
y = W T X + b y=W^TX+b y=WTX+b
其中x为样本某一特征取值, wT及b为输入参数。
上式输出的值是可以小于0或者大于1的。但我们希望逻辑回归输出一个0到1的数。可以借助Sigmoid函数来将输出映射到0到1:
先来学习下sigmoid函数
g ( y ) = 1 1 + e − y g(y)=\frac{1}{1+e^{-y}} g(y)=1+ey1

即当z趋近于负无穷时值 g ( z ) g(z) g(z)无限趋近于0,当z趋近于正无穷时值 g ( z ) g(z) g(z)无限趋近于1,也就是说它可以将自变量约束到0和1间

模型公式推导

因此,逻辑回归模型可以用如下的公式来表达:
g ( y ) = 1 1 + e − W T X + b g(y)=\frac{1}{1+e^{-W^TX+b}} g(y)=1+eWTX+b1

因此对于一个二分类的的问题,此时正例和反例的函数表达式就如下式所示:
预测结果为正例的表达式:
p ( y = 1 ∣ X ) = 1 1 + e − W T X + b p(y = 1|X) =\frac{1}{1+e^{-W^TX+b}} p(y=1∣X)=1+eWTX+b1
可以理解为模型预测结果 y为1的概率,例如我们通过这个模型预测完的y=0.95,也就是说预测结果 y为1的概率为95%,那么预测为0的概率呢,当然是100%-95%,即如下
预测结果为反例的表达式:
p ( y = 0 ∣ X ) = e − W T X + b 1 + e − W T X + b = 1 − p ( y = 1 ∣ X ) p(y = 0|X) =\frac{e^{-W^TX+b}}{1+e^{-W^TX+b}}=1-p(y = 1|X) p(y=0∣X)=1+eWTX+beWTX+b=1p(y=1∣X)

在函数的计算推导过程中,如果分别考虑正反两例情况,计算起来就特别麻烦,
因此可以将上述两个例子合并起来得到如下公式:
故模型公式为
p ( y ∣ X ) = p ( y ∣ X ) y [ 1 − p ( y ∣ X ) ] 1 − y p(y|X)=p(y|X)^y[1-p(y |X)] ^{1-y} p(yX)=p(yX)y[1p(yX)]1y
也就是当y为0时是后项,为1时为前项

损失函数

小写希腊字母: α , β , γ , δ , ϵ , ζ , η , θ , ι , κ , λ , μ , ν , ξ , π , ρ , σ , τ , υ , ϕ , χ , ψ , ω \alpha, \beta, \gamma, \delta, \epsilon, \zeta, \eta, \theta, \iota, \kappa, \lambda, \mu, \nu, \xi, \pi, \rho, \sigma, \tau, \upsilon, \phi, \chi, \psi, \omega α,β,γ,δ,ϵ,ζ,η,θ,ι,κ,λ,μ,ν,ξ,π,ρ,σ,τ,υ,ϕ,χ,ψ,ω
大写希腊字母: Γ , Δ , Θ , Λ , Ξ , Π , Σ , Υ , Φ , Ψ , Ω \Gamma, \Delta, \Theta, \Lambda, \Xi, \Pi, \Sigma, \Upsilon, \Phi, \Psi, \Omega Γ,Δ,Θ,Λ,Ξ,Π,Σ,Υ,Φ,Ψ,Ω
上面引入的sigmoid函数仅仅起分类0到1的作用,z函数是预测的模型函数,那么损失函数是什么呢

前面的逻辑回归模型也有了,利用该模型可以对输入的数据特征进行分类判断。但是模型的
判断能力的好坏取决于模型中的参数𝑤和𝑏,因此我们需要从提供的数据样本中不断学习,从
而更新参数𝑤和𝑏使得预测出的结果全部正确的概率最大,简单来讲就是所有的样本的预测正
确的概率相乘得到数值是最大的
,按这样的要求得到数据表达式如下所示,该式就是逻辑回归
的损失函数。

L ( w , b ) = ∏ i = 1 m p ( 1 ∣ X ) y i ( 1 − p ( 1 ∣ X ) ) 1 − y i L(w, b) =\prod_{i=1}^{m} p(1|X)^{y_i}(1-p(1 |X))^{1-{y_i}} L(w,b)=i=1mp(1∣X)yi(1p(1∣X))1yi
这里我的理解是当在数据集中某个样本 X 1 X_1 X1的y为1,通过模型预测出来的结果为0.8(即为1的概率为80%),某个样本 X 2 X_2 X2的y为1,通过模型预测出来的结果为0.85(即为1的概率为85%),某个样本 X 3 X_3 X3的y为0,通过模型预测出来的结果为0.9(即为0的概率为90%),我们把每个预测出来的结果求积,要让积最大,也就是为正确的概率最大

L ( w , b ) = ∏ i = 1 m ( σ ( W T x i + b ) ) y i ( 1 − σ ( W T x i + b ) ) 1 − y i L(w, b) =\prod_{i=1}^{m} (\sigma(W^Tx_i+b))^{y_i}(1-\sigma(W^Tx_i+b))^{1-{y_i}} L(w,b)=i=1m(σ(WTxi+b))yi(1σ(WTxi+b))1yi
相对连乘运算,连加运算计算起来要比连乘要简单许多,因此可以利用两边同时取log的形式让连乘变成连加。此时就变成如下式所示:
l ( w , b ) = log ⁡ L ( w , b ) l(w, b)=\log L(w,b) l(w,b)=logL(w,b)
l ( w , b ) = ∑ i = 1 m [ y i log ⁡ σ ( W T x i + b ) + ( 1 − y i ) log ⁡ ( 1 − σ ( W T x i + b ) ) ] l(w, b) =\sum_{i=1}^{m} \left[ y_i \log \sigma(W^Tx_i+b)+ (1 - y_i) \log (1 - \sigma(W^Tx_i+b)) \right] l(w,b)=i=1m[yilogσ(WTxi+b)+(1yi)log(1σ(WTxi+b))]
此时我们只需要找到一组参数𝑤和𝑏使得𝑙 𝑤, 𝑏 最大即可,但是在机器学习中通常希望把上升问题转化为下降问题,因此将该函数取相反数即可。得到下式:
J ( w , b ) = − 1 m l ( w , b ) J(w,b)=-\frac{1}{m}l(w, b) J(w,b)=m1l(w,b)
除以m是取平均,J (w,b)这个函数就是逻辑回归最终的损失函数
两个知识点:
①sigmoid的导数如: g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) g'(z)=g(z)(1-g(z)) g(z)=g(z)(1g(z))

②: l o g ′ x = 1 x log'x=\frac{1}{x} logx=x1

梯度下降

此时,只要利用梯度下降法进行参数更新就能通过数据样本不断学习更新参数了,梯度下降法的步骤如下:
  步骤1,利用损失函数求解对应参数的偏导数:
  w参数的偏导数的计算步骤如下所示:

①:参数w的更新
∂ J ( w , b ) ∂ w = 1 m ∑ i = 1 m ( σ ( w T x i + b ) − y i ) x i \frac{\partial J(w,b)}{\partial w}=\frac{1}{m}\sum_{i=1}^{m} (\sigma(w^Tx_i+b)-y_i)x_i wJ(w,b)=m1i=1m(σ(wTxi+b)yi)xi
②:参数b的更新
∂ J ( w , b ) ∂ b = 1 m ∑ i = 1 m σ ( w T x i + b ) − y i \frac{\partial J(w,b)}{\partial b}=\frac{1}{m}\sum_{i=1}^{m} \sigma(w^Tx_i+b)-y_i bJ(w,b)=m1i=1mσ(wTxi+b)yi

所以
w = w − ∂ J ( w , b ) ∂ w w=w-\frac{\partial J(w,b)}{\partial w} w=wwJ(w,b)
b = b − ∂ J ( w , b ) ∂ b b=b-\frac{\partial J(w,b)}{\partial b} b=bbJ(w,b)

代码

import numpy as np
import pandas as pd# 不像上一章需要我们手打算法,这里直接用sklearn定义好的算法# 导入数据集划分的,就是划分训练集,测试集和验证集
from sklearn.model_selection import train_test_split# 导入数据集预处理的MinMaxScaler,它主要用于将特征缩放到给定的最小值和最大值之间,通常是 0 和 1,
# 但也可以是其他范围。这种缩放方法对于许多机器学习算法来说是非常有用的,
# 特别是那些基于距离的算法(如 K-近邻、K-均值聚类等)和需要梯度下降优化的算法(如神经网络)。
# 说白了就是归一化,因为不管是机器学习模型还是深度学习模型总是认为数值量级越大越重要
# 同时归一化后主要由每个特征的w决定权重,并且训练速度也大大加快了
from sklearn.preprocessing import MinMaxScaler# 导入逻辑回归模型
from sklearn.linear_model import LogisticRegression# 导入模型评估的函数,如精确率,F1,召回率等等
from sklearn.metrics import classification_report
##############################数据预处理###################################
# 读取数据
dataset = pd.read_csv("breast_cancer_data.csv")
# ctrl+?快速注释
# print(dataset)# 提取特征x
X = dataset.iloc[:, :-1]  # 选择除了最后一列之外的所有列
# print(X)# 提取标签y
Y = dataset["target"]  # 选择除了最后一列之外的所有列
# print(Y)# 划分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.2)# 进行数据的归一化
sc = MinMaxScaler(feature_range=(0,1))
x_train = sc.fit_transform(x_train)
x_test = sc.fit_transform(x_test)##############################################逻辑回归模型搭建####################################################
lr = LogisticRegression()
lr.fit(x_train,y_train)# 打印模型的参数
# print("w=", lr.coef_)
# print("b=", lr.intercept_)# 利用训练好的模型进行推理
pre_reslut = lr.predict(x_test)
# print(pre_reslut)# 打印预测结果的概率
pre_reslut_proba = lr.predict_proba(x_test)
# print(pre_reslut_proba)# 获取恶性肿瘤的概率
pre_list = pre_reslut_proba[:,1]
# print(pre_list)# 设置阈值,大于 30%的认为是恶心肿瘤
thresholds = 0.3# 设置保存结果的列表
reslut = []
reslut_name = []for i in range(len(pre_list)):if pre_list[i] > thresholds:reslut.append(1)reslut_name.append("恶性肿瘤")else:reslut.append(0)reslut_name.append("良性肿瘤")# print(reslut)
# print(reslut_name)##############################################模型预测结果评估####################################################
# 输出结果的精确率,召回率,F1
report = classification_report(y_test,reslut,labels = [0,1],target_names=["良性肿瘤","恶性肿瘤"])
print(report)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148407.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

健身房管理系统设计与实现

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装健身房管理系统软件来发挥其高效地信息处理的作用&#xff…

2024年信息安全企业CRM选型与应用研究报告

数字化的生活给人们带来便利的同时也带来一定的信息安全隐患,如网络侵权、泄露用户隐私、黑客攻击等。在互联网高度发展的今天,信息安全与我们每个人、每个组织甚至每个国家都息息相关。 信息安全行业蓬勃发展。根据智研咨询数据,2021年&…

【LLM学习之路】9月22日 第九天 自然语言处理

【LLM学习之路】9月22日 第九天 直接看Transformer 第一章 自然语言处理 自然语言处理发展史 只要看的足够多,未必需要理解语言 统计语言模型发展史 统计语言模型: 判断一个句子是否合理,就计算这个句子会出现的概率 缺点是句子越长越…

大数据-145 Apache Kudu 架构解读 Master Table 分区 读写

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

NodeFormer:一种用于节点分类的可扩展图结构学习 Transformer

人工智能咨询培训老师叶梓 转载标明出处 现有的神经网络(GNNs)在处理大规模图数据时面临着一些挑战,如过度平滑、异质性、长距离依赖处理、边缘不完整性等问题,尤其是当输入图完全缺失时。为了解决这些问题,上海交通大…

2024年中国研究生数学建模竞赛B题 (WLAN组网吞吐量机理建模+决策树 完整建模文章)

2024年中国研究生数学建模竞赛B题 (WLAN组网吞吐量机理建模决策树 完整建模文章) 问题重述和分析 问题重述 本题旨在基于实际测量的WLAN(无线局域网)数据,建立一个精确的系统吞吐量预测模型。具体而言,提供了多个包含网络拓扑、…

在虚幻引擎中创建毛发/头发

在虚幻引擎中创建毛发/头发 , 首先开启两个插件 Groom 和 Alembic Groom Importer 打开蒙皮缓存 导出人物模型 将人物导入Blender , 选择需要种植头发的点 指定并选择 点击毛发 这里变成爆炸头了 , 把数量和长度调一下 切换到梳子模式 调整发型 导出为abc , 文件路径不…

mysql 内存被打满记录

一:早上收到报警:提示:您的云数据库RDS的1个实例因存储空间满将被锁定,请关注实例的存储空间使用情况,可通过存储扩容或空间清理解除锁定。后续查看错误日志如下:磁盘没有空间了 没有多余的空间写binlog和…

推荐一款开源的Redis桌面客户端

TinyRDM 是一个现代化的、轻量级的跨平台 Redis 桌面客户端,能在 Mac、Windows 和 Linux 系统上使用。它有着现代化的设计风格,界面既简洁又清晰,操作起来方便又高效。不管是刚开始接触的新手,还是经验丰富的开发者,都…

基于OpenCV的单目测距

随着计算机视觉技术的发展,单目测距作为一种重要的视觉测量手段,在众多领域得到了广泛的应用。本文将探讨基于OpenCV的单目测距原理、局限性、实际应用场景以及一些优化方案。 单目测距的原理 单目测距是指利用一台摄像机拍摄到的单一图像来进行距离测量…

Kubernetes Pod调度基础(kubernetes)

实验环境依旧是k8s快照,拉取本次实验所需的镜像文件; 然后在master节点上传已经编写好的yaml文件; 然后同步会话,导入镜像; pod控制器: 标签选择器--》标签: 标签: 在Kubernetes&…

Nat Med|机器学习+高通量筛选,发现用于治疗胶质母细胞瘤的神经活性药物|顶刊精析·24-09-23

小罗碎碎念 今日顶刊:Nat Med 这篇文章是2024-09-20发表在《Nature Medicine》上的一篇研究型论文,标题为“High-throughput identification of repurposable neuroactive drugs with potent anti-glioblastoma activity”。 先打个提前量,发…

人工智能面试题(Artificial Intelligence Algorithm Interview Questions)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

ruoyi源码解析学习 - 微服务版 - ruoyi-gateway

com.ruoyi.gateway 今天简单看看若依的gateway的配置模块干了啥 最近面试很多外包公司,都对低代码平台有点要求,这些代码虽说用起来不费劲,但是其中还是有很多细节能让我学习学习的。(微服务版,上次搞jeecgboot的笔试…

【爬虫工具】小红书评论高级采集软件

用python开发的爬虫采集工具【爬小红书搜索评论软件】,支持根据关键词采集评论。 思路:笔记关键词->笔记链接->评论 软件界面: 完整文章、详细了解: https://mp.weixin.qq.com/s/C_TuChFwh8Vw76hTGX679Q 好用的软件一起分…

Vue3:具名插槽

目录 一.性质与作用 1.基本性质 2.使用方式 3.作用 4.应用场景 5.注意事项 二.使用 1.父组件 2.子组件 三.代码 1.父组件代码 2.子组件代码 四.效果 具名插槽在Vue3中用于为组件提供一种方式,允许父组件向子组件注入内容,并且可以指定这些内…

【HarmonyOS】应用权限原理和封装

背景 在项目中,避免不了需要调用系统资源和系统能力,比如:日历读写、摄像头等。因此,需要了解对系统资源访问权限的申请方式方法。 授权方式 包括两种授权方式,分别是system_grant(系统授权) 和 user_grant(用户授权)…

7种限流算法打开新方式

前言 最近几年,随着微服务的流行,服务和服务之间的依赖越来越强,调用关系越来越复杂,服务和服务之间的稳定性越来越重要。在遇到突发的请求量激增,恶意的用户访问,亦或请求频率过高给下游服务带来较大压力…

ubuntu内网穿透后在公网使用ssh登录

需求: 我有一台内网可以通过ssh 22端口访问的设备操作系统是ubuntu server我还有1台拥有公网IP的服务器,IP地址是 6.66.666.6666我想随时从其他网段通过ssh访问我的ubuntu server设备 实现: 工具准备:frp 网址:https…

Electron 隐藏顶部菜单

隐藏前: 隐藏后: 具体设置代码: 在 main.js 中加入这行即可: // 导入模块 const { app, BrowserWindow ,Menu } require(electron) const path require(path)// 创建主窗口 const createWindow () > {const mainWindow ne…