当前位置: 首页 > news >正文

Logistic Regression——逻辑回归

1. 为什么需要逻辑回归     

        在前面学习的线性回归中,我们的预测值都是任意的连续值,例如预测房价。除此之外,还有一个常见的问题就是分类问题,而逻辑回归是一个解决分类问题的模型,其预测值是离散的

        分类问题又包括二分类问题与多分类问题,对于二分类问题来说,预测值只可能是\否即1\0,

        对于多分类问题来说,预测值可能是多个分类中的一个,例如我输入的是一些动物的图片,我想让模型辨认这些是什么动物,我可以设定预测值1代表模型认为输入是一只猫,预测值2代表模型认为输入是一只狗,预测值3代表模型认为输入是一只猪。

2. 二分类逻辑回归

2.1 从线性回归到分类

        如果有这样一个场景,输入x为肿瘤的大小,而需要预测是否是恶性的。接下来我们仍然使用线性回归模型,但如果我们这增设这样一个阈值

                

        这样一来,所有预测值都将变成1或者0,实现了分类的目的

2.2 逻辑回归模型

        对于线性回归的模型来说,其输出值是任意的,常常会远远大于1或者远远小于0,仅仅上述的阈值可能并不会起到作用或者效果很差。

        对此,逻辑回归会先将所有预测值通过sigmoid 函数映射到[0,1]区间,函数表达式和图像如下图

                                                        (z为输入)

        ​​​​​​​        ​​​​​​​        

        sigmoid 函数是一个非线性函数,当x大于0时,输出值大于0.5,当x<0时输出值小于0.5

        最终我们得到逻辑回归的模型如下

        ​​​​​​​        

           h_{\theta }(x)作用是,对于给定的输入变量,通过参数\theta计算输出变量为1的可能性是多少

        

        假如对于一个输入x,最终计算出h_{\theta }(x)=0.7,则模型认为有70%的可能其为正向类(=1),相反负向类的可能性就为1-0.7=0.3

        最后在分类时,再入加上之前的阈值

        所以逻辑回归就是线性回归再嵌套一个非线性的sigmoid函数,其本质还是回归

2.4 决策边界(Decision Boundary

        假如分类这样一些数据,‘x’为1,圈为0

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        通过建立逻辑回归模型

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        假设经过训练我们得到了这样一组参数,于是得到嵌套在逻辑回归里的线性回归模型\theta^{\top }X=-3+x_{1}+x_{2},根据逻辑回归的原理当-3+x_{1}+x_{2}>=0时预测1,当-3+x_{1}+x_{2}<0时预测0,于是分隔情况就是-3+x_{1}+x_{2}=0,我们可以画出这个直线

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        这条线便是模型的决策边界

        如果是这样的数据

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        建立逻辑回归模型

        得到参数

        

        同样的原理,得到其决策边界,是一个圆心在原点,半径为1的圆

        

        ​​​​​​​        ​​​​​​​        ​​​​​​​                

2.5 损失函数

2.5.1 为什么不用MSE损失函数

       根据上述的理论可以知道,逻辑回归的和线性回归的本质是一样的。那是不是意味着损失函数也可以用MSE。

        在线性回归中损失函数如下

                                                J(\theta )=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta }^{i}-y^{i})^{2}

        我们将​​​​​​​带入可以得到

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​J(\theta )=\frac{1}{2m}\sum_{i=1}^{m}(\frac{1}{1+e^{\theta ^{\top }x}}-y)^{2}

        得到的是一个非凸函数(non-convexfunction),这会很大程度上影响梯度下降法寻找全局最小值,很可能停留在在某个局部极小值

2.5.2 对数损失函数

        介于上述问题,对于二分类逻辑回归来说,使用的是对数损失函数。

对于一个样本来说,预测值会有1和0两种情况,对应两个损失值

     

(log一般以e为底)

        ​​​​​​​        ​​​​​​​        

        当实际y=1时,如果预测值h_{\theta }(x)=1,此时预测是完全正确的,代入上式计算误差为0,如果预测值h_{\theta }(x)不为1,代表模型没有100%的把握认为这是正向类的,此时误差会随着h_{\theta }(x)的减小而变大。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        当实际y=0时,如果预测值h_{\theta }(x)=0,此时预测是完全正确的,代入上式计算误差为0,如果预测值h_{\theta }(x)不为0,代表模型没有100%的把握认为这是负向类的,此时误差会随着h_{\theta }(x)的增大而变大。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        将这两种情况合在一起

        再求和取平均得到最终损失函数表达式

        采用矩阵的形式表达

2.6 梯度下降

 

        矩阵表达式为

        使用梯度下降

        矩阵表达式为

        \theta = \theta -\frac{\alpha }{m}X^{\top }(h-y)

3. 多分类逻辑回归

        多分类逻辑回归的实现依赖于二分类

        将其中一个类标记为正向类,然后将其他类都标记为负向类,得到一个模型h_{\theta }^{1}(x),接着选择另外一个类标记为正向类,然后将其他类都标记为负向类,又得到一个模型h_{\theta }^{2}(x),以此类推,我们可以得到一系列模型,假设有k个类

        h_{\theta }^{i}(x)=p(y=i|x;\theta ),i=(1,2,3,4……k)

        训练好这一系列模型后,对于一个输入x,让其在所有的分类器都得到一个输出,最后选择一个maxh_{\theta }(x)作为最终的输出

4. 逻辑回归的实例

        ex2data1数据集包含100行数据前两列是学生的两种考试的成绩,最后一列是他们被是否录取。需要根据学生的两种考试的成绩来预测他们被是否录取。

1.读取数据集

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata = pd.read_csv('ex2data1.txt',names=['exam1','exam2','admitted'])
data.head()

# 根据admitted的值分类
plt.scatter(positive['exam1'],positive['exam2'],marker='o',label='Admitted')
plt.scatter(negative['exam1'],negative['exam2'],marker='x',label='Not Admitted')
plt.xlabel('Exam1 Score')
plt.ylabel('Exam2 Score')
plt.legend()
plt.show()

2.数据预处理

data.insert(0,'ones',1)
X = data.iloc[:,0:-1].values
y = data.iloc[:,-1].values
y = y.reshape(100,1)

3.定义Sigmoid函数

def sigmoid(z):return 1/(1+np.exp(-z))

4.定义损失函数

def lossFunction(X,y,theta):m = len(X)h = sigmoid(X@theta)return (1/m)*np.sum(-y.T@np.log(h)-(1-y).T@np.log(1-h))

5.模型训练

def train(X,y,alpha,epochs):loss_history = []theta = np.random.rand(3,1)for i in range(epochs):m = len(X)h = sigmoid(X@theta)theta = theta - (alpha/m)*X.T@(h-y)current_loss = lossFunction(X,y,theta)loss_history.append(current_loss) if (i+1) % 100 == 0:print("epochs={},current_loss={}".format(i+1,current_loss))# 绘制损失函数图像plt.plot(range(1,epochs+1),loss_history)plt.xlabel('epochs')plt.ylabel('loss')plt.title('Loss Curve')plt.show()return theta# 参数
alpha = 0.1
epochs = 1000
theta = train(X,y,alpha,epochs)

admitted = X[y.flatten() == 1]
not_admitted = X[y.flatten() == 0]
plt.scatter(admitted[:, 1], admitted[:, 2], label='Admitted', marker='o')
plt.scatter(not_admitted[:, 1], not_admitted[:, 2], label='Not Admitted', marker='x')
plt.xlabel('Exam 1 score')
plt.ylabel('Exam 2 score')# 绘制决策边界
plot_x = np.array([min(X[:, 1]) - 2, max(X[:, 1]) + 2])
plot_y = (-1 / theta[2]) * (theta[1] * plot_x + theta[0])
plt.plot(plot_x, plot_y, label='Decision Boundary')
plt.legend()
plt.show()

 

相关文章:

Logistic Regression——逻辑回归

1. 为什么需要逻辑回归 在前面学习的线性回归中&#xff0c;我们的预测值都是任意的连续值&#xff0c;例如预测房价。除此之外&#xff0c;还有一个常见的问题就是分类问题&#xff0c;而逻辑回归是一个解决分类问题的模型&#xff0c;其预测值是离散的。 分类问题又包括…...

跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)

本文为转载 原文链接&#xff1a; 采用Qt快速绘制多条曲线&#xff08;折线&#xff09;&#xff0c;跟随鼠标动态显示线上点的值&#xff08;基于Qt的开源绘图控件QCustomPlot进行二次开发&#xff09; 内容如下 QCustomPlot是一个开源的基于Qt的第三方绘图库&#xff0c;能…...

Todesk、向日葵等访问“无显示器”主机黑屏问题解决

我的环境是 ubuntu 22.04 安装 要安装 video dummy&#xff0c;请在终端中运行以下命令&#xff1a; sudo apt install xserver-xorg-video-dummy配置 video dummy 的配置文件请自行搜索 使用任何文本编辑器打开此文件。 我的是 /etc/X11/xorg.conf 默认配置文件包含以下内…...

maven打包插件maven-jar-plugin与spring-boot-maven-plugin

maven几种打包插件介绍 文章目录 &#x1f50a;1.spring-boot-maven-plugin打包后效果 &#x1f4d5;2.maven-jar-plugin打包后效果&#x1f58a;️最后总结 &#x1f50a;1.spring-boot-maven-plugin <plugins><plugin><groupId>org.springframework.boot&…...

uniapp微信小程序下载base64图片流或https图片

常规https的图片下载是这样的 const urlPath https://test/logo.png uni.downloadFile({url: urlPath,success(res){// 这时会产生一个临时路径&#xff0c;在应用本次启动期间可以正常使用。if (res.statusCode 200) {// 需要将图片保存到相册uni.saveImageToPhotosAlbum({…...

数据结构 | Log-Structured Merge Tree (LSM Tree)

今天介绍LSM Tree这个数据结构&#xff0c;严格意义上来说&#xff0c;他并不像他的名字一样是一棵树型的数据结构&#xff0c;而更多是一种设计思想。 LSM Tree最先在1996年被提出&#xff0c;后来被广泛运用于现代NoSQL&#xff08;非关系型数据库&#xff09;系统中&#xf…...

QEMU源码全解析 —— virtio(9)

接前一篇文章&#xff1a; 上两回讲解了virtio balloon相关类所涉及的realize函数以及大致流程&#xff0c;如下表所示&#xff1a; realize函数parent_dc_realize函数DeviceClassvirtio_pci_dc_realizePCIDeviceClassvirtio_pci_realizeVirtioPCIClassvirtio_balloon_pci_rea…...

金蝶云星空协同开发环境应用内执行单据类型脚本

文章目录 金蝶云星空协同开发环境应用内执行单据类型脚本业务界面查询单据类型表数据导出数据执行数据库脚本单据类型xml检验是否执行成功检查数据库检查业务数据 金蝶云星空协同开发环境应用内执行单据类型脚本 业务界面 查询单据类型表数据 先使用类型中文在单据类型多语言…...

矩阵理论及其应用邱启荣习题3.5题解

(1) P ( − 1 0 1 − 1 − 1 2 1 1 − 1 ) \begin{pmatrix} -1 & 0&1 \\ -1 & -1&2\\1&1&-1 \end{pmatrix} ​−1−11​0−11​12−1​ ​ A ( 1 0 1 1 1 0 − 1 2 1 ) \begin{pmatrix} 1 & 0&1 \\ 1 & 1&0\\-1&2&1 \end{pmat…...

Java面试题(每天10题)-------连载(49)

目录 Tomcat篇 1、Tomcat的缺省端口是多少&#xff1f;怎么修改&#xff1f; 2、Tomcat有哪几种Connector运行模式&#xff08;优化&#xff09;&#xff1f; 3、Tomcat有几种部署方式&#xff1f; 4、Tomcat容器时如何创建servlet类实例&#xff1f;用到了什么原理&…...

python——数据类型

数据类型目录 前言一、Number(数字)数字类型转换:二、String(字符串)常用字符串运算符:字符串格式化:三、Tuple(元组)常用运算符四、List(列表)嵌套列表:常用列表操作:五、Dictionary(字典)六、Set(集合)...

hive中如何求取中位数?

目录 中位数的概念代码实现准备数据实现 中位数的概念 中位数&#xff08;Median&#xff09;又称中值&#xff0c;统计学中的专有名词&#xff0c;是按顺序排列的一组数据中居于中间位置的数&#xff0c;代表一个样本、种群或概率分布中的一个数值&#xff0c;其可将数值集合…...

在C#中异步编程

在C#中&#xff0c;异步编程是一种编写并发和响应式代码的技术&#xff0c;通过将耗时的操作放在后台线程中执行&#xff0c;以避免阻塞主线程&#xff0c;提高程序的性能和响应性。异步编程使用async和await关键字&#xff0c;结合任务&#xff08;Task&#xff09;和异步操作…...

微服务保护--Feign整合Sentinel

限流是一种预防措施&#xff0c;虽然限流可以尽量避免因高并发而引起的服务故障&#xff0c;但服务还会因为其它原因而故障。而要将这些故障控制在一定范围&#xff0c;避免雪崩&#xff0c;就要靠线程隔离&#xff08;舱壁模式&#xff09;和熔断降级手段了。 线程隔离之前讲到…...

二进制to十六进制

输入小于等于十六位的二进制数据&#xff0c;输出十六进制数据&#xff1b; #include <stdio.h> #include <stdlib.h> #include <math.h>int main(void) {char arr[16] { 0 }; int array[16] { 0 }; int hex[4] { 0 };int i 0; int num 0;scanf("…...

Logistic 回归算法

Logistic 回归 Logistic 回归算法Logistic 回归简述Sigmoid 函数Logistic 回归模型表达式求解参数 $\theta $梯度上升优化算法 Logistic 回归简单实现使用 sklearn 构建 Logistic 回归分类器Logistic 回归算法的优缺点 Logistic 回归算法 Logistic 回归简述 Logistic 回归是一…...

ubuntu安装详细步骤

一&#xff0c;先下载vmware 1&#xff0c;第一步打开上面链接 下载网址 : https://www.vmware.com/products/workstation-pro/wo rkstation-pro-evaluation.html 许可证 JU090-6039P-08409-8J0QH-2YR7F ZF3R0-FHED2-M80TY-8QYGC-NPKYF FC7D0-D1YDL-M8DXZ-CYPZE-P2AY6 ZC3T…...

力扣5. 最长回文子串

动态规划 思路&#xff1a; 假设 dp[i][j] 为字符串 (i, j) 子串是否为回文的结果&#xff1b;那么 dp[i][j] dp[i 1][j - 1] 且 (s[i] s[j])&#xff1b;长度为1的字符串都是回文&#xff1b; 原字符串长度为1&#xff0c;是回文&#xff1b;原字符串子串长度为1&#xff…...

肆[4],函数VectorToHomMat2d/AffineTransPoint2d

函数VectorToHomMat2d C形式 LIntExport void VectorToHomMat2d( const HTuple& Px, const HTuple& Py, const HTuple& Qx, const HTuple& Qy, HTuple* HomMat2D);//参数1:图像坐标X数组 //参数2:图像坐标Y数组 //参数3:世界坐标X数组 //参数4:世界坐标Y…...

下载文件 后端返回给前端 response header 响应头

当浏览器在请求资源时&#xff0c;会通过http返回头中的content-type决定如何显示/处理将要加载的数据&#xff0c;如果这个类型浏览器能够支持阅览&#xff0c;浏览器就会直接展示该资源&#xff0c;比如png、jpeg、video等格式。在某些下载文件的场景中&#xff0c;服务端可能…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...