机器学习---对数几率回归

1. 逻辑回归

逻辑回归(Logistic Regression)的模型是一个非线性模型,

sigmoid函数,又称逻辑回归函数。但是它本质上又是一个线性回归模型,因为除去sigmoid映射函

数关系,其他的步骤,算法都是线性回归的。

可以说,逻辑回归,都是以线性回归为理论支持的。

只不过,线性模型,无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题。

       首先,找一个合适的预测函数,一般表示为h函数,该函数就是需要找的分类函数,它用来预

测输入数据的判断结果。然后,构造一个Cost函数(损失函数),该函数表示预测的输出(h)与

训练数据类别(y)之间的偏差,可以是二者之间的差(h—y)或者是其他的形式。综合考虑所有

训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类

别的偏差。显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要

做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的

是梯度下降法(Gradient Descent )。

2. 二分类问题

二分类问题是指预测的y值只有两个取值(0或1),二分类问题可以扩展到多分类问题。例如:我

们要做一个垃圾邮件过滤系统,x是邮件的特征,预测的y值就是邮件的类别,是垃圾邮件还是正常

邮件。对于类别我们通常称为正类(positive class)和负类(negative class),垃圾邮件的例子

中,正类就是正常邮件,负类就是垃圾邮件。

应用举例:是否垃圾邮件分类?是否肿瘤、癌症诊断?是否金融欺诈?

3. logistic函数

如果忽略二分类问题中y的取值是一个离散的取值(0或1),我们继续使用线性回归来预测y的取

值。这样做会导致y的取值并不为0或1。逻辑回归使用一个函数来归一化y值,使y的取值在区间

(0,1)内,这个函数称为Logistic函数(logistic function),也称为Sigmoid函数(sigmoid

function)。函数公式如下:

Logistic函数当z趋近于无穷大时,g(z)趋近于1;当z趋近于无穷小时,g(z)趋近于0。Logistic

函数的图形如下:

线性回归模型帮助我们用最简单的线性方程实现了对数据的拟合,然而,这只能完成回归任务,无

法完成分类任务,那么 logistics regression 就是在线性回归的基础上添砖加瓦,构建出了一种分类

模型。如果在线性模型的基础上做分类,比如二分类任务,即:y取值{0,1},

最直观的,可以将线性模型的输出值再套上一个函数y = g(z),最简单的就是“单位阶跃函数”

(unit—step function),如下图中红色线段所示。

也就是把看作为一个分割线,大于 z 的判定为类别0,小于 z 的判定为类别1。

但是,这样的分段函数数学性质不太好,它既不连续也不可微。通常在做优化任务时,目标函数最

好是连续可微的。这里就用到了对数几率函数(形状如图中黑色曲线所示)。

它是一种"Sigmoid”函数,Sigmoid函数这个名词是表示形式S形的函数,对数几率函数就是其中最

重要的代表。这个函数相比前面的分段函数,具有非常好的数学性质,其主要优势如下:使用该函

数做分类问题时,不仅可以预测出类别,还能够得到近似概率预测。这点对很多需要利用概率辅助

决策的任务很有用。对数几率函数是任意阶可导函数,它有着很好的数学性质,很多数值优化算法

都可以直接用于求取最优解。

总的来说,模型的完全形式如下:,LR模型就是在拟合

这条直线,使得这条直线尽可能地将原始数据中的两个类别正确的划分开。

对于线性边界的情况,边界形式如下:

构造预测函数为:

h(x)的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分

别为:

正例(y=1)   

负例(y=0)   

4. 损失函数

对于任何机器学习问题,都需要先明确损失函数,LR模型也不例外,在遇到回归问题时,通常我

们会直接想到如下的损失函数形式(平均误差平方损失MSE):

但在LR模型要解决的二分类问题中,损失函数的形式是这样的:

这个损失函数通常称作为对数损失(logloss),这里的对数底为自然对数e,其中真实值 y 是有 0/1 两

种情况,而推测值由于借助对数几率函数,其输出是介于0~1之间连续概率值。仔细查看,不难发

现,当真实值y=0时,第一项为0,当真实值y=1时,第二项为0,所以,这个损失函数其实在每次

计算时永远都只有一项在发挥作用,那这就可以转换为分段函数,分段的形式如下:

5. 优化求解 

现在我们已经确定了模型的损失函数,那么接下来就是根据这个损失函数,不断优化模型参数从而

获得拟合数据的最佳模型。

重新看一下损失函数,其本质上是 L 关于模型中线性方程部分的两个参数 w 和 b 的函数:

 其中,

现在的学习任务转化为数学优化的形式即为:

由于损失函数连续可微,我们可以借助梯度下降法进行优化求解,对于两个核心参数的更新方式如

下: 

求得:

进而求得:

转换为矩阵的计算方式为:

至此, Logistic Regression模型的优化过程介绍完毕。

6. 梯度下降算法

梯度下降法求J(θ)的最小值,θ的更新过程:

要使得最大化,则运用梯度上升法,求出最高点:

# 梯度上升,主要是采用了最大似然的推导
def gradAscent(dataMatIn,classLabels):dataMatrix = mat(dataMatIn)labelMat = mat(classLabels).transpose()m,n = shape(dataMatrix)  # n=3alpha=0.001  # 学习率maxCycles=500  # 循环轮数theta = ones((n,1))for k in range(maxCycles):h=sigmoid(dataMatrix * theta)error = (labelMat - h)theta = theta + alpha * dataMatrix.transpose()*errorreturn theta

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

阿里云预装LAMP应用导致MySQL不显示访问密码如何解决

😀前言 本篇博文是关于阿里云云服务器ECS部署MySQL过程中出现的一下坑,希望能够帮助到您😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家…

SUB-1G SOC芯片DP4306F 32 位 ARM Cortex-M0+内核替代CMT2380F32

DP4306F是一款高性能低功耗的单片集成收发机,集成MO核MCU,工作频率可覆盖200MHiz^ 1000MHz。 支持230/408/433/470/868/915频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以对输出功率、频道选…

gitlab-Runner搭建

root wget https://packages.gitlab.com/runner/gitlab-runner/packages/fedora/29/gitlab-runner-12.6.0-1.x86_64.rpm/download.rpm rpm -ivh download.rpm ---- 安装 rpm -Uvh download.rpm -----更新升级 然后运行: gitlab-runner register --url https://git…

38 | 浦发银行股票分析案例

本文将通过一个浦发银行股票分析案例,探讨如何从多个维度对股票进行分析,包括基本面、技术面和市场环境等因素。我们将深入挖掘浦发银行的财务数据、业务模式以及市场定位,以了解其内在价值和潜在风险。同时,我们还将考察技术面的指标,如价格走势、均线形态等,以揭示市场…

ThinkPHP8命名规范-ThinkPHP8知识详解

本文主要讲解thinkphp8的命名规范,主要包括:遵循PHP自身的PSR-2命名规范和PSR-4自动加载规范、目录和文件命名规范、函数和类、属性命名规范、常量和配置命名规范、数据表和字段命名规范、不能使用PHP保留字。 在使用thinkphp8开发项目之前,…

线程转换状态,傻傻分不清等待和阻塞吗?你还在暴力的停止线程吗?

线程切换 线程创建之后,调用start()方法开始运行。当线程执行wait()方法之后,线程进入等待状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,也就是超…

腾讯云服务器竞价实例是什么?适用于什么行业?有啥优惠?

腾讯云服务器CVM计费模式分为包年包月、按量计费和竞价实例,什么是竞价实例?竞价实例和按量付费相类似,优势是价格更划算,缺点是云服务器实例有被自动释放风险,腾讯云服务器网来详细说下什么是竞价实例?以及…

GUI、多线程编程、网络编程简介

GUI、多线程编程、网络编程简介 文章目录 GUI简介什么是GUIGUI有什么用使用方法 多线程编程什么是多线程编程多线程编程有什么用提高程序的响应能力提高程序的性能实现异步编程并发数据访问和共享资源实现复杂的算法和任务分解 进行多线程编程的步骤 网络编程什么是网络编程网络…

JMeter处理接口签名之BeanShell实现MD5加密

项目A需要给项目B提供一个接口,这个接口加密了,现在需要测试这个接口,需要怎么编写脚本呢?实现接口签名的方式有两种:BeanShell实现MD5加密和函数助手实现MD5加密,之前已经分享过了函数助手实现MD5加密&…

React如何配置env环境变量

React版本: "react": "^18.2.0" 1、在package.json平级目录下创建.env文件 2、在‘.env’文件里配置环境变量 【1】PUBLIC_URL 描述:编译时文件的base-href 官方描述: // We use PUBLIC_URL environment variable …

交换排序——选择排序和冒泡排序的区别是什么?

今天重温一下算法,其实刚开始我觉得冒泡排序和选择排序是一样的,因为他们排序过程中都是通过相邻的数据比较找到最小/最大的数据,通过不断思考和学习才明白,两者还是有区别的。 冒泡排序 概念 冒泡排序(Bubble Sort)&#xff0…

【正版系统】2023热门短剧SAAS版开源 | 小程序+APP+公众号H5

当我们在刷百度、D音、K手等各种新闻或短视频时经常会刷到剧情很有吸引力的短剧广告,我们点击广告链接即可进入短剧小程序,小程序运营者通过先免费看几集为诱耳然后在情节高潮时弹出充值或开VIP会员才能继续看的模式来赚钱,以超级赘婿、乡村小…

VS Code中C++程序的调试(Debug)功能

有一个.vscode文件,存放当前工作区相关配置文件的目录。 launch.json {"version": "0.2.0","configurations": [{"name": "gcc.exe - 生成和调试活动文件", // 该调试任务的名字,启动调试时会在待…

TCP/IP 下的计算机网络江湖

〇、引言 在当今数字化时代,计算机网络宛如广袤江湖,涵盖着五大门派:物理层、数据链路层、网络层、传输层和应用层。每个门派独具技能,共同构筑着现代网络的框架。物理层宛如江湖基石,将比特流传输;数据链路层如武林传承,组织数据帧传递;网络层则像导航大师,寻找传送路…

【Linux操作系统】文件描述符fd

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️林 子       🛰️博客专栏:✈️ Linux之路       🛰️社区 :✈️ 进步学堂       &#x1…

python单元测试框架(测试固件、批量执行)

python测试框架 在Python语言中应用最广泛的单元测试框架是unittest和pytest,unittest属于标准库,只要安装了Python解释器后就可以直接导入使用了,pytest是第三方的库,需要单独的安装。 1.白盒测试原理 在软件架构的层面来说,测试最核心的…

Kotlin入门:变量和函数——02

目录 一、Kotlin 基本数据类型 ​编辑 二、变量 val 关键字: var 关键字: 类型推断: 可空类型: 三、函数 基本函数语法: 单表达式函数: 默认参数值: 命名参数: 一、Kotlin 基本数据类型 Kotlin 的基本数…

关于selenium 元素定位的浅度解析

一、By类单一属性定位 元素名称 描述 Webdriver API id id属性 driver.find_element(By.ID, "id属性值") name name属性 driver.find_element(By.NAME, "name属性值") class_name class属性 driver.find_element(By.CLASS_NAME, "class_na…

MAUI+Blazor:隐藏标题栏和问题

文章目录 前言相关文章代码问题有必要解决吗? 前言 最近在研究MAUIBlazor开发,发现一个问题,原生的的标题栏实在是太丑了。 相关文章 MAUI桌面端标题栏设置和窗口调整 MAUI Windows How to completely hide the TitleBar? #15142 MAUI …

Chrome开发者工具介绍

Chrome开发者工具介绍 前言1 打开DevTools2 命令菜单3 Elements面板ConsoleJavaScript调试Network 前言 Chrome开发者工具是谷歌浏览器自带的一款开发者工具,它可以给开发者带来很大的便利。常用的开发者工具面板主要包含Elements面板、Console面板、Sources面板、…