ML- 线性回归推导
Posted chenjieyouge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ML- 线性回归推导相关的知识,希望对你有一定的参考价值。
线性回归, 这部分算是我最为擅长的了, 真的不吹, 6年经验, 我高中时代就已经会推导了, 当然是最最小二乘法和统计学(假设检验, 参数分布等)的角度.
后来上了大学, 又是从最小二乘和统计学角度, 最终呢, 还是从线性代数(向量投影) 和 微积分 角度 + 代码实现给整了一遍, 再后来就是ML, 撸了一遍梯度下降, 嗯, 整体感悟就是,对一个事物的认知, 需要一个时间的过程和实践.
正如古人所讲, 纸上来得终觉浅, 绝知此事要躬行.
回归模型
数据:
((y_i, X_{i1}, X_{i2}...X_{ip}), i = 1,2,3...n)
y 是一个向量, X是一个矩阵
样本 X 是一个 nxp 的矩阵, 每一行是表示一个样本, 对应一个目标值
y 是由这 p 个(维) 列向量 线性组合 而成, 因此叫线性回归.
模型:
(y_i = eta_0 +eta_1 X_{i1} + eta_2 X_{i2} + eta_p X_{il} + epsilon_i, i=1,2,...n)
(epsilon acksim N(0, sigma)) , 为啥误差的均值是0, 参考大数定律呗.(总体和样本的关系)
写为矩阵的形式:
(y = Xeta + epsilon)
X 是 nxp, (eta) 是 px1, y 是 nx1
误差函数:
(J(eta) = ||Xeta - y||^2)
(Xeta - y) 表示两个列向量相减, 表示两个向量 相似, 如果相似, 则对应的分量应该接近0, 这样得到的差向量, 对其求模, 就可衡量了.
当然, 之前在SVM 衡量相似 用的是 内积, 方法很多啦, 可解释就好.
最线性代数(投影)求解 (eta)
(eta = (X^TX)^{-1}X^Ty)
从向量投影角度: 参考MIT <线性代数> 最小二乘
(y = Xeta) 无解, 做一个变换, 等号两边左乘 (X^T) 求近似解(空间投影找近似)
(X^Ty = X^TXeta)
$即: eta = (X^TX)^{-1}X^Ty $
感觉这是一个历史问题, 最小二乘在17-18世纪是非常火的, 但也是受到很多怀疑, 于是高斯这批人,就从概率的角度, 再对最小二乘法进行了一个推广, 也就差不多时大二的概率论书中的那个样子, 用似然来整的.
从微分(梯度)角度求解 (eta)
(J(eta) = ||Xeta -y||^2)
$ = (Xeta -y)^T (Xeta -y)$
(= (eta^T X^T -y^T) (Xeta -y))
(=eta^T X^T X eta - eta^T X^Ty - y^TX eta + y^Ty)
然后对 beta 求 偏导 = 0 即可
矩阵求导: http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=3274
矩阵求导讲起来有点复杂, 我目前都是记住了一些常用的形式的, 哈哈, CV 调参侠 一枚
( abla_eta J(eta) = 0 = 2X^TX eta - X^Ty - X^Ty)
(即X^TXeta = X^Ty)
$即: eta = (X^TX)^{-1}X^Ty $
矩阵来写确实很优美简洁, 但有些抽象,尤其是求导, 这样还有啥好处呢? 当然是非常容易写代码了呀
人们来理解矩阵是非常困难的 - 涉及很多思想和求解
but
计算机理解矩阵是非常容易的 - 就是多维数组而已啦
只需一行代码求解 参数 beta
def 求解线性回归_beta(A, b):
"""return 值 = (??^?? ??)^(???)??^?? b
A 是样本矩阵
b 是观测的y值
"""
return np.dot(np.dot(np.dot(A.T, A).I, A.T), b.T)
当然, 后面会再接和 梯度下降来整一波.
从概率论认识线性回归
模型:
(y_i = eta^Tx_i + epsilon_i?)
引入最大似然:
希望: (x_i 在, eta, sigma) 的约束下, 观察的 yi 出现的概率是最大的
同时: 误差是满足 N(0, sigma) 分布的.
Maximum Likehood: (P(y_i | x_i, eta, sigma) = frac {1}{sigma sqrt {2 pi}} e ^{frac {-(y_i - eta^Tx_i)^2}{2 sigma^2}})
我们希望收集到的 y观测, 是就是在整体中出现概率最大的情况, 即要保证索引样本出现的概率是最大的,条件概率的积最大嘛. 即从总体上来考量:
(P(y|x, eta, sigma) = (frac {1}{sigma sqrt {2pi}}) ^n prod limits_i ^n e ^{frac {-(y_i - eta^Tx_i)^2}{2 sigma^2}})
化简一波 连乘 两边取log (以e为底哈) 实现 乘法变为加法
why log?
求解上: 概率值是 0-1 之间, 这样连续乘的话接近0, 计算机表示数有"精度", 存不了
美观上: 用log 的性质, 能够将 乘法 转为 加法 , 方便后续推导和理论的美观
(log[P(y|x, eta, sigma)] = log[(frac {1}{sigma sqrt {2pi}}) ^n prod limits_i ^n e ^{frac {-(y_i - eta^Tx_i)^2}{2 sigma^2}}])
(=log[(frac {1}{sigma sqrt {2pi}}) ^n + sum limits_i ^n frac {-(y_i - eta^Tx_i)^2}{2 sigma^2}])
即针对 (eta) 最大化.
(argmax_eta log[(frac {1}{sigma sqrt {2pi}}) ^n] + sum limits_i ^n {frac {-(y_i - eta^Tx_i)^2}{2 sigma^2}})
(argmax_eta) 就是个记号,表示对 beta 参数优化而已
进一步发现, 要优化 (eta) , 跟上面 式子的第一项 没啥关系,即:
(argmax_eta sum limits_i ^n {frac {-(y_i - eta^Tx_i)^2}{2 sigma^2}})
因为 (sigma ^2) 是正数, 关系不大, 即让 分子 (=-(y_i-eta^Tx_i) ^2) 最大即可:
最终转化为:
(arg min_eta (y_i-eta^Tx_i) ^2)
写为向量的形式即:
(arg min_eta ||y-xeta||^2)
这也就证明了为啥, 最前面的误差要写为 两个向量相减的模式, 而不是想SVM那样而点积形式. 从概率来说明, 这样理论就很完善了.
微分到样本点-来求 (eta)
上面通过矩阵来求导, 确实很清晰明了, 不过总感觉有些抽象, 这里在直观一点来整一遍
(J(eta) = frac {1}{2n}sum limits _{i=1}^n (y_i - eta^Tx_i)^2)
1/2 就是为了求导后, 形式美观, 没啥实际意义
注意求导的链式法则哈.
( abla_eta J(eta)= frac {1}{n} sum limits _{i=1}^n (y_i - eta ^Tx_i) abla_eta (-eta^Tx_i) =0)
(=frac {1}{n} sum limits _{i=1}^n (y_i - eta ^Tx_i) x_i) =0
(即: frac {1}{n} sum limits _{i=1}^n y_i x_i =frac{1}{n} sum limits_{i=1}^n eta ^T<x_i x_i>)
写为矩阵不就跟上面是一样的啦:
(y^TX = eta^TX^TX)
两个向量 x, y 的点积就是 (x^T y)
y 是 nx1; X 是 nxp; (eta) 是 px1
左边 = (1xn)(nxp) -> 1xp 维
右边 = (1xp)(pxn)(nxp) -> 1xp
先对等号两边 都求转置, 不影响结果
(X^Ty = X^TXeta)
(即: eta = (X^TX)^{-1}X^Ty)
也是得到了同样的结果哦, 厉害吧,老铁们, 请双击一波666.
线性回归小结
线性假设: 输出的y是X中各列向量的线线组合, 大前提必须是线性关系(数乘和加法), 如果不是的话, 可以转为线性关系, 如指数转对数等.
- 消除异常值: 在ml中也叫做噪声, 因为求解 (eta) 是要考虑所有样本, 对对异常值特别敏感. 在特征工程的时候,就有处理好. 这跟SVM不同, SVM只要支持向量即可, 对异常值不敏感.
去除共线性: 如果 X 的分量是高度相关的, 这就造成过拟合了. 就是 X 的空间是不满秩的, 比如X中, 有3个字段 单价, 数量 收入, 这种就是字段冗余了, 即不满秩. 更直观地可从公式上看: $eta = (X^TX)^{-1}X^Ty $, 如果X 具有共线性, 那么 求逆 有可能出现不存在的情况.
- 高斯分布: 整个模型的假设, X, y 具有高斯分布, 这样才能进行一个可靠的预测嘛. 如果没有很好的满足正态分布, 可以适当对 X做一些变换 (log, BoxCox) 等, 使其分布更近似高斯分布
特征缩放: 如果先对特征进行标准化处理, 在进行训练, 那么, 该线性回归通常会有更可靠的预测效果哦.
以上是关于ML- 线性回归推导的主要内容,如果未能解决你的问题,请参考以下文章