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

news/2024/5/25 9:11:06/文章来源:https://blog.csdn.net/wuyoudeyuer/article/details/136434228

逻辑回归核心点-上

  • 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.luyixian.cn/news_show_1006365.aspx

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

相关文章

Java高级编程—泛型

文章目录 1.为什么要有泛型 (Generic)1.1 泛型的概念1.2 使用泛型后的好处 2.在集合中使用泛型3.自定义泛型结构3.1 自定义泛型类、泛型接口3.2 自定义泛型方法 4.泛型在继承上的体现5.通配符的使用5.1 基本使用5.2 有限制的通配符的使用 1.为什么要有泛型 (Generic) Java中的…

uniapp h5 部署

uniapp 配置 服务器文件路径 打包文件结构 //nginx 配置 server {listen 8300;server_name bfqcwebsiteapp;charset utf-8;#允许跨域请求的域,* 代表所有add_header Access-Control-Allow-Origin *;#允许带上cookie请求add_header Access-Control-Allow-C…

【Pytorch】进阶学习:深入解析 sklearn.metrics 中的 classification_report 函数---分类性能评估的利器

【Pytorch】进阶学习:深入解析 sklearn.metrics 中的 classification_report 函数—分类性能评估的利器 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合…

Covalent Network (CQT) 通过统一 API 集成,为 Gnosis Chain 的 AI 潜力赋能

作为一个为超 225 个链提供服务的领先多链索引器,Covalent Network (CQT) 正在与知名的 EVM 区块链基础设施提供者 Gnosis Chain 展开一项激动人心的合作。这一战略合作象征着先进的实时数据索引技术的集成,包括 Covalent Network (CQT) 的统一 API 和 G…

前端项目,个人笔记(一)【定制化主题 + 路由设计】

目录 1、项目准备 1.1、项目初始化 1.2、elementPlus按需引入 注:使用cnpm安装elementplus及两个插件,会报错:vueelement-plus报错TypeError: Cannot read properties of null (reading isCE ) ,修改: 测试&#…

一站式解决方案:uni-app条件编译及多环境配置,appid动态修改攻略!

前言 这篇文章主要介绍uniapp在Hbuilderx 中,通过工程化,区分不同环境、动态修改小程序appid以及自定义条件编译,解决代码发布和运行时手动切换到问题。 背景 在企业级的应用中,通常会分为,开发、联调、生产等多个环…

基于CNN的图像超分辨率

单图像超分辨率 (Single image super resolution,SR) 是计算机视觉中的一个经典问题, 其目的是从单个低分辨率图像中恢复高分辨率图像。这个问题本质上是不适定的,因为对于任何给定的低分辨率像素都存在解决方案的多重性。换句话说&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件,用于根据指定日期范围创建日期滑动选择器。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

Github 2024-03-13 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目2Python项目2非开发语言项目2HTML项目1CSS项目1Dart项目1TypeScript项目1Go项目1JavaScript项目1《Hello 算法》:动画图解、一键运行的…

利用“定时执行专家”软件的25种任务与12种触发器,提升IT系统管理自动化水平

在IT系统管理中,自动化是提高工作效率、减少人为错误的关键。而《定时执行专家》这款软件,以其强大的功能、易用性和毫秒级的执行精度,成为了IT系统管理员的得力助手。今天,我们就来探讨一下如何利用这款软件的25种任务类型和12种…

Node.js入门基础—day01

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:给自己一个梦想,给世界一个惊喜。 🎅**学习目标: 坚持每一次的学习打卡 文章目录 初识node.js什…

vivo统一接入网关VUA转发性能优化实践

作者:vivo 互联网服务器团队 - Qiu Xiangcun 本文将探讨如何通过使用Intel QuickAssist Technology(QAT)来优化VUA的HTTPS转发性能。我们将介绍如何使用QAT通过硬件加速来提高HTTPS转发的性能,并探讨QAT在不同应用场景中的表现。最…

Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

目录 JavaEE-HTTP-Servlet&路由&周期 JavaEE-数据库-JDBC&Mybatis&库 思维导图 Java知识点: 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等. 框架…

数据结构与算法——排序(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

探索Java高并发编程之道:理论与实践

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 简介 随着互联网和信息技术的快速发展&#x…

使用Nginx进行负载均衡

什么是负载均衡 Nginx是一个高性能的开源反向代理服务器,也可以用作负载均衡器。通过Nginx的负载均衡功能,可以将流量分发到多台后端服务器上,实现负载均衡,提高系统的性能、可用性和稳定性。 如下图所示: Nginx负…

【JavaScript 漫游】【036】CORS 通信总结

文章简介 CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨域的服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。 本篇文章为【JavaScript 漫…

拼图小游戏制作教程:用HTML5和JavaScript打造经典游戏

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

mysql中的非空间数据导入sqlserver中空间化

以下操作都在Navicat Premium 15软件中操作 1、mysql导出数据 以导出csv为例 不修改导出路径的话默认就是在桌面 设置编码UTF-8 这边还是默认,最好不要修改,如果文本识别符号为空,导入的时候可能字段会错乱 开始即可 2、导入sqlserver数据库中

通过Maven创建Web工程

通过Maven创建Web工程 方式一方式二 方式一 1.先创建一个Maven工程 2.把该Maven模块的pom文件里添加一个war 3.选中该Maven模块 点击项目架构 4.手动添加一个Web架构 方式二 1.也是new一个模块 但是直接配置好Web 2.这里就是我IDEA对Maven的设置 3.第一次创建 可能…