ML- 线性回归推导
线性回归, 这部分算是我最为擅长的了, 真的不吹, 6年经验, 我高中时代就已经会推导了, 当然是最最小二乘法和统计学(假设检验, 参数分布等)的角度.
后来上了大学, 又是从最小二乘和统计学角度, 最终呢, 还是从线性代数(向量投影) 和 微积分 角度 + 代码实现给整了一遍, 再后来就是ML, 撸了一遍梯度下降, 嗯, 整体感悟就是,对一个事物的认知, 需要一个时间的过程和实践.
正如古人所讲, 纸上来得终觉浅, 绝知此事要躬行.
回归模型
数据:
\((y_i, X_{i1}, X_{i2}...X_{ip}), \ i = 1,2,3...n\)
y 是一个向量, X是一个矩阵
样本 X 是一个 nxp 的矩阵, 每一行是表示一个样本, 对应一个目标值
y 是由这 p 个(维) 列向量 线性组合 而成, 因此叫线性回归.
模型:
\(y_i = \beta_0 +\beta_1 X_{i1} + \beta_2 X_{i2} + \beta_p X_{il} + \epsilon_i, \ i=1,2,...n\)
\(\epsilon \backsim N(0, \sigma)\) , 为啥误差的均值是0, 参考大数定律呗.(总体和样本的关系)
写为矩阵的形式:
\(y = X\beta + \epsilon\)
X 是 nxp, \(\beta\) 是 px1, y 是 nx1
误差函数:
\(J(\beta) = ||X\beta - y||^2\)
\(X\beta - y\) 表示两个列向量相减, 表示两个向量 相似, 如果相似, 则对应的分量应该接近0, 这样得到的差向量, 对其求模, 就可衡量了.
当然, 之前在SVM 衡量相似 用的是 内积, 方法很多啦, 可解释就好.
最线性代数(投影)求解 \(\beta\)
涉及的现代知识有些多,不过这是必须的, 当你认识到本质的时候, 你会发现, 原来世界如此美妙.
这是为方便说明投影概念,我在2017年画的几张图.




\(\beta = (X^TX)^{-1}X^Ty\)
从向量投影角度: 参考MIT <线性代数> 最小二乘
\(y = X\beta\) 无解, 做一个变换, 等号两边左乘 \(X^T\) 求近似解(空间投影找近似)
\(X^Ty = X^TX\beta\)
$即: \beta = (XTX){-1}X^Ty $
感觉这是一个历史问题, 最小二乘在17-18世纪是非常火的, 但也是受到很多怀疑, 于是高斯这批人,就从概率的角度, 再对最小二乘法进行了一个推广, 也就差不多时大二的概率论书中的那个样子, 用似然来整的.
从微分(梯度)角度求解 \(\beta\)
\(J(\beta) = ||X\beta -y||^2\)
$ = (X\beta -y)^T (X\beta -y)$
\(= (\beta^T X^T -y^T) (X\beta -y)\)
\(=\beta^T X^T X \beta - \beta^T X^Ty - y^TX \beta + y^Ty\)
然后对 beta 求 偏导 = 0 即可
矩阵求导: http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=3274
矩阵求导讲起来有点复杂, 我目前都是记住了一些常用的形式的, 哈哈, CV 调参侠 一枚
\(\nabla_\beta J(\beta) = 0 = 2X^TX \beta - X^Ty - X^Ty\)
\(即X^TX\beta = X^Ty\)
$即: \beta = (XTX){-1}X^Ty $
矩阵来写确实很优美简洁, 但有些抽象,尤其是求导, 这样还有啥好处呢? 当然是非常容易写代码了呀
人们来理解矩阵是非常困难的 - 涉及很多思想和求解
but
计算机理解矩阵是非常容易的 - 就是多维数组而已啦
只需一行代码求解 参数 beta
def 求解线性回归_beta(A, b):
"""return 值 = (
ML- 线性回归推导的更多相关文章
- ML 线性回归Linear Regression
线性回归 Linear Regression MOOC机器学习课程学习笔记 1 单变量线性回归Linear Regression with One Variable 1.1 模型表达Model Rep ...
- 线性回归和梯度下降代码demo
程序所用文件:https://files.cnblogs.com/files/henuliulei/%E5%9B%9E%E5%BD%92%E5%88%86%E7%B1%BB%E6%95%B0%E6%8 ...
- programming-languages学习笔记--第4部分
programming-languages学习笔记–第4部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} program ...
- ML(3)——线性回归
在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性 ...
- 机器学习 —— 基础整理(五)线性回归;二项Logistic回归;Softmax回归及其梯度推导;广义线性模型
本文简单整理了以下内容: (一)线性回归 (二)二分类:二项Logistic回归 (三)多分类:Softmax回归 (四)广义线性模型 闲话:二项Logistic回归是我去年入门机器学习时学的第一个模 ...
- 大叔学ML第四:线性回归正则化
目录 基本形式 梯度下降法中应用正则化项 正规方程中应用正则化项 小试牛刀 调用类库 扩展 正则:正则是一个汉语词汇,拼音为zhèng zé,基本意思是正其礼仪法则:正规:常规:正宗等.出自<楚 ...
- 大叔学ML第二:线性回归
目录 基本形式 求解参数\(\vec\theta\) 梯度下降法 正规方程导法 调用函数库 基本形式 线性回归非常直观简洁,是一种常用的回归模型,大叔总结如下: 设有样本\(X\)形如: \[\beg ...
- ML之多元线性回归
转自:http://www.cnblogs.com/zgw21cn/archive/2009/01/07/1361287.html 1.多元线性回归模型 假定被解释变量与多个解释变量之间具有线性关系, ...
- ml的线性回归应用(python语言)
线性回归的模型是:y=theta0*x+theta1 其中theta0,theta1是我们希望得到的系数和截距. 下面是代码实例: 1. 用自定义数据来看看格式: # -*- coding:utf ...
- 线性回归(Linear Regression)均方误差损失函数最小化时关于参数theta的解析解的推导(手写)
第一页纸定义了损失函数的样子, theta, X 和 y 的 shape, 以及最终的损失函数向量表现形式. 第二页纸抄上了几个要用到的矩阵求导公式,以及推导过程和结果. 要说明的是:推导结果与the ...
随机推荐
- 洛谷p1559运动员最佳匹配问题
题目 搜索 可行性剪枝 虽然这题目是我搜二分图的标签搜到的 但是n比较小 明显可以暴力 然而只有80分 再加上可行性剪纸就行啦 就是记所有运动员他所能匹配到的最大值. 在我们搜索到第i层的时候 如果他 ...
- 【Gamma】“北航社团帮”展示博客
目录 团队介绍 项目愿景 整个项目的预期典型用户 功能展示 原预期用户数量 项目使用情况数据分析 用户量变化 学生认证人数 社长认证人数 入社申请数 活动发布 新闻发布 网页端使用情况 小程序打开次数 ...
- Debug 路漫漫-09:构建CNN时维度不一致问题
Build CNN Network 之后,运行,但是报错: ValueError: Input 0 is incompatible with layer predict_vector_conv1: e ...
- python 关于celery的定时任务队列的基本使用(celery+redis)【采用配置文件设置】
工程结构沿用https://www.cnblogs.com/apple2016/p/11422388.html,只需修改celeryconfig.py文件即可: 1.更新celeyconfig.py文 ...
- elasticsearch迁移数据到新索引中
因为业务原因,需要修改索引的映射的某个字段的类型,比如更改Text为Keyword. 需要如下步骤: 1).先新建索引,映射最新的映射实体 2).迁移老索引的数据到新索引中(数据较大的话,可以分批迁移 ...
- [转帖]进程状态的转换与PCB详解
进程状态的转换与PCB详解 https://blog.csdn.net/qq_34666857/article/details/102852747 挺好的 之前没好好学习. 返回主目录 之前的 ...
- [转帖]知新之--12-factors
知新之--12-factors https://blog.csdn.net/weixin_34233421/article/details/85819756 12-factors I. 基准代码 一份 ...
- 啊哈!算法(第二章)C#实现
第 1 节 解密 QQ 号——队列 新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问 QQ 号,小哈当然不会直接告诉小哼啦,原因嘛你懂的. 所以小哈给了小哼一串加密过的数字, ...
- Prometheus 标签使用示例整合
Prometheus 监控实例 一.Prometheus 根据标签聚合总CPU使用率 1.主机添加标签(可在多个主机内添加相同标签实现聚合):vim prometheus.conf static_co ...
- Neo4j学习——基本操作(一)
由于开始学习知识图谱,因此需要涉及到neo4j的使用一.介绍neo4j是一个图形数据库基于Java开发而成,因此需要配置jvm才可以运行配置请参考我前面的一篇blog:https://www.cnbl ...