机器学习从零到入门 逻辑回归详解

news2024/12/28 20:07:42

逻辑回归详解 从零开始 从理论到实践

  • 一、逻辑回归的理解
    • 1.1、字面含义
    • 1.2、引申
      • 1.2.1、阶跃函数的引入
      • 1.2.2、可导的阶跃函数 - Logistic函数
      • 1.2.3、Logistic回归
      • 1.2.4、回归系数的求解 - 极大似然估计
  • 二、sklearn的使用
  • 参考

一、逻辑回归的理解

前面介绍了线性回归及其衍生回归模型,主要是解决回归问题,即预测的结果是连续的,比如数值。然而有时候,机器学习需要处理样本中的非连续的数据,比如已知某西瓜的质量有“好”和“坏”这两个种类,要对某样本西瓜质量进行预测,这种情况则称为分类问题

这时就引申出了逻辑回归,逻辑回归(Logistic Regression)是由统计学家大卫·考克斯(David Cox)于1958年提出的。它是一个二元逻辑模型,用于估计一个或多个预测变量(特征)的二元响应概率,用于估计某种事情的可能性。

分类问题要预测的不再是数值,而是两个或者两个以上的类别,即机器学习算法所要完成的是预测输入属于哪个类别。

分类问题的分类 - 二分类(Binary Classification)与多分类(Multi-class Classification)的选择

如果待预测的类别选择只有两个,通常称之为二元分类问题,在机器学习中较多使用 Logistic 函数来解决。
如果待预测的类别选择有两个以上,则称之为多分类问题,在及其学习中较多使用 Softmax 函数来解决。

逻辑回归与线性回归既有非常大的不同:

  • 前者为解决分类问题,后者为解决回归问题

也有非常密切的联系:

  • 逻辑回归与多元线性回归有很多相同之处,但最大的区别是它们的因变量不同,正因如此,这两种回归同属于一个家族,即广义线性模型(Generalized Linear Model)。

1.1、字面含义

“逻辑回归”由“逻辑”和“回归”两部分组成,它的名字对于初学者来说不太友好。


“逻辑” 为英文单词“Logistic”的音译+简写,或完整叫“逻辑斯蒂”,但还有一种比较高级的叫法为“对数几率”或简称“对数”,即“对数回归”,从数学的角度看,这种叫法最为准确,因为中文“逻辑”与logistic和logit的含义相去甚远。

除此之外,“逻辑”替代了“线性回归”中的“线性”,却完全套用了“线性模型”的思路,即在广义线性模型的基础上衍生而来,这种衍生的模型叫做“逻辑模型”(机器学习中的模型也等同于数学中的函数,还有一种普遍叫法为Logistic函数)。

“回归” - Regression 的含义本来等同于“线性回归”中的“回归”,在加入前面“逻辑”的条件后,就表示为“分类”算法。


1.2、引申

1.2.1、阶跃函数的引入

分类问题的预测结果是离散的,对于二分类问题,我们需要一个函数模型,在变量取任意值的情况下,只会得到两个结果值。在线性回归中,自变量与因变量是一对一或者多对一(一个x对应一个y,或者多个x对应一个y)的情况,显然难以用直线拟合分类问题。

这里引入阶跃函数 - Step Function(或Heaviside Function),它的图像如下:
在这里插入图片描述
阶跃函数是一种特殊的连续时间函数,是一个从0跳变到1的过程,从图中可以看出:
x < 0 x\lt 0 x<0 y = 0 y=0 y=0;当 x > 0 x\gt 0 x>0 y = 1 y=1 y=1;当 x = 0 x=0 x=0 y y y 为0.5。

阶跃函数在各个领域如自然生态、计算、工程等等拥有非常重要的作用,然而却无法直接用于机器学习:

  1. 可导的函数图像是“光滑”的曲线(直线也是特殊的曲线),而阶跃函数线条非常硬朗,包含两个垂直角位置,明显不可导。
  2. 可导的函数一定连续,而实际上,阶跃函数准确图像为两条直线加一个点:当 x < 0 x<0 x<0 时,图像始终为某个值,当 x > 0 x>0 x>0 时,图像又始终为某个值,当 x = 0 x=0 x=0 时,函数的值只能为一个确定的值,阶跃函数包含不连续的点,因此也称为奇异函数,所以图像是不连续的,即不可导。

函数不可导,也就无法运用到机器学习中,去搭配梯度下降等优化算法,使得损失函数的偏差最小。

参考1 单位阶跃函数
参考2 阶跃函数


1.2.2、可导的阶跃函数 - Logistic函数

理解:
原生的阶跃函数不可导,线性函数可导不是阶跃函数不能直接用作分类,如何发明一种函数能满足这两种要求呢?

Logistic函数就正是这种即是可导函数,又是阶跃函数。

Logistic函数使线性模型能够预测离散的分类问题。它由统计学家皮埃尔·弗朗索瓦·韦吕勒于19世纪发明的,它在不同场景中拥有不同的名字:
在逻辑回归算法中,它被称为Logistic函数(曲线)。
在神经网络算法中,它被称为Sigmoid函数。Sigmoid函数即形似S的函数,对率函数是Sigmoid函数最重要的代表。

数学表达式:
L o g i s t i c ( z ) = 1 1 + e − z Logistic(z)=\frac{1}{1+e^{-z}} Logistic(z)=1+ez1

  • e e e 为自然常数,即一个固定的“常量”。
  • e − z e^{-z} ez是以 e e e 为底、 z z z 为变量的指数函数,也可写成 e x p ( − z ) exp(-z) exp(z)

函数图像:
在这里插入图片描述
从图中可以看出,该函数将y值转化成一个接近0或1的y值,函数的斜率随着靠近和远离0轴进行放大和缩小,函数“光滑”可导,并且其输出值在y=0附近变化很陡,以0为分界点, z z z 越小于0, y y y 越接近于0; z z z 越大于0, y y y 越接近于1。


1.2.3、Logistic回归

理解:
Logistic回归即:将线性模型的输出套在Logistic函数内部,于是可以把线性模型的预测结果映射成分类问题所需的预测结果,并且线性模型的输出预测值越小于0或者越大于0越好,即往两极靠效果越好。

表达式:
线性模型:
z = w T x i + b = β T X z=w^Tx_i+b=\beta^TX z=wTxi+b=βTX
logistic函数:
L o g i s t i c ( z ) = 1 1 + e − z Logistic(z)=\frac{1}{1+e^{-z}} Logistic(z)=1+ez1
带入到 logistic函数 中去:
H ( x ) = 1 1 + e − ( w T x i + b ) = 1 1 + e − ( β T X ) H(x)=\frac{1}{1+e^{-(w^Tx_i+b)}}=\frac{1}{1+e^{-(\beta^TX)}} H(x)=1+e(wTxi+b)1=1+e(βTX)1
进行变形:
ln ⁡ H ( x ) 1 − H ( x ) = w T x + b \ln\frac{H(x)}{1-H(x)}=w^Tx+b ln1H(x)H(x)=wTx+b
若将 H ( x ) H(x) H(x)视为样本 x x x作为正例的可能性,则 1 − H ( x ) 1-H(x) 1H(x)是其反例可能性,两者比值:
H ( x ) 1 − H ( x ) \frac{H(x)}{1-H(x)} 1H(x)H(x)
称为"几率"(odds),反映了 x x x作为正例的相对可能性。对几率取对数则得到"对数几率"(log odds,亦称logit):
ln ⁡ H ( x ) 1 − H ( x ) \ln\frac{H(x)}{1-H(x)} ln1H(x)H(x)

用线性回归模型的预测结果取逼近真实标记的对数几率,因此对应的模型称为“对数几率回归”(logistic regression,亦称logit regresion)。特别需要注意到,虽然它的名字是“回归”,但实际上却是一种分类学习方法。

这种方法有很多优点,例如它是直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题;它不是仅预测出“类别”,而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用;此外,对率函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化计算算法都可以直接用于求取最优解。

H ( x ) H(x) H(x)表示结果取 1 1 1 的概率,于是 1 − H ( x ) 1-H(x) 1H(x)表示结果取 0 0 0 的概率,表示为:
ln ⁡ p ( H ( x ) = 1 ∣ x ) p ( H ( x ) = 0 ∣ x ) = w T x + b \ln\frac{p(H(x)=1|x)}{p(H(x)=0|x)}=w^Tx+b lnp(H(x)=0∣x)p(H(x)=1∣x)=wTx+b
P ( H ( x ) = 1 ∣ x ) = e w T x + b 1 + e w T x + b P(H(x)=1|x)=\frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} P(H(x)=1∣x)=1+ewTx+bewTx+b
P ( H ( x ) = 0 ) = 1 1 + e w T x + b P(H(x)=0)=\frac{1}{1+e^{w^Tx+b}} P(H(x)=0)=1+ewTx+b1
当函数的结果大于50%时,可以认为属于类别 1 1 1 的可能性较高,当然,阈值50%可以结合实际业务进行调整。


1.2.4、回归系数的求解 - 极大似然估计

损失函数:
逻辑回归中损失函数定义为:
L ( y ^ , y ) = − [ y log ⁡ 2 y ^ + ( 1 − y ) log ⁡ 2 ( 1 − y ^ ) ] L(\hat{y}, y)=-[y\log_2\hat{y}+(1-y)\log_2(1-\hat{y})] L(y^,y)=[ylog2y^+(1y)log2(1y^)]
并且 y ^ = H ( x ) \hat y=H(x) y^=H(x)

  • 当真实值 y = 1 y=1 y=1 时, L ( y ^ , y ) = − log ⁡ 2 y ^ L(\hat{y}, y)=-\log_2\hat y L(y^,y)=log2y^。当预测值 y ^ \hat y y^ 越接近 1 1 1 − log ⁡ 2 y ^ -\log_2\hat y log2y^ 就越接近值 0 0 0,表示损失函数值越小,误差越小。当预测值 y ^ \hat y y^ 越接近 0 0 0 时, log ⁡ 2 y ^ \log_2\hat y log2y^ 就越接近负无穷,加上负号后就代表误差越大。
  • 当真实值 y = 0 y=0 y=0 时, L ( y ^ , y ) = − log ⁡ 2 ( 1 − y ^ ) L(\hat{y}, y)=-\log_2(1-\hat y) L(y^,y)=log2(1y^)。当预测值 y ^ \hat y y^ 越接近 0 0 0 − log ⁡ 2 y ^ -\log_2\hat y log2y^ 就越接近值 0 0 0,表示损失函数值越小,误差越小。当预测值 y ^ \hat y y^ 越接近 1 1 1 时, log ⁡ 2 y ^ \log_2\hat y log2y^ 就越接近负无穷,加上负号后就代表误差越大。

表达式的由来 - 极大似然估计:
设某次分类事件为 c c c,分类的结果为 Y = { y = 1 , y = 0 } Y=\{y=1, y=0\} Y={y=1,y=0}是互斥事件,于是对于某一次分类事件,符合伯努利分布:
P ( Y ∣ c ) = P ( y = 1 ∣ c ) y P ( y = 0 ∣ c ) ( 1 − y ) = H ( x ) y ( 1 − H ( x ) ) ( 1 − y ) = y ^ y ( 1 − y ^ ) ( 1 − y ) \begin{aligned} P(Y|c)&=P(y=1|c)^yP(y=0|c)^{(1-y)} \\ &=H(x)^y(1-H(x))^{(1-y)} \\ &=\hat y^y(1-\hat y)^{(1-y)} \end{aligned} P(Yc)=P(y=1∣c)yP(y=0∣c)(1y)=H(x)y(1H(x))(1y)=y^y(1y^)(1y)
(由于y为0或1,所以可以表示次数)

为什么加负号?
加上负号:
P ( Y ∣ c ) = − y ^ y ( 1 − y ^ ) ( 1 − y ) \begin{aligned} P(Y|c)&=-\hat y^y(1-\hat y)^{(1-y)} \end{aligned} P(Yc)=y^y(1y^)(1y)

逻辑回归采用Logistic函数,结果域为 ( 0 , 1 ) (0, 1) (0,1),可看做概率模型,即 x x x 取某个值时 y y y 1 1 1 的概率。损失函数采用极大似然估计法,使似然最大, y y y 1 1 1 的概率最大,于是加上负号,出现偏差的概率最小。

为什么加 log ⁡ \log log
加上 log ⁡ \log log 后:
log ⁡ P ( Y ∣ c ) = − [ y log ⁡ 2 y ^ + ( 1 − y ) log ⁡ 2 ( 1 − y ^ ) ] \log P(Y|c)=-[y\log_2\hat{y}+(1-y)\log_2(1-\hat{y})] logP(Yc)=[ylog2y^+(1y)log2(1y^)]

如果去掉 log ⁡ \log log,则表示为:
L ( y ^ , y ) = − [ y ^ y ( 1 − y ^ ) ( 1 − y ) ] L(\hat{y}, y)=-[\hat{y}^y(1-\hat{y})^{(1-y)}] L(y^,y)=[y^y(1y^)(1y)]
它不方便运算,为了简化运算,加上 log ⁡ \log log

对数函数

对数函数都是单调函数,即要么递增要么递减,一共两类:
底数大于1时,函数单调递增
底数大于0小于1时,函数单调递减

log一般要指明底数,但是各种文献经常出现不带底数的情况,通常有2、10和e三种说法,好在不管哪一种,显然底数都大于1,函数是单调递增的。在Numpy中,log底数默认为e。




二、sklearn的使用

逻辑回归算法在sklearn包中的linear_model模块中,可以参考官网:LogisticRegression

在这里插入图片描述
在这里插入图片描述

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(random_state=0).fit(X, y)
clf.predict(X[:2, :])
# array([0, 0])
clf.predict_proba(X[:2, :])
"""
array([[9.8...e-01, 1.8...e-02, 1.4...e-08],
       [9.7...e-01, 2.8...e-02, ...e-08]])
"""
clf.score(X, y)
# 0.97...


参考

LogisticRegression

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

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

相关文章

目标检测之YOLOv4算法分析

基本原理 网络结构 CSPDarknet53 最后三个箭头指向输出即三种特征图 SPP 解决多尺度问题 对于同一个特征输出图&#xff0c;进行三种maxpool2d操作&#xff0c;然后将三种操作的输出进行叠加 PANet 融合上采样、下采样等特征&#xff0c;深度方向拼接 PANet由五个核心模…

Unity 3D工具栏与常用工具||Unity 3D 菜单栏与快捷键

Unity 3D 的工具栏&#xff08; Toolbar &#xff09;中&#xff0c;一共包含 13 种常用工具&#xff0c;如下所列。 一. 平移窗口工具&#xff1a;平移场景视图画面。 快捷键&#xff1a;鼠标中键 二. 位移工具&#xff1a;针对单个或两个轴向做位移。 快捷键&#xff1a;W…

stm32f407VET6 系统学习 day04 DHT11 温湿度传感器

1.温湿度的一次完整的数据包括&#xff1a; 一次完整的数据传输为40bit,高位先出。 数据格式: 8bit湿度整数数据 8bit湿度小数数据 8bi温度整数数据 8bit温度小数数据 8bit校验&#xff08;校验和的值是前四个字节数据的和) 用户MCU发送一次开始信号后,DHT11从低功耗模式转…

灰色关联分析(系统分析+综合评价)

系统分析&#xff1a;探究系统中哪个自变量对系统的影响最大 灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近&#xff0c;相应序列之间的关联度就越大&#xff0c;反之就越小 应用一、进行系统分析&#xff08;国内比赛合适&#xf…

idea创建spring项目

文章目录一、Maven 项目的创建1.1 创建一个空项目2.2 新建一个模块2.3 创建Maven模块2.4 添加resources目录2.5 选定maven版本二、添加spring2.1 添加依赖2.2 创建applicationContext文件2.3 添加bean一、Maven 项目的创建 1.1 创建一个空项目 新建一个空项目&#xff1b;随便…

十、Express 路由

路由是Express框架中最重要的功能之一&#xff0c;在Express中&#xff0c;路由指的是客户端的请求与服务器处理函数之间的映射关系&#xff0c;Express中的路由分别由请求的类型&#xff08;GET/POST等&#xff09;、请求的URL地址和处理函数三个部分组成的&#xff1b; APP级…

【C++】侯捷C++面向对象高级编程(下)

转换函数(conversion function) 可以把"这种"东西&#xff0c;转化为"别种"东西。 即Fraction ——> double class Fraction { public:Fraction(int num, int den 1) :m_numerator(num), m_denominator(den) {}operator double()const {return ((dou…

hashmap哈希map是什么?什么时候需要使用hashmap?C实现hashmap示例

背景 对于C程序员&#xff0c;尤其是嵌入式C程序员&#xff0c;hashmap使用的相对较少&#xff0c;所以会略显陌生&#xff0c;hashmap其实涉及到2个概念&#xff0c;分别是哈希(hash)、map。 哈希hash&#xff1a;是把任意长度输入通过蓝列算法变换成固定长度的输出&#xff…

CSS Flex 布局的 flex-direction 属性讲解

flex-direction 设置了主轴&#xff0c;从而定义了弹性项目放置在弹性容器中的方向。 Flexbox 是一种单向布局概念&#xff0c;可将弹性项目视为主要以水平行或垂直列布局。 .container {flex-direction: row | row-reverse | column | column-reverse; }几种支持的属性&#x…

devServer和VueCli | Webpack

文章目录devServer和VueCliwebpack-dev-servercontentBase模块热替换开启HMRhotOnly host配置port open compressproxyresolveextensions和alias配置如何区分开发环境devServer和VueCli webpack-dev-server contentBase 模块热替换 开启HMR hotOnly host配置 port open compres…

IMX6ULL学习笔记(15)——GPIO接口使用【官方SDK方式】

一、GPIO简介 i.MX6ULL 芯片的 GPIO 被分成 5 组,并且每组 GPIO 的数量不尽相同&#xff0c;例如 GPIO1 拥有 32 个引脚&#xff0c; GPIO2 拥有 22 个引脚&#xff0c; 其他 GPIO 分组的数量以及每个 GPIO 的功能请参考 《i.MX 6UltraLite Applications Processor Reference M…

有没有股票实时行情的同花顺l2接口?

对于个人投资者而言&#xff0c;一般看盘平台软件系统中&#xff0c;通过自定义公式接口&#xff0c;可以获取到股票实时行情的。例如同花顺l2接口系统会通过一些输入的公式就能查找指定的股票行情了&#xff0c;那么这个就相当于股票实时行情的API接口一样的道理&#xff0c;输…

加密解决HTTP协议带来的安全问题

HTTP协议默认是采取明文传输的&#xff0c;容易被中间人窃听、拦截、篡改&#xff0c;存在安全隐患。 常见提高安全性的方法是对通信内容进行加密&#xff0c;再进行传输&#xff0c;常见的加密方式有 不可逆加密&#xff1a;单向散列函数 可逆加密&#xff1a;对称加密、非对称…

从模型到服务——iDesktopX处理自动化工具实现BIM模型到三维服务发布

目录前言一、 处理自动化模型二、 算子参数设置1、 使用迭代数据集打开导出后的BIM模型2、 移除重复点、重复面和重复子对象3、 模型生成缓存4、 三维切片缓存发布5、 执行结果前言 BIM模型在SuperMap实际使用的业务流程中常常需要在桌面产品中生成缓存&#xff0c;然后通过iS…

安装和配置MySQL

首先前往官网下载mysql社区版&#xff08;不要钱&#xff09; MySQL Community Serverhttps://dev.mysql.com/downloads/windows/installer/8.0.html 甲骨文比较鸡贼&#xff0c;会要求你注册一个账号。但是下面有一行小字&#xff0c;直接点击下载就好了 双击后直接按…

Blender——苹果的纹理绘制

效果图 前言 在进行纹理绘制之前&#xff0c;首先要具有苹果三维模型。 关于苹果的建模请参考&#xff1a;Blender——“苹果”建模_行秋的博客 1.苹果UV的展开 1.1首先点击UV Eidting&#xff0c;滑动三维模型&#xff0c;使其大小适中。 1.2打开左上角的UV选区同步&#x…

使用idb操作IndexedDB

使用idb操作IndexedDB 译自&#xff1a;https://www.hackernoon.tech/use-indexeddb-with-idb-a-1kb-library-that-makes-it-easy-8p1f3yqq GitHub地址&#xff1a;https://github.com/jakearchibald/idb 文章目录使用idb操作IndexedDB前置条件本文承诺上手demo1&#xff1a;…

python中的encode()和decode()函数

前言&#xff1a; 我们知道&#xff0c;计算机是以二进制为单位的&#xff0c;也就是说计算机只识别0和1,也就是我们平时在电脑上看到的文字&#xff0c;只有先变成0和1&#xff0c;计算机才会识别它的意思。这种数据和二进制的转换规则就是编码。计算机的发展中&#xff0c;有…

【SpringCloud Alibaba】Sentinel流控规则

概念 流控规则 直接&#xff08;默认&#xff09; QPS快速失败 线程数直接控制 QPSWarming up QPS排队等待 关联 链路 具体启动Sentinel的步骤可以参考我的上一篇文章。 概念 资源名&#xff1a;唯一名称&#xff0c;默认请求路径 针对来源&#xff1a;Sentinel可以针…

微服务系列之远程服务调用

随笔 对自己不满是任何有才能的人的根本特征 参考书籍&#xff1a; “凤凰架构”“微服务架构设计模式” 本篇文章开始之前提示一下&#xff0c;读者带着“IPC与RPC的有什么区别”疑惑读效果更好 引言 从架构师的角度来看&#xff0c;微服务架构的落地实现第一个需要解决问…