DataWhale—PumpkinBook(TASK03对数几率回归)

一、课程组成及结构


课程开源地址及相关视频链接:(当然这里也希望大家支持一下正版西瓜书和南瓜书图书,支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(°▽°)ノ✿)

Datawhale-学用 AI,从此开始

【吃瓜教程】《机器学习公式详解》(南瓜书)与西瓜书公式推导_哔哩哔哩_bilibili

具体学习安排如下:


 二、课程的正文部分

对数几率回归

首先先学习一下概念(来源百度):
       对数几率回归 ,简称对率回归,又称逻辑回归,是使用Sigmoid函数作为联系函数时的广义线性模型,是广义线性模型的一个特例。也是利用广义线性模型解决二分类任务的一种方法。


logistic回归是一种广义线性回归(generalized linear model),也是是拟合分类数据(尤其是二元响应数据)的模型的最常用方法之一,与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。与线性回归不同,逻辑回归可以直接预测概率(限制为 (0,1) 区间的值);此外,与其他一些分类器(如 Naive Bayes)预测的概率相比,这些概率经过了很好的校准。Logistic 回归保留训练数据的边际概率。模型的系数还提供了每个输入变量的相对重要性的一些提示。

熟悉推导过程的朋友可以直接跳过》》》》》》QAQ

Logistic 回归模型假定观测 y值的对数几率可以表示为 K 输入变量 x的线性函数

 

使用逻辑回归进行分类,就是要找到绿色这样的分界线,使其能够尽可能地对样本进行正确分类,也就是能够尽可能地将两种样本分隔开来。因此我们可以构造这样一个函数,来对样本集进行分隔:

其中 i=1,2,...m,表示第 i个样本, n 表示特征数,当 z(x(i))>0z(x(i))>0 时,对应着样本点位于分界线上方,可将其分为"1"类;当 z(x(i))<0z(x(i))<0 时 ,样本点位于分界线下方,将其分为“0”类。

逻辑回归作为分类算法,它的输出是0/1。那么如何将输出值转换成0/1呢?

这就需要一个新的函数——sigmoid 函数

sigmoid 函数定义如下,为了实现根据所有输入预测出类别,为此引入了sigmoid函数,sigmoid函数刚好也有二分类的功能。

与南瓜书公式推导可以相互对照参考 

其函数图像为:

img

由函数图像可以看出, sigmoid函数可以很好地将 (−∞,∞) 内的数映射到 (0,1) 上。

为什么要使用sigmoid函数作为假设?

因为线性回归模型的预测值为一般为大于1的实数,而样本的类标签为(0,1),我们需要将分类任务的真实标记y与线性回归模型的预测值联系起来,也就是找到广义线性模型中的联系函数。如果选择单位阶跃函数的话,它是不连续的不可微。而如果选择sigmoid函数,它是连续的,而且能够将z转化为一个接近0或1的值。

当z=0时,p=0.5
当z>0时,p>0.5  归为1类
当z<0时,p<0.5  归为0类

因此我们可以认为g(z)>= 0.5时为“1”类,反之为“0”类

二项逻辑斯蒂回归模型是一种分类模型,由条件概率分布 p(Y|X)表示,形式为参数化的逻辑斯谛分布。这里,随机变量 X 取值为实数,随机变量 Y 取值为 1或0。可通过监督学习的方法来估计模型参数。二项逻辑斯谛回归模型是如下的条件概率分布为

这里补充给出《统计学习方法》一点书本上的内容,以供大家参考学习。

其中, x∈Rn 是输入, Y∈{0,1} 是输出, θ 是参数。

对于 Y=1 有

而上式分子不等于0,则有

最终逻辑回归模型函数为,此为分类结果为1的概率

一下分别为则Sigmoid函数逻辑回归模型函数

 

#导入库
import math
import csv
import numpy as np#读取数据集之后操作def sigmoid(x):return 1.0/(1 + np.exp(-x))
代价函数

使用 sigmoid 函数求解出来的值为类1的后验估计 p(y=1|x,θ),故我们可以得到:

其中 p(y=1|x,θ)表示样本分类为 y=1 的概率,而 p(y=0|x,θ) 表示样本分类为 y=0的概率。

得到其似然函数为:

对数似然函数为:

所得的代价函数,对求 logL(θ)的最大值来求得参数θ的值。将代价函数做了以下改变:

此时只需对 J(θ)求最小值,便得可以得到参数 θ。


import math
import csv
import numpy as npdef J(theta, X, Y, theLambda=0):m, n = X.shapeh = sigmoid(np.dot(X, theta))J = (-1.0/m)*(np.dot(np.log(h).T, Y)+np.dot(np.log(1-h).T, 1-Y)) + (theLambda/(2.0*m))*np.sum(np.square(theta[1:]))return J.flatten()[0]
梯度下降

梯度下降法过程为

求解梯度:

img

img


import math
import csv
import numpy as npdef gradient_sgd(X, Y, alpha=0.01, epsilon=0.00001, maxloop=1000, theLambda=0.0):m, n = X.shapetheta = np.zeros((n, 1))cost = J(theta, X, Y)costs = [cost]thetas = [theta]# 随机梯度下降count = 0flag = Falsewhile count < maxloop:if flag:breakfor i in range(m):h = sigmoid(np.dot(X[i].reshape((1, n)), theta))theta = theta - alpha * ((1.0 / m) * X[i].reshape((n, 1)) * (h - Y[i]) + (theLambda / m) * np.r_[[[0]], theta[1:]])thetas.append(theta)cost = J(theta, X, Y, theLambda)costs.append(cost)if abs(costs[-1] - costs[-2]) < epsilon:flag = Truebreakcount += 1if count % 100 == 0:print("cost:", cost)return thetas, costs, count

img

img

因此有:

img

综上:

img

牛顿法

牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f (x)的泰勒级数的前面几项来寻找方程f (x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。

首先,选择一个接近函数 f (x)零点的 x0,计算相应的 f (x0) 和切线斜率f ' (x0)(这里f ' 表示函数 f 的导数)。然后我们计算穿过点(x0, f (x0)) 并且斜率为f '(x0)的直线和 x 轴的交点的x坐标,也就是求如下方程的解:

我们将新求得的点的 x 坐标命名为x1,通常x1会比x0更接近方程f (x) = 0的解。因此我们现在可以利用x1开始下一轮迭代。迭代公式可化简为如下所示:

img

已经证明,如果f ' 是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果f ' (x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。下图为一个牛顿法执行过程的例子。

而在逻辑回归中牛顿法更新方式为:

img

本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)

#导入库
import math
import csv
import numpy as npdef gradient_newton(X, Y, epsilon=0.00001, maxloop=1000, theLambda=0.0):m, n = X.shapetheta = np.zeros((n, 1))cost = J(theta, X, Y)costs = [cost]thetas = [theta]count = 0while count < maxloop:delta_J = 0.0H = 0.0for i in range(m):h = sigmoid(np.dot(X[i].reshape((1, n)), theta))delta_J += X[i] * (h - Y[i])H += h.T * (1 - h) * X[i] * X[i].Tdelta_J /= mH /= mprint(H, delta_J)theta = theta - 1.0 / H * delta_Jthetas.append(theta)cost = J(theta, X, Y, theLambda)costs.append(cost)if abs(costs[-1] - costs[-2]) < epsilon:breakcount += 1if count % 100 == 0:print("cost:", cost)return thetas, costs, count

注意的几点:

  • Logistic 回归模型的输入是乘法的。
  • 每个系数的指数告诉您该输入变量中的单位变化如何影响响应为真的优势比。
  • Logistic 回归是无坐标的:输入变量的平移、旋转和重新缩放不会影响生成的概率。
  • Logistic 回归保留训练数据的边际概率。
  • 过大的系数幅度、系数估计值过大的误差线以及系数上的错误符号可能表明存在相关输入。
  • 趋向于无穷大的系数可能表明输入与响应的子集完全相关。或者换句话说,这可能表明此输入仅对数据子集真正有用,因此可能是时候对数据进行细分了。
  • Pseudo-R^2是一种有用的拟合优度启发法。

三、参考文献

[1] 王燕军. 最优化基础理论与方法. 复旦大学出版社, 2011.

[2] Wikipedia contributors. Matrix calculus, 2022.

[3] 张贤达. 矩阵分析与应用. 第 2 版. 清华大学出版社, 2013.

[4] The Simpler Derivation of Logistic Regression, 2017.

[5] The Elements of Statistical Learning, 2nd Edition.,[Hastie, et.al, 2009] 

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

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

相关文章

系统安全第十三次作业题目及答案

一、 1.计划 实施 检查 处置 2.物理 系统 运行 数据 人员 技术文档 3.物理 网络 系统 应用 管理 二、 1.C 2.B 3.A 4.ACDE 5.ABCD 三、 1. 答&#xff1a; 概念&#xff1a;信息系统安全管理指通过计划、组织、领导、控制等环节来协调人力、物力、财力等资源&#x…

Qml 模型-视图-代理(贰)之 代理(Delegate) 学习

使用模型与视图来定义用户界面时&#xff0c;代理在创建显示时扮演了大量的角色&#xff0c;在模型中的每个元素通过代理来实现可视化。 代理 使用键盘移动 高亮 效果 代码&#xff1a; 视图绑定的属性是 ListView.isCurrentItem: 这个属性是一个布尔值&#xff0c;标识这…

LeetCode 面试经典 150 题回顾

目录 一、数组 / 字符串 1.合并两个有序数组 &#xff08;简单&#xff09; 2.移除元素 &#xff08;简单&#xff09; 3.删除有序数组中的重复项 &#xff08;简单&#xff09; 4.删除有序数组中的重复项 II&#xff08;中等&#xff09; 5.多数元素&#xff08;简单&am…

内外网交换过程中可能遇到的安全风险有哪些?

在数字化时代&#xff0c;企业内外网之间的数据交换变得日益频繁。然而&#xff0c;这一过程中的安全风险和效率问题也日益凸显。我们将探讨内外网交换可能遇到的安全风险&#xff0c;并介绍镭速内外网交换系统如何有效应对这些挑战。 内外网交换过程中的五大安全风险 数据泄露…

人工智能之机器学习概念3【培训机构学习笔记】

定义及作用&#xff1a; 无监督学习是通过试图学习或提取数据背后的数据特征&#xff0c;或者从数据中抽取出重要的特征信息&#xff0c;常见的算法有类聚、降维、文本处理&#xff08;特征抽取&#xff09;等。无监督学习一般是作为有监督学习的前期数据处理&#xff0c;功能…

文件系统的存储方式

磁盘是一个机械设备&#xff0c;外设。 磁盘的基本单位是扇区&#xff0c;一个扇区512字节&#xff0c;4KB。一片可以有n磁道&#xff0c;1磁道可以有m扇区。 如何找到指定位置的扇区&#xff1f;a.找到指定的磁头H b.找到指定的磁道(柱面)C c.找到指定的扇区S。这个叫CHS定址法…

微搭低代码私有化版本升级

目录 1 登录服务器2 进入weda的安装目录3 停止服务4 清除老版本镜像5 下载最新部署包6 重新激活license7 安装服务总结 我们上一篇讲解了部署私有化版本&#xff0c;随着公测的进行&#xff0c;版本是在不断的升级&#xff0c;目前已经到了0.3版本&#xff0c;我们有必要升级一…

JavaSec | JDBC反序列化原理和调用链细节分析

基础知识 JDBC简介 JDBC&#xff08;Java Database Connectivity&#xff0c;Java 数据库连接&#xff09;是 Java 语言中用来规范客户端如何访问数据库的应用程序接口&#xff0c;提供了诸如查询和更新数据在内的方法。JDBC 提供了一种基准&#xff0c;据此可以构建更高级的…

【氮化镓】用于低压射频电源的具有80.4% PAE的Si基E-Mode AlN/GaN HEMT

引言 本文是一篇关于增强型(E-mode)AlN/GaN高电子迁移率晶体管(HEMTs)的研究论文,晶体管是在硅衬底上制造的,并在3.6 GHz频率下展示了80.4%的峰值功率附加效率(PAE)。文章首先介绍了GaN器件在微波和毫米波功率放大器中的应用,特别是在雷达、卫星通信和民用移动通信系…

刚刚!EI目录更新,213本期刊停止收录

刚刚&#xff0c;EI Compendex数据库发布了最新版收录期刊目录。 目录实际更新时间为2024年11月1日 2024年截止11月份EI数据库已更新3次&#xff0c;更新时间分别为2024年1月、2024年8月和2024年11月。 本次目录共收录期刊5643本&#xff0c;其中包含Journal类型4359本、Pr…

L0G2000 Python 基础知识

力扣用python3解题383. 赎金信 https://leetcode.cn/problems/ransom-note/description/ 题目&#xff1a; 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否…

STM32设计防丢防摔智能行李箱-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…

同步互斥相关习题2 8道 含详解

14 一组进程的执行顺序如下图所示&#xff0c;圆圈P1&#xff0c;P2&#xff0c;P3&#xff0c;P4&#xff0c;P5&#xff0c;P6表示进程&#xff0c;弧上的字母a,b&#xff0c;c, d,e,f,g,h表示同步信号量&#xff0c;请用P&#xff0c;V操作实现进程的同步。 semaphore a …

CDH大数据平台搭建

各大开源以及商用厂商的大数据产品汇总&#xff1a; https://zhuanlan.zhihu.com/p/675011462 Ambari 界面&#xff1a; 一、安装一个新的虚拟机 配置要求&#xff1a;8核&#xff0c;10G内存&#xff0c;最好是200G 修改yum源&#xff1a; 修改阿里云的镜像文件&#xff1…

500左右的骨传导耳机哪个牌子好?用户体验良好的五大骨传导耳机

作为一名拥有十几年从业经验的科技爱好者&#xff0c;我主要想告诉大家一些关于骨传导耳机的知识。其中&#xff0c;要远离所谓的不专业产品&#xff0c;它们的佩戴不适和音质不佳问题高得吓人&#xff0c;尤其是很多宣称能提供舒适佩戴和高音质的产品&#xff0c;超过九成的用…

【YOLOv11改进[注意力]】引入DA、FCA、SA、SC、SE + 含全部代码和详细修改方式

本文将进行在YOLOv11中引入DA、FCA、SA、SC、SE魔改v11,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 DA、FCA、SA、SC、SE ① DA 论文:Dual Attention Network for Scene Segm

捉虫笔记(六)-谁把系统卡住了?

06-谁把系统卡住了&#xff1f; 1、现象 QA反馈&#xff0c;在软件退出的时候&#xff0c;会把整个系统卡住&#xff0c;将近40s。我第一反应这么离谱&#xff0c;我们的软件有这么大的“魅力”&#xff0c;将老大哥抖三抖。 我立马重现现场&#xff0c;果然如此。虽然没有Q…

网络安全之信息收集-实战-2

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 目录 7、网络空间引擎搜索 8、github源码泄露 9、端口信息 10、框架指纹识别 11、WAF识别 12、后台查找 7、网络空间引擎搜索 FOFA&#xff1a;https://fofa.info/ 360 …

51c自动驾驶~合集30

我自己的原文哦~ https://blog.51cto.com/whaosoft/12086789 #跨越微小陷阱&#xff0c;行动更加稳健 目前四足机器人的全球市场上&#xff0c;市场份额最大的是哪个国家的企业&#xff1f;A.美国 B.中国 C.其他 波士顿动力四足机器人 云深处 绝影X30 四足机器人 &#x1f…

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

一&#xff0c;数组翻转 1.概述:数组对称索引位置上的元素互换&#xff0c;最大值数组序号是数组长度减一 创建跳板temp&#xff0c;进行min和max的互换&#xff0c;然后min自增&#xff0c;max自减&#xff0c;当min>max的时候停止互换&#xff0c;代表到中间值 用代码实…