【机器学习】一文掌握逻辑回归全部核心点(上)。

逻辑回归核心点-上

  • 1、引言
  • 2、逻辑回归核心点
    • 2.1 定义与目的
    • 2.2 模型原理
      • 2.2.1 定义解析
      • 2.2.2 公式
      • 2.2.3 代码示例
    • 2.3 损失函数与优化
      • 2.3.1 定义解析
      • 2.3.2 公式
      • 2.3.3 代码示例
    • 2.4 正则化
      • 2.4.1 分类
      • 2.4.2 L1正则化
      • 2.4.3 L2正则化
      • 2.4.4 代码示例
  • 3、总结

1、引言

小屌丝:鱼哥,你说逻辑归回需要掌握哪些技能?
小鱼:我上一篇不是写了逻辑回归的的博文嘛~
小屌丝:意犹未尽,我还想探索的更深层的。
小鱼:额… 有多深?
小屌丝:逻辑回归的核心要点有哪些?
小鱼:这个…
小屌丝:这个不可以吗?
小鱼:这个可以啊。
小屌丝:吓我一跳,我还以为不行呢。
小鱼:鉴于最近学习这么认真,我们今天就来聊一聊逻辑回归的核心要点。
在这里插入图片描述

2、逻辑回归核心点

2.1 定义与目的

  • 定义:逻辑回归是一种广义的线性模型,用于解决二分类问题。尽管名字中包含“回归”,但逻辑回归实际上是一种分类算法,它输出的是样本属于某个类别的概率。
  • 目的:逻辑回归的目的是根据给定的输入特征预测样本所属的类别。它通常用于处理二分类问题,但也可以通过一些技术扩展到多分类问题。
  • 应用场景:逻辑回归广泛应用于各种领域,如垃圾邮件检测、疾病预测、金融风险评估等

2.2 模型原理

2.2.1 定义解析

  • 线性回归部分:逻辑回归首先通过线性回归模型计算出一个得分或线性预测值。这个值是基于输入特征和相应权重的加权和,再加上一个偏置项。
  • 逻辑函数(sigmoid函数):线性预测值通过sigmoid函数转换为概率值。sigmoid函数将任何实数映射到(0, 1)区间内,使得输出可以解释为属于某个类别的概率。
  • 决策边界:根据权重和偏置项,逻辑回归模型定义了一个决策边界,用于分隔不同类别的样本。这个边界可以是线性的,也可以是非线性的,取决于特征的变换和选择。

2.2.2 公式

sigmoid函数的公式为:

[ σ ( z ) = 1 1 + e − z ] [ \sigma(z) = \frac{1}{1 + e^{-z}} ] [σ(z)=1+ez1]

2.2.3 代码示例

便于理解,代码展示

# 使用上面定义的sigmoid函数  
z = 2.0  
probability = sigmoid(z)  
print("sigmoid函数输出:", probability)

2.3 损失函数与优化

2.3.1 定义解析

  • 对数损失函数(log-loss):逻辑回归使用对数损失函数来衡量模型预测与实际标签之间的差异。对数损失函数鼓励模型对正确类别的预测概率接近1,而对错误类别的预测概率接近0。
  • 优化算法:为了最小化损失函数,逻辑回归通常使用梯度下降法或其变种(如随机梯度下降、批量梯度下降等)进行优化。这些算法通过迭代更新权重和偏置项来逐步降低损失函数的值。
  • 学习率与收敛条件:在优化过程中,学习率是一个重要的超参数,它控制权重更新的步长。此外,还需要设置收敛条件来确定优化何时停止,以避免过度拟合或过早停止训练。

2.3.2 公式

对数损失函数的公式为:

[ J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h ( x ( i ) ; θ ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h ( x ( i ) ; θ ) ) ] ] [ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} [y^{(i)} \log(h(x^{(i)}; \theta)) + (1 - y^{(i)}) \log(1 - h(x^{(i)}; \theta))] ] [J(θ)=m1i=1m[y(i)log(h(x(i);θ))+(1y(i))log(1h(x(i);θ))]]

其中,

  • ( m ) 是样本数量。
  • ( y^{(i)} ) 是第 ( i ) 个样本的实际标签(0或1)。
  • ( h(x^{(i)}; \theta) ) 是第 ( i ) 个样本的预测概率。
  • ( \theta ) 是参数向量,包括权重和偏置项。

2.3.3 代码示例

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-03-02
# @Author : Carl_DJimport numpy as np  # 定义对数损失函数  
def log_loss(y_true, y_pred):  m = len(y_true)  cost = -np.sum(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) / m  return cost  # 示例真实标签和预测概率  
y_true = np.array([0, 1, 1, 0])  
y_pred = np.array([0.1, 0.9, 0.8, 0.4])  # 计算对数损失  
loss = log_loss(y_true, y_pred)  
print("对数损失:", loss)

2.4 正则化

2.4.1 分类

  • L1正则化:通过在损失函数中加入权重系数的绝对值之和,L1正则化可以产生稀疏的权重矩阵,即许多权重为0。这有助于减少模型的复杂度,并可能提高模型的泛化能力。
  • L2正则化:L2正则化通过在损失函数中加入权重系数的平方和来实现。它倾向于使权重整体偏小,但并不使它们为0。L2正则化有助于减少过拟合,提高模型的稳定性。
  • 正则化系数的选择:正则化系数 (\lambda) 是一个超参数,需要手动设置。选择合适的 (\lambda) 值对于平衡模型的复杂度和拟合能力至关重要。通常,我们可以通过交叉验证等技术来选择最优的 (\lambda) 值。

2.4.2 L1正则化

L1正则化的损失函数为:

[ J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h ( x ( i ) ; θ ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h ( x ( i ) ; θ ) ) ] + λ ∑ j = 1 n ∣ θ j ∣ ] [ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} [y^{(i)} \log(h(x^{(i)}; \theta)) + (1 - y^{(i)}) \log(1 - h(x^{(i)}; \theta))] + \lambda \sum_{j=1}^{n} |\theta_j| ] [J(θ)=m1i=1m[y(i)log(h(x(i);θ))+(1y(i))log(1h(x(i);θ))]+λj=1nθj]

2.4.3 L2正则化

L2正则化的损失函数为:

[ J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h ( x ( i ) ; θ ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h ( x ( i ) ; θ ) ) ] + λ 2 ∑ j = 1 n θ j 2 ] [ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} [y^{(i)} \log(h(x^{(i)}; \theta)) + (1 - y^{(i)}) \log(1 - h(x^{(i)}; \theta))] + \frac{\lambda}{2} \sum_{j=1}^{n} \theta_j^2 ] [J(θ)=m1i=1m[y(i)log(h(x(i);θ))+(1y(i))log(1h(x(i);θ))]+2λj=1nθj2]

2.4.4 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-03-02
# @Author : Carl_DJimport numpy as np  # 定义sigmoid函数  
def sigmoid(z):  return 1 / (1 + np.exp(-z))  # 定义L2正则化逻辑回归的损失函数  
def logistic_regression_loss(w, b, X, y, lambda_val):  m = len(y)  A = sigmoid(np.dot(X, w) + b)  cost = (-1 / m) * np.sum(y * np.log(A) + (1 - y) * np.log(1 - A))  regularization = (lambda_val / (2 * m)) * np.sum(w**2)  return cost + regularization  # 定义梯度下降优化函数  
def gradient_descent(w, b, X, y, learning_rate, lambda_val, num_iterations):  m = len(y)  J_history = []  for i in range(num_iterations):  A = sigmoid(np.dot(X, w) + b)  dw = (1 / m) * np.dot(X.T, (A - y)) + (lambda_val / m) * w  db = (1 / m) * np.sum(A - y)  w = w - learning_rate * dw  b = b - learning_rate * db  J = logistic_regression_loss(w, b, X, y, lambda_val)  J_history.append(J)  return w, b, J_history  # 示例数据  
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])  
y = np.array([0, 0, 1, 1])  # 初始化参数  
w = np.zeros(X.shape[1])  
b = 0  # 设置超参数  
learning_rate = 0.1  
lambda_val = 0.1  
num_iterations = 1000  # 运行梯度下降  
w, b, J_history = gradient_descent(w, b, X, y, learning_rate, lambda_val, num_iterations)  # 输出训练过程中的损失值  
print("训练过程中的损失值:", J_history)

3、总结

为了让大家更容易的理解与吸收这些知识,小鱼分两篇来分享。

  • 【机器学习】一文掌握逻辑回归全部核心点(上)。》

  • 【机器学习】一文掌握逻辑回归全部核心点(下)。
    我是小鱼

  • CSDN 博客专家

  • 阿里云 专家博主

  • 51CTO博客专家

  • 多个名企认证讲师等

  • 认证金牌面试官

  • 名企签约职场面试培训、职场规划师

  • 多个国内主流技术社区的认证专家博主

  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习机器学习领域的知识。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用“Docker registry创建本地仓库,在服务器之间进行文件push和pull”?

1.1、在服务器1,运行registry docker run -d -p 5000:5000 -v ${PWD}/registry:/var/lib/registry --restart always --name registry registry:2.7.11.2、编辑/etc/docker/daemon.json 文件, 192.168.xxx.xxx 换成你自己 registry 服务的地址 sudo na…

Unity3d版白银城地图

将老外之前拼接的Unity3d版白银城地图,导入到国内某手游里,改成它的客户端地图模式,可以体验一把手游的快乐。 人物角色用的是它原版的手游默认的,城内显示效果很好,大家可以仔细看看。 由于前期在导入时遇到重大挫折&…

Linux中GPU相关命令

Linux查看显卡信息: lspci | grep -i vga 使用nvidia GPU可以: lspci | grep -i nvidia1 前边的序号 "00:0f.0"是显卡的代号(这里是用的虚拟机); 查看指定显卡的详细信息用以下指令: lspci -v -s 00:0f.01 Linux查看Nvidia显…

US1M/US1G-ASEMI高效快恢复二极管SMA封装

编辑:ll US1M/US1G-ASEMI高效快恢复二极管SMA封装 型号:US1M/US1G 品牌:ASEMI 封装:SMA 最大平均正向电流(IF):1A 最大循环峰值反向电压(VRRM):1000V …

【C++基础】1.认识C++——《跟老吕学C++编程语言》

【C基础】1.认识C——《跟老吕学C编程语言》 认识CC简介C发展历程C四大特性支持数据封装和数据隐藏抽象支持继承和重用支持多态性 C语言工作原理C语言标准C标准库 认识C C简介 C,全称是C Plus Plus。老吕比较喜欢叫它C加加。 C是C语言的继承;C是是编译式…

Linux信号机制(二)

目录 一、信号的阻塞 二、信号集操作函数 三、sigprocmask函数 四、pause函数 五、sigsuspend函数 一、信号的阻塞 有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。…

Stable Diffusion WebUI 1.8.0来了

上周 Stable Diffusion WebUI 发布了 1.8.0 版本,更新内容比较多,据说显存使用有了大幅的下降,这几天我也找时间把 AutoDL 镜像的版本做了个升级,有兴趣的同学可以去体验下新版本了。 这里分享下其中几个我认为比较重要的更新。 …

MinIO权限提升漏洞CVE-2024-24747详细解决办法

漏洞名称: MinIO权限提升漏洞(CVE-2024-24747) 漏洞简介 2024年2月2日,深瞳漏洞实验室监测到一则MinIO 存在权限提升漏洞的信息,漏洞编号:CVE-2024-24747,漏洞威胁等级:高危。 该漏洞是由于用户创建的访…

打卡学习kubernetes——kubernetes架构原理

接上一篇的内容,除了核心组件,还有一些推荐的Add-ons: kube-dns 负责为整个集群提供DNS服务Ingress Controller 为服务提供外网入口Heapster 提供资源监控(没用过这个,但是用过grafana,很方便&#xf…

【已解决】由于启动计算机时出现了页面文件配置問題,Windows在你的计算机 人上创建了一个临时页面文件

最近装了系统,重启电脑时候会有这个问题: 解决方法: 设置虚拟内存的步骤如下: 第一步:用鼠标右键单击桌面上的“计算机”图标,在弹出的快捷菜单中选择“属性”。 第二步:单击系统属性窗口里的“…

Unix环境高级编程-学习-05-TCP/IP协议与套接字

目录 一、概念 二、TCP/IP参考模型 三、客户端和服务端使用TCP通信过程 1、同一以太网下 四、函数介绍 1、socket (1)声明 (2)作用 (3)参数 (4)返回值 (5&…

【Python/crawl】如何使用Python爬虫将一系列网页上的同类图片下载到本地

【需求】 从网页https://www.zhainq.com/%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f%e6%9c%ba%e6%9e%84/%e6%97%a5%e6%9c%ac%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f/109012.html 开始,有十七页,每页都有大漂亮“小濑田麻由”的若干图片,想要将其…