matlab实现Logistic回归

news2024/11/15 11:05:22

一、目的和要求

1.编程实现Logistic Regression并应用于数据集;

2.绘制二元分类函数、sigmoid函数和代价函数;

3.正则化logistic回归代价。

二、算法介绍

步骤:

选择一个合适的分类函数来实现分类(Sigmoid函数)

通过损失函数(Cost函数)来表示预测值(h(x))与实际值(y)的偏差(h−y),要使得回归最佳拟合,那么偏差要尽可能小(偏差求和或取均值)。

记J(θ)J表示回归系数为θ时的偏差,那么求最佳回归参数θ就转换成了求J(θ)的最小值。

Sigmoid函数:

代价函数:

正则化logistic 回归

fminunc函数:Matlab内置最小值优化函数,可以代替梯度下降法求解最优θ值。

三、过程记录

(1)对数几率回归

1.数据可视化

分析数据集可知数据集的三列数据分别为第一次成绩,第二次成绩以及是否录取(1表示录取,0表示未录取)。读入数据集后可以将两次成绩分别作为横纵坐标,在通过判断是否录取绘制不同形状的散点。

结果如下:

图1 数据集分布散点图

2.获得成本和梯度

计算成本函数和梯度时需要用到sigmoid函数,为了方便,通过公式提前编写sigmoid函数:g = 1./ ( 1 + exp(-z) ) ;参数z可以是矩阵

接下来需要计算成本和梯度,利用sigmoid函数通过如下公式实现:

其中theta初始为0矩阵

结果如下:

图2 代价和梯度初始值

3.寻找最佳theta参数

通过内置函数fminunc实现,首先设置好相应参数,然后再给函数传入初始theta参数以及成本和梯度函数,如下:

经过迭代后寻找的最后结果如图所示:

图3 优化后的代价以及theta值

通过theta值可以绘制出决策边界,我的做法如下:

绘制的结果如下:

图4 决策边界

此时利用数据集绘制sigmoid函数图像结果如下:

图5 sigmoid函数图像

由于数据集中数据分布不规则所以导致绘制的图像较为混乱,如果设定一个规则的数据集:z=[ones(m,1) [1:100]' [1:100]'];以此来绘制sigmoid图像结果如下:

图6 修改后的sigmoid图像

此时可以清晰的看出sigmoid函数的变换趋势

4.预测并计算训练集精确度

预测两次成绩分别为45 85的学生被录取的概率,通过sigmoid函数可以求出。而预测是否录取则可以通过判断概率是否大于0.5,大于0.5的判断为录取否则为未录取。将训练集样本进行预测并通过比对可以得到精确度。结果如下:

图7 预测概率及精确度

(2)正则化logistic回归

1.数据可视化

绘制数据集2的散点图:

图8 数据分布散点图

从散点图中可以看出此时无法再像第一个实验那样通过直线来分割两类数据了

2.特征映射

为了更好的拟合数据,需要为每个数据点创建更多的特征,实现如下

经过转换后原来的两个特征向量变成了28维向量

3.计算代价函数和梯度

将theta初始为0矩阵,lambda设为1,正则化成本函数和梯度公式如下,其中theta索引为1的参数即θ0不用正则化。

此时结果为

图9 初始代价和梯度值

4.寻找最佳theta值

依然通过fminunc函数进行运算,结果如下

图10 优化后的代价及theta值

5.绘制决策曲线

由于本例无法通过直线来进行划分,可以采用matlab内置contour函数以等高线的方式绘制出边界,代码如下:

最终边界线:

图11 决策边界曲线

可以看出曲线已经基本上将两类样本分开了。

6分类精度

同样通过sigmoid函数寻找值大于等于0.5的判别为1类,否则为0,所得最终训练集精度为

7.探究lambda值的影响

在正则化公式中可以看出lambda值将会对结果造成影响,而上述实验中lambda为1时有清晰的决策边界。接下来尝试改变lambda的值进一步探究

图12 lambda=20

图13 lambda=100

将lambda增大到20或者100后决策线已经不能作为两类的边界了

图14 lambda=0.01

图15 lambda=0.0001

图16 lambda=0

将lambda缩小一定程度如0.01,图像基本没有变换,但是如果继续缩小至0.0001则过度拟合了

四、结果分析

    通过上述实验,我们可以知道在简单的二元分类问题中,我们可以用sigmoid函数作为预测的标准,对数几率回归主要可以用于比较简单的线性判别边界如直线,而对于复杂的判别边界则需要使用正则化logistic回归,将数据升维,从而可以绘制出更复杂的非线性边界,但同时也可能出现欠拟合或过度拟合的问题,正则化参数在这之间起很大的作用,随着lambda的增大拟合程度不断变差,决策边界也不会很好地跟随数据,从而导致数据拟合不足,此时在拟合中theta就会更小,而带来的结果是拟合程度越来越差,正则化约束力过强,当lambda无限大时就完全欠拟合。但是随着L过度减小我们也发现,拟合程度越来越高,lambda的影响降低,正则化约束力不够,带来的结果就是出现过拟合。综上正则化可以防止训练模型的过拟合,从而得到更好的结果。

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

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

相关文章

OpenHarmony开发之图形UI组件解析

简介 图形UI组件实现了一套系统级的图形引擎。 该组件为应用开发提供UIKit接口,包括了动画、布局、图形转换、事件处理,以及丰富的UI组件。 组件内部直接调用HAL接口,或者使用WMS(Window Manager Service)提供的客户端与硬件交互&#xff…

[flask] flask的基本介绍、flask快速搭建项目并运行

笔记 Flask Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、…

哪些企业适合构建企业新媒体矩阵?

⭐关注矩阵通服务号,探索企业新媒体矩阵搭建与营销策略 新媒体矩阵就是在某个平台或多个平台开设、联动多个账号,组建有关系的不同账号集群。 在数字化转型的浪潮下,矩阵已然成为企业实现品牌塑造、市场开拓与用户互动的重要阵地。 然而&…

算法沉淀——贪心算法六(leetcode真题剖析)

算法沉淀——贪心算法六 01.坏了的计算器02.合并区间03.无重叠区间04.用最少数量的箭引爆气球 01.坏了的计算器 题目链接:https://leetcode.cn/problems/broken-calculator/ 在显示着数字 startValue 的坏计算器上,我们可以执行以下两种操作&#xff1…

FPGA 实现CRC-8/ROHC(已验证)

1 FPGA crc代码在线生成工具 工具1 // vim: ts=4 sw=4 expandtab// THIS IS GENERATED VERILOG CODE. // https://bues.ch/h/crcgen // // This code is Public Domain. // Permission to use, copy, modify, and/or distribute this software for any // purpose with or wi…

C# 读取二维数组集合输出到Word预设表格

目录 应用场景 设计约定 范例运行环境 配置Office DCOM 实现代码 组件库引入 核心代码 DataSet转二维数组 导出写入WORD表格 调用举例 小结 应用场景 存储或导出个人WORD版简历是招聘应用系统中的常用功能,我们通常会通过应用系统采集用户的个人简历信息…

网络通信——IP地址、端口号、协议(TCP、UDP)

通信架构 网络通信三要素 IP地址 IPv4地址 IPv6地址 IP域名 IP常识 端口号 概念 协议 开放式网络互联标准:OSI、TCP/IP 传输层的2个通信协议——UDP、TCP TCP协议:三次握手建立建立可靠连接 进行三次握手的原因:为了确保客户端和服务端…

jsp学习

1.新建文件&#xff0c;创建web动态项目 2.项目点击next两下&#xff0c;点击勾选gentear&#xff0c;点击finish 3.文件成功后是有jsp文件 4.在webapp新建jsp文件 5. 使用模板html5建立文件 <% page language"java" contentType"text/html; charsetUTF-8&qu…

【Flutter学习笔记】10.2 组合现有组件

参考资料&#xff1a; 《Flutter实战第二版》 10.2 组合现有组件 在Flutter中页面UI通常都是由一些低级别组件组合而成&#xff0c;当我们需要封装一些通用组件时&#xff0c;应该首先考虑是否可以通过组合其他组件来实现&#xff0c;如果可以&#xff0c;则应优先使用组合&…

Redis中的过期键删除策略

过期键删除策略 概述 数据库键的过期时间都保存在过期字典中&#xff0c;并且知道根据过期时间去判断一个键是否过期,剩下的问题是&#xff1a;如果一个键过期了&#xff0c;那么它什么时候会被删除呢? 这个问题有三种可能的答案&#xff0c;它们分别代表了三种不同的删除策…

阿里云国际该如何设置DDoS高防防护策略?

DDoS高防提供针对网络四层DDoS攻击的防护策略设置功能&#xff0c;例如虚假源和空连接检测、源限速、目的限速&#xff0c;适用于优化调整非网站业务的DDoS防护策略。在DDoS高防实例下添加端口转发规则&#xff0c;接入非网站业务后&#xff0c;您可以单独设置某个端口的DDoS防…

专题三 - 二分 - leetcode 704. 二分查找 | 简单难度

leetcode 704. 二分查找 leetcode 704. 二分查找 | 简单难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 704. 二分查找 | 简单难度 1. 题目详情 给定一个 n 个元素有序的&#xff08;升序&#x…

3.3网安学习第三阶段第三周回顾(个人学习记录使用)

本周重点 ①渗透测试介绍 ②sqlmap注入扫描工具 ③XSS脚本注入 本周主要内容 ①渗透测试介绍 一、渗透测试 通过模拟黑客对系统进行攻击的手段或技术&#xff0c;在被测系统中发现漏洞的行为。除了提供漏洞之外&#xff0c;还需提供安全意见。 与黑站不同&#xff0c;渗…

仿牛客项目Day10——统一异常处理、记录日志

统一异常处理 在controller里创建advice包&#xff0c;创建ExceptionAdvice类 这个注解括号里面是指只扫描被Controller标注的bean 请求request、响应response、异常exception 普通请求和异步请求的区别在于传的是json还是html吗&#xff1f; 统一记录日志 面向切面编程&…

2024/03/21(网络编程·day7)

一、思维导图 二、 //定义删除函数 int do_delete(sqlite3 *ppDb) {int del_numb0;printf("请输入要删除的学生的学号:");scanf("%d",&del_numb);getchar();//准备sql语句char sql[128]"select *from Stu";sprintf(sql,"delete from …

RocketMQ 流存储解析:面向流场景的关键特性与典型案例

作者&#xff1a;林清山&#xff08;隆基&#xff09; 前言&#xff1a; 从初代开源消息队列崛起&#xff0c;到 PC 互联网、移动互联网爆发式发展&#xff0c;再到如今 IoT、云计算、云原生引领了新的技术趋势&#xff0c;消息中间件的发展已经走过了 30 多个年头。 目前&…

蓝桥杯-模拟-纸张尺寸

题目 思路 代码 qlist(str(input())) numint(q[1]) x,y1189,841 while num:num-1x//2if x<y:x,yy,x print(x) print(y)

关于安卓调用文件浏览器(一)打开并复制

背景 最近在做一个硬件产品&#xff0c;安卓应用开发。PM抽风&#xff0c;要求从app打开文件浏览器&#xff0c;跳转到指定目录&#xff0c;然后可以实现文件复制粘贴操作。 思考 从应用开发的角度看&#xff0c;从app打开系统文件浏览器并且选择文件&#xff0c;这是很常见…

牛客小白月赛86(D剪纸游戏)

题目链接:D-剪纸游戏_牛客小白月赛86 (nowcoder.com) 题目描述: 输入描述: 输入第一行包含两个空格分隔的整数分别代表 n 和 m。 接下来输入 n行&#xff0c;每行包含 m 个字符&#xff0c;代表残缺纸张。 保证&#xff1a; 1≤n,m≤10001 字符仅有 . 和 * 两种字符&#xf…

代码随想录算法训练营 DAY 16 | 104.二叉树最大深度 111.二叉树最小深度 222.完全二叉树的节点个数

104.二叉树最大深度 深度和高度 二叉树节点的深度&#xff1a;指从根节点到该节点的最长简单路径边的条数或者节点数&#xff08;取决于深度从0开始还是从1开始&#xff09;二叉树节点的高度&#xff1a;指从该节点到叶子节点的最长简单路径边的条数或者节点数&#xff08;取…