逻辑回归(纯理论)

1.什么是逻辑回归?

逻辑回归是一种常用的统计学习方法,主要用于解决分类问题。尽管名字中包含"回归",但它实际上是一种分类算法

2.为什么机器学习需要使用逻辑回归

1.二元分类

这是逻辑回归最基本和常见的用途。它可以预测某个事件是否会发生,输出结果为是或否

例如:

  • 预测用户是否会点击广告
  • 判断邮件是否为垃圾邮件
  • 诊断患者是否患有某种疾病

这些例子都有一个共同的特征,就是只有两个结果,真(1)和假(0)

2.多类别分类

通过一对多(One-vs-Rest)或softmax等方法,逻辑回归可以扩展到多类别分类问题

例如:

  • 图像识别中的物体分类
  • 文本分类(新闻分类、情感分析等)

这些例子都有一个共同的特征,就是同一种对象有多个可能的结果,类似于咱们常见的单选题,选项有多个,但是最符合答案的选项只有一个

3.概率预测

逻辑回归不仅给出分类结果,还能输出概率值,这在很多场景下非常有用

例如:

  • 预测客户购买某产品的概率
  • 评估贷款申请人的违约风险概率

这些例子都有一个共同的特征,那就是预测,即用已知的结果去推出未知的结果

如果你还没有听懂逻辑回归的作用,没关系,我再给你举个通俗易懂的例子

  想象你是一个医生,需要判断病人是否患有某种疾病。逻辑回归就像一个智能助手,帮你做这个判断。就像医生会看病人的各项体检指标一样,逻辑回归会考虑多个相关因素(我们称之为特征)。有些指标可能比其他指标更重要。逻辑回归会给每个因素分配一个"权重",反映其重要性。最后,它不会简单地说"是"或"否",而是给出一个概率。比如"这个病人患病的可能性是70%"。你可以设定一个标准,比如超过50%就认为是"是",否则就是"否"。逻辑回归通过大量的已知案例来"学习"。就像医生通过大量病例积累经验一样。

当然,逻辑回归的作用远不止于此,限于篇幅(其实是我自己想偷懒),就不多做介绍了

3.OK,接下来我们来引入逻辑回归的公式

我个人不喜欢啰里啰唆的给你一大堆数学公式,然后告诉你底层原理就是这些数学公式,让你自己慢慢去领悟。我希望的是能把几个核心的公式给刨析出来,为什么需要用这几个公式就够了,这是我希望能够在我的文章里讲明白的事情

1.线性回归公式

y = b0 + b1x1 + b2x2 + ... + bn*xn

  • y 是因变量,即我们要预测的值。
  • b0 是截距,表示当所有自变量都为 0 时,因变量的值
  • b1, b2, ..., bn 是回归系数,表示每个自变量对因变量的影响程度
  • x1, x2, ..., xn 是自变量,即用来预测因变量的值

这里举出一个线性回归的样例

代码看不懂没关系,看图就行了

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm

# Generate some simulated house data
np.random.seed(0)
area = np.random.rand(100) * 200 + 50  # House area (square meters)
price = 2 * area + 5000 + np.random.randn(100) * 500  # House price (ten thousand yuan)

# Fit the data using linear regression
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(area.reshape(-1, 1), price)

# Get the regression coefficients
b0 = model.intercept_
b1 = model.coef_[0]

# Plot the scatter plot
plt.scatter(area, price, label="House Data")

# Plot the regression line
plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")

# Set the plot title and axis labels
plt.title("Linear Regression of House Area and Price")

# Set the font to SimSun (楷体)
font_prop = fm.FontProperties(fname=r"C:\Windows\Fonts\simkai.ttf", size=12)  # Replace with your SimSun font path

plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)

# Add legend
plt.legend()

# Show the plot
plt.show()

1.生成100个房屋模拟数据

np.random.seed(0)
area = np.random.rand(100) * 200 + 50
price = 2 * area + 5000 + np.random.randn(100) * 500 

2.使用线性回归拟合数据

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(area.reshape(-1, 1), price)

3.获取回归系数(b0 ~ bn)

b0 = model.intercept_
b1 = model.coef_[0]

4.绘制散点图

plt.scatter(area, price, label="House Data")

5.绘制回归线

plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")

6.设置文章标题

plt.title("Linear Regression of House Area and Price")

7. 设置字体为楷体&&字体大小(如果有的话)

font_prop = fm.FontProperties(fname=r"C:\Windows\Fonts\simkai.ttf", size=12)
plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)

8. 添加图例

plt.legend()

9.展示图表

plt.show()

这段代码使用线性回归来拟合房屋面积和价格之间的关系(用英文描述横纵标题是为了不报错) 

运行结果如下: 

有人可能就会问了:我们搞这么一大堆数据出来干嘛呢?

问得好~

有了这些数据,我们是不是就可以大致算出 y = b0 + b1x1 + b2x2 + ... + bn*xn 的系数了呢?

具体来说:

  • y 代表我们要预测的目标变量,例如房屋价格。
  • x1, x2, ... xn 代表影响目标变量的因素,例如房屋面积、房间数量、地理位置等等。
  • b0, b1, b2, ... bn 代表每个因素对目标变量的影响程度,也就是我们要算出的系数。

通过收集大量数据,我们可以使用线性回归模型来计算出这些系数,并建立一个预测模型。 这个模型可以帮助我们理解不同因素对目标变量的影响,并预测未来目标变量的值(类似于数学里的 y = kx + b,有了具体的k和b,我们就可以通过得到x来预测y,区别就是这里的系数k更多)

2.sigmoid 函数公式

σ(x) = 1 / (1 + exp(-x))

sig函数的图像如下所示:

 问题一:为什么选用sigmoid函数?

我们之前说到过,逻辑回归最基本的用途是为了解决二分类问题的

逻辑回归的目标是将线性模型的输出(可以是任何实数)转化为一个概率值,这个概率值代表着某事件发生的可能性,而概率值自然应该在 0 到 1 之间。

sigmoid 函数就完美地完成了这个任务:它将线性模型的输出压缩到 0 到 1 之间,并且随着输入值的增加,输出值也逐渐增加,这与概率值的变化趋势相吻合

你看sig的函数,趋近于正无穷则无限趋近于1,趋近于负无穷则无限趋近于0,是不是正好符合我们的非0即1的问题呀~

问题二:sigmoid函数如何分类?

那有人又要说了,那你这也不对啊,虽然说两边的可以无限趋近,但是中间的没法弄啊,比如说0.5在0和1的中间,那你说0.5是趋近于0还是趋近于1呢?

虽然说中间的数不能够趋近,但是我可以人为规定啊~

比如我将 >= 0.5 的数归到1的分类里,将 < 0.5的数归到0的分类里,这样问题不就解决了~

所以,0.5 并不是一个临界点,而是我们人为设定用来进行分类的阈值

3.逻辑回归公式

p = σ(b0 + b1*x1 + b2*x2 + ... + bn*xn) = 1 / (1 + exp(-(b0 + b1*x1 + b2*x2 + ... + bn*xn)))

之前我们说了这么多,就是为了引入这个公式

是不是看着就头疼?我看着也头疼,不如我们将它简化一下吧~

你看,这样是不是就清爽多了,就像一个不爱打扮的帅哥,稍微整理了一下自己的容貌,之后你发现,哇塞原来这个人长得这么帅~

咳咳,跑题了~ 所以逻辑回归其实就是 线性回归 + sigmoid函数

sigmoid函数里的 z 就是用线性回归的 y = b0 + b1x1 + b2x2 + ... + bn*xn 去替代

那么这样有什么作用呢?

OK,来让我们看一看~

4.逻辑回归的本质及作用

逻辑回归的本质是预测事件发生的概率。它并不是直接对数据进行分类,而是通过一个函数(Sigmoid 函数)将线性回归的结果映射到 0~1 区间,这个区间内的值代表着事件发生的可能性

逻辑回归的基础是线性回归。线性回归建立一个线性模型,试图用一个线性函数来拟合数据,得到一个预测值。这个预测值可以是任何值,不受 0~1 区间的限制

Sigmoid 函数是一个“魔法”函数,它将线性回归得到的预测值转换到 0~1 区间,并且这个区间内的值可以被解释为事件发生的概率

为了进行二分类,我们需要设置一个阈值,通常是 0.5。如果预测的概率大于阈值,则判定为正类,否则判定为负类

例如这样:

左边函数可以看成 线性回归函数 而右边函数则是映射后的 sigmoid 函数

 本文所有图片来源于【机器学习】逻辑回归十分钟学会,通俗易懂(内含spark求解过程)_哔哩哔哩_bilibili

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

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

相关文章

【备战秋招】——算法题目训练和总结day3

【备战秋招】——算法题目训练和总结day3&#x1f60e; 前言&#x1f64c;BC149简写单词题解思路分析代码分享&#xff1a; dd爱框框题解思路分析代码分享&#xff1a; 除2&#xff01;题解思路分析代码分享&#xff1a; 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff…

多周期路径的约束与设置原则

本节将回顾工具检查建立保持时间的原则&#xff0c;接下来介绍设置多周期后的检查原则。多周期命令是设计约束中常用的一个命令&#xff0c;用来修改默认的建立or保持时间的关系。基本语法如下 默认的建立时间与保持时间的检查方式 DC工具计算默认的建立保持时间关系是基于时钟…

EXSI 实用指南 2024 -编译环境 Mac OS 安装篇(一)

1. 引言 在现代虚拟化技术的快速发展中&#xff0c;VMware ESXi 作为领先的虚拟化平台&#xff0c;凭借其高性能、稳定性和丰富的功能&#xff0c;广泛应用于企业和个人用户。ESXi 能有效地提高硬件资源利用率&#xff0c;并简化 IT 基础设施的管理。然而&#xff0c;如何在 V…

RK3568平台(显示篇)主屏副屏配置

一.主屏副屏配置 目前在RK3568平台上有两路HDMIOUT输出&#xff0c;分别输出到两个屏幕上&#xff0c;一路配置为主屏&#xff0c;一路配置为副屏。 硬件原理图&#xff1a; &hdmi0_in_vp2 {status "okay"; };&hdmi1_in_vp0 {status "okay"; }…

idea修改全局配置、idea中用aliyun的脚手架,解决配置文件中文乱码

idea修改全局配置 idea中用aliyun的脚手架&#xff0c;创建springBoot项目 解决配置文件中文乱码

基于springboot+mybatis学生管理系统

基于springbootmybatis学生管理系统 简介&#xff1a; 题目虽然是学生管理系统&#xff0c;但功能包含(学生&#xff0c;教师&#xff0c;管理员),项目基于springboot2.1.x实现的管理系统。 编译环境 &#xff1a; jdk 1.8 mysql 5.5 tomcat 7 框架 &#xff1a; springboot…

p15 p16 c语言实现三子棋

具体的实现代码 game.c #include "game.h"void InitBoard(char board[ROW][COL], int row, int col) {int i 0;int j 0;for (i 0; i < row; i) {for (j 0; j < col; j) {board[i][j] ;}} }void DisplayBoard(char board[ROW][COL], int row, int col) …

springboot系列九: 接收参数相关注解

文章目录 基本介绍接收参数相关注解应用实例PathVariableRequestHeaderRequestParamCookieValueRequestBodyRequestAttributeSessionAttribute 复杂参数基本介绍应用实例 自定义对象参数-自动封装基本介绍应用实例 基本介绍 1.SpringBoot 接收客户端提交数据 / 参数会使用到相…

二进制二维数组与装箱问题

装箱问题&#xff08;Bin Packing Problem&#xff09;是一类经典的优化问题&#xff0c;其目标是将一系列项目&#xff08;通常具有不同的体积或重量&#xff09;分配到尽量少的箱子中&#xff0c;使得每个箱子的容量不被超出。这种问题在物流、资源分配、内存管理等领域有广泛…

LinkedList----源码分析

源码介绍 public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable{} 添加过程中的操作&#xff1a; 当创建LinkedList类时&#xff0c;会调用其空参构造方法&#xff0c;将其参…

第一关:Linux基础知识

Linux基础知识目录 前言LinuxInternStudio 关卡1. InternStudio开发机介绍2. SSH及端口映射2.1 什么是SSH&#xff1f;2.2 如何使用SSH远程连接开发机&#xff1f;2.2.1 使用密码进行SSH远程连接2.2.2 配置SSH密钥进行SSH远程连接2.2.3 使用VScode进行SSH远程连接 2.3. 端口映射…

6-5,web3浏览器链接区块链(react+区块链实战)

6-5&#xff0c;web3浏览器链接区块链&#xff08;react区块链实战&#xff09; 6-5 web3浏览器链接区块链&#xff08;调用读写合约与metamask联动&#xff09; 6-5 web3浏览器链接区块链&#xff08;调用读写合约与metamask联动&#xff09; 这里就是浏览器端和智能合约的交…

论文阅读【时空+大模型】ST-LLM(MDM2024)

论文阅读【时空大模型】ST-LLM&#xff08;MDM2024&#xff09; 论文链接&#xff1a;Spatial-Temporal Large Language Model for Traffic Prediction 代码仓库&#xff1a;https://github.com/ChenxiLiu-HNU/ST-LLM 发表于MDM2024&#xff08;Mobile Data Management&#xf…

回归损失和分类损失

回归损失和分类损失是机器学习模型训练过程中常用的两类损失函数&#xff0c;分别适用于回归任务和分类任务。 回归损失函数 回归任务的目标是预测一个连续值&#xff0c;因此回归损失函数衡量预测值与真实值之间的差异。常见的回归损失函数有&#xff1a; 均方误差&#xff…

srs直播内网拉流带宽飙升问题记录

问题背景 srs部署在云服务器上&#xff0c;32核cpu&#xff0c;64G内存&#xff0c;带宽300M. 客户端从srs拉流&#xff0c;发现外网客户端拉流&#xff0c;cpu和带宽都正常。然而内网客户端拉流&#xff0c;拉流人数超过5人以上&#xff0c;带宽就会迅速飙升。 排查 用srs…

Pandas数学函数大揭秘:让数据处理变得如此简单高效,轻松玩转数据分析新纪元!

1.导包 # 导包 import numpy as np import pandas as pd2.聚合函数 df pd.DataFrame(datanp.random.randint(0,100,size(5,3))) df01203550281552376231419335895434679917 # 列非空元素的数量 df.count()0 5 1 5 2 5 dtype: int64# 行非空元素的数量 df.count(ax…

小白的OS Copilot 产品测评

背景 通过群友介绍才知OS Copilot 。不想错过任何优秀的AI产品。随着互联网的发展和时代的进步&#xff0c;要紧跟时代&#xff0c;了解市面上的优秀的AI科技产品。 OS Copilot 产品体验评测 1&#xff09;您的角色是什么&#xff1f;开发、运维、学生&#xff1f;如果使用O…

7.11日学习打卡----初学Redis(六)

7.11日学习打卡 目录&#xff1a; 7.11日学习打卡一. redis事务事务的概念与ACID特性Redis事务三大特性Redis事务执行的三个阶段Redis事务基本操作 二. redis集群主从复制主从复制环境搭建主从复制原理剖析 哨兵监控哨兵监控环境搭建哨兵工作原理剖析 故障转移Cluster模式Clust…

MES系统是如何进行工艺管理的

1. MES系统工艺管理 工艺管理是MES制造执行系统中至关重要的功能模块之一&#xff0c;它涉及到产品从设计到生产的整个工艺流程的规划、执行和优化。以下是对MES系统中工艺管理模块的详细介绍&#xff1a; 1.1 工艺流程设计 工艺流程设计是MES系统工艺管理的核心部分&#xf…

PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0

符合条件的 PCI SSC 利益相关者在 30 天的意见征询 (RFC) 期间审查 PCI PTS 硬件安全模块 (HSM) 模块化安全要求 v5.0 草案并提供反馈。 PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0图 从 7 月 8 日到 8 月 8 日&#xff0c;邀请符合条件的 PCI SSC 利益相关者在 30 天的意见…