Matlab——逻辑回归(原理、代码)

news2024/11/27 4:03:11

对于一个机器学习方法,通常由模型、策略和算法3个要素构成。

  • 模型是假设空间的形式,如是线性函数还是条件概率;
  • 策略是判断模型好坏的数学表达式,将学习问题转化为优化问题,一般策略对应一个代价函数(Cost Function);
  • 算法是上述优化问题的求解方法,有多种方法,如梯度下降法、直接求导、遗传算法等。

目录

1 逻辑回归原理

2 Sigmoid函数 

3 逻辑回归理论公式推导 

4 逻辑回归算法的改进——正则化 

5 Matlab实践


1 逻辑回归原理

逻辑回归是一种广义的线性模型。虽然被称为回归,但在实际应用中常被用作分类,用于估计某个事件发生的概率。例如某用户购买商品的可能性,某病人患有某种疾病的可能性,某广告被用户点击的可能性等。

  • 首先基于线性模型。若为了解决分类问题,需要把线性模型的输出做一个变换,利用Sigmoid函数,将实数域的输出映射到(0,1)区间,为输出提供了很好的概率解释。
  • 其次策略方面,采用了交叉熵损失函数;
  • 第三算法方面,为了最小化损失函数,采用了梯度下降方法。

2 Sigmoid函数 

3 逻辑回归理论公式推导 

——模型 

其中p(y|x;w)是0-1分布(伯努利分布)。 

——策略(定义损失函数)

求解w,定义一个指标衡量w的表现,即代价函数,利用最大似然法。

了衡量算法在全部训练样本上的表现如何,我们需要定义一个算法的代价函数,算法的代价函数是对𝑚个样本的损失函数求和然后除以𝑚(一般文献中)

——算法(梯度下降法)

α为迭代步长,h(x^{(i)})为假设集在第 i 个样本处的取值,y^{(i)}为真实的标签值。

4 逻辑回归算法的改进——正则化 

正则化,减少模型复杂度的一个方法。一般通过在目标函数上增加一个惩罚项。 

这里是岭回归(Ridge Regression),对L_2范数w^Tw求导,得到梯度变化为:

\frac{\partial \phi (w)}{\partial w_j}=2w_j

一般通过\lambda /2m把系数消掉。

也将L2正则称为权重衰减。

5 Matlab实践

建模车辆里程数测试中出现问题的比例和车重量之间的关系。观测值包括车重、车的数量和损失的数量。

假设车辆损失数应该服从二项分布,最简单的想法是P(概率)和重量呈线性关系。

%% 原始数据
%一系列不同重量的车
weight = [2100 2300 2500 2700 2900 3100 3300 3500 3700 3900 4100 4300]';
%各个重量类型的车的数目
tested = [48 42 31 34 31 21 23 23 21 16 17 21]';
%每个重量的车辆在测试中fail掉的数目
failed = [1 2 0 3 8 8 14 17 19 15 17 21]';
%故障率
proportion = failed ./ tested;
figure(1)
plot(weight,proportion,'s')
xlabel('重量');ylabel('比例');
散点数据
%% 线性拟合
%ployfit(x,y,n)执行多项式拟合,n代表多项式阶数,当n=1时,表示线性关系,返回多项式系数
linearCoef = polyfit(weight,proportion,1)
%value = ployval(p,x)返回多项式的值,p是多项式系数,降序排列
linearFit = polyval(linearCoef,weight);
figure(2)
line2 = plot(weight,proportion,'s',weight,linearFit,'r-',[2000 4500],[0 0],'k:',[2000 4500],[1,1],'k:');
xlabel('重量');ylabel('比例');
set(gcf,'Position',[100 100 350 280]);
set(gca,'FontSize',9);
set(line2,'LineWidth',1.5)
线性拟合

使用上述模型线性拟合,存在两个问题:

  • 线性拟合会出现比例小于0或大于1的情况,而概率只能是[0,1]区间的数;
  • 比例值不是正态分布的,违背了线性回归模型的假设条件。

下面使用高阶多项式看是否解决这些问题。

%% 多项式拟合
%区别在于这里选用3阶多项式,返回的stats是一个结构体,作为polyval函数的输入
%可用于误差估计,ctr包含了均值和方差,可用于对输入x归一化
[cubicCoef,stats,ctr] = polyfit(weight,proportion,3)
cubicFit = polyval(cubicCoef,weight,[ ],ctr); %利用归一化的weight进行多项式拟合
figure(3)
line = plot(weight,proportion,'s',weight,cubicFit,'r-',[2000 4500],[0 0],'k:',[2000 4500],[1,1],'k:');
xlabel('重量');ylabel('比例');
set(gcf,'Position',[100 100 350 280]);
set(gca,'FontSize',9);
set(line,'LineWidth',1.5)
多项式拟合

此模型仍存在问题。

  • 当车辆重量超过4000时,比例开始下降,当重量继续增加时,比例可能下降到0以下。
  • 正态分布的假设依然不合理。

利用glmfit拟合一个Logistic回归模型,其优于线性回归模型的两点:

  • Logistic回归中的Sigmoid函数将输出值限制在[0,1]之间,符合此例问题情况;
  • Logistic回归采用的拟合方法适用于二项分布。 
%% glmfit拟合
% 在glmfit中一般response是一个列向量,但是当分布是二项分布时,y可以是一个二值向量,
% 表示单次观测中成功还是失败,也可以是一个两列的矩阵,第一列表示成功的次数(目标出现的次数),
% 第二列表示总共的观测次数,因此这里y=[failed,tested]
% 另外指定distri='binomal',link='logit'
[logitCoef1,dev1] = glmfit(weight,[failed tested],'binomial','logit');
% glmval用于测试拟合的模型,计算出估计的y值
logitFit = glmval(logitCoef1,weight,'logit');
figure(4)
line3 = plot(weight,proportion,'bs',weight,logitFit,'r-');
xlabel('重量');ylabel('比例');
set(gcf,'Position',[100 100 350 280]);
set(gca,'FontSize',9);
set(line3,'LineWidth',1.5)
legend('数据','logistics回归')
Logistics回归

上述主要利用广义线性模型实现Logistic回归。

当重量太小或太大时,故障率要么无限接近0,要么无限接近1,且曲线很好地刻画了数据点的分布,故而为一个合理的模型。

下面进行预测。 

%% 预测
[logitCoef,dev,stats] = glmfit(weight,[failed tested],'binomial','logit');
normplot(stats.residp);
weightPred = 2500:500:4000;
% dlo和dhi是置信区间的下限和上限
[failedPred,dlo,dhi] = glmval(logitCoef,weightPred,'logit',stats,0.95,100);
figure(5)
line = errorbar(weightPred,failedPred,dlo,dhi,'r:');
预测误差图

当车的重量为3000时,测试中出现故障的车辆数约为30.2辆,

有95%的概率会有(30.2-7.3,30.2+8.4)辆车出现故障。


Python参考:

机器学习练习2-逻辑回归_YukinoPon的博客-CSDN博客

https://www.cnblogs.com/Qiao-Q/p/16837426.html

sklearn-逻辑回归_sklearn逻辑回归_CHEN的小喵的博客-CSDN博客

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

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

相关文章

SQL优化(2):主键优化

在上一小节,我们提到,主键顺序插入的性能是要高于乱序插入的。 这一小节,就来介绍一下具体的 原因,然后再分析一下主键又该如何设计。 1 数据组织方式 在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的&#xf…

数据结构——求二叉树的属性

数据结构——求二叉树的属性 一、对称性101. 对称二叉树1.递归2.迭代3.同类题: 二、深度104. 二叉树的最大深度1.递归1)后序1)前序 2.迭代(层序) 559. N 叉树的最大深度1.递归(深度优先)2.迭代&…

MATLAB实现OCR识别数字和字符

OCR也叫做光学字符识别,是计算机视觉研究领域的分支之一。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。 MATLAB实现OCR识别数字和字符,涉及灰度转换、中值滤波、二值化处…

【教学类-34-05】拼图(彩色图片+凹凸拼)3*4格子(中班主题《个别化拼图》偏美术)

图片展示: 背景需求: 最近班级孩子得了传染病,来了2位孩子。 我觉得:人少的话,孩子们就有充足的时间去拼那些带有凹凸槽的自制彩色图形拼图。 难点: 1、从直线剪切(方形拼图)转…

[JAVA编] 一编让你搞定多态

目录 1. 多态概念 2. 多态的体现和实现条件 3. 重写 4. 引用类型转换 4.1向上转型 4.2向下转型 5. 多态的好处 1.多态的概念 什么是多态? 多态是继封装, 继承之后, 面向对象的三大特性 在生活中,比如跑的动作,猫,狗和大象,跑起来都不一样.再比如飞…

【cmd命令】MySQL服务器无法启动

winR 输入services.msc 我发现我电脑上有两个mysql名,上面一个(MySQL)处于停止运行状态 下面一个(MySQL)处于运行状态 如果要使用上面一个的服务器,就要把下面一个的服务器关闭,然后启动上面的服务器…

elastic-job 搭建——应用于企业级项目

1. 📂 技术方案 方案介绍 ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业…

你知道渲染农场是什么原理吗?它是如何工作的?

我们知道,仅靠一台计算机几乎是不能达到专业渲染集群的处理能力的。所以现在, 允许将很多台计算机或是处理器进行连接,再将连接后的机器作为一个总平台来处理不同的渲染需求,这样的设置,就被称之为渲染农场。 渲染农…

年轻人“赶烤”淄博,文旅业如何借势?

​(图片来源于网络,侵删) 文 | 螳螂观察 作者 | 易不二 从“更适合中国宝宝体质的TACO”在社交媒体爆火,到全国人民为之“赶烤”,淄博凭借独树一帜的烧烤文化,已经站上了文旅业回暖的潮头。 今年五一假期…

FPGA目前就业形势咋样?来听听业内工程师的看法

看到网上有一个问题很火:2023了,FPGA目前就业形势咋样?很多同学也对这个方向比较感兴趣,下面就来一起了解一下吧。 FPGA岗位有哪些? 从芯片设计流程来看,FPGA岗位可以分四类 产品开发期:FPGA系统架构师 …

基于FFmpeg倒放功能的实现-----命令行和API调用实现方法

来源:微信公众号「编程学习基地」 文章目录 FFmpeg API调用reverse滤镜实现视频倒放ffmpeg命令行实现方法FFmpeg 过滤器 调用API实现方法完整代码贴上运行FFmpeg API调用reverse滤镜实现视频倒放 ffmpeg命令行实现方法 ffmpeg -i bigbuckbunny_480x272.h265 -filter_comple…

vue页面内嵌iframe使用postMessage进行数据交互(postMessage跨域通信)

什么是postMessage postMessage是html5引入的API,它允许来自不同源的脚本采用异步方式进行有效的通信,可以实现跨文本文档,多窗口,跨域消息传递.多用于窗口间数据通信,这也使它成为跨域通信的一种有效的解决方案. vue父页面(嵌入iframe的页面) 在vue中…

【文心一言】文心一言最近这么火,它到底是什么

前言 文心一言(英文名:ERNIE Bot)是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。文心一…

网工容易混淆的三种网线类型:直连线、交叉线和反转线

网线是计算机网络中最常见的传输介质之一,它能够将数据快速而可靠地传输到各个网络设备中。在实际的网络应用中,我们常常需要使用到不同类型的网线,包括直连线、交叉线和反转线。本文将介绍这三种网线的定义、应用场景和注意事项。 直连线 …

Tailwind CSS入门(二)——基本介绍和特性

上一篇文章简要的介绍了原子类CSS,以及个人对语义化、原子化的一些经验和理解。从这篇文章开始,正式开始分享Tailwind CSS的特性、使用和技巧。 Tailwind CSS是一个为快速开发而精心设计的原子类CSS框架,在此我们将搭建一个Vite项目来配合讲…

力扣---LeetCode21. 合并两个有序链表(链表经典题)

文章目录 前言21. 合并两个有序链表链接:方法一:取小尾插1.1代码:1.2 流程图:1.3 注意: 方法二:带哨兵位2.1代码:2.2流程图: 总结 前言 焦虑不会消除明天的悲伤 只会让你今天的力量…

springboot概述

脚手架: 因为创建的为web项目,有这两个文件夹 在idea中也可以使用脚手架 会直接或间接包含依赖 启动类 单一模块: 启动类要放在根包下边,其他的业务放在根包或者根包的子包 多个模块: restController包含controller且每个方法都包含responseBody注解&…

这可能是你看过最详细的Java集合篇【二】—— LinkedList

文章目录 LinkedList继承关系数据结构变量构造方法添加元素相关方法查找元素相关方法删除元素相关方法清空方法遍历方法其它方法常见面试题 LinkedList LinkedList底层数据结构是双向链表。链表数据结构的特点是每个元素分配的空间不必连续、插入和删除元素时速度非常快、但访…

10年+工作经验总结:测试工程师职业成长路线图

一、功能测试工程师必备技能 1. 功能测试理论 主要包括: 软件测试流程 需求理解 测试用例设计(编写测试用例的策略) 执行测试用例 提交bug(bug是由什么组成,bug处理流程,bug优先级,bug的定位等) 回归…

基于Vue的web设计打印方案

企业信息化例如ERP,OA等等都会存在纸质单据打印的情况,需要在企业内部流转,打印设计也有很多方案,例如fastReport,bartender等等,今天要说的是 vue-plugin-hiprint,开源的web打印插件,基于此插件可以集成模…