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

news2024/11/17 15:28:09

逻辑回归核心点-上

  • 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_DJ

import 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_DJ

import 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.coloradmin.cn/o/1506812.html

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

相关文章

UE4开个头-简易小汽车

跟着谌嘉诚学的小Demo,记录一下 主要涉及到小白人上下车和镜头切换操作 1、动态演示效果 2、静态展示图片 3、蓝图-上下车

HTTP/2的三大改进:头部压缩、多路复用和服务器推送

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

01-分析同步通讯/异步通讯的特点及其应用

同步通讯/异步通讯 微服务间通讯有同步和异步两种方式 同步通讯: 类似打电话场景需要实时响应(时效性强可以立即得到结果方便使用),而且通话期间不能响应其他的电话(不支持多线操作)异步通讯: 类似发邮件场景不需要马上回复并且可以多线操作(适合高并发场景)但是时效性弱响应…

3D Object Detection for Autonomous Driving: A Comprehensive Survey文献阅读

目录 简言 文献地址: 重要网址(该项目持续更新中) 摘要 1、介绍 2、基础概念 2.1 3D object detection 2.2 Datasets 2.3 Evaluation metrics 2.3.1 评估指标类-1 2.3.2 评估指标类-2 2.3.3 评估指标对比 3、基于Lidar的…

vue实现购物车功能

实现功能 CSS部分 <style>.tr {display: flex;}.th {margin: 10px;width: 20%;height: 50%;}.td {display: flex;margin: 10px;width: 20%;height: 100px;align-items: center;}.app-container .banner-box {border-radius: 20px;overflow: hidden;margin-bottom: 10px;}…

图论(三)之最小生成树(kurskal/Prim)

Minimum Spanning Tree 两大算法&#xff1a;Kruskal 与 Prim 树的含义&#xff1a; 结构中不能形成环 必须连接图结构中的全部顶带&#xff0c;任意两个顶点都是互通的 不同的生成树有不同的权值和&#xff0c;而最小生成树即为最小的那个树 如何构造最小生成树 **目标&…

OB_GINS学习

OB_GINS学习 组合导航中的杆臂测量加速度计的零偏单位转换受到经纬度以及高程影响的正常重力位的计算公式大地坐标系&#xff08;LBH&#xff09;向空间直角坐标系&#xff08;XYZ&#xff09;的转换及其逆转换导航坐标系&#xff08;n系&#xff09;到地心地固坐标系&#xff…

Error while Deploying HAP

第一个程序就遇到这么恶心的bug&#xff0c;也查了很多类似的问题是什么情况&#xff0c;后来无意中菜解决了这个bug&#xff0c;确实也是devicps下面加一个参数&#xff0c;但是找了半天 这是我遇到这个问题的解决办法。其他解决办法如下&#xff1a; https://blog.51cto.com…

STM32中断和外部中断

NVIC&#xff1a;嵌套中断向量控制器&#xff1a;用于统一分配中断优先级和管理中断 响应式优先级&#xff1a;也可以称为插队式优先级哪个优先级高优先处理哪个 抢占式优先级&#xff1a;优先级高的可以优先被处理&#xff0c;相当于CPU可以暂时中断当前处理的程序&#xff0c…

【实验报告】C语言实现猜单词的小游戏

之前帮别人写的一个简单的报告&#xff0c;无偿分享给大家~代码在后面&#xff0c;有一些图片出于懒惰没有上传。比较简单&#xff0c;喜欢的话关注我~&#xff0c;请勿商用~ 1 系统功能模块结构图 该程序主要思路&#xff1a; 头文件设计&#xff0c;存储结构设计&#xff0…

深度学习预备知识(线性代数)

介绍&#xff1a; 深度学习是一种机器学习的方法&#xff0c;涉及到大量的线性代数运算。线性代数是研究向量空间和线性映射的数学学科。在深度学习中&#xff0c;线性代数常用于表示和处理输入数据和模型参数。下面是一些深度学习中常见的线性代数概念和运算&#xff1a; 1. …

Java学习笔记之IDEA的安装与下载以及相关配置

1 IDEA概述 ​IDEA全称IntelliJ IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 集成环境&#xff1a; ​把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试等多种功能综合到一起的开发工具。 2 IDEA…

新IDEA电脑环境设置

1.设置UTF-8 2.Maven 3.JRE选对

three.js 包围盒

效果&#xff1a; 想要显示包围盒的样子&#xff1b;需要借助 Box3Helper 辅助显示&#xff1b; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div></div><…

【大厂AI课学习笔记NO.68】开源和开源发展情况

开源即源代码公开&#xff0c;任何人能获取源代码&#xff0c;查看、修改、分发他们认为合适的代码。 依托同行评审和社区生成&#xff0c;旨在以分散、协作的方式开发。 我们曾经很详细的讨论过开源协议的问题&#xff0c;详细可以参考我的文章&#xff1a; https://giszz.…

块设备驱动(1)-什么是块设备驱动?块设备驱动概念总结

1.块设备驱动概念 块设备驱动是针对存储设备&#xff0c;例如SD卡、EMMC、NAND FLASH、NOR FLSASH。 块设备驱动以块为单位进行访问、最小寻址单位是扇区、一个块中包含多个扇区、支持随机访问、带缓冲区&#xff0c;&#xff0c;当发生写入操作时&#xff0c;并不会立马操作硬…

P1948 [USACO08JAN] Telephone Lines S

Here 典中之典&#xff01;&#xff01; 解题思路 可选k条边代价为0如何决策&#xff1f; 将到当前位置选择了几条代价为0的边放入状态&#xff0c;即若当前状态选的边数小于&#xff0c;则可以进行决策&#xff0c;是否选择当前边&#xff0c;若选&#xff0c;则&#xff0c…

[2024-03-09 19:55:01] [42000][1067] Invalid default value for ‘create_time‘【报错】

这个错误可能是因为你的 MySQL 数据库版本不支持 CURRENT_TIMESTAMP 作为默认值。在一些早期版本中&#xff0c;MySQL 对 TIMESTAMP 类型字段的默认值设置有限制&#xff0c;只允许使用特定的常量值&#xff08;如 0000-00-00 00:00:00 或 CURRENT_TIMESTAMP()&#xff09;。如…

选修-单片机作业第1/2次

第一次作业 第二次作业 1、51 系列单片机片内由哪几个部分组成&#xff1f;各个部件的最主要功能是什么&#xff1f; 51系列单片机的内部主要由以下几个部分组成&#xff0c;每个部件的主要功能如下&#xff1a; 1. **中央处理器&#xff08;CPU&#xff09;**&#xff1a;这是…

Cisco Packet Tracer 模拟器实现一些交换机的基本配置

1. 内容 应用Cisco Packet Tracer 5.3搭建网络 应用Cisco Packet Tracer 5.3配置网络 通过不同的命令实现交换机的基本配置&#xff0c;包括交换机的各种配置模式、交换机的基本配置、交换机的端口配置。 2. 过程 2.1 打开软件 安装模拟器后打开如下&#xff1a; 图1 安装并…