【机器学习】--- 逻辑回归算法

目录

逻辑回归基础

1. 概述

逻辑回归是机器学习的一种分类算法,主要运用于二分类问题。将线性回归的结果,映射到不同的类别之中。算法简单而高效,实际广泛运用。

简单来说:逻辑回归 = 线性回归 + S i g m o i d Sigmoid Sigmoid函数(分类函数)

2.优点与缺点

优点:

  1. 简单而且容易实现。逻辑回归的模型相对简单,只需要对输入特征进行线性组合,然后通过 S i g m o i d Sigmoid Sigmoid函数进行分类预测。
  2. 计算效率高。逻辑回归的计算量相对较小,可以处理大规模的数据集。
  3. 可解释性强。逻辑回归的结果可以解释为某个事件发生的概率,比较直观易懂。
  4. 可以在线学习。逻辑回归可以通过梯度下降算法进行在线学习,适用于增量学习和实时预测。

缺点:

  1. 对特征的依赖性强。逻辑回归对特征之间的依赖性较为敏感,如果特征之间存在较强的相关性,会导致模型效果较差。
  2. 对异常值较为敏感。逻辑回归对异常值较为敏感,可能会影响模型的预测结果。
  3. 需要大量的特征工程。为了提高逻辑回归的性能,通常需要进行大量的特征工程,包括特征选择、特征变换等。
  4. 无法处理非线性问题。逻辑回归是一种线性模型,无法处理非线性问题,需要通过添加多项式特征或者引入核函数来解决非线性问题。

逻辑回归的理论解释

1.问题背景

现在你有一份数据,里面有病人的肿瘤大小(tumor size)和是否是恶性肿瘤的判断(malignant?),把这份数据可视化,用1来表示恶性肿瘤,0表示良性,这样你就获得了下面这张图。

根据上面的图你可以简单的总结一个函数,如红线所示,来帮助你判断肿瘤是否恶性,现在又来了一个病人,他的肿瘤大小用紫色点表示,根据我们总结的函数,判断出有70%的概率肿瘤是恶性,但是你不能直接输出0.7,只能判断是或否,因此你会输出1(yes),这一条你总结出来的函数就是 S i g m o i d Sigmoid Sigmoid函数

2. S i g m o i d Sigmoid Sigmoid函数

也称为逻辑函数,具体函数定义如下
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1

x坐标是z的值,范围是负无穷到正无穷

值域是(0,1)

图像如下

那么 z z z的值是由谁决定的?还记得文章一开头讲的:逻辑回归 = 线性回归 + S i g m o i d Sigmoid Sigmoid函数(分类函数), z z z的值是从线性回归中得来的

z = w T x + b z = w^Tx+b z=wTx+b

逻辑回归函数表达
f w , b ( x ) = g ( z ) = g ( w T x + b ) = 1 1 + e − ( w T x + b ) f_{w,b}(x) = g(z) = g(w^Tx+b) = \frac{1}{1+e^{-(w^Tx+b)}} fw,b(x)=g(z)=g(wTx+b)=1+e−(wTx+b)1

3.决策边界

函数输出0还是1,取决于 f w , b ( x ) ≥ 0.5 f_{w,b}(x) \ge 0.5 fw,b(x)≥0.5,若成立,那么 y ^ = 1 \hat{y} =1 y^=1,反之 y ^ = 0 \hat{y}=0 y^=0

下图是一组数据集,蓝色圆圈 y ^ \hat{y} y^输出为0,红色交叉 y ^ \hat{y} y^输出为1,经过逻辑回归可以获得其回归函数

根据 S i g m o i d Sigmoid Sigmoid函数, z = 0 z=0 z=0点就是两个类别的分隔点

  • z = x 1 + x 2 − 3 = 0 z = x_1 +x_2 -3 = 0 z=x1+x2−3=0
  • x 1 + x 2 = 3 x_1 +x_2 = 3 x1+x2=3

那么得到的这条线,就叫做决策边界,只要点出现在决策边界下方,就输出0,出现在决策边界上方,就输出1


当然,决策边界也不一定是直线,也可以是曲线

  • z = x 1 2 + x 2 2 − 1 z = x_1^2 +x_2^2 -1 z=x12+x22−1
  • x 1 2 + x 2 2 = 1 x_1^2 +x_2^2 = 1 x12+x22=1

4.损失函数

L ( f w , b ( x ( i ) ) , y ( i ) ) = { − l o g ( f w , b ( x ( i ) ) ) , if y ( i ) = 1 − l o g ( 1 − f w , b ( x ( i ) ) ) , if y ( i ) = 0 L(f_{w,b}(x^{(i)}),y^{(i)})= \begin{cases} -log(f_{w,b}(x^{(i)})), & \text {if y\^{(i)} = 1} \\\\ -log(1-f_{w,b}(x^{(i)})), & \text{if y\^{(i)}=0} \end{cases} L(fw,b(x(i)),y(i))=⎩ ⎨ ⎧−log(fw,b(x(i))),−log(1−fw,b(x(i))),if y(i)=1if y(i)=0

or

L ( f w , b ( x ( i ) ) , y ( i ) ) = − y ( i ) l o g ( f w , b ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − f w , b ( x ( i ) ) ) L(f_{w,b}(x^{(i)}),y^{(i)}) = -y^{(i)}log(f_{w,b}(x^{(i)}))+(1-y^{(i)})log(1-f_{w,b}(x^{(i)})) L(fw,b(x(i)),y(i))=−y(i)log(fw,b(x(i)))+(1−y(i))log(1−fw,b(x(i)))

以上两条式子完全等价

那么代价函数就是每一个点的损失累加起来
J ( w , b ) = 1 m ∑ i = 1 m L ( f w , b ( x ( i ) ) , y ( i ) ) J(w,b) = \frac{1}{m}\sum_{i=1}^m L(f_{w,b}(x^{(i)}),y^{(i)}) J(w,b)=m1i=1∑mL(fw,b(x(i)),y(i))

使用梯度下降的方法,找到代价函数的1阶导最小值即可,有关梯度下降的介绍可以看线性回归中的介绍
【机器学习】-- 线性回归算法

正则化

为了防止模型出现过拟合的问题,出现原本数据集没有的特征,可以采取正则化的方法,来降低高次方项的系数

正则化就是在计算代价函数时,增加惩罚项,来逼迫模型减小高次方项的系数

1.L1正则化

J ( w , b ) = 1 m ∑ i = 1 m L ( f w , b ( x ( i ) ) , y ( i ) ) + ∑ λ m ∣ w i ∣ J(w,b) = \frac{1}{m}\sum_{i=1}^m L(f_{w,b}(x^{(i)}),y^{(i)}) +\sum\frac{\lambda}{m}|w_i| J(w,b)=m1i=1∑mL(fw,b(x(i)),y(i))+∑mλ∣wi∣
λ \lambda λ表示惩罚力度,过高可能会导致欠拟合,过低可能会导致过拟合,因此通常要搭配网格搜索方法来寻找最佳的惩罚力度

2.L2正则化

J ( w , b ) = 1 m ∑ i = 1 m L ( f w , b ( x ( i ) ) , y ( i ) ) + ∑ λ 2 m w i 2 J(w,b) = \frac{1}{m}\sum_{i=1}^m L(f_{w,b}(x^{(i)}),y^{(i)}) +\sum\frac{\lambda}{2m}w_i^2 J(w,b)=m1i=1∑mL(fw,b(x(i)),y(i))+∑2mλwi2

相关推荐
孔汤姆3 分钟前
ESP32 掌机改造全记录:WiFi 遥测、一键启动 AI 终端
人工智能
HyperAI超神经4 分钟前
【vLLM 学习】Disaggregated Prefill
人工智能·深度学习·学习·vllm
我星期八休息1 小时前
网络编程—网络层
开发语言·前端·网络·人工智能·智能路由器
逻辑君1 小时前
ANNA 7.2 方块机器人实验技术报告
人工智能·深度学习·机器学习·机器人
SomeB1oody1 小时前
【RustyML入门】2.9. MeanShift
开发语言·后端·机器学习·rust·教程
菜鸟‍1 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
AI导出鸭1 小时前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
陈嘿萌1 小时前
ECCV 2026 | 南开&OPPO开源 ExpoMotion:首个大规模动态多曝光融合数据集
人工智能·计算机视觉·图像融合·南开大学·新数据集·expomotion·多曝光融合
zyplayer-doc2 小时前
zyplayer-doc企业知识库能做什么:从文档创建、权限管理到AI问答的完整能力
大数据·javascript·数据库·人工智能·pdf·word
IT_陈寒2 小时前
为什么我的Java Stream流操作会吃掉内存?
前端·人工智能·后端