机器学习笔记(2): Logistic 回归

news/2025/3/10 18:36:12/文章来源:https://www.cnblogs.com/jeefy/p/18237693

Logistic 回归是线性回归中一个很重要的部分。

Logistic 函数:

\[\sigma(x) = \frac {L} {1 + \exp(-k(x - x_0))} \]

其中:

  • \(L\) 表示最大值
  • \(x_0\) 表示对称中心
  • \(k\) 表示倾斜度

一般来说,都将 \(L\) 设为 \(1\),而 \(k\)\(x_0\) 在参数中控制。


认为特征只有一个,那么自然:

\[p(y = 1 | x) = \sigma(\omega_0 + \omega_1 x) = \frac 1 {1 + \exp(\omega_0 + \omega_1 x)} \]

认为 \(\vec x\) 是特征向量,并且是增广向量,也就是:

\[\vec x = \begin{bmatrix} x_0 & x_1 & \ldots & x_c & 1 \end{bmatrix} \]

认为参数向量也是增广的:

\[\omega = \begin{bmatrix} \omega_0 \\ \omega_1 \\ \vdots \\ \omega_c \\ 1 \end{bmatrix} \]

那么:

\[p(y = 1 | \vec x) = \sigma(\vec x \omega) = \frac 1 { 1 + \exp(\vec x \omega)} \]

对于多组数据,\(X = \begin{bmatrix} \vec x_0 \\ \vec x_1 \\ \ldots \\ \vec x_m \end{bmatrix}\)

\[p(\vec y = 1 | X) = \sigma(X \omega) \]

注意最终得到是一个向量,\(\sigma\) 函数作用于向量中的每个单独的元素。


利用交叉熵作为损失函数:

\[R(\omega) = - \frac 1 m \sum_{n = 1}^m \left(y_n \log \hat y_n + \left(1 - y_n \right)\log \left(1 - \hat y _n \right) \right) \]

其中 \(\hat y\) 表示预测分类,而 \(y\) 表示实际分类。

由于 \(\sigma'(x) = \sigma(x)(1 - \sigma(x))\),自然的可以推出其偏导数:

\[ \begin{aligned} \frac \delta {\delta \omega} R(\omega) &= - \frac 1m \sum \left( y_n \frac {\hat y_n (1 - \hat y_n)}{\hat y_n} x_n + (1 - y_n) \frac {- \hat y_n (1 - \hat y_n)}{1 - \hat y_n} x_n \right) \\ &= - \frac 1m \sum \left( y_n - \hat y_n \right) x_n \\ \end{aligned} \]

写成向量形式也就是:

\[- \frac 1 m (\hat y - y) \cdot x \]

于是利用梯度下降算法:

\[\omega = \omega - \frac \alpha m X {\Large (}\sigma(X \omega) - y{\Large )} \]

代码和梯度下降函数十分相似。


Feature Mapping

合理的利用线性回归可以解决很多复杂的问题。

大概率我们需要一个类似于圆的东西才可以拟合。

考虑到在高中我们学过:

\[C: Ax^2 + B y^2 + C x + D y + F =0 \]

可以表示一个圆,那么我们就可以利用重映射:

\[(x, y) \to \begin{bmatrix} 1 & x & y & xy & x^2 & y^2 \end{bmatrix} \]

的方式将特征向量进行一点点简单的变换,那么自然就变成了对于多个参数的线性回归问题,一种可能的拟合是:

当然,我们也可以更复杂的利用这些参数,例如 \(x^3\)\(\sqrt x\)\(\frac 1 x\) 之类的参数,这取决于我们想要如何去拟合。


正则化参数

和平方损失函数的正则化方式一模一样,见 机器学习笔记(1): 梯度下降算法


Softmax Regression

其实就是多分类的 Logistic 回归:

\[p(y = c | \vec x) = {\rm softmax}(\vec x W) = \frac {\exp(\vec x W_c)}{\sum_{k = 1}^C \exp(\vec W_k)} \]

其中 \(C\) 表示分类数,而 \(W = \begin{bmatrix} \omega_1 & \omega_2 & \ldots & \omega_C \end{bmatrix}\),其中 \(\omega_i\) 就表示某一个 Logistic 函数的参数。

由于其实就是多个 Logistic 函数,所以其偏导数和参数学习过程非常相似:

\[W = W - \frac \alpha m X \left( \sigma(X W) - Y \right) \]

值得注意的是,对于每一个 \(\omega_i\) 减去同一个 \(\theta\) 结果不会改变,意味着一般都需要正则化。

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

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

相关文章

AI智能助手(web端和h5端)

需要在平台右下角设置一个图标,点击后可弹出智能助手弹框,同时不影响平台其他操作,支持流式文本(sse)、图文回复展示 web端 ,效果如下图: h5端 效果:vue3 + element-ui 实现 仿AI智能机器人助手h5, 支持流式文本(sse)、图文回复展示 web端源码:https://github.c…

dos窗口中关于目录和文件的操作

1 将输入内容保存到文件 dir > c:\1.txt 2 列出当前目录的所有文件 dir /a-d 2.1 列出当前目录的所有文件 dir /a-d /d 2.12列出当前目录及子目录下的所有文件 dir /a-d /d /s 3 列出当前目录下的所有目录 dir /ad /d /s 3.1 列出当前目录下的所有目录 dir /ad /d

【网络调试工具】wriesharktcpdump

TcpDump tcpdump抓包命令 网络报文的参数非常多,在实际抓包的时候都是采用条件过滤的选项来获取我们关心的报文。 1.基于IP地址过滤:host tcpdump host 192.168.10.100数据包的ip可以细分为源ip和目标ip两种: # 根据源ip进行过滤 tcpdump -i eth2 src 192.168.10.100 # 更具…

[UE 虚幻引擎] DTLoadFbx 运行时加载FBX本地模型插件说明

本插件可以在打包后运行时动态加载FBX模型。 新建一个Actor 并添加一个 DT Runtime Fbx Component。然后直接调用组件的函数 LoadFile 加载显示模型(注:不支持模型动画)FilePath : 加载模型的绝对路径。Create Collision : 是否创建碰撞体。本组件是继承于 UProceduralMeshC…

蒙特卡罗法求圆周率

蒙特卡罗法求圆周率蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。故适用于对离散系统进行计算仿真试验。在计算仿真…

Serverless 使用阿里云OOS将http文件转存到对象存储

阿里云OOS提供了一种高效、灵活的解决方案,用于自动化HTTP文件到对象存储的转存。通过OOS,用户可以使用函数计算FC执行Python脚本,直接将文件从HTTP源转移到OSS,无需本地存储或额外ECS实例,降低了成本,提高了效率,并减少了错误。实践步骤包括创建OOS模板并在FC上运行。使…

MySQL随笔

1、隔离级别innoDB通过间隙锁锁定查询范围避免被其他事物修改未提交读(导致脏读)、已提交读(导致不可重复读)、可重复读(mysql默认,导致幻读)、串行化 脏读:事物执行的过程读到其他事物未提交的数据  不可重复读:事物a在多次读取某数据时,事物b进行了修改,导致食物…

Unity反射的几种方式

1.利用额外的相机将反射的内容渲染到Render Target Texture上参考:<Unity入门精要>10.2.1节 原理很简单,以反射面(例如镜子)为中心,创建一个相机,处于主相机在镜子中反射的位置,用脚本实时更改相机位置与朝向 这个相机渲染的内容不直接输出到屏幕,而是输出到一张RTT上 然…

通过v-if动态设置Element表格列时,出现闪动等问题

this.$nextTick(() => {this.$refs.table?.doLayout() //尽量加上可选链,不然可能存在获取不到table实例,造成doLayout为undefined的情况) })

测试用例设计方法六脉神剑——第一剑:入门试招,等价边界初探

1 背景及问题 G.J.Myers在《软件测试技巧》中提出:测试是为了寻找错误而运行程序的过程,一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试, 一个成功的测试是揭示了迄今为止尚未发现的错误的测试。对于新手来说,日常测试用例设计时,很少用到系统的方法论,大多…

原生html+js实现两两元素配对,用线条连接两个元素

效果如下:画线部分借鉴了“https://blogweb.cn/article/1403842582411”此链接文章作者的代码,感谢! 直接放出代码:点击查看代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>配对</title…

代码随想录算法训练营第三十天 | 51.N 皇后

51.N 皇后 题目链接 文章讲解 视频讲解递归三部曲递归函数参数 需要传入当前chessBoard和棋盘大小n,以及当前要放置皇后的行数rowvoid backtracking(vector<string>& chessBoard, int n, int row);递归终止条件 当最后一个皇后放置好后结束if(row == n) {result.pus…