├── LICENSE ├── README.md ├── md ├── EM算法.md ├── FM算法简单梳理.md ├── GBDT算法原理梳理.md ├── GBDT算法系列随想.md ├── Isolation Forest算法梳理.md ├── L1和L2正则化的概率解释.md ├── LSTM和GRU算法简单梳理.md ├── PCA算法.md ├── k-means算法.md ├── l1相对于l2更容易获得稀疏解的个人看法.md ├── word2vec算法梳理.md ├── 关联规则算法原理浅析.md ├── 反向传播算法.md ├── 多分类问题的交叉熵.md ├── 感知机算法.md ├── 支持向量机(上篇).md ├── 支持向量机(下篇).md ├── 数值微分理论和简单代码实现.md ├── 朴素贝叶斯算法.md ├── 某些特殊概率分布之间的相互变换.md ├── 核函数粗浅的理解.md ├── 线性回归与最小二乘法.md ├── 逻辑回归算法.md ├── 高斯判别分析.md └── 高维数据可视化之t-SNE算法.md ├── pdf ├── EM算法.pdf ├── FM算法简单梳理.pdf ├── GBDT算法原理梳理.pdf ├── Isolation Forest算法梳理.pdf ├── L1和L2正则化的概率解释.pdf ├── LSTM和GRU算法简单梳理.pdf ├── PCA算法.pdf ├── k-means算法.pdf ├── l1相对于l2更容易获得稀疏解的个人看法.pdf ├── word2vec算法梳理.pdf ├── 关联规则算法原理浅析.pdf ├── 反向传播算法.pdf ├── 多分类问题的交叉熵.pdf ├── 感知机算法.pdf ├── 支持向量机(上篇).pdf ├── 支持向量机(下篇).pdf ├── 数值微分理论和简单代码实现.pdf ├── 朴素贝叶斯算法.pdf ├── 某些特殊概率分布之间的相互变换.pdf ├── 核函数粗浅的理解.pdf ├── 线性回归与最小二乘法.pdf ├── 逻辑回归算法.pdf ├── 高斯判别分析.pdf └── 高维数据可视化之t-SNE算法.pdf └── picture ├── GRU.jpg ├── LSM_1.png ├── LSTM-cellstate.jpg ├── LSTM-input.jpg ├── LSTM-output-gate.jpg ├── LSTM.png ├── LSTM2-notation.png ├── bp.png ├── cbow.png ├── cbow_update.png ├── iForest.png ├── iForest_instance.png ├── iForest_psi.png ├── iForest_s.png ├── k.png ├── log.png ├── numerical_grad_1d.png ├── numerical_grad_nd.png ├── pca.png ├── sigmoid.jpg ├── skip-gram.png ├── smo.png ├── svm.png ├── t-dist_and_normal.png ├── t-dist_and_normal_.png ├── t-sne_and_pca.png ├── t-sne_and_pca_.png ├── word2vec.jpg ├── word2vec_.png ├── 二元高斯分布.png ├── 二分类.png ├── 双二维高斯分布.png ├── 感知机.png ├── 支持向量.png ├── 神经网络.jpeg ├── 詹森不等式.jpg └── 贝叶斯.jpg /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Hangfeng Yang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ```shell 2 | _ .-') .-') _ .-') _ ('-. 3 | ( '.( OO )_ ( OO ) ) ( OO) ) _( OO) 4 | ,--. ,--.),--. ,--./ ,--,' .-'),-----. / '._(,------. 5 | | `.' | | |.-') | \ | |\ ( OO' .-. '|'--...__)| .---' 6 | | | | | OO ) | \| | )/ | | | |'--. .--'| | 7 | | |'.'| | | |`-' |{}_O--)(| . |/ \_) | |\| | | | (| '--. 8 | | | | |(| '---.'(OO )_ | |\ | \ | | | | | | | .--' 9 | | | | | | | | | \ | `' '-' ' | | | `---. 10 | `--' `--' `------' `--' `--' `-----' `--' `------' 11 | ``` 12 | 13 | #

ML-NOTE

14 | 15 |

16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |

33 | 34 | 慢慢整理所学的和机器学习相关的知识,并根据自己所理解的样子叙述出来。笔记中难免会出现一些错误,希望读者能够自己辨证着去看待,如果能把你的一些建议反馈给我的话那是再好不过的,所有文章也可以在[知乎专栏](https://zhuanlan.zhihu.com/jiqixuexi)阅读,相关代码实现可以参考我写的另一个微机器学习框架[**mimose**](https://github.com/yhangf/mimose)。 35 | 36 | #### 笔记内容 37 | 38 | - [x] 线性回归与最小二乘法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/线性回归与最小二乘法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/36910496)] 39 | 40 | - [x] 逻辑回归算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/逻辑回归算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/37020923)] 41 | 42 | - [x] 感知机算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/感知机算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/37134548)] 43 | 44 | - [x] 高斯判别分析 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/高斯判别分析.pdf) | [知乎](https://zhuanlan.zhihu.com/p/38269530)] 45 | 46 | - [x] 支持向量机(上篇) [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/支持向量机(上篇).pdf) | [知乎](https://zhuanlan.zhihu.com/p/39219534)] 47 | 48 | - [x] 支持向量机(下篇) [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/支持向量机(下篇).pdf) | [知乎](https://zhuanlan.zhihu.com/p/47806581)] 49 | 50 | - [x] EM算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/EM算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/39490840)] 51 | 52 | - [x] 朴素贝叶斯算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/朴素贝叶斯算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/40246165)] 53 | 54 | - [x] 反向传播算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/反向传播算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/40761721)] 55 | 56 | - [x] PCA算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/PCA算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/46671639)] 57 | 58 | - [x] 核函数粗浅的理解 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/核函数粗浅的理解.pdf) | [知乎](https://zhuanlan.zhihu.com/p/47541349)] 59 | 60 | - [x] L1和L2正则化的概率解释 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/L1和L2正则化的概率解释.pdf) | [知乎](https://zhuanlan.zhihu.com/p/56185913)] 61 | 62 | - [x] 某些特殊概率分布之间的相互变换 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/某些特殊概率分布之间的相互变换.pdf) | [知乎](https://zhuanlan.zhihu.com/p/56703117)] 63 | 64 | - [x] 高维数据可视化之t-SNE算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/高维数据可视化之t-SNE算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/57937096)] 65 | 66 | - [x] Word2Vec算法梳理 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/word2vec算法梳理.pdf) | [知乎](https://zhuanlan.zhihu.com/p/58290018)] 67 | 68 | - [x] GBDT算法原理梳理 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/GBDT算法原理梳理.pdf) | [知乎](https://zhuanlan.zhihu.com/p/59434537)] 69 | 70 | - [x] LSTM和GRU算法简单梳理 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/LSTM和GRU算法简单梳理.pdf) | [知乎](https://zhuanlan.zhihu.com/p/72500407)] 71 | 72 | - [x] FM算法简单梳理 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/FM算法简单梳理.pdf) | [知乎](https://zhuanlan.zhihu.com/p/73798236)] 73 | 74 | - [x] 数值微分理论和简单代码实现 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/数值微分理论和简单代码实现.pdf) | [知乎](https://zhuanlan.zhihu.com/p/78915545)] 75 | 76 | - [x] k-means算法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/k-means算法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/82550068)] 77 | 78 | - [x] 多分类问题的交叉熵 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/多分类问题的交叉熵.pdf) | [知乎](https://zhuanlan.zhihu.com/p/100742743)] 79 | 80 | - [x] 关联规则算法原理浅析 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/关联规则算法原理浅析.pdf) | [知乎](https://zhuanlan.zhihu.com/p/100742743)] 81 | 82 | - [x] l1相对于l2更容易获得稀疏解的个人看法 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/l1相对于l2更容易获得稀疏解的个人看法.pdf) | [知乎](https://zhuanlan.zhihu.com/p/102909714)] 83 | 84 | - [x] Isolation Forest算法梳理 [[pdf](https://github.com/yhangf/ML-NOTE/blob/master/pdf/Isolation%20Forest%E7%AE%97%E6%B3%95%E6%A2%B3%E7%90%86.pdf) | [知乎](https://zhuanlan.zhihu.com/p/131406753)] 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /md/EM算法.md: -------------------------------------------------------------------------------- 1 | ##
EM算法
2 | 3 |
杨航锋
4 | 5 | ​ $\ EM\ $算法是一种迭代式的算法,用于含有隐变量的概率参数模型的最大似然估计或极大后验概率估计 。$\ EM\ $算法解决这个的思路是使用启发式的迭代方法,既然无法直接求出概率模型分布参数,那么是否可以先猜想隐含数据($\ EM\ $算法的$\ E\ $步)?基于这个思路,对已知数据和猜测的隐含数据一起来极大化对数似然,最后求解概率模型的参数($\ EM\ $算法的$\ M\ $步)。由于之前的隐含数据是猜测的,所以此时得到的模型参数一般还不是准确的结果。不过没有关系,基于当前得到的模型参数,继续猜测隐含数据,然后继续极大化对数似然,求解概率模型参数。以此类推,不断的迭代下去,直到概率模型的分布参数基本无变化,算法收敛,即找到了合适的模型参数。 [更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### EM算法的推导 8 | 9 | ##### 极大似然估计的缺陷 10 | 11 | ​ 假设输入空间是$\ X\in\R^{n} \ $含有$m$个样本数据($x^{(1)},x^{(2)},$$\cdots,x^{(m)}$),且这$m$个样本数据服从概率密度函数为$\ p(x;\theta)\ $的分布,其中$\ x^{(i)}\in X \ $、$ \ \theta\ $为未知参数。通过极大似然估计求解概率模型的未知参数$\ \theta\ $的过程是 12 | $$ 13 | \begin{aligned} 14 | &\mathop{\arg\max}_{\theta}\ L(\theta)=\prod\limits_{i=1}^mp(x^{(i)};\theta)\\ 15 | &\Leftrightarrow \mathop{\arg\max}_{\theta}\ \mathcal{L}(\theta)=\sum\limits_{i=1}^m\log p(x^{(i)};\theta) 16 | \end{aligned} 17 | $$ 18 | 故$\ \begin{aligned} \hat{\theta}= \mathop{\arg\max}_{\theta} \sum\limits_{i=1}^m\log p(x^{(i)};\theta) \end{aligned}\ $,当已知每一个样本数据$\ x^{(i)}\ $都对应一个类别变量$\ z^{(i)} \ $时,即$\ z=(z^{(1)},z^{(2)},\dots,z^{(m)}) \ $,此时的极大化模型的对数似然函数可以通过全概率公式展开为 19 | $$ 20 | \begin{aligned} 21 | \hat{\theta}&= \mathop{\arg\max}_{\theta} \sum\limits_{i=1}^m\log p(x^{(i)};\theta)\\ 22 | &= \mathop{\arg\max}_{\theta} \sum\limits_{i=1}^m\log \sum\limits_{z^{(i)}}p(x^{(i)},z^{(i)};\theta) 23 | \end{aligned} 24 | $$ 25 | 因为含有隐变量$\ z \ $故极大似然估计并不能够求解上述模型。 26 | 27 | ##### 詹森不等式 28 | 29 | ​ 当函数为凸函数时,$\ f(x) \ $函数的期望大于等于期望的函数,即 $\ \mathbb{E}[f(x)]\ge f(\mathbb{E[x]}) \ $或者写成凸函数条件表达式的形式,$\ tf(x_1)+(1-t)f(x_2)\ge f(tx_1+(1-t)x_2) \ $其中$\ t\in[0,1] \ $,凹函数相反。 30 | 31 | | $X$ | $x_1$ | $x_2$ | 32 | | :--: | :---: | :---: | 33 | | $p$ | $t$ | $1-t$ | 34 | 35 | 根据$\ X\ $的分布列,由期望和函数期望的定义可知 36 | $$ 37 | \begin{aligned} 38 | &\mathbb{E}[f(x)]=tf(x_1)+(1-t)f(x_2)\\ 39 | &\mathbb{E}[x]=tx_1+(1-t)x_2 40 | \end{aligned} 41 | $$ 42 | 从几何上直观的解释为 43 | 44 | ![](C:\Users\yhf\Desktop\ML-NOTE\picture\詹森不等式.jpg) 45 | 46 | ##### 求解含有隐变量的概率模型 47 | 48 | ​ 为了求解含有隐变量$\ z\ $的概率模型$\ \begin{aligned}\hat{\theta}=\mathop{\arg\max}_{\theta} \sum\limits_{i=1}^m\log \sum\limits_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)\end{aligned}\ $需要一些特殊的技巧,通过引入隐变量$\ z^{(i)}\ $的概率分布为$\ Q_i(z^{(i)}) \ $,因为$\ \log (x) \ $是凹函数故结合凹函数形式下的詹森不等式进行放缩处理 49 | $$ 50 | \begin{aligned} 51 | \sum\limits_{i=1}^m\log \sum\limits_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)&=\sum\limits_{i=1}^m\log \sum\limits_{z^{(i)}} Q_i(z^{(i)})\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})}\\ 52 | &=\sum\limits_{i=1}^m\log \mathbb{E}(\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})})\\ 53 | &\ge\sum\limits_{i=1}^m\mathbb{E}[\log\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})})]\\ 54 | &=\sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})\log\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})} 55 | \end{aligned} 56 | $$ 57 | 其中由概率分布的充要条件$\ \sum\limits_{z^{(i)}}Q_i(z^{(i)})=1、Q_i(z^{(i)})\ge0\ $可看成下述关于$\ z\ $函数分布列的形式 58 | 59 | | $Q(z)$ | $\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})}$ | 60 | | :----: | :-----------------------------------------------: | 61 | | $p$ | $Q_i(z^{(i)})$ | 62 | 63 | 这个过程可以看作是对 $\ \mathcal{L}(\theta)\ $求了下界,假设$\ \theta\ $已经给定那么$\ \mathcal{L}(\theta)\ $的值就取决于$\ Q_i(z^{(i)}) \ $和$\ p(x^{(i)},z^{(i)})\ $了,因此可以通过调整这两个概率使下界不断上升,以逼近 $\ \mathcal{L}(\theta)\ $的真实值,当不等式变成等式时说明调整后的概率能够等价于$\ \mathcal{L}(\theta)\ $,所以必须找到使得等式成立的条件,即寻找 64 | $$ 65 | \mathbb{E}[\log\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})})]=\log \mathbb{E}[\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})}] 66 | $$ 67 | 由期望得性质可知当 68 | $$ 69 | \dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})}=C,\ \ \ \ \ C\in\R \ \ \ \ \ (*) 70 | $$ 71 | 等式成立,对上述等式进行变形处理可得 72 | $$ 73 | \begin{aligned} 74 | &p(x^{(i)},z^{(i)};\theta)=CQ_i(z^{(i)})\\ 75 | &\Leftrightarrow 76 | \sum\limits_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)=C\sum\limits_{z^{(i)}}Q_i(z^{(i)})=C\\ 77 | &\Leftrightarrow 78 | \sum\limits_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)=C \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (**) 79 | \end{aligned} 80 | $$ 81 | 把$\ (**)\ ​$式带入$\ (*)\ ​$化简可知 82 | $$ 83 | \begin{aligned} 84 | Q_i(z^{(i)})&=\dfrac{p(x^{(i)},z^{(i)};\theta)}{\sum\limits_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)}\\ 85 | &=\dfrac{p(x^{(i)},z^{(i)};\theta)}{p(x^{(i)};\theta)}\\ 86 | &=p(z^{(i)}|x^{(i)};\theta) 87 | \end{aligned} 88 | $$ 89 | 至此,可以推出在固定参数$\ \theta \ $后,$\ Q_i(z^{(i)}) \ $的计算公式就是后验概率,解决了$\ Q_i(z^{(i)}) \ $如何选择得问题。这一步称为$\ E\ $步,建立 $\ \mathcal{L}(\theta)\ $得下界;接下来得$ \ M\ $步,就是在给定$\ Q_i(z^{(i)}) \ $后,调整$\ \theta \ $去极大化$\ \mathcal{L}(\theta)\ $的下界即 90 | $$ 91 | \begin{aligned} 92 | &\mathop{\arg\max}_{\theta}\sum\limits_{i=1}^m\log p(x^{(i)};\theta)\\ 93 | &\Leftrightarrow 94 | \mathop{\arg\max}_{\theta}\sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})\log\dfrac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})}\\ 95 | &\Leftrightarrow 96 | \mathop{\arg\max}_{\theta}\sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})\left[\log p(x^{(i)},z^{(i)};\theta)-\log Q_i(z^{(i)})\right]\\ 97 | &\Leftrightarrow 98 | \mathop{\arg\max}_{\theta}\sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})\log p(x^{(i)},z^{(i)};\theta) 99 | \end{aligned} 100 | $$ 101 | 因此EM算法的迭代形式为 102 | 103 | ​ Repeats until it converges{ 104 | 105 | ​ $\ E\ $ step:for every $x^{(i)}$ calculate 106 | 107 | ​ $\ Q_i(z^{(i)})=p(z^{(i)}|x^{(i)};\theta) \ $ 108 | 109 | ​ $\ M\ $ step:update $\theta $ 110 | 111 | ​ $\ \begin{aligned} \theta:=\mathop{\arg\max}_{\theta}\sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})\log p(x^{(i)},z^{(i)};\theta) \end{aligned} \ $ 112 | 113 | ​ } 114 | 115 | #### EM算法的收敛性 116 | 117 | ​ 不妨假设$\ \theta^{(k)}\ $和$\ \theta^{(k+1)}\ $是$\ EM\ $算法第$\ k\ $次迭代和第$\ k+1\ $次迭代的结果,要确保$\ EM\ $算法收敛那么等价于证明$\ \mathcal{L}(\theta^{(k)})\le\mathcal{L}(\theta^{(k+1)}) \ $也就是说极大似然估计单调增加,那么算法最终会迭代到极大似然估计的最大值。在选定$\ \theta^{(k)}\ $后可以得到E步$\ Q_i^{(k)}(z^{(i)})=p(z^{(i)}|x^{(i)};\theta^{(k)}) \ $,这一步保证了在给定 $\ \theta^{(k)}\ $时,詹森不等式中的等式成立即 118 | $$ 119 | \mathcal{L}(\theta^{(k)})=\sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i^{(k)}(z^{(i)})\log \dfrac{p(x^{(i)},z^{(i)};\theta^{(k)})}{Q_i(z^{(i)})} 120 | $$ 121 | 然后再进行$\ M\ $步,固定$\ Q_i^{(k)}(z^{(i)})\ $并将$\ \theta^{(k)}\ $视作变量,对上式$\ \mathcal{L}(\theta^{(k)})\ $求导后得到$\ \theta^{(k+1)}\ $因此有如下式子成立 122 | $$ 123 | \begin{aligned} 124 | \mathcal{L}(\theta^{(k)})&=\sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i^{(k)}(z^{(i)})\log \dfrac{p(x^{(i)},z^{(i)};\theta^{(k)})}{Q_i(z^{(i)})} \ \ \ \ \ \ \ \ \ \ (a)\\ 125 | &\le \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i^{(k)}(z^{(i)})\log \dfrac{p(x^{(i)},z^{(i)};\theta^{(k)})}{Q_i(z^{(i)})}\ \ \ \ \ \ \ \ \ \ (b)\\ 126 | &\le\mathcal{L}(\theta^{(k+1)})\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (c) 127 | \end{aligned} 128 | $$ 129 | 首先$(a)$式是前面$\ E\ $步所保证詹森不等式中的等式成立的条件,$(a)$到$(b)$是M步的定义,$(b)$到$(c)$对任意参数都成立,而其等式的条件是固定$\ \theta\ $并调整好$\ Q\ $时成立,$(b)$到$(c)$只是固定$\ Q\ $调整$\ \theta\ $,在得到$\ \theta^{(k+1)}\ $时,只是最大化$\ \mathcal{L}(\theta^{(k)})\ $,也就是$\ \mathcal{L}(\theta^{(k+1)})\ $的一个下界而没有使等式成立。 130 | 131 | #### 总结 132 | 133 | ​ $\ EM\ $算法一句话总结就是:$\ E\ $步固定$\ \theta\ $优化$\ Q\ $,$\ M\ $步固定$\ Q\ $优化$\ \theta\ $。 -------------------------------------------------------------------------------- /md/FM算法简单梳理.md: -------------------------------------------------------------------------------- 1 | ##
FM算法简单梳理
2 | 3 |
杨航锋
4 | 5 | #### 1 $\ FM\ $算法的建模过程 6 | 7 | 在传统的线性模型中,各个特征之间都是独立考虑的,并没有涉及到特征与特征之间的交互关系,但实际上大量的特征之间是相互关联的。如何寻找相互关联的特征,基于上述思想$\ FM\ $算法应运而生。传统的线性模型为 8 | $$ 9 | y=w_0+\sum\limits_{i=1}^nw_ix_i 10 | $$ 11 | 在传统的线性模型的基础上中引入特征交叉项可得 12 | $$ 13 | y=w_0+\sum\limits_{i=1}^nw_ix_i+\sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^nw_{ij}x_ix_j 14 | $$ 15 | 在数据非常稀疏的情况下很难满足$\ x_i、x_j\ $都不为$\ 0\ $,这样将会导致$\ w_{ij}\ $不能够通过训练得到,因此无法进行相应的参数估计。可以发现参数矩阵$\ w \ $是一个实对称矩阵,$\ w_{ij}\ $可以使用矩阵分解的方法求解,通过引入辅助向量$\ V\ $ 16 | $$ 17 | \begin{aligned} 18 | V= 19 | \begin{bmatrix} 20 | v_{11} & v_{12} & v_{13} & \cdots & v_{1k} \\ 21 | v_{21} & v_{22} & v_{23} & \cdots & v_{2k} \\ 22 | \vdots & \vdots & \vdots & \ddots & \vdots \\ 23 | v_{n1} & v_{n2} & v_{n3} & \cdots & v_{nk} 24 | \end{bmatrix} 25 | = 26 | \begin{bmatrix} 27 | \mathbf{v}_1\\ 28 | \mathbf{v}_2\\ 29 | \vdots\\ 30 | \mathbf{v}_n 31 | \end{bmatrix} 32 | \end{aligned} 33 | $$ 34 | 然后用$\ w_{ij}=\mathbf{v}_i\mathbf{v}_j^T \ $对$\ w\ $进行分解 35 | $$ 36 | w=VV^T= 37 | \begin{bmatrix} 38 | \mathbf{v}_1\\ 39 | \mathbf{v}_2\\ 40 | \vdots\\ 41 | \mathbf{v}_n 42 | \end{bmatrix} 43 | \begin{bmatrix} 44 | \mathbf{v}_1^T & 45 | \mathbf{v}_2^T & 46 | \cdots & 47 | \mathbf{v}_n^T 48 | \end{bmatrix} 49 | $$ 50 | 综上可以发现原始模型的二项式参数为$\ \frac{n(n-1)}{2}\ $个,现在减少为$\ kn(k\ll n)\ $个。引入辅助向量$\ V\ $最为重要的一点是使得$\ x_tx_i\ $和$\ x_ix_j\ $的参数不再相互独立,这样就能够在样本数据稀疏的情况下合理的估计模型交叉项的参数 51 | $$ 52 | \begin{aligned} 53 | \langle\mathbf{v}_t,\mathbf{v}_i\rangle&=\sum\limits_{f=1}^k\mathbf{v}_{tf}\cdot\mathbf{v}_{if}\\ 54 | \langle\mathbf{v}_i,\mathbf{v}_j\rangle&=\sum\limits_{f=1}^k\mathbf{v}_{if}\cdot\mathbf{v}_{jf} 55 | \end{aligned} 56 | $$ 57 | $\ x_tx_i\ $和$\ x_ix_j\ $的参数分别为$\ \langle\mathbf{v}_{t},\mathbf{v}_i \rangle \ $和$\ \langle\mathbf{v}_{i},\mathbf{v}_j \rangle \ $,它们之间拥有共同项$\ \mathbf{v}_i\ $,即所有包含$\ \mathbf{v}_i\ $的非零组合特征的样本都可以用来学习隐向量$\ \mathbf{v}_i\ $,而原始模型中$\ w_{ti}\ $和$\ w_{ij}\ $却是相互独立的,这在很大程度上避免了数据稀疏造成的参数估计不准确的影响。因此原始模型可以改写为最终的$\ FM\ $算法 58 | $$ 59 | y=w_0+\sum\limits_{i=1}^nw_ix_i+\sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^n \langle\mathbf{v}_i,\mathbf{v}_j \rangle x_ix_j 60 | $$ 61 | 由于求解上述式子的时间复杂度为$\ \mathcal{O}(n^2)\ $,可以看出主要是最后一项计算比较复杂,因此从数学上对该式最后一项进行一些改写可以把时间复杂度降为$\ \mathcal{O}(kn)\ $ 62 | $$ 63 | \begin{equation} 64 | \begin{aligned} & \sum_{i=1}^{n-1} \sum_{j=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} \\=& \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j}-\frac{1}{2} \sum_{i=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{i}\right\rangle x_{i} x_{i} \\=& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} \mathbf{v}_{if} \mathbf{v}_{jf} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} \mathbf{v}_{if} \mathbf{v}_{if} x_{i} x_{i}\right) \\=& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} \mathbf{v}_{if} x_{i}\right)\left(\sum_{j=1}^{n} \mathbf{v}_{jf} x_{j}\right)-\sum_{i=1}^{n} \mathbf{v}_{if}^{2} x_{i}^{2}\right) \\=& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} \mathbf{v}_{if} x_{i}\right)^{2}-\sum_{i=1}^{n} \mathbf{v}_{if}^{2} x_{i}^{2}\right) \end{aligned} 65 | \end{equation} 66 | $$ 67 | 68 | #### 2 $\ FM\ $算法小结 69 | 70 | - $\ FM\ $算法降低了因数据稀疏,导致特征交叉项参数学习不充分的影响; 71 | - $\ FM\ $算法提升了参数学习效率和模型预估的能力。 72 | 73 | -------------------------------------------------------------------------------- /md/GBDT算法原理梳理.md: -------------------------------------------------------------------------------- 1 | #
$GBDT $算法原理梳理
2 | 3 |
杨航锋
4 | 5 | #### 1 $ GBDT\ $算法总述 6 | 7 | ​ $GBDT\ ​$的全称为$( \textcolor{red}{\boldsymbol{G}}radient\ \textcolor{red}{\boldsymbol{B}}oosting\ \textcolor{red}{\boldsymbol{D}}ecision\ \textcolor{red}{\boldsymbol{T}}ree)​$,是一种广泛用于分类、回归和推荐系统中排序任务的机器学习算法,属于$Boosting\ ​$算法族。$Boosting\ ​$算法的原理是先从初始训练集中训练一个基学习器,然后再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器分类错误的训练样本在后续的训练过程中受到更多关注,然后基于调整后的样本分布来训练下一个基分类器;如此反复进行,直至基学习器数目达到事先指定的值$\ T\ ​$,最后将这$\ T\ ​$个基学习器进行加权结合。值得注意的是$\ GBDT\ ​$中的树都是**回归树**而非分类树,$\ GBDT \ ​$的迭代更新过程即不断缩小残差的过程。 8 | 9 | #### 2 $Boosting \ $加法模型和前向分布算法 10 | 11 | ​ 令输入空间是$\ X\in \mathbb{R}^{n} \ ​$,输出空间是$\ Y\in\mathbb{R}\ ​$,不妨假设含有$m​$个样本数据($x^{(1)}​$,$y^{(1)}​$)、($x^{(2)}​$,$y^{(2)}​$)、$\cdots​$、($x^{(m)}​$,$y^{(m)}​$),其中$x^{(i)}\in X、y^{(i)}\in Y \ ​$。$ GBDT \ ​$算法的假设函数可以看成是由$\ T \ ​$棵树组合而成的加法模型: 12 | $$ 13 | \hat{y}^{(i)}=\sum\limits_{t=1}^Tf_t(x^{(i)}),f_t\in\mathscr{F} 14 | $$ 15 | 其中$\ \mathscr{F}\ $为所有树组合而成的函数空间,该模型的待求决策树函数为$\ \Theta_T=\{f_1,f_2,\cdots,f_T\} \ $,因此可以定义上述加法模型的目标函数为$\ Obj=\sum\limits_{i=1}^ml(y^{(i)},\hat{y}^{(i)}) \ $,通过前向分布算法来优化该目标函数: 16 | $$ 17 | \begin{aligned} 18 | \hat{y}^{(i)}_0&=\epsilon\\ 19 | \hat{y}^{(i)}_1&=f_1(x^{(i)})=\hat{y}^{(i)}_0+f_1(x^{(i)})\\ 20 | \hat{y}^{(i)}_2&=f_1(x^{(i)})+f_2(x^{(i)})=\hat{y}^{(i)}_1+f_2(x^{(i)})\\ 21 | &\cdots\\ 22 | \hat{y}^{(i)}_k&=\sum\limits_{t=1}^kf_t(x^{(i)})=\hat{y}^{(i)}_{k-1}+f_k(x^{(i)}) 23 | 24 | \end{aligned} 25 | $$ 26 | 所以,迭代更新到第$\ k\ ​$步时,目标函数可改写为: 27 | $$ 28 | Obj^{(k)}=\sum\limits_{i=1}^ml\left(y^{(i)},\hat{y}^{(i)}_{k-1}+f_k(x^{(i)})\right) 29 | $$ 30 | 最优化$\ Obj^{(k)}\ ​$即可求得该轮需要学习的决策树函数$\ f_k(x^{(i)})\ ​$。 31 | 32 | #### 3 $Gradient\ Boosting\ $算法 33 | 34 | ​ $Gradient \ Boosting\ ​$以负梯度代替残差来求解$\ f_k(x^{(i)})\ ​$,**对于任意可导函数$\ \boldsymbol{g(x)}\ ​$来说,总是存在如下关系$\ \textcolor{red}{\boldsymbol{g(x-\epsilon\nabla_{x}g(x)) \lt g(x)}} \ ​$**,$Gradient \ Boosting\ ​$算法利用损失函数的负梯度在当前模型的值作为之前残差的近似值来拟合回归树$\ f_k(x^{(i)})\ ​$。 35 | 36 | > **泰勒公式**:设$\ n\ $是一个正整数,如果定义在包含$\ x_0\ $的区间上的函数$\ f\ $在$\ x_0\ $点处$\ n+1\ $次可导,那么对于这个区间上的任意$\ x\ ​$都有: 37 | > $$ 38 | > f(x)=f(x_0)+\dfrac{f^{(1)}(x_0)}{1!}(x-x_0)+\dfrac{f^{(2)}(x_0)}{2!}(x-x_0)^2+\cdots+\dfrac{f^{(n)}(x_0)}{n!}(x-x_0)^n+R_n(x) 39 | > $$ 40 | > 等号右边的多项式称为函数$\ f(x)\ ​$在$\ x_0 \ ​$处的泰勒展开式,$\ R_n(x)\ ​$是泰勒公式的余项且是$\ (x-x_0)^n \ ​$的高阶无穷小。 41 | 42 | 为了求$\ l\left(y^{(i)},\hat{y}^{(i)}_{k-1}+f_k(x^{(i)})\right)\ ​$在$\ \hat{y}^{(i)}_{k-1} \ ​$处的一阶展开,不妨先对$\ l(y^{(i)},x)\ ​$在$\ \hat{y}^{(i)}_{k-1} \ ​$处进行一阶展开可得: 43 | $$ 44 | l(y^{(i)},x)\simeq l(y^{(i)},\hat{y}^{(i)}_{k-1})+\nabla_{\hat{y}^{(i)}_{k-1}}l(y^{(i)},\hat{y}^{(i)}_{k-1})\cdot(x-\hat{y}^{(i)}_{k-1}) 45 | $$ 46 | 令$\ x=\hat{y}^{(i)}_{k-1}+f_k(x^{(i)}) \ ​$,且记$\ \nabla_{\hat{y}^{(i)}_{k-1}}l\left(y^{(i)},\hat{y}^{(i)}_{k-1}\right) \ ​$为$\ g_i\ ​$则有: 47 | $$ 48 | l\left(y^{(i)},\hat{y}^{(i)}_{k-1}+f_k(x^{(i)})\right)\simeq l(y^{(i)},\hat{y}^{(i)}_{k-1})+g_if_k(x^{(i)}) 49 | $$ 50 | 故目标函数最终形式为: 51 | $$ 52 | Obj^{(k)}=\sum\limits_{i=1}^m \left(l(y^{(i)},\hat{y}^{(i)}_{k-1})+g_if_k(x^{(i)})\right) 53 | $$ 54 | 55 | #### 4 $XGBoost \ $算法 56 | 57 | ​ $XGBoost \ $算法是$\ GBDT\ $算法的改进版本,其目标函数为: 58 | $$ 59 | \begin{aligned} 60 | Obj^{(k)}&=\sum\limits_{i=1}^ml(y^{(i)},\hat{y}^{(i)}_k)+\sum\limits_{i=1}^T\Omega(f_i)\\ 61 | &=\sum\limits_{i=1}^ml(y^{(i)},\hat{y}^{(i)}_{k-1}+f_k(x^{(i)}))+\Omega(f_k)+C 62 | \end{aligned} 63 | $$ 64 | 同理为了求损失函数$\ l\left(y^{(i)},\hat{y}^{(i)}_{k-1}+f_k(x^{(i)})\right)\ ​$在$\ \hat{y}^{(i)}_{k-1} \ ​$处的二阶展开,不妨先对$\ l(y^{(i)},x)\ ​$在$\ \hat{y}^{(i)}_{k-1} \ ​$处进行二阶展开可得: 65 | $$ 66 | l(y^{(i)},x)\simeq l(y^{(i)},\hat{y}^{(i)}_{k-1})+\nabla_{\hat{y}^{(i)}_{k-1}}l(y^{(i)},\hat{y}^{(i)}_{k-1})\cdot(x-\hat{y}^{(i)}_{k-1})+\dfrac{1}{2}\nabla^2_{\hat{y}^{(i)}_{k-1}}l(y^{(i)},\hat{y}^{(i)}_{k-1})\cdot(x-\hat{y}^{(i)}_{k-1})^2 67 | $$ 68 | 令$\ x=\hat{y}^{(i)}_{k-1}+f_k(x^{(i)}) \ $,且记$\ \nabla_{\hat{y}^{(i)}_{k-1}}l\left(y^{(i)},\hat{y}^{(i)}_{k-1}\right) \ $为$\ g_i\ $、$\ \nabla^2_{\hat{y}^{(i)}_{k-1}}l\left(y^{(i)},\hat{y}^{(i)}_{k-1}\right) \ $为$\ h_i\ ​$则有: 69 | $$ 70 | l\left(y^{(i)},\hat{y}^{(i)}_{k-1}+f_k(x^{(i)})\right)\simeq l(y^{(i)},\hat{y}^{(i)}_{k-1})+g_if_k(x^{(i)})+\dfrac{1}{2}h_if^2_k(x^{(i)}) 71 | $$ 72 | 又因为在第$\ k\ $步$\ \hat{y}^{(i)}_{k-1} \ $其实是已知的,所以$\ l(y^{(i)},\hat{y}^{(i)}_{k-1})\ $是一个常数函数,故对优化目标函数不会产生影响,将上述结论带入目标函数$\ Obj^{(k)}\ $可得: 73 | $$ 74 | Obj^{(k)}\simeq\sum\limits_{i=1}^m\bigg[ g_if_k(x^{(i)})+\dfrac{1}{2}h_if^2_k(x^{(i)})\bigg]+\Omega(f_k) 75 | $$ 76 | 77 | ##### 4.1 优化目标函数 78 | 79 | ​ 以$\ XGBoost\ ​$算法的目标函数为例,对于任意决策树$\ f_k \ ​$,假设其叶子结点个数$\ T\ ​$,该决策树是由所有结点对应的值组成的向量$\ w\in\mathbb{R}^T\ ​$,以及能够把特征向量映射到叶子结点的函数$\ q(*):\mathbb{R}^d\rightarrow \{1,2,\cdots,T \} \ ​$构造而成的,且每个样本数据都存在唯一的叶子结点上。因此决策树$\ f_k\ ​$可以定义为$\ f_k(x)=w_{q(x)} \ ​$。决策树的复杂度可以由正则项$\ \Omega(f_k)=\gamma T+\dfrac{1}{2}\lambda\sum\limits_{j=1}^Tw_j^2 \ ​$来定义,该正则项表明决策树模型的复杂度可以由叶子结点的数量和叶子结点对应值向量$\ w \ ​$的$\ L2\ ​$范数决定。定义集合$\ I_j=\{i|q(x^{(i)})=j \}\ ​$为划分到叶子结点$\ j \ ​$的所有训练样本的集合,即之前训练样本的集合,现在都改写成叶子结点的集合,因此$\ XGBoost\ ​$算法的目标函数可以改写为: 80 | $$ 81 | \begin{aligned} 82 | Obj^{(k)}&\simeq\sum\limits_{i=1}^m\bigg[ g_if_k(x^{(i)})+\dfrac{1}{2}h_if^2_k(x^{(i)})\bigg]+\Omega(f_k)\\ 83 | &=\sum\limits_{i=1}^m\bigg[g_iw_{q(x^{(i)})}+\dfrac{1}{2}h_jw^2_{q(x^{(i)})} \bigg]+\gamma T+\dfrac{1}{2}\lambda\sum\limits_{j=1}^Tw_j^2\\ 84 | &=\sum\limits_{j=1}^T\bigg[(\sum\limits_{i\in I_j}g_i)w_j+\dfrac{1}{2}(\sum\limits_{i\in I_j}h_i+\lambda)w_j^2 \bigg]+\gamma T 85 | \end{aligned} 86 | $$ 87 | 令$\ G_j=\sum\limits_{i\in I_j}g_i ,\ H_j=\sum\limits_{i\in I_j}h_i \ $则有: 88 | $$ 89 | Obj^{(k)}\simeq\sum\limits_{j=1}^T\bigg[G_jw_j+\dfrac{1}{2}(H_j+\lambda)w_j^2 \bigg] 90 | $$ 91 | 分析可知当更新到第$\ k\ ​$步时,此时**决策树结构固定的情况下**,每个叶子结点有哪些样本是已知的,那么$\ q(*)\ ​$和$\ I_j\ ​$也是已知的;又因为$\ g_i\ ​$和$\ h_i\ ​$是第$\ k-1\ ​$步的导数,那么也是已知的,因此$\ G_j\ ​$和$\ H_j\ ​$都是已知的。令目标函数$\ Obj^{(k)}\ ​$的一阶导数为$\ 0\ ​$,即可求得叶子结点$\ j\ ​$对应的值为: 92 | $$ 93 | w^*_j=-\dfrac{G_j}{H_j+\lambda} 94 | $$ 95 | 96 | 因此针对于结构固定的决策树,最优的目标函数$\ Obj\ $为: 97 | $$ 98 | Obj=-\dfrac{1}{2}\sum\limits_{j=1}^T\dfrac{G_j^2}{H_j+\lambda}+\gamma T 99 | $$ 100 | 上面的推导是建立在决策树结构固定的情况下,然而决策树结构数量是无穷的,所以实际上并不能穷举所有可能的决策树结构,什么样的决策树结构是最优的呢?通常使用贪心策略来生成决策树的每个结点,$\ XGBoost \ $算法的在决策树的生成阶段就对过拟合的问题进行了处理,因此无需独立的剪枝阶段,具体步骤可以归纳为: 101 | 102 | 1. 从深度为$\ 0\ $的树开始对每个叶子结点穷举所有的可用特征; 103 | 2. 针对每一个特征,把属于该结点的训练样本的该特征升序排列,通过线性扫描的方式来决定该特征的**最佳分裂点**,并采用最佳分裂点时的**收益**; 104 | 3. 选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,把该结点生成出左右两个新的叶子结点,并为每个新结点关联新的样本集; 105 | 4. 退回到第一步,继续递归操作直到满足特定条件。 106 | 107 | 因为对某个结点采取的是二分策略,分别对应左子结点和右子结点,除了当前待处理的结点,其他结点对应的$\ Obj \ ​$值都不变,所以对于收益的计算只需要考虑当前结点的$\ Obj \ ​$值即可,分裂前针对该结点的最优目标函数为: 108 | $$ 109 | Obj^{(before)}=-\dfrac{1}{2}\dfrac{(G_L+G_R)^2}{(H_L+H_R)+\lambda}+\gamma 110 | $$ 111 | 分裂后的最优目标函数为: 112 | $$ 113 | Obj^{(later)}=-\dfrac{1}{2}\bigg[\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda} \bigg]+2\gamma 114 | $$ 115 | 那么对于该目标函数来说,分裂后的收益为: 116 | $$ 117 | \begin{aligned} 118 | Gain&=Obj^{(before)}-Obj^{(later)}\\ 119 | &=\dfrac{1}{2}\bigg[\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{(H_L+H_R)+\lambda} \bigg]-\gamma 120 | \end{aligned} 121 | $$ 122 | 故可以用上述公式来决定最有分裂特征和最优特征分裂点。 123 | 124 | ##### 4.2 总结 125 | 126 | ​ $XGBoost \ $算法的过程可以归纳为: 127 | 128 | 1. 前向分布算法的每一步都生成一棵决策树; 129 | 2. 拟合该决策树之前,先计算损失函数在每个样本数据上的一阶导$\ g_i \ $和二阶导$\ h_i \ $; 130 | 3. 通过贪心策略生成一棵决策树,计算每个叶子结点的$\ G_j\ $和$\ H_j\ $并计算预测值$\ w\ $; 131 | 4. 把新生成的决策树$\ f_k(x)\ $加入$\ \hat{y}^{(i)}_k=\hat{y}^{(i)}_{k-1}+\epsilon f_k(x^{(i)}) \ $,其中$\ \epsilon\ $是学习率主要控制模型的过拟合。 132 | 133 | #### 5 $XGBoost\ $的优势 134 | 135 | ​ 相比于普通的$\ GBDT \ $算法$\ XGBoost\ $算法的主要优点在于: 136 | 137 | - 不仅支持决策树作为基分类器,还支持其它线性分类器; 138 | - 使用了损失函数的二阶泰勒展开,因此与损失函数更接近,收敛速度更快; 139 | - 在目标函数中加入了正则项,用于控制模型的复杂度; 140 | - $Shrinkage\ $也就是之前说的$\ \epsilon\ $,主要用于削弱每棵决策树的影响,让后面有更大的学习空间,实际应用中一般把$\ \epsilon\ $设置的小点,迭代次数设置的大点; 141 | - 列抽样,$\ XGBoost\ $从随机森林算法中借鉴而来,支持列抽样可以降低过拟合,并且减少计算; 142 | - 支持对缺失值的处理,对于特征值缺失的样本,$\ XGBoost\ $可以学习这些缺失值的分裂方向; 143 | - 支持并行,在对每棵决策树进行结点分裂时,需要每个特征的增益,选择最大的那个特征作为分裂特征,各个特征的增益计算可以多线程进行; 144 | - 近似算法,决策树结点在分裂时需要穷举每个可能的分裂点,当数据没法全部加载到内存中时,这种方法会比较慢,$\ XGBoost\ $提出了一种近似的方法去高效的生成候选分割点。 145 | 146 | -------------------------------------------------------------------------------- /md/GBDT算法系列随想.md: -------------------------------------------------------------------------------- 1 | #
$GBDT $算法系列随想
2 | 3 |
杨航锋
4 | 5 | #### 1 分裂点寻找与优化 6 | 7 | 令输入空间是$\ X\in \mathbb{R}^{n} \ $,输出空间是$\ Y\in\mathbb{R}\ $,不妨假设含有$m$个样本数据($x^{(1)}$,$y^{(1)}$)、($x^{(2)}$,$y^{(2)}$)、$\cdots$、($x^{(m)}$,$y^{(m)}$),其中$x^{(i)}\in X、y^{(i)}\in Y \ $。$\ T\ $为叶子结点个数,$\ \zeta $为输出数据$y^{(i)} \ $在叶子结点$\ T\ $上的划分,$\ |\zeta|\ $表示在该划分下输出数据$\ y^{(i)}\ $的个数,因此可以定义$\ GBDT\ $回归树的整体$\ loss \ $ 8 | $$ 9 | L^{(before)}=\sum\limits_{j=1}^T\sum\limits_{i\in\zeta_j}(y^{(i)}-\frac{1}{|\zeta_j|}\sum\limits_{i\in\zeta_j}y^{(i)})^2 10 | $$ 11 | 12 | 13 | 如果回归树还能继续分裂下去,不妨假设落在第$\ \color{red} j\ $个结点的数据,随着特征点$\ x_k^{(i)} \ $的选择后继续分裂成两部分,一部分是左子结点部分$\ \zeta_j^{(l)}\ $另一部分为右子结点$\ \zeta_j^{(r)} \ $,那么分裂后的$\ loss \ $就转化为 14 | $$ 15 | L^{(end)}=\sum\limits_{t=1,j\neq t}^T\sum\limits_{i\in\zeta_j}(y^{(i)}-\frac{1}{|\zeta_j|}\sum\limits_{i\in\zeta_j}y^{(i)})^2+\sum\limits_{i\in\zeta_j^{(l)}}(y^{(i)}-\frac{1}{|\zeta_j^{(l)}|}\sum\limits_{i\in\zeta_j^{(l)}}y^{(i)})^2+\sum\limits_{i\in\zeta_j^{(r)}}(y^{(i)}-\frac{1}{|\zeta_j^{(r)}|}\sum\limits_{i\in\zeta_j^{(r)}}y^{(i)})^2 16 | $$ 17 | 最后希望分裂之后的$\ loss\ $比分裂之前的$\ loss\ $要小,当然越小越好,即求解 18 | $$ 19 | \begin{aligned} 20 | \mathop{\arg\max}_{x_k^{(i)}}\ \Delta L&=L^{(before)}-L^{(end)}\\ 21 | &=\sum\limits_{i\in\zeta_j}(y^{(i)}-\frac{1}{|\zeta_j|}\sum\limits_{i\in\zeta_j}y^{(i)})^2-\sum\limits_{i\in\zeta_j^{(l)}}(y^{(i)}-\frac{1}{|\zeta_j^{(l)}|}\sum\limits_{i\in\zeta_j^{(l)}}y^{(i)})^2-\sum\limits_{i\in\zeta_j^{(r)}}(y^{(i)}-\frac{1}{|\zeta_j^{(r)}|}\sum\limits_{i\in\zeta_j^{(r)}}y^{(i)})^2 22 | \end{aligned} 23 | $$ 24 | 对于上式的求解问题,可以通过遍历$\ x^{(i)}\ $中的所有取值,然后筛选出使得$\ \Delta L \ $最大的切分点$\ x_k^{(i)} \ $即可,这样做的算法时间复杂度为$\ \Theta(n^3)\ $显然这并不是最优解。那么该如何优化呢?由于$\ \sum\limits_{i\in\zeta_j}(y^{(i)}-\dfrac{1}{|\zeta_j|}\sum\limits_{i\in\zeta_j}y^{(i)})^2\ $为固定值且与待优化参数没有关系,故优化目标可以改写成 25 | $$ 26 | \begin{aligned} 27 | \mathop{\arg\min}_{x_k^{(i)}}\ \sum\limits_{i\in\zeta_j^{(l)}}(y^{(i)}-\frac{1}{|\zeta_j^{(l)}|}\sum\limits_{i\in\zeta_j^{(l)}}y^{(i)})^2+\sum\limits_{i\in\zeta_j^{(r)}}(y^{(i)}-\frac{1}{|\zeta_j^{(r)}|}\sum\limits_{i\in\zeta_j^{(r)}}y^{(i)})^2 28 | \end{aligned} 29 | $$ 30 | 求解这个问题之前先看一个引理 31 | 32 | > $$ 33 | > \begin{aligned} 34 | > \sum\limits_{i=1}^n(x_i-\overline{x})^2&=\sum\limits_{i=1}^n(x_i^2-2\overline{x}x_i+\overline{x}^2)\\ 35 | > &=\sum\limits_{i=1}^n x_i^2-2\overline{x} \cdot n \cdot \frac{1}{n}\sum\limits_{i=1}^n x_i+ n\overline{x}^2\\ 36 | > &=\sum\limits_{i=1}^n x_i^2-n\overline{x}^2 37 | > 38 | > 39 | > \end{aligned} 40 | > $$ 41 | 42 | 所以可以把优化目标化简为 43 | $$ 44 | \begin{aligned} 45 | \mathop{\arg\min}_{x_k^{(i)}}&\ \sum\limits_{i\in\zeta_j^{(l)}}(y^{(i)}-\frac{1}{|\zeta_j^{(l)}|}\sum\limits_{i\in\zeta_j^{(l)}}y^{(i)})^2+\sum\limits_{i\in\zeta_j^{(r)}}(y^{(i)}-\frac{1}{|\zeta_j^{(r)}|}\sum\limits_{i\in\zeta_j^{(r)}}y^{(i)})^2\\ 46 | &=\sum\limits_{i\in\zeta_j^{(l)}}(y^{(i)})^2+\sum\limits_{i\in\zeta_j^{(r)}}(y^{(i)})^2 47 | -\frac{1}{|\zeta_j^{(l)}|}(\sum\limits_{i\in\zeta_j^{(l)}}y^{(i)})^2-\frac{1}{|\zeta_j^{(r)}|}(\sum\limits_{i\in\zeta_j^{(r)}}y^{(i)})^2\\ 48 | &=\sum\limits_{i}(y^{(i)})^2 49 | -\frac{1}{|\zeta_j^{(l)}|}(\sum\limits_{i\in\zeta_j^{(l)}}y^{(i)})^2-\frac{1}{|\zeta_j^{(r)}|}(\sum\limits_{i\in\zeta_j^{(r)}}y^{(i)})^2 50 | \end{aligned} 51 | $$ 52 | 由于$\ \sum\limits_{i}(y^{(i)})^2 \ $是定值那么最后的优化求解问题转化为,确定切分点$\ x_k^{(i)} \ $使得$\frac{1}{|\zeta_j^{(l)}|}(\sum\limits_{i\in\zeta_j^{(l)}}y^{(i)})^2+\frac{1}{|\zeta_j^{(r)}|}(\sum\limits_{i\in\zeta_j^{(r)}}y^{(i)})^2 \ $的最大值问题,算法时间复杂度为$\ \Theta(n^2)\ $。 53 | 54 | #### 2 -------------------------------------------------------------------------------- /md/Isolation Forest算法梳理.md: -------------------------------------------------------------------------------- 1 | #
Isolation Forest算法梳理
2 | 3 |
杨航锋
4 | 异常是一个观测值,其偏离其他观测值太多以至于可以合理地推测该观测来自于其他机制,孤立森林$\ (Isolation\ Forest)\ $是一个基于$\ Ensemble\ $的快速异常检测方法,具有线性时间复杂度和高精准度。其可以用于网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等。 5 | 6 | #### 1 $\ iTree \ $的构建 7 | 8 | > 孤立森林算法的理论基础有两点: 9 | > 10 | > - 异常数据占总样本量的比例很小; 11 | > - 异常点的特征值与正常点的差异很大。 12 | 13 | 提到森林,自然少不了树,毕竟森林都是由树构成的,理解$\ Isolation\ Forest\ $(简称$\ iForest\ $)前,首先需要了解$\ Isolation\ Tree\ $(简称$\ iTree\ $)是怎么构成的,$\ iTree\ $是一棵随机二叉树,每一个节点要么有两个孩子,要么就是叶子节点。假设给定一堆数据集$\ \mathbb{D} \ $,这里$\ \mathbb{D} \ $的所有属性都是连续型的变量,$\ iTree\ $的构建过程如下: 14 | 15 | 1. 随机选择一个属性$\ Attr\ $; 16 | 2. 随机选择该属性的一个值$\ Value\ $,$\ \min\{Attr\} 23 | 24 | $\ iTree \ $构建完成之后,只需要追踪测试数据落在$\ iTre e \ $哪个叶子节点上即可评估该数据是否为异常数据,由图中$\ i Tree \ $的构造过程可以发现异常数据通常会很快被分配到叶子节点上,因此可以使用叶子结点到根结点的路径长度(即边的条数)$\ h(x)\ $来判断一条记录$\ x\ $是否是异常点。 25 | 26 | #### 2 $\ iForest \ $的构建 27 | 28 | 由于$\ iTree\ $是随机选择属性和随机选择属性值来构建的,因此可以预见对于单棵$\ iTree\ $的预测效果肯定不会很理想,因此通过引入多棵$\ iTree\ $共同来预测那么从效果上看肯定会更具有说服力。$\ iForest\ $和$\ Random\ Forest\ $的方法有些类似,都是通过随机采样,利用部分采样数据来构造每一棵树,以保证不同树之间的差异性。在构建$\ iForest\ $的过程中有,采样的样本大小$\ \psi \ $和$\ iTree\ $的数量$ \ t \ $这两个超参数需要确定,样本采样大小超过$\ 256\ $效果就提升不大了。 29 | 30 | 31 | 32 | 通过采样数据不仅可以降低计算时间的上面的浪费,而且还能够解决一些其它的小问题 33 | 34 | 35 | 36 | 左图是原始数据,右图是经过采样了的数据,蓝色代表正常样本,红色代表异常样本。可以看出,在采样之前,正常样本和异常样本出现了重叠,因此很难分开,但通过采样之后,异常样本和正常样本可以明显的分开。$\ t\ $控制了$\ iTree\ $的数量即$\ Ensemble\ size \ $,孤立森林算法提出者通过实验发现,当$\ t=100\ $之前时,算法就会收敛,故通常设置$\ t\ $为默认值$\ 100\ $,训练一个$\ iForest\ $最差情况下的时间复杂度为$\ \mathcal{O}(t\psi^2) \ $空间复杂度为$\ \mathcal O(t\psi) \ $。 37 | 38 | #### 3 评估 39 | 40 | 为了更好的归一化和比较,孤立森林通过引入异常值函数$\ s(x, n)\ $来衡量记录$\ x\ $是否为异常点。 41 | 42 | > 给定一个包含$\ n\ $个样本的数据集,树的平均路径长度为: 43 | > $$ 44 | > c(n)=2H(n-1)-\frac{2(n-1)}{n} 45 | > $$ 46 | > 其中,$\ H(*)\ $为调和数,$\ H(*)=\ln(*)+\xi \ $,$\ \xi \ $为欧拉常数,约为$\ 0.5772156649\ $ 。$\ c(n)\ $为给定样本数$\ n\ $时,路径长度的平均值,用来标准化记录$\ x\ $的路径长度$\ h(x)\ $。 47 | 48 | 故记录$\ x\ $的异常得分可以定义为: 49 | $$ 50 | s(x, n)=2^{-\frac{E(h(x))}{c(n)}} 51 | $$ 52 | 其中,$\ E(h(x))\ $为记录$\ x\ $在多个$\ iTree\ $中的路径长度的期望值。可视化$\ s(x,n)\ $与$\ E(h(x))\ $的关系 53 | 54 | 55 | 56 | 可以得出以下结论: 57 | 58 | - 当$\ E(h(x))\rightarrow c(n) \ $时,$\ s\rightarrow 0.5 \ $,即记录$\ x\ $的平均长度与树的平均路径长度相近时,则不能区分是否为异常; 59 | - 当$\ E(h(x))\rightarrow 0 \ $,$\ s\rightarrow 1 \ $,即记录$\ x\ $的异常分数接近$\ 1\ $时,被判定为异常数据; 60 | - 当$\ E(h(x))\rightarrow n-1 \ $时,$\ s\rightarrow 0 \ $,被判定为正常数据。 61 | 62 | -------------------------------------------------------------------------------- /md/L1和L2正则化的概率解释.md: -------------------------------------------------------------------------------- 1 | ##
$\ L1\ $和$\ L2\ $正则化的概率解释
2 | 3 |
杨航锋
4 | 5 | ​ 正则化在机器学习中主要用于控制模型的复杂度、解决过拟合和追求更优预测效果的重要手段,而常见的正则化有$\ L1 \ $正则化和$\ L2 \ $正则化。$\ L1\ $正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,用于特征筛选;$\ L2\ $正则化可以防止过拟合,提升模型的泛化能力。 6 | 7 | #### $\ L1\ $正则化和$\ L2 \ $正则化的符号化描述 8 | 9 | ​ 假设待优化函数为$\ f(\theta)\ $,其中$\ \theta\in\R^n \ $,那么优化问题可以转化为求 10 | $$ 11 | \mathop{\arg\min}_{\theta}\ f(\theta) 12 | $$ 13 | 14 | - $\ L1\ $正则化,即对参数$\ \theta \ $加上$\ L1\ $范数约束 15 | $$ 16 | \mathop{\arg\min}_{\theta}\ J_1(\theta)=f(\theta)+\color{magenta}\lambda\Vert\theta\Vert_1 17 | $$ 18 | 19 | - $\ L2\ $正则化,即对参数$\ \theta \ $加上$\ L2\ $范数的平方约束 20 | $$ 21 | \mathop{\arg\min}_{\theta}\ J_2(\theta)=f(\theta)+\color{magenta}\lambda\Vert\theta\Vert_2^2 22 | $$ 23 | 24 | 25 | 26 | 27 | 28 | #### 从贝叶斯先验概率看正则化 29 | 30 | ​ 假设输入空间是$\ X\in\R^{n} \ $,输出空间是$\ Y\ $,不妨假设含有$m$个样本数据($x^{(1)}$,$y^{(1)}$)、($x^{(2)}$,$y^{(2)}$)、$\cdots$、($x^{(m)}$,$y^{(m)}$),其中$x^{(i)}\in X、y^{(i)}\in Y \ $。 31 | 32 | ​ 贝叶斯学派认为参数$\ \theta\ $也是服从某种概率分布的,即先给定$\ \theta \ $的先验分布为$\ p(\theta) \ $,然后根据贝叶斯定理$\ \color{Red}P(\theta|(X, Y))= \dfrac{P((Y,X);\theta)\times P(\theta)}{P(X,Y)}\sim P(Y|X;\theta)\times P(\theta)\ $(这里的$\ Y|X\ $仅仅是一种记号,代表给定的$\ X\ $对应相关的$\ Y\ $),因此通过极大似然估计可求参数$\ \theta\ $。 33 | $$ 34 | \mathop{\arg\max}_{\theta}\ L(\theta)=\prod_{i=1}^{m}p(y^{(i)}|x^{(i)};\theta)p(\theta) 35 | $$ 36 | 等价于求解对数化极大似然函数$\ l(\theta)\ $ 37 | $$ 38 | \begin{aligned} 39 | \mathop{\arg\max}_{\theta}\ l(\theta)&=\log L(\theta)\\ 40 | &=\sum\limits_{i=1}^m\log p(y^{(i)}|x^{(i)};\theta)+\sum\limits_{i=1}^m\log p(\theta)\\ \\ 41 | \Leftrightarrow \mathop{\arg\min}_{\theta}\ -l(\theta)&=-\log L(\theta) \\ 42 | &=-\sum\limits_{i=1}^m\log p(y^{(i)}|x^{(i)};\theta)-\sum\limits_{i=1}^m\log p(\theta)\\ 43 | &=f(\theta)\color{magenta}-\sum\limits_{i=1}^m\log p(\theta) 44 | \end{aligned} 45 | $$ 46 | 47 | - $\ L1\ $正则化的概率解释 48 | 49 | ​ 假设$\ \theta \ $服从的先验分布为均值为$\ 0\ $参数为$\ \lambda\ $的拉普拉斯分布,即$\ \theta\sim La(0, \lambda) \ $其中,$p(\theta)= \frac{1}{2\lambda}e^{- \frac{|\theta|}{\lambda}}$。因此,上述优化函数可转换为: 50 | $$ 51 | \begin{aligned} 52 | &\mathop{\arg\min}_{\theta}\ f(\theta)\color{magenta}-\sum\limits_{i=1}^m\log p(\theta)\\ 53 | &=f(\theta)-\sum\limits_{i=1}^m\log \frac{1}{2\lambda}e^{-\frac{|\theta_i|}{\lambda}}\\ 54 | &=f(\theta)-\sum\limits_{i=1}^m \log\frac{1}{2\lambda} + \frac{1}{\lambda}\sum\limits_{i=1}^m|\theta_i|\\ 55 | &\Leftrightarrow \mathop{\arg\min}_{\theta}\ f(\theta) + \color{magenta}\lambda\Vert\theta\Vert_1 56 | \end{aligned} 57 | $$ 58 | 从上面的数学推导可以看出,$\ L1\ ​$正则化可以看成是:通过假设权重参数$\ \theta\ ​$的先验分布为拉普拉斯分布,由最大后验概率估计导出。​ 59 | 60 | - $\ L2\ $正则化的概率解释 61 | 62 | ​ 假设$\ \theta \ $服从的先验分布为均值为$\ 0\ $方差为$\ \sigma^2\ $的正态分布,即$\ \theta\sim \mathcal{N} (0, \sigma^2) \ $其中,$\ p(\theta)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{\theta^2}{2\sigma^2}} \ $。因此,上述优化函数可转换为: 63 | $$ 64 | \begin{aligned} 65 | &\mathop{\arg\min}_{\theta}\ f(\theta)\color{magenta}-\sum\limits_{i=1}^m\log p(\theta)\\ 66 | &=f(\theta)-\sum\limits_{i=1}^m\log \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{\theta_i^2}{2\sigma^2}}\\ 67 | &=f(\theta)-\sum\limits_{i=1}^m \log \frac{1}{\sqrt{2\pi}\sigma} + \frac{1}{2\sigma^2}\sum\limits_{i=1}^m \theta_i^2\\ 68 | &\Leftrightarrow\mathop{\arg\min}_{\theta} f(\theta) + \color{magenta}\lambda\Vert\theta\Vert_2^2 69 | \end{aligned} 70 | $$ 71 | 从上面的数学推导可以看出,$\ L2\ $正则化可以看成是:通过假设权重参数$\ \theta\ $的先验分布为正态分布,由最大后验概率估计导出。 72 | 73 | -------------------------------------------------------------------------------- /md/LSTM和GRU算法简单梳理.md: -------------------------------------------------------------------------------- 1 | #
$LSTM$和$GRU$算法简单梳理
2 | 3 |
杨航锋
4 | 5 | #### 1 $\boldsymbol{LSTM}\ $框架结构 6 | 7 | 8 | 9 | 10 | 11 | $\ h_{t}\ $:当前序列的隐藏状态、$\ x_{t}\ $:当前序列的输入数据、$\ C_{t}\ $:当前序列的细胞状态、$\ \sigma\ $:$\ sigmoid\ $激活函数、$\ \tanh \ $:$\ \tanh \ $激活函数。 12 | 13 | #### 2 $\boldsymbol{LSTM}\ $之遗忘门 14 | 15 | 16 | 17 | 遗忘门是控制是否遗忘的,在$\ LSTM\ $中即以一定的概率控制是否遗忘上一层的细胞状态。图中输入的有前一序列的隐藏状态$\ h_{t-1}\ $和当前序列的输入数据$\ x_t\ $,通过一个$\ sigmoid \ $激活函数得到遗忘门的输出$\ f_t \ $。因为$\ sigmoid\ $函数的取值在$\ [0, 1]\ $之间,所以$\ f_t \ $表示的是遗忘前一序列细胞状态的概率,数学表达式为 18 | $$ 19 | \begin{equation} 20 | 21 | f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right) 22 | 23 | \end{equation} 24 | $$ 25 | 26 | #### 3 $\boldsymbol{LSTM}\ $之输入门 27 | 28 | 29 | 30 | 输入门是用来决定哪些数据是需要更新的,由$\ sigmoid\ $层决定;然后,一个$\ \tanh\ $层为新的候选值创建一个向量$\ \tilde{C_t}\ $ ,这些值能够加入到当前细胞状态中,数学表达式为 31 | $$ 32 | \begin{equation} 33 | \begin{aligned} i_{t} &=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right) \\ \tilde{C}_{t} &=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right) \end{aligned} 34 | \end{equation} 35 | $$ 36 | 37 | #### 4 $\boldsymbol{LSTM}\ $之细胞状态更新 38 | 39 | 40 | 41 | 前面的遗忘门和输入门的结果都会作用于细胞状态$\ C_t \ $,在决定需要遗忘和需要加入的记忆之后,就可以更新前一序列的细胞状态$\ C_{t-1}\ $到当前细胞状态$\ C_t\ $了,前一序列的细胞状态$\ C_{t-1}\ $乘以遗忘门的输出$\ f_t\ $表示决定遗忘的信息,$\ i_t\odot \tilde{C_t}\ $表示新的记忆信息,数学表达式为 42 | $$ 43 | C_{t}=C_{t-1}\odot f_t+i_t\odot \tilde{C_t} 44 | $$ 45 | 46 | #### 5 $\boldsymbol{LSTM}\ $之输出门 47 | 48 | 49 | 50 | 在得到当前序列的细胞状态$\ C_t\ $后,就可以计算当前序列的输出隐藏状态$\ h_t\ $了,隐藏状态$\ h_t\ $的更新由两部分组成,第一部分是$\ o_t\ $,它由前一序列的隐藏状态$\ h_{t-1}\ $和当前序列的输入数据$\ x_t \ $通过激活函数$\ sigmoid\ $得到,第二部分由当前序列的细胞状态$\ C_t \ $经过$\ \tanh\ $激活函数后的结果组成,数学表达式为 51 | $$ 52 | \begin{equation} 53 | \begin{aligned} 54 | o_t&=\sigma{(W_o\cdot[h_{t-1},x_t]+b_o)}\\ 55 | h_t&=o_t\odot \tanh{(C_t)} 56 | \end{aligned} 57 | \end{equation} 58 | $$ 59 | 60 | #### 6 $\boldsymbol{GRU}\ $框架结构及原理 61 | 62 | 63 | 64 | 循环门单元($Gated\ Recurrent\ Unit,\ GRU$),它组合了遗忘门和输入门到一个单独的更新门当中,也合并了细胞状态$\ C\ $和隐藏状态$\ h\ $,并且还做了一些其他的改变,使得其模型比标准$\ LSTM\ $模型更简单,其数学表达式为 65 | $$ 66 | \begin{equation} 67 | \begin{aligned} z_{t} &=\sigma\left(W_{z} \cdot\left[h_{t-1}, x_{t}\right]\right) \\ r_{t} &=\sigma\left(W_{r} \cdot\left[h_{t-1}, x_{t}\right]\right) \\ \tilde{h}_{t} &=\tanh \left(W \cdot\left[r_{t} \odot h_{t-1}, x_{t}\right]\right) \\ h_{t} &=\left(1-z_{t}\right) \odot h_{t-1}+z_{t} \odot \tilde{h}_{t} \end{aligned} 68 | \end{equation} 69 | $$ 70 | 首先介绍$\ GRU\ $的两个门,它们分别是重置门$\ r_t\ $和更新门$\ z_t\ $,计算方法与$\ LSTM\ $中门的计算方法是一致的;然后是计算候选隐藏层$\ \tilde{h}_t\ $,该候选隐藏层和$\ LSTM\ $中的$\ \tilde{C}_t\ $类似,都可以看成是当前时刻的新信息,其中$\ r_t\ $用来控制需要保留多少之前的记忆,如果$\ r_t\ $为$\ 0\ $则表示$\ \tilde{h}_t\ $只保留当前序列的输入信息;最后$\ z_t\ $控制需要从前一序列的隐藏层$\ h_{t-1}\ $中遗忘多少信息和需要加入多少当前序列的隐藏层信息$\ \tilde{h}_t \ $,从而得到当前序列的输出隐藏层信息$\ h_t\ $,而$\ GRU\ $是没有输出门的。 71 | 72 | #### 参考资料 73 | 74 | [Understanding LSTM Networks](http://colah.github.io/posts/2015-08-Understanding-LSTMs/) 75 | 76 | -------------------------------------------------------------------------------- /md/PCA算法.md: -------------------------------------------------------------------------------- 1 | ##
PCA算法
2 | 3 |
杨航锋
4 | 5 | ​ **主成分分析** (**PCA)** 是一种分析、简化数据集的技术,主成分分析经常用于降低数据集的维数,同时保持数据集中的对方差贡献最大的特征,然后它是一种有损压缩算法。[更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | ​ $\ PCA \ $ 问题的优化目标:将一组$\ n \ $维向量降为$\ k \ $维$\ (0\lt k\le n) \ $,其目标是选择$\ k \ $个单位正交基,使得原始数据变换到该组基上后,各特征两两之间的协方差为$\ 0 \ $,而特征的方差则尽可能大,当在正交的约束下取最大的$\ k \ $个方差。 8 | 9 | ​ 假设我们有$\ m\ $个$\ n\ $维数据记录,将其按列排成$\ n\times m\ $的矩阵$\ X\ $,令$\ C=\dfrac{1}{m}XX^T\ $,则$\ C\ $是一个半正定对称矩阵$\ (\xi C\xi^T\ge 0)\ $,其对角线分别为各个特征的方差,而$\ C_{i,j}=C_{j,i}\ $,分别表示$\ i、j\ $两个特征的协方差。 $\ P\ $是一组基按行组成的矩阵 ,$\ Y\ $为$\ P\ $对$\ X\ $做基变换后的数据即降维后的数据,有$\ Y=PX\ $。 10 | $$ 11 | \begin{aligned} 12 | D&=\dfrac{1}{m}YY^T\\ 13 | &=\dfrac{1}{m}(PX)(PX)^T\\ 14 | &=P(\dfrac{1}{m}XX^T)P^T\\ 15 | &=PCP^T 16 | \end{aligned} 17 | $$ 18 | 因此原优化目标转化成寻找一个矩阵$\ P\ $,满足$\ PCP^T\ $是一个对角矩阵,并且对角元素按从大到小依次排列,那么$\ P\ $的前$\ k\ $行就是要寻找的基,用$\ P\ $的前$\ k\ $行组成的矩阵乘以$\ X\ $就使得$\ X\ $从$\ n\ $维降到了$\ k\ $维并满足原始优化条件,又因为$\ C\ $是实对称矩阵故可相似对角化。 19 | 20 | #### 极大投影方差法 21 | 22 | 23 | 24 | 极大投影方差法的思想是使得在投影后的空间中数据的方差最大,选择数据方差最大的方向进行投影,才能最大化数据的差异性,因此可以保留更多的原始数据信息。假设输入空间 $\cal X \in \R^n \ $ 为$\ n\ $维向量的集合,特征向量 $\ x^{(i)} \in \cal X\ $,投影向量为$\ u \in \mathbb{R}^d\ $且限制$\ u\ $的模长为$\ 1\ $即$\ u^Tu=1\ $,对原始特征向量$\ x^{(i)}\ $进行去中心化处理,使得去中心化后的特征向量$\ z^{(i)}\ $各特征分量的均值为$\ 0\ $。 25 | 26 | > 令$\ \overline{x}=(\overline{x_1}, \overline{x_2}, \cdots,\overline{x_n})\ $,$\ \overline{x_i} \ $为第$\ i\ $个特征的均值,故有 27 | > $$ 28 | > \begin{aligned} 29 | > 0_n^T&=\frac{1}{m}\sum\limits_{i=1}^mz^{(i)}\\ 30 | > &=\frac{1}{m}\sum\limits_{i=1}^m(x^{(i)}-\overline{x})\\ 31 | > &=\frac{1}{m}\sum\limits_{i=1}^m x^{(i)}-\frac{1}{m}\cdot m\cdot\overline{x}\\ 32 | > &=\overline{x}-\overline{x} 33 | > \end{aligned} 34 | > $$ 35 | > 为什么限制$\ u\ $的模长为$\ 1\ $? 36 | > $$ 37 | > (z^{(i)})^Tu=\vert (z^{(i)})^T \vert\cdot\vert u\vert\cdot \cos\theta 38 | > $$ 39 | > 这样特征向量$\ z^{(i)}\ $在$\ u\ $上的投影可以表示为内积的形式。 40 | 41 | 样本投影后的方差为 42 | $$ 43 | \begin{aligned} 44 | \sigma(X,u)&=\frac{1}{m}\sum\limits_{i=1}^m[(z^{(i)})^T u-0]^2\\ 45 | &=\frac{1}{m}\sum\limits_{i=1}^m[(z^{(i)})^T u]^T[(z^{(i)})^T u]\\ 46 | &=\frac{1}{m}\sum\limits_{i=1}^m u^Tz^{(i)}(z^{(i)})^Tu\\ 47 | &=u^T{\color{red}{S}}u 48 | \end{aligned} 49 | $$ 50 | 因此优化函数为 51 | $$ 52 | \begin{aligned} 53 | &\mathop{\arg\max}_{u}\ u^TSu\\ 54 | &s.t.\ \ \ u^Tu=1\\ 55 | \ 56 | \end{aligned} 57 | $$ 58 | 通过拉格朗日方法转换为无约束问题,其中$\ \lambda\ $为拉格朗日乘子 59 | $$ 60 | \mathop{\arg\max}_{u}\ u^TSu +\lambda(1-u^Tu) 61 | $$ 62 | 对上式求导可得 63 | $$ 64 | Su=\lambda u 65 | $$ 66 | 从上式可知,$\ u\ $是协方差矩阵$\ S\ $的特征向量,$\ \lambda\ $为特征值。同时有 67 | $$ 68 | \sigma(X,u)=u^TSu=u^T\lambda u=\lambda 69 | $$ 70 | $\ \lambda \ $也是投影后样本的方差。因此,主成分分析可以转换成一个矩阵特征值分解问题,投影向量$\ u \ $为矩阵$\ S \ $的最大特征对应的特征向量。 71 | 72 | **总结一下$\ PCA\ $的算法步骤:** 73 | 74 | 假设有$\ m\ $条$\ n\ $维数据: 75 | 76 | 1. 将原始数据按列组成$\ n\ $行$\ m\ $列矩阵$\ X\ $; 77 | 2. 将$\ X\ $的每一行进行零均值化,即减去这一行的均值; 78 | 3. 求出协方差矩阵$\ C=\dfrac{1}{m}XX^T\ $; 79 | 4. 求出协方差矩阵的特征值及对应的特征向量; 80 | 5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前$\ k\ $行组成矩阵$\ P\ $; 81 | 6. $\ Y=PX\ $即为降维到$\ k\ $维后的数据。 -------------------------------------------------------------------------------- /md/k-means算法.md: -------------------------------------------------------------------------------- 1 | #
k-means算法原理
2 | 3 |
杨航锋
4 | 5 | #### 1 k-means算法的损失函数 6 | 7 | 假设输入空间 $\cal X \in \R^n \ $ 为$\ n\ $维向量的集合,$\ \cal{X}=\{x^{(1)} ,x^{(2)},\cdots,x^{(m)} \} \ $,$ \ \mathcal C\ $为输入空间$\ \cal X\ $的一个划分,不妨令$\ \mathcal C=\{ \mathbb C_1,\mathbb C_2,\cdots,\mathbb C_K \} \ $,因此可以定义$\ k\text{-}means\ $算法的损失函数为 8 | $$ 9 | J(\mathcal C)=\sum\limits_{k=1}^K\sum\limits_{x^{(i)}\in \mathbb C_k}\Vert x^{(i)}-\mu^{(k)} \Vert_2^2 10 | $$ 11 | 其中$\ \mu^{(k)}=\frac{1}{\vert \mathbb C_k \vert}\sum\limits_{x^{(i)}\in\mathbb C_k}x^{(i)} \ $是簇$\ \mathbb C_k\ $的聚类中心。 12 | 13 | #### 2 优化损失函数 14 | 15 | $\ k\text{-}means\ $算法的损失函数$\ J(\mathcal C)\ $描述了簇类样本围绕簇聚类中心的紧密程度,其值越小,则簇内样本的相似度越高。故$\ k\text{-}means\ $算法的优化目标为最小化损失函数 16 | $$ 17 | \mathop{\arg\min}_{\mathcal C}\ J(\mathcal C)=\sum\limits_{k=1}^K\sum\limits_{x^{(i)}\in \mathbb C_k}\Vert x^{(i)}-\mu^{(k)} \Vert_2^2 18 | $$ 19 | 如果要优化该损失函数就需要考虑输入空间$\ \mathcal X\ $的所有划分,这是一个$\ NP\text{-}hard\ $问题,实际上是采取贪心的策略通过迭代优化来近似求解,该过程等价于[$\ EM\ $算法](https://zhuanlan.zhihu.com/p/39490840)。 20 | 21 | 1. 首先随机初始化$\ K\ $个聚类中心,$\ \mu^{(1)},\mu^{(2)},\cdots,\mu^{(K)} \ $; 22 | 23 | 2. 然后根据这$\ K\ $个聚类中心给出输入空间$\ \mathcal X \ $的一个划分,$\ \mathbb C_1,\mathbb C_2,\cdots,\mathbb C_K \ $; 24 | 25 | - 样本离哪个簇的聚类中心最近,则该样本就划归到那个簇 26 | $$ 27 | \mathop{\arg\min}_{k}\ \Vert x^{(i)}-\mu^{(k)} \Vert_2^2 28 | $$ 29 | 30 | 3. 再根据这个划分来更新这$\ K\ $个聚类中心 31 | $$ 32 | \mu^{(k)}=\frac{1}{\vert \mathbb C_k \vert}\sum\limits_{x^{(i)}\in\mathbb C_k}x^{(i)} 33 | $$ 34 | 35 | 4. 重复2、3步骤直至收敛 36 | 37 | - 即$\ K\ $个聚类中心不再变化 -------------------------------------------------------------------------------- /md/l1相对于l2更容易获得稀疏解的个人看法.md: -------------------------------------------------------------------------------- 1 | ##
l1相对于l2更容易获得稀疏解的个人看法
2 | 3 |
杨航锋
4 | 5 | 从优化(最小化)损失函数的角度来看,稀疏解$\ \theta( \theta\in \mathbb R ^ n)\ $产生的条件是: 6 | 7 | 1、如果损失函数$\ J(\theta)\ $在$\ \theta\ $处可导,且$\ \theta\ $满足$\ \dfrac{\partial J(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0}}=0\ $; 8 | 9 | 2、如果损失函数$\ J(\theta)\ $在$\ \theta\ $处不可导,且$\ \dfrac{\partial J(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0^+}}>0、\dfrac{\partial J(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0^-}}<0\ $。 10 | 11 | 假设未加入正则化之前的损失函数为$\ l(\theta)\ $,且$\ \dfrac{\partial l(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0}}=\delta\neq 0 \ $,则有 12 | $$ 13 | \begin{aligned} J_{l1}(\theta)&=l(\theta)+\lambda\Vert\theta\Vert_1\\ J_{l2}(\theta)&=l(\theta)+\lambda\Vert\theta\Vert_2^2 \end{aligned}\\ 14 | $$ 15 | 分别计算$\ J_{l1}(\theta)、J_{l2}(\theta)\ $在$\ \color{red} {\theta=0}\ $处的导函数情况 16 | $$ 17 | \begin{aligned} &\dfrac{\partial J_{l1}(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0}}=l'(\theta)+\lambda sign(\theta)\\ &\begin{cases} \dfrac{\partial J_{l1}(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0^+}}=\delta+\lambda\\ \dfrac{\partial J_{l1}(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0^-}}=\delta-\lambda\\ \end{cases}\\ &\dfrac{\partial J_{l2}(\theta)}{\partial \theta}\Bigg |_{\color{red} {\theta=0}}=l'(\theta)+2\lambda\theta=\delta \end{aligned}\\ 18 | $$ 19 | 因此在$\ \theta\ $的各个分量中,当$\ \delta \ $为一个不为$\ 0\ $的常量时,$\ \delta+\lambda、\delta-\lambda\ $产生异号的可能性更大(导数值异号),$\ J_{l1}(\theta)\ $在该点取得极小值;而$\ J_{l2}(\theta)\ $该点的导数值为常量故取不到极小值,所以$\ l1\ $正则化相对要比$\ l2\ $正则化更容易产生稀疏解。 -------------------------------------------------------------------------------- /md/word2vec算法梳理.md: -------------------------------------------------------------------------------- 1 | #
$Word2Vec$算法梳理
2 | 3 |
杨航锋
4 | 5 | #### 1 $Word2Vec\ $模型总述 6 | 7 | 8 | 9 | ​ $Word2Vec\ $简单讲其实就是通过学习文本然后用词向量的方式表征词的语义信息,即通过$\ Embedding \ $把原先词所在空间映射到一个新的空间中去,使得语义上相似的单词在该空间内距离相近。以传统神经网络为基础的神经概率语言模型,缺点主要是计算量太大,集中体现在:**隐层和输出层之间的矩阵运算**和**输出层上的$\boldsymbol{Softmax}$归一化运算**上。因此 $\ Word2Vec\ $就是针对这两点来优化神经概率语言模型的。$Word2Vec\ $中两个重要的模型是:**$\boldsymbol{CBOW}\ $模型**和**$\ \boldsymbol{Skip\text{-}gram}\ $模型**。对于这两个模型,$Word2Vec\ $给出了两套框架,分别是基于$\ \boldsymbol{Hierarchical\ Softmax}\ $和$\ \boldsymbol{Negative \ Sampling}\ $来设计的,本文梳理的是第一种类型。 10 | 11 | #### 2 $\boldsymbol{CBOW}\ $模型 12 | 13 | ##### 2.1 基于$\ \boldsymbol{Hierarchical\ Softmax}\ $模型的网络结构 14 | 15 | ​ $\boldsymbol{CBOW}\ ​$模型的全称是$Continous\ bag\text{-}of\text{-}words​$,它包括三层结构分别是:输入层、投影层和输出层。 16 | 17 | 1. **输入层**:包含$\ Context(w) \ ​$中$\ 2c\ ​$个词的词向量$\ v(Context(w)_1),v(Context(w)_2),\cdots,v(Context(w)_{2c}) \ ​$其中$ \ \forall v \in \mathbb{R}^n \ ​$,$n \ ​$表示词向量的长度。 18 | 19 | 2. **投影层**:将输入层的$\ 2c\ ​$个向量做求和累加处理,即$\ X_w=\sum\limits_{i=1}^{2c}v(Context(w)_i) \ ​$。 20 | 21 | 22 | 23 | 3. **输出层**:输出层对应一颗$\ Huffman\ $树,它是以语料中出现过的词当叶子节点,以各词在语料库中出现的次数当权值构造而成。在这颗$\ Huffman \ $树中,叶子结点共$\ N(=\vert\mathcal{D}\vert) \ $个分别对应词典$\ \mathcal{D} \ $中的词,非叶结点$\ N-1\ $个(上图中黄色的结点)。 24 | 25 | ##### 2.2 梯度的计算 26 | 27 | ​ 为了后续方便描述问题,首先对$\ \boldsymbol{CBOW}\ $模型中用到的符号做一个统一的说明: 28 | 29 | - $\ p^w \ $:从根节点到出发到达$\ w\ $对应叶子结点的路径; 30 | - $\ l^w\ $:路径$\ p^w \ $中包含节点的个数; 31 | - $\ \{p_1^w,p_2^w,\cdots,p_{l^w}^w\}\ ​$:路径$\ p^w \ ​$中的$\ l^w \ ​$个结点,其中$\ p_1^w\ ​$表示根结点,$\ p_{l^w}^w \ ​$表示词$\ w \ ​$对应的结点; 32 | - $\ \{d_2^w,d_3^w,\cdots,d_{l^w}^w\}\ $,其中$\ d_j^w\in\{0, 1\}\ $:词$\ w\ $对应的$\ Huffman\ $编码,它由$\ l^w-1\ $位编码构成,$\ d_j^w\ $表示路径$\ p^w\ $中第$\ j\ $个结点对应的编码(根结点不对应编码); 33 | - $\ \{\theta_1^w,\theta_2^w,\cdots,\theta_{l^w{-}1}^w \} \ $,其中$\ \theta_j^w\in \mathbb{R}^n\ $:路径$\ p^w\ $中非叶子结点对应的向量,$\ \theta_j^w\ $表示路径$\ p^w\ $中第$ \ j\ $个非叶子结点对应的向量。 34 | 35 | 所以$\ \boldsymbol{Hierarchical\ Softmax}\ ​$的思想,**即对于词典$\ \mathcal{D}\ ​$中的任意词$\ w\ ​$,$Huffman\ ​$树中必然存在唯一一条从根结点到词$\ w\ ​$对应叶子结点的路径$\ p^w\ ​$。路径$\ p^w\ ​$上存在$\ l^w-1\ ​$个分支,将每个分支看作一次二分类,那么每一次分类就对应一个概率,最后将这些概率连乘得到$\ p(w|Context(w))\ ​$。** 36 | $$ 37 | \begin{aligned} 38 | p(w|Context(w))&=\prod\limits_{j=2}^{l^w}p(d_j^w|X_w;\theta_{j-1}^w)\\ 39 | p(d_j^w|X_w;\theta_{j-1}^w)&= 40 | \begin{cases} 41 | \sigma(X_w^T\theta_{j-1}^w), & if\ \ d_j^w=0\\ 42 | 1-\sigma(X_w^T\theta_{j-1}^w), &otherwise 43 | \end{cases}\\ 44 | &=[\sigma(X_w^T\theta_{j-1}^w)]^{1-d_j^w}\cdot[1-\sigma(X_w^T\theta_{j-1}^w)]^{d_j^w} 45 | \end{aligned} 46 | $$ 47 | 其中$\ \sigma(x)=\dfrac{1}{1+e^{-x}}\ ​$。通过对数极大似然化处理可得$\ \boldsymbol{CBOW}\ ​$模型的目标函数为: 48 | $$ 49 | \begin{aligned} 50 | \mathcal{L}&=\sum\limits_{w\in\mathcal{D}}\log\prod_{j=2}^{l^w}\left([\sigma(X_w^T\theta_{j-1}^w)]^{1-d_j^w}\cdot[1-\sigma(X_w^T\theta_{j-1}^w)]^{d_j^w} \right)\\ 51 | &=\sum\limits_{w\in\mathcal{D}}\sum\limits_{j=2}^{l^w}\left((1-d_j^w)\cdot\log[\sigma(X_w^T\theta_{j-1}^w)]+d_j^w\cdot\log[1-\sigma(X_w^T\theta_{j-1}^w)] \right)\\ 52 | &=\sum\limits_{w\in\mathcal{D}}\sum\limits_{j=2}^{l^w}\varPhi(\theta_{j-1}^w,X_w) 53 | \end{aligned} 54 | $$ 55 | $\ Word2Vec\ ​$极大化化目标函数使用的算法是是**随机梯度上升法**,首先考虑$\ \varPhi(\theta_{j-1}^w,X_w)\ ​$关于$\ \theta_{j-1}^w\ ​$的梯度计算: 56 | $$ 57 | \begin{aligned} 58 | \dfrac{\partial\varPhi(\theta_{j-1}^w,X_w)}{\partial \theta_{j-1}^w}&=\dfrac{\partial}{\theta_{j-1}^w}\left((1-d_j^w)\cdot\log[\sigma(X_w^T\theta_{j-1}^w)]+d_j^w\cdot\log[1-\sigma(X_w^T\theta_{j-1}^w)] \right)\\ 59 | &=(1-d_j^w)[1-\sigma(X_w^T\theta_{j-1}^w)]X_w-d_j^w\sigma(X_w^T\theta_{j-1}^w)X_w\\ 60 | &=\left((1-d_j^w)[1-\sigma(X_w^T\theta_{j-1}^w)]-d_j^w\sigma(X_w^T\theta_{j-1}^w) \right)X_w\\ 61 | &=\left(1-d_j^w-\sigma(X_w^T\theta_{j-1}^w)\right)X_w 62 | \end{aligned} 63 | $$ 64 | 于是,$\ \theta_{j-1}^w\ ​$的更新公式为: 65 | $$ 66 | \theta_{j-1}^w:=\theta_{j-1}^w+\eta\left(1-d_j^w-\sigma(X_w^T\theta_{j-1}^w) \right)X_w 67 | $$ 68 | 然后再考虑$\ \varPhi(\theta_{j-1}^w,X_w)\ ​$关于$\ X_w\ ​$的梯度计算: 69 | $$ 70 | \begin{aligned} 71 | \dfrac{\partial\varPhi(\theta_{j-1}^w,X_w)}{\partial X_w}&=\dfrac{\partial}{X_w}\left((1-d_j^w)\cdot\log[\sigma(X_w^T\theta_{j-1}^w)]+d_j^w\cdot\log[1-\sigma(X_w^T\theta_{j-1}^w)] \right)\\ 72 | &=(1-d_j^w)[1-\sigma(X_w^T\theta_{j-1}^w)]\theta_{j-1}^w-d_j^w\sigma(X_w^T\theta_{j-1}^w)\theta_{j-1}^w\\ 73 | &=\left((1-d_j^w)[1-\sigma(X_w^T\theta_{j-1}^w)]-d_j^w\sigma(X_w^T\theta_{j-1}^w) \right)\theta_{j-1}^w\\ 74 | &=\left(1-d_j^w-\sigma(X_w^T\theta_{j-1}^w)\right)\theta_{j-1}^w 75 | \end{aligned} 76 | $$ 77 | 如果观察到$\ \varPhi(\theta_{j-1}^w,X_w)\ ​$中$\ \theta_{j-1}^w \ ​$和$\ X_w \ ​$具有对称性,那么计算相应梯度会更方便。由于$\ X_w\ ​$表示的是$\ Context(w)\ ​$中所有词向量的叠加,那么如何根据$\ \nabla_{X_w}\varPhi(\theta_{j-1}^w,X_w) \ ​$来更新每一个分量$\ v(\widetilde{w})\ ​$呢?$\ Word2Vec \ ​$中的做法非常的朴素,直接取 78 | $$ 79 | v(\widetilde{w}):=v(\widetilde{w})+\eta\sum\limits_{j=2}^{l^w}\dfrac{\partial\varPhi(\theta_{j-1}^w,X_w)}{\partial X_w},\ \ \widetilde{w}\in Context(w) 80 | $$ 81 | 82 | ##### 2.3 $\ \boldsymbol{CBOW}\ $模型更新相关参数伪代码 83 | 84 | 85 | 86 | #### 3 $\boldsymbol{Skip\text{-}gram}\ $模型 87 | 88 | ##### 3.1 基于$\ \boldsymbol{Hierarchical\ Softmax}\ $模型的网络结构 89 | 90 | ​ 同$\ \boldsymbol{CBOW}\ ​$模型一样,$\ \boldsymbol{Skip\text{-}gram}\ ​$模型的网络结构也包括三层结构分别是输入层、投影层和输出层: 91 | 92 | 1. **输入层**:只含有当前样本的中心词$\ w\ ​$的词向量$\ v(w)\in \mathbb{R}\ ​$。 93 | 94 | 2. **投影层**:该层为恒等投影,其实这层可有可无,在这里只是为了方便和$\ \boldsymbol{CBOW}\ ​$模型的网络结构做对比。 95 | 96 | 97 | 98 | 3. **输出层**:和$\ \boldsymbol{CBOW}\ ​$模型一样,输出层也是一颗$\ Huffman\ ​$树。 99 | 100 | ##### 3.2 梯度的计算 101 | 102 | ​ 对于$\ \boldsymbol{Skip\text{-}gram}\ ​$模型已知的是当前词$\ w\ ​$,需要对其上下文$\ Context(w)\ ​$中的词进行预测,所以关键是条件概率函数$\ p(Context(w)|w)\ ​$的构造,$\ \boldsymbol{Skip\text{-}gram}\ ​$模型中将其定义为: 103 | $$ 104 | p(Context(w)|w)=\prod\limits_{u\in Context(w)}p(u|w) 105 | $$ 106 | 上式中的$\ p(u|w)\ $可以类比上节介绍的$\ \boldsymbol{Hierarchical\ Softmax}\ $的思想,因此可得: 107 | $$ 108 | \begin{aligned} 109 | p(u|w)&=\prod\limits_{j=2}^{l^w}p(d_j^u|v(w);\theta_{j-1}^u)\\ 110 | &=\prod\limits_{j=2}^{l^u}[\sigma(v(w)^T\theta_{j-1}^u) ]^{1-d_j^u}\cdot[1-\sigma(v(w)^T\theta_{j-1}^{u}]^{d_j^u} 111 | \end{aligned} 112 | $$ 113 | 通过对数极大似然化处理可得$\ \boldsymbol{Skip\text{-}gram}\ $模型的目标函数为: 114 | $$ 115 | \begin{aligned} 116 | \mathcal{L}&=\sum\limits_{w\in \mathcal{D}}\log\prod\limits_{u\in Context(w)}\prod_{j=2}^{l^u}\left([\sigma(v(w)^T\theta_{j-1}^u) ]^{1-d_j^u}\cdot[1-\sigma(v(w)^T\theta_{j-1}^{u}]^{d_j^u} \right)\\ 117 | &=\sum\limits_{w\in\mathcal{D}}\sum\limits_{u\in Context(w)}\sum\limits_{j=2}^{l^u}\left((1-d_j^u)\cdot\log[\sigma(v(w)^T\theta_{j-1}^u)]+d_j^u\cdot\log[1-\sigma(v(w)^T\theta_{j-1}^u)] \right)\\ 118 | &=\sum\limits_{w\in\mathcal{D}}\sum\limits_{u\in Context(w)}\sum\limits_{j=2}^{l^u}\mathcal{O}(\theta_{j-1}^u,v(w)) 119 | \end{aligned} 120 | $$ 121 | 首先考虑$\ \mathcal{O}(\theta_{j-1}^u,v(w))\ ​$关于$\ \theta_{j-1}^u\ ​$的梯度计算: 122 | $$ 123 | \begin{aligned} 124 | \dfrac{\partial \mathcal{O}(\theta_{j-1}^u,v(w))}{\partial \theta_{j-1}^u}&= 125 | \dfrac{\partial}{\partial \theta_{j-1}^u}\left((1-d_j^u)\cdot\log[\sigma(v(w)^T\theta_{j-1}^u)]+d_j^u\cdot\log[1-\sigma(v(w)^T\theta_{j-1}^u)] \right)\\ 126 | &=(1-d_j^u)[1-\sigma(v(w)^T\theta_{j-1}^u)]v(w)-d_j^u\sigma(v(w)^T\theta_{j-1}^u)v(w)\\ 127 | &=\left((1-d_j^u)[1-\sigma(v(w)^T\theta_{j-1}^u)]-d_j^u\sigma(v(w)^T\theta_{j-1}^u) \right)v(w)\\ 128 | &=\left(1-d_j^u-\sigma(v(w)^T\theta_{j-1}^u) \right)v(w) 129 | 130 | \end{aligned} 131 | $$ 132 | 于是,$\ \theta_{j-1}^w\ ​$的更新公式为: 133 | $$ 134 | \theta_{j-1}^u:=\theta_{j-1}^u+\eta\left(1-d_j^u-\sigma(v(w)^T\theta_{j-1}^u) \right)v(w) 135 | $$ 136 | 然后再考虑$\ \mathcal{O}(\theta_{j-1}^u,v(w))\ ​$对关于$\ v(w) \ ​$的梯度计算(亦可根据对称性直接得出): 137 | $$ 138 | \begin{aligned} 139 | \dfrac{\partial \mathcal{O}(\theta_{j-1}^u,v(w))}{\partial v(w)}&= 140 | \dfrac{\partial}{\partial v(w)}\left((1-d_j^u)\cdot\log[\sigma(v(w)^T\theta_{j-1}^u)]+d_j^u\cdot\log[1-\sigma(v(w)^T\theta_{j-1}^u)] \right)\\ 141 | &=(1-d_j^u)[1-\sigma(v(w)^T\theta_{j-1}^u)]\theta_{j-1}^u-d_j^u\sigma(v(w)^T\theta_{j-1}^u)\theta_{j-1}^u\\ 142 | &=\left((1-d_j^u)[1-\sigma(v(w)^T\theta_{j-1}^u)]-d_j^u\sigma(v(w)^T\theta_{j-1}^u) \right)\theta_{j-1}^u\\ 143 | &=\left(1-d_j^u-\sigma(v(w)^T\theta_{j-1}^u) \right)\theta_{j-1}^u 144 | 145 | \end{aligned} 146 | $$ 147 | 于是,$\ v(w)\ ​$的更新公式为: 148 | $$ 149 | v(w):=v(w)+\eta\sum\limits_{u\in Context(w)}\sum\limits_{j=2}^{l^u}\dfrac{\partial \mathcal{O}(\theta_{j-1}^u,v(w))}{\partial v(w)} 150 | $$ 151 | 152 | ##### 3.3 $\ \boldsymbol{Skip\text{-}gram}\ $模型更新相关参数伪代码 153 | 154 | 155 | 156 | #### 4 总结 157 | 158 | ​ $ Word2Vec\ ​$的基本功能就是把自然语言中的每一个词,表示成一个统一意义统一维度的词向量,因为只有把自然语言转化为向量的形式,才能在此之上构建相关的算法,至于向量中的每个维度具体是什么含义,无人知晓,也无需知晓,有道是,玄之又玄,众妙之门矣! -------------------------------------------------------------------------------- /md/关联规则算法原理浅析.md: -------------------------------------------------------------------------------- 1 | ##
关联规则算法原理浅析
2 | 3 |
杨航锋
4 | 5 | 关联规则$\ A\rightarrow B\ $推荐,目标是,当用户将$\ A\ $放入购物车时推荐$\ B\ $,获得比单独推荐$\ B\ $更好的效果 6 | 7 | - $\ A\rightarrow B\ $的**支持度**,即用户同时购买$\ A \ $和$\ B\ $的概率记为$\ P(AB)\ $; 8 | - $\ A\rightarrow B\ $的**置信度**,即用户在购买了$\ A\ $的时候购买$\ B\ $的概率记为$\ P(B|A)\ $; 9 | - $\ A\rightarrow B\ $的**提升度**,即用户在购买了$\ A\ $的时候购买$\ B\ $的概率和用户直接购买$\ B\ $的概率的比值记为$\ \dfrac{P(B|A)}{P(B)} \ $ 10 | 1. 如果该值大于$\ 1\ $,说明$\ A\rightarrow B\ $是有正向效果; 11 | 2. 如果该值等于$\ 1\ $,说明$\ A\ $ 和$\ B\ $之间相互独立; 12 | 3. 如果该值小于$\ 1\ $,说明$\ A\rightarrow B\ $是有负向效果。 13 | 14 | -------------------------------------------------------------------------------- /md/反向传播算法.md: -------------------------------------------------------------------------------- 1 | ##
反向传播算法
2 | 3 |
杨航锋
4 | 5 | ​ 反向传播算法是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法,其主要思想是:将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;由于ANN的输出结果与实际结果有误差,则先计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。[更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### 反向传播算法的推导 8 | 9 | ##### 符号约定 10 | 11 | ![](../picture/神经网络.jpeg) 12 | 13 | | 符号 | 含义 | 14 | | :-------------------------: | :----------------------------------------------------------: | 15 | | $w_{jk}^{(l)}$ | 从$\ l-1\ $层的第$\ k\ $个神经元到第$\ l \ $层的第$\ j\ $个神经元之间的权重 | 16 | | $\boldsymbol{w^{(l)}}$ | 第$\ l-1\ $层到$\ l\ $层的权重矩阵 | 17 | | $b_j^{(l)}$ | 第$\ l\ $层的第$\ j\ $个神经元的偏置 | 18 | | $\boldsymbol{b^{(l)}}$ | 第$\ l\ $层的偏置向量 | 19 | | $z_j^{(l)}$ | 第$\ l\ $层第$\ j\ $个神经元的输入值 | 20 | | $\boldsymbol{z^{(l)}}$ | 第$\ l\ $层的输入向量 | 21 | | $a_j^{(l)}$ | 第$\ l\ $层第$\ j\ $个神经元的激活值 | 22 | | $\boldsymbol{a^{(l)}}$ | 第$\ l\ $层的激活输出向量 | 23 | | $N^{(l)}$ | 第$\ l\ $层神经元的个数 | 24 | | $C^{(i)}(\theta)$ | 第$\ i \ $个输出对应的损失函数 | 25 | | $C(\theta)$ | 损失函数 | 26 | | $\delta_j^{(l)}$ | 损失函数在第$\ l\ $层的第$\ j\ $个神经元的误差 | 27 | | $\boldsymbol{\delta^{(l)}}$ | 损失函数在第$\ l\ $层的误差向量 | 28 | 29 | 综上有如下等式成立: 30 | $$ 31 | \begin{aligned} 32 | \begin{cases} 33 | \begin{array}{lcl} 34 | z_1^{(l)}&=&w_{11}^{(l)}a_1^{(l-1)}+w_{12}^{(l)}a_2^{(l-1)}+\cdots+w_{1N^{(l-1)}}^{(l)}a_{N^{(l-1)}}^{(l-1)}+b_1^{(l)}\\ 35 | z_2^{(l)}&=&w_{21}^{(l)}a_1^{(l-1)}+w_{22}^{(l)}a_2^{(l-1)}+\cdots+w_{2N^{(l-1)}}^{(l)}a_{N^{(l-1)}}^{(l-1)}+b_2^{(l)}\\ 36 | &\vdots&\\ 37 | z_{N^{(l)}}^{(l)}&=&w_{N^{(l)}1}^{(l)}a_1^{(l-1)}+w_{N^{(l)}2}^{(l)}a_2^{(l-1)}+\cdots+w_{N^{(l)}N^{(l-1)}}^{(l)}a_{N^{(l-1)}}^{(l-1)}+b_{N^{(l)}}^{(l)} 38 | \end{array} 39 | \end{cases} 40 | \end{aligned} 41 | $$ 42 | 写成矩阵乘法的形式 43 | $$ 44 | \begin{aligned} 45 | \begin{bmatrix} 46 | z_1^{(l)} \\ 47 | z_2^{(l)}\\ 48 | \vdots\\ 49 | z_{N^{(l)}}^{(l)} 50 | \end{bmatrix} 51 | = 52 | \begin{bmatrix} 53 | w_{11}^{(l)} & w_{12}^{(l)} & \cdots & w_{1N^{(l-1)}}^{(l)}\\ 54 | w_{21}^{(l)} & w_{22}^{(l)} & \cdots & w_{2N^{(l-1)}}^{(l)}\\ 55 | \vdots & \vdots&\ddots&\vdots\\ 56 | w_{N^{(l)}1}^{(l)}&w_{N^{(l)}2}^{(l)}&\cdots&w_{N^{(l)}N^{(l-1)}}^{(l)} 57 | \end{bmatrix} 58 | \begin{bmatrix} 59 | a_1^{(l-1)}\\ 60 | a_2^{(l-1)}\\ 61 | \vdots\\ 62 | a_{N^{(l-1)}}^{(l-1)} 63 | \end{bmatrix} 64 | + 65 | \begin{bmatrix} 66 | b_1^{(l)}\\ 67 | b_2^{(l)}\\ 68 | \vdots\\ 69 | b_{N^{(l)}}^{(l)} 70 | \end{bmatrix} 71 | \end{aligned} 72 | $$ 73 | 即 74 | $$ 75 | \boldsymbol{z^{(l)}=w^{(l)}a^{(l-1)}+b^{(l)}} 76 | $$ 77 | 由于$\ \boldsymbol{a^{(l)}}=\sigma(\boldsymbol{z^{(l)}}) \ $,故有 78 | $$ 79 | \boldsymbol{a^{(l)}}=\sigma(\boldsymbol{w^{(l)}a^{(l-1)}+b^{(l)}}) 80 | $$ 81 | 其中$\ \sigma(x)\ $为激活函数,常见的比如取$\ \sigma(x)=\dfrac{1}{1+e^{-x}} \ $。 82 | 83 | ##### 神经网络的损失函数 84 | 85 | ​ 根据神经网络模型每一层的$\ \boldsymbol{w^{(l)}}\ $和$ \ \boldsymbol{b^{(l)}} \ $可能互不相同,因此通过这样一个神经网络模型最后的输出为一个函数集合$\ f(x;\theta)\ $ 86 | $$ 87 | f(x;\theta)=\sigma(w^{(L)}\cdots\sigma(w^{(2)}\sigma(w^{(1)}x+b^{(1)})+b^{(2)})\cdots+b^{(L)}) 88 | $$ 89 | 其中$\ L\ $表示神经网络的输出层,$\ \theta=\{w^{(1)},b^{(1)},w^{(2)},b^{(2)}\cdots, w^{(L)},b^{(L)}\}\ $ 。假设训练数据集为($x^{(1)}$,$y^{(1)}$),($x^{(2)}$,$y^{(2)}$),$\cdots$,($x^{(r)}$,$y^{(r)}$),$\cdots$,($x^{(m)}$,$y^{(m)}$),其中$x^{(i)}\in\R^{n}$。接下来可以给出损失函数$\ C(\theta)\ $ 90 | $$ 91 | C^{(i)}(\theta)=\dfrac{1}{m}\sum\limits_{r=1}^{m}\Vert f(x^{(r)};\theta)-y^{(r)} \Vert\\ 92 | C(\theta)=\dfrac{1}{N^{(L)}}\sum\limits_{i=1}^{N^{(L)}}C^{(i)}(\theta) 93 | $$ 94 | 对于上述损失函数如果直接用梯度下降算法求解的话是不可行的。 95 | 96 | ##### 损失函数在输出层的误差 97 | 98 | ​ 根据误差传播的传递性$\ \Delta z_j^{(L)} \rightarrow \Delta a_j^{(L)}\rightarrow\Delta C(\theta) \ $并结合链式求导法则可以求得损失函数在输出层神经元上的误差$\ \delta_j^{(L)}\ $。 99 | $$ 100 | \begin{aligned} 101 | \delta_j^{(L)}&=\dfrac{\partial C(\theta)}{\partial z_j^{(L)}}=\dfrac{\partial C(\theta)}{\partial a_j^{(L)}}\dfrac{\partial a_j^{(L)}}{\partial z_j^{(L)}}\\ 102 | &=\dfrac{\partial C(\theta)}{\partial a_j^{(L)}}\dfrac{\partial \sigma(z_j^{(L)})}{\partial z_j^{(L)}}\\ 103 | &=\dfrac{\partial C(\theta)}{\partial a_j^{(L)}}\sigma'(z_j^{(L)}) 104 | \end{aligned} 105 | $$ 106 | 对于输出层上的所有神经元,则可表示为向量形式 107 | $$ 108 | \begin{aligned} 109 | \boldsymbol{\delta^{(L)}} 110 | &= 111 | \begin{bmatrix} 112 | \delta_1^{(L)}\\ 113 | \delta_2^{(L)}\\ 114 | \vdots\\ 115 | \delta_{N^{(L)}}^{(L)} 116 | \end{bmatrix} 117 | = 118 | \begin{bmatrix} 119 | \dfrac{\partial C(\theta)}{\partial a_1^{(L)}}\sigma'(z_1^{(L)})\\ 120 | \dfrac{\partial C(\theta)}{\partial a_2^{(L)}}\sigma'(z_2^{(L)})\\ 121 | \vdots\\ 122 | \dfrac{\partial C(\theta)}{\partial a_{N^{L}}^{(L)}}\sigma'(z_{N^{L}}^{(L)}) 123 | \end{bmatrix} 124 | = 125 | \begin{bmatrix} 126 | \dfrac{\partial C(\theta)}{\partial a_1^{(L)}}\\ 127 | \dfrac{\partial C(\theta)}{\partial a_2^{(L)}}\\ 128 | \vdots\\ 129 | \dfrac{\partial C(\theta)}{\partial a_{N^{L}}^{(L)}} 130 | \end{bmatrix} 131 | \odot 132 | \begin{bmatrix} 133 | \sigma'(z_1^{(L)})\\ 134 | \sigma'(z_2^{(L)})\\ 135 | \vdots\\ 136 | \sigma'(z_{N^{L}}^{(L)}) 137 | \end{bmatrix}\\ 138 | &= 139 | \nabla_{\boldsymbol{a^{(L)}}}C(\theta)\odot\sigma'(\boldsymbol{z^{(L)}}) 140 | \end{aligned} 141 | $$ 142 | 其中$\ \odot\ ​$为Hadamard积,即两个矩阵对应元素的乘积 。 143 | 144 | ##### 损失函数在隐藏层的误差 145 | 146 | ​ 因为上面已经求出了输出层的误差,根据误差反向传播的原理,当前层的误差可理解为上一层所有神经元误差的复合函数,即使用上一层的误差来表示当前层误差,并依次递推。 147 | $$ 148 | \begin{aligned} 149 | \delta_j^{(l)}&=\dfrac{\partial C(\theta)}{\partial z_j^{(l)}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1)\\ 150 | &=\sum\limits_{k=1}^{N^{(l+1)}} \dfrac{\partial C(\theta)}{\partial z_k^{(l+1)}}\dfrac{\partial z_k^{(l+1)}}{\partial a_j^{(l)}}\dfrac{\partial a_j^{(l)}}{\partial z_j^{(l)}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2)\\ 151 | &=\sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}\dfrac{\partial{\left(\sum\limits_{s=1}^{N^{(l)}}w_{ks}^{(l+1)}a_s^{(l)}+b_k^{(l+1)}\right)}}{\partial a_j^{(l)}}\dfrac{\partial a_j^{(l)}}{\partial z_j^{(l)}}\ \ \ \ \ \ \ \ (3)\\ 152 | &=\sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}w_{kj}^{(l+1)}\sigma'(z_j^{(l)})\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (4) 153 | \end{aligned} 154 | $$ 155 | 从$\ (1)\ $式到$\ (2)\ $式可理解为当前层的误差是由其后一层各个神经元的误差传播而来,即当前层神经元的误差是后一层各个神经元误差的复合函数,按照多元复合函数求导的链式法则可得$\ (2)\ $式;$\ (2)\ $式到$\ (3)\ $式首先利用了误差的定义其次根据$\ z_k^{(l+1)}\ $的定义对其进行展开;$\ (3)\ $式到$\ (4)\ $式较为简单直接利用了偏导数的求导法则。 156 | 157 | ​ 同理对于隐藏层所有神经元的误差,可写成向量形式 158 | $$ 159 | \begin{aligned} 160 | \boldsymbol{\delta^{(l)}} 161 | &= 162 | \begin{bmatrix} 163 | \delta_1^{(l)}\\ 164 | \delta_2^{(l)}\\ 165 | \vdots\\ 166 | \delta_{N^{(l)}}^{(l)} 167 | \end{bmatrix} 168 | = 169 | \begin{bmatrix} 170 | \sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}w_{k1}^{(l+1)}\sigma'(z_1^{(l)})\\ 171 | \sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}w_{k2}^{(l+1)}\sigma'(z_2^{(l)})\\ 172 | \vdots\\ 173 | \sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}w_{kN^{(l)}}^{(l+1)}\sigma'(z_{N^{(l)}}^{(l)}) 174 | \end{bmatrix} 175 | = 176 | \begin{bmatrix} 177 | \sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}w_{k1}^{(l+1)}\\ 178 | \sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}w_{k2}^{(l+1)}\\ 179 | \vdots\\ 180 | \sum\limits_{k=1}^{N^{(l+1)}} \delta_k^{(l+1)}w_{kN^{(l)}}^{(l+1)} 181 | \end{bmatrix} 182 | \odot 183 | \begin{bmatrix} 184 | \sigma'(z_1^{(l)})\\ 185 | \sigma'(z_2^{(l)})\\ 186 | \vdots\\ 187 | \sigma'(z_{N^{(l)}}^{(l)}) 188 | \end{bmatrix}\\ 189 | &=(\boldsymbol{w^{(l+1)})}^T\boldsymbol{\delta^{(l+1)}}\odot\sigma'(\boldsymbol{z^{(l)}}) 190 | \end{aligned} 191 | $$ 192 | 193 | ##### 损失函数对权重矩阵$\ w \ $的偏导数 194 | 195 | ​ 根据误差传播的传递性$\ \Delta w_{jk}^{(l)}\rightarrow \Delta z_j^{(l)} \rightarrow \cdots\rightarrow\Delta C(\theta) \ $,因此损失函数可以看成是权重$\ w\ $的复合函数,由链式求导法则可知 196 | $$ 197 | \begin{aligned} 198 | \dfrac{\partial C(\theta)}{\partial w_{jk}^{(l)}} &= \dfrac{\partial C(\theta)}{\partial z_{j}^{(l)}}\dfrac{\partial z_{j}^{(l)}}{\partial w_{jk}^{(l)}}\\ 199 | &= 200 | \delta_j^{(l)}\dfrac{\partial\left(\sum\limits_{s=1}^{N^{(l-1)}} w_{js}^{(l)}a_s^{(l-1)}+b_s^{(l)} \right)}{\partial w_{jk}^{(l)}}\\ 201 | &= 202 | \delta_j^{(l)}a_k^{(l-1)} 203 | 204 | \end{aligned} 205 | $$ 206 | 这个公式表明损失函数$\ C(\theta)\ $对权重$\ w_{jk}^{(l)}\ $的梯度其实就等于第的梯度其实就等于第$\ l\ $层第层第$\ j\ $个神经元的误差乘以个神经元的误差乘以$\ l-1\ $层第层第$\ k\ $个神经元的输出,可以发现当激活函数的输出值个神经元的输出,可以发现当激活函数的输出值$\ a\ $很小的时候那么相应的梯度也会变得非常小,因此依赖于梯度下降算法来更新权重很小的时候那么相应的梯度也会变得非常小,因此依赖于梯度下降算法来更新权重$\ w_{jk}\ $将会变得非常缓慢,换句话说就是**当某个权重$\ w_{jk}\ $连接的上一个激活函数输出值连接的上一个激活函数输出值$\ a\ $很小的话,那么这个权重很小的话,那么这个权重$\ w_{jk}\ $的学习将会很慢。** 207 | 208 | ##### 损失函数对偏置$\ b \ $的偏导数 209 | 210 | ​ 同理根据误差传播的传递性$\ \Delta b_j^{(l)}\rightarrow \Delta z_j^{(l)} \rightarrow \cdots\rightarrow\Delta C(\theta) \ $,因此损失函数也可以看成是偏置$\ b\ $的复合函数,由链式求导法则可知 211 | $$ 212 | \begin{aligned} 213 | \dfrac{\partial C(\theta)}{\partial b_j^{(l)}}&=\dfrac{\partial C(\theta)}{\partial z_j^{(l)}}\dfrac{\partial z_j^{(l)}}{\partial b_j^{(l)}}\\ 214 | &=\delta_j^{(l)}\cdot1 215 | \\ 216 | &=\delta_j^{(l)} 217 | \end{aligned} 218 | $$ 219 | 由这个公式可知,损失函数$\ C(\theta)\ $对于偏置$\ b_j^{(l)}\ $的偏导数会等于损失函数$\ C(\theta)\ $在这个神经元上面的误差。如果要求梯度的话就需要求出这些偏导数,但现在通过误差却间接得到了偏导数。 220 | 221 | #### 反向传播算法流程总结 222 | 223 | ##### (step1) 训练数据输入 224 | 225 | ​ 假设训练数据集为($x^{(1)}$,$y^{(1)}$),($x^{(2)}$,$y^{(2)}$),$\cdots$,($x^{(r)}$,$y^{(r)}$),$\cdots$,($x^{(m)}$,$y^{(m)}$),其中$x^{(i)}\in\R^{n}$,并为输入层选择合适的激活函数$\ \sigma(x)\ $。 226 | 227 | ##### (step2) 前向传播过程 228 | 229 | ​ 对于神经网络的各层前向的计算一遍结果,$\ l=2,3,\cdots,L\ ​$。 230 | $$ 231 | \begin{aligned} 232 | \begin{cases} 233 | \boldsymbol{z^{(l)}=w^{(l)}a^{(l-1)}+b}\\ 234 | \boldsymbol{a^{(l)}}=\sigma(\boldsymbol{z^{(l)}}) 235 | 236 | \end{cases} 237 | \end{aligned} 238 | $$ 239 | 240 | ##### (step3) 计算输出层误差 241 | 242 | $$ 243 | \boldsymbol{\delta^{(L)}}=\nabla_{\boldsymbol{a^{(L)}}}\boldsymbol{C(\theta)}\odot\boldsymbol{\sigma'(z^{(L)})} 244 | $$ 245 | 246 | ##### (step4) 计算反向传播误差 247 | 248 | ​ 对于神经网络的各层从后向前计算一遍结果,$\ l=L-1,L-2,\cdots,2\ $。 249 | $$ 250 | \boldsymbol{\delta^{(l)}}=\left((\boldsymbol{w^{(l+1)}})^T\boldsymbol{\delta^{(l+1)}}\right)\odot\sigma'(\boldsymbol{z^{(l)}}) 251 | $$ 252 | 253 | ##### (step5) 计算并且更新权重$\ w\ $和偏置$\ b\ $ 254 | 255 | ​ 通过梯度下降算法更新权重$\ w\ $和偏置$\ b\ $的值,$\ \alpha\ $为学习率其中$\ \alpha\in(0,1]\ $。 256 | $$ 257 | \begin{aligned} 258 | \begin{cases} 259 | w_{jk}^{(l)}:=w_{jk}^{(l)}-\alpha\dfrac{\partial C(\theta)}{\partial w_{jk}^{(l)}}\\ 260 | b_j^{(l)}:=b_j^{(l)}-\alpha\dfrac{\partial C(\theta)}{\partial b_j^{(l)}} 261 | \end{cases} 262 | \end{aligned} 263 | $$ 264 | 即 265 | $$ 266 | \begin{aligned} 267 | \begin{cases} 268 | w_{jk}^{(l)}:=w_{jk}^{(l)}-\alpha a_k^{(l-1)}\delta_j^{(l)}\\ 269 | b_j^{(l)}:=b_j^{(l)}-\alpha\delta_j^{(l)} 270 | \end{cases} 271 | \end{aligned} 272 | $$ 273 | 274 | -------------------------------------------------------------------------------- /md/多分类问题的交叉熵.md: -------------------------------------------------------------------------------- 1 | ##
多分类问题的交叉熵
2 | 3 |
杨航锋
4 | 在多分类问题中,损失函数为交叉熵损失函数。假设数据集$\ T=\{(x^{(1)}, y^{(1)}),(x^{(2)}, y^{(2)}),\cdots,(x^{(m)}, y^{(m)})\}\ $,输入空间 $\cal X \in \R^n \ $ 为$\ n\ $维向量的集合,特征向量 $\ x^{(i)} \in \cal X\ $,标签$\ y^{(i)}\in\mathbb R^k\ $为$\ k\ $维$\ One\ Hot\ $向量,模型的预测输出为$\ p^{(i)} \ $其中$\ p^{(i)}\in\mathbb R^k\ $,综上该数据集的损失函数为 5 | $$ 6 | Loss(Y,P)=-\sum\limits_{i=1}^m \sum\limits_{j=1}^k y_j^{(i)}\log p_j^{(i)} 7 | $$ 8 | 举例说明 9 | $$ 10 | \begin{aligned} 11 | &y^{(1)}=[1, 0, 0]\\ 12 | &y^{(2)}=[0, 1, 0]\\ 13 | &p^{(1)}=[0.8,0.1,0.1]\\ 14 | &p^{(2)}=[0.3,0.6,0.1]\\ 15 | &Loss(y,p)=-(1\times\log0.8+0\times\log0.1+0\times\log0.1)-(0\times\log0.3+1\times\log0.6+0\times\log0.1) 16 | \end{aligned} 17 | $$ 18 | -------------------------------------------------------------------------------- /md/感知机算法.md: -------------------------------------------------------------------------------- 1 | ##
感知机算法
2 | 3 |
杨航锋
4 | 5 | ​ 感知机算法是应用于线性可分样本数据的二分类算法,本文在推导感知机算法过程中遵循的顺序是,首先提出假设函数、其次构造出损失函数、然后求解损失函数得出假设函数中的参数值、最后给出感知机算法的对偶形式。弄清楚感知机算法是学好支持向量机和神经网络的基础 。[更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### 感知机的假设函数 8 | 9 | ​ 假设输入空间是$\ X\in\R^{n} \ $,输出空间是$\ Y\in\{+1,-1\}\ $。输入$\ x\in X\ $表示实例的特征向量,对应于输入空间的点;输出$\ y\in Y\ $表示实例的类别。由输入空间到输出空间的如下函数: 10 | $$ 11 | \begin{aligned} 12 | \psi(x)&=rsign(\omega_1x_1+\omega_2x_2+\cdots+w_nx_n+b)\\ 13 | &=rsign(\omega^Tx+b) 14 | \end{aligned} 15 | $$ 16 | 称为感知机,其中$\ \omega\in \R^n,\ b \in \R \ ​$为感知机算法的参数值,$rsign\ ​$为反对称的符号函数,即: 17 | $$ 18 | \begin{aligned} 19 | rsign(x) = 20 | \begin{cases} 21 | +1, & \mbox{if }x \geqslant 0 \\ 22 | -1, & \mbox{otherwise} 23 | \end{cases}\\ 24 | 25 | \end{aligned} 26 | $$ 27 | 因此可知感知机的假设函数为$\ \psi (x)\ $,通过输入特征向量$x$即可判断其所属类别。 28 | 29 | #### 感知机的损失函数 30 | 31 | ​ 感知器的训练过程其实就是求解$\ \omega\ $和$\ b\ $的过程。正确的$\ \omega\ $和$\ b\ $所构成的超平面$\ \omega^Tx+b=0\ $恰好将两类数据点分割在这个平面的两侧。为了找出这样的超平面,即确定感知机模型参数$\ \omega、b\ $,需定义损失函数并将损失函数最小化。不妨假设含有$m$个线性可分的样本数据($x^{(1)}$,$y^{(1)}$)、($x^{(2)}$,$y^{(2)}$)、$\cdots$、($x^{(m)}$,$y^{(m)}$),$y^{(i)}\in Y \ $。 32 | 33 | ![](..\picture\感知机.png) 34 | 35 | 损失函数使用误分类点到超平面$\ S\ $的总距离,因此输入空间$\ X\ $中任何一点$\ x^{(i)}\ $到超平面$\ S\ $的距离为(类比点到直线的距离): 36 | $$ 37 | \dfrac{1}{\Vert \omega \Vert _{2}} \vert\omega^Tx^{(i)}+b\vert 38 | $$ 39 | 不妨假设误分类的点集为$M$,则任意误分类点($x^{(i)}$, $y^{(i)}$)$\in$ $M$,当$w^Tx^{(i)}+b>0$时,有$y^{(i)}=-1$;当$w^Tx^{(i)}+b<0$时,有$y^{(i)}=+1$。所以对任意误分类点($x^{(i)}$,$y^{(i)}$)有如下不等式成立: 40 | $$ 41 | y^{(i)}(w^Tx^{(i)}+b)<0 42 | $$ 43 | 则误分类点($x^{(i)}$,$y^{(i)}$)到超平面$\ S\ $的距离为(去掉绝对值符号): 44 | $$ 45 | -\dfrac{y^{(i)} (\omega^Tx^{(i)}+b)}{\Vert \omega \Vert _{2}} 46 | $$ 47 | 故误分类点集$M$中所有点到超平面$\ S\ $的距离之和为 48 | $$ 49 | -\dfrac{1}{\Vert \omega\Vert_2}\sum\limits_{(x^{(i)},y^{(i)})\in M}y^{(i)}(w^Tx^{(i)}+b) 50 | $$ 51 | 所以求解最小化距离之和可知 52 | $$ 53 | \begin{aligned} 54 | \mathop{\arg\min}_{\omega, b} L(\omega,b) & \Leftrightarrow \mathop{\arg\min}_{\omega, b} 55 | -\dfrac{1}{\Vert \omega\Vert_2}\sum\limits_{(x^{(i)},y^{(i)})\in M}y^{(i)}(w^Tx^{(i)}+b)\\ 56 | & \Leftrightarrow \mathop{\arg\min}_{\omega, b} 57 | -\sum\limits_{(x^{(i)},y^{(i)})\in M}y^{(i)}(w^Tx^{(i)}+b)\\ 58 | \end{aligned} 59 | $$ 60 | 综上可知,感知机算法的损失函数为$\ L(\omega,b)=-\sum\limits_{(x^{(i)},y^{(i)})\in M}y^{(i)}(w^Tx^{(i)}+b)\ $。 61 | 62 | #### 求解感知机的损失函数 63 | 64 | ​ 最小化损失函数采用梯度下降算法,在感知机中梯度下降算法的迭代格式为 65 | $$ 66 | \omega:=\omega-\alpha\nabla_{\omega} {L(\omega,b)}\\ 67 | b:=b-\alpha\nabla_{b} {L(\omega,b)} 68 | $$ 69 | 其中$\ \alpha \in (0,1]\ $代表感知机算法的学习率,为了实现该算法首先要求出损失函数$\ L(\omega,b)\ $分别对参数$\omega,\ b\ $的梯度: 70 | $$ 71 | \nabla_{\omega} {L(\omega,b)}=-\sum\limits_{(x^{(i)},y^{(i)})\in M}x^{(i)}y^{(i)}\\ 72 | \nabla_{b} {L(\omega,b)}=-\sum\limits_{(x^{(i)},y^{(i)})\in M}y^{(i)}\\ 73 | $$ 74 | 因此随机选取$\ M\ $中的一点$\ (x^{(i)},y^{(i)})\ $更新$\ \omega、b\ $直到感知机的损失函数$\ L(\omega,b)\ $下降到$\ 0\ $为止 75 | $$ 76 | \omega:=\omega+\alpha x^{(i)}y^{(i)}\\ 77 | b:=b+\alpha y^{(i)} 78 | $$ 79 | 如果样本数据是线性可分的,那么数学上可以证明这种算法一定是收敛的,即经过有限步的迭代后可以求出能够正确分类样本数据的参数$\ \omega, b\ $ 。 80 | 81 | #### 感知机算法的对偶形式 82 | 83 | ​ 感知机算法对偶形式的目的是降低运算量,但是并不是在任何情况下都能降低运算量,而是在特征空间的维度很高时才能发挥作用。 每次感知机梯度下降算法的迭代都是选择一个误分类样本数据来更新$\ \omega、b $参数。最终经过若干次的迭代后得到最终的结果。对于从来都没有误分类过的样本,它被选择参与$\ \omega、b \ $迭代的次数是$\ 0\ $,假设样本点$\ (x^{(i)}, y^{(i)}) \in M\ $在迭代更新$\ \omega 、b \ $时被使用了$\ k_i \ $次,因此在原始感知机算法中,算法最后收敛时的$\ \omega、b\ $为: 84 | $$ 85 | \begin{aligned} 86 | \omega&=\alpha\sum\limits_{i=1}^K k_ix^{(i)}y^{(i)}\\ 87 | b&=\alpha\sum\limits_{i=1}^K k_iy^{(i)} 88 | \end{aligned} 89 | $$ 90 | 把上述$\ \omega、b\ $回代到原始感知机算法的假设函数中可得 91 | $$ 92 | \psi(x)=rsign(\alpha\sum\limits_{j=1}^K k_jx^{(j)}y^{(j)}\cdot x +\alpha\sum\limits_{j=1}^K k_jy^{(j)}) 93 | $$ 94 | 此时的参数不再是$\ \omega、b \ $而是$\ k_i\ $,$i=1,2,\cdots,K $。因此原始问题由求解参数$\ \omega、b \ $就转化为怎么求解参数$\ k_i\ $ 95 | 96 | 只要$\ k_i\ $求出来了,那么原始问题的$\ \omega、b\ $就求出来了。综上可以给出对偶形式下的参数迭代格式 97 | $$ 98 | \begin{cases} 99 | k_i=k_i+1, & \mbox{if }\ y^{(i)}\left(\alpha\sum\limits_{j=1}^K k_j y^{(j)}(x^{(i)},x^{(j)}) +\alpha\sum\limits_{j=1}^K k_jy^{(j)}\right) \leqslant 0 \\ 100 | i=i+1, & \mbox{otherwise} 101 | \end{cases}\\ 102 | $$ 103 | 更一般的把判断误分类点的不等式向量化 104 | $$ 105 | \begin{aligned} 106 | &y^{(i)}\left(\alpha\sum\limits_{j=1}^K k_j y^{(j)}(x^{(i)},x^{(j)}) +\alpha\sum\limits_{j=1}^K k_jy^{(j)}\right)\\ 107 | &=\alpha y^{(i)}k^Ty(x^{(i)},x^{(j)})+\alpha y^{(i)}k^Ty 108 | \end{aligned} 109 | $$ 110 | 其中$\ (x^{(i)},x^{(j)}) \ $表示做内积运算,迭代更新至无误分类样本数据即可。在迭代更新时可以发现当**某样本数据点在算法更新时使用次数越多,意味着它距离分离超平面越近,也就越难以正确分类,换言之,这类样本数据点对感知机算法学习的效果影响最大 。** 111 | 112 | #### 总结 113 | 114 | ​ 假设特征空间是 $\R^n​$,样本数据为$N​$, $N\ll n​$。当考虑原始形式的感知机算法时,每轮迭代中至少要判断某个输入样本数据点是不是误分类点,既对于$\ (x^{(i)},y^{(i)})\ ​$,是否有$\ y^{(i)}(\omega^Tx^{(i)}+b)\leqslant 0\ ​$。这里的运算量主要集中在求输入特征$\ x^{(i)}\ ​$和权值向量$\ \omega\ ​$的内积上,时间复杂度为$\ \Theta(n) \ ​$,当特征空间维度非常高时,原始感知机算法效率很低;而在对偶形式的感知机算法中,对于输入数据点 $\ (x^{(i)},y^{(i)})\ ​$是否为误分类点的条件转化为$$\ y^{(i)}\left(\alpha\sum\limits_{j=1}^K k_j y^{(j)}(x^{(i)},x^{(j)}) +\alpha\sum\limits_{j=1}^K k_j y^{(j)}\right) \leqslant 0\ ​$$。注意到这里所有输入样本数据都仅仅以内积的形式出现,所以我们可以预先计算出输入样本数据两两之间的内积,得到所谓的$\ Gram\ ​$矩阵$ \ G=[(x^{(i)},x^{(j)})]_{N\times N}​$。这样一来每次做误分类点检测时候只需要在$\ Gram\ ​$矩阵里查找就能获取内积$\ (x^{(i)},x^{(j)})\ ​$,所以这个误分类点检测的时间复杂度是$\ \Theta(1)\ ​$。也就是说,对偶形式的感知机算法,把每轮迭代的时间复杂度从特征空间维度$\ n\ ​$转移到了样本数据数量$ \ N\ ​$上,这是一件很奇妙的事情。 115 | 116 | -------------------------------------------------------------------------------- /md/支持向量机(上篇).md: -------------------------------------------------------------------------------- 1 | ##
支持向量机(上篇)

2 | 3 |
杨航锋
4 | 5 | ​ 支持向量机,英文全名为Support Vector Machine故经常简称为SVM,和感知机算法一样它通常用于二分类样本数据的分类,不同之处在于感知机算法要求样本数据线性可分否则算法不收敛,而支持向量机算法通过引入核函数巧妙的解决了这个问题。支持向量机的基本思想是在样本数据中训练出一个间隔最大化的线性分类器,其学习策略为间隔最大化,最终转化为求解一个凸二次规划问题。[更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### 函数间隔和几何间隔 8 | 9 | ​ 假设输入空间是$\ X\in\R^{n} \ $,输出空间是$\ Y\in\{+1,-1\}\ $,不妨假设含有$m$个样本数据($x^{(1)}$,$y^{(1)}$)、($x^{(2)}$,$y^{(2)}$)、$\cdots$、($x^{(m)}$,$y^{(m)}$),其中$x^{(i)}\in X、y^{(i)}\in Y \ $。在感知机算法中我们尝试寻找一个超平面$\ \omega^Tx+b=0\ $从而把样本数据分隔开来,在超平面上侧定义$\ y^{(i)}=+1\ $在超平面下侧定义$\ y^{(i)}=-1\ $,因此样本数据集的函数间隔$\ \bar{\gamma}\ $可以定义为 10 | $$ 11 | \begin{aligned} 12 | &\bar{\gamma} = \min\limits_{\omega,b}\ \hat{\gamma}^{(i)}\\ 13 | &\hat{\gamma}^{(i)}= y^{(i)}(\omega^Tx^{(i)}+b) 14 | \end{aligned} 15 | $$ 16 | 对于任意样本点$\ (x^{(i)},y^{(i)})\ $要使分类准确那么必然有$\ y^{(i)}(\omega^Tx^{(i)}+b)>0 \ $,所以函数间隔$\ \bar{\gamma} \ $作用可以理解为使得样本数据点分类准确率最高,直观感觉就是函数间隔越大分类效果越好。但是函数间隔并不能反映点到超平面的距离,当人为成倍的改变$\ \omega、b\ $的取值时,分类超平面是不变的($\ \omega^Tx+b=0 \Longleftrightarrow n\omega^Tx+nb=0  \ $)但是函数间隔会相应的增大,从而影响分类效果。为了统一度量,只需要对法向量$ \ \omega\ $标准化即可,这样我们就得到样本数据集的几何间隔$\ \gamma\ $ 17 | $$ 18 | \begin{aligned} 19 | &\gamma = \min\limits_{\omega,b}\ \gamma^{(i)}\\ 20 | &\gamma^{(i)}=y^{(i)}\left(\left(\dfrac{\omega}{\Vert\omega\Vert_2}\right)^Tx^{(i)}+\dfrac{b}{\Vert\omega\Vert_2}\right) 21 | \end{aligned} 22 | $$ 23 | 24 | #### 支持向量与其所在的超平面方程 25 | 26 | 在感知机算法中分类超平面可能有多个,优化模型时也希望所有的数据点都远离分类超平面,但是实际上离分类超平面很远的点已经被正确分类了,再让它继续远离分类超平面将没有更大的意义,相反那些离分类超平面很近的数据点更容易被误分类,只要这些更近的数据点被正确分类那么离分类超平面更远的数据点自然也被正确分类,和原超平面平行的保持一定的几何距离的这两个超平面对应的向量,我们定义为**支持向量**。 27 | 28 | ​ 如下图所示,分类超平面为$\ \omega^Tx+b=0 \ $,支持向量所在超平面与分类超平面的几何间隔为$\ d\ $,则可以求出支持向量所在的超平面方程。 29 | 30 | ![](..\picture\支持向量.png) 31 | 32 | 对任意数据点$\ (x^{(i)},y^{(i)})\ $根据点到平面的距离关系有如下式子成立 33 | $$ 34 | \begin{aligned} 35 | \begin{cases} 36 | \dfrac{\omega^Tx^{(i)}+b}{\Vert\omega\Vert_2}\geqslant d, & \forall y^{(i)}=1 \\ 37 | \dfrac{\omega^Tx^{(i)}+b}{\Vert\omega\Vert_2}\leqslant -d, & \forall y^{(i)}=-1 38 | \end{cases} 39 | \end{aligned} 40 | $$ 41 | 不等式的两边同时除以距离$\ d\ $,并令$\ \omega_d^T=\dfrac{\omega^T}{\Vert\omega\Vert_2\cdot d}、b_d=\dfrac{b}{\Vert\omega\Vert_2\cdot d}\ $可以化简为 42 | $$ 43 | \begin{aligned} 44 | \begin{cases} 45 | \dfrac{\omega^Tx^{(i)}+b}{\Vert\omega\Vert_2\cdot d}\geqslant 1, & \forall y^{(i)}=1 \\ 46 | \dfrac{\omega^Tx^{(i)}+b}{\Vert\omega\Vert_2\cdot d}\leqslant -1, & \forall y^{(i)}=-1 47 | \end{cases} 48 | \Rightarrow 49 | \begin{cases} 50 | \omega_d^Tx^{(i)}+b_d\geqslant 1, & \forall y^{(i)}=1 \\ 51 | \omega_d^Tx^{(i)}+b_d\leqslant -1, & \forall y^{(i)}=-1 52 | \end{cases} 53 | \end{aligned} 54 | $$ 55 | 所以支持向量所在的超平面可记为 56 | $$ 57 | \omega_d^Tx+b_d=\pm 1 58 | $$ 59 | 由于分类超平面方程为$\ \omega^Tx+b=0\ $在等式的两端同时除以$\ \Vert\omega\Vert_2\cdot d\ $则可以写成$\ \omega_d^Tx+b_d=0\ $,所以在同等放缩情况下分类超平面方程和支持向量所在的超平面方程一般写成下图所示,**这也解释了为什么很多博客、书籍可以直接把支持向量所在的超平面方程写成**$\ \omega^Tx+b=\pm 1\ $。 60 | 61 | ![](..\picture\svm.png) 62 | 63 | 64 | 65 | 66 | 67 | #### 支持向量机的目标函数 68 | 69 | ​ 训练支持向量机模型也就是求解下列二次规划问题,其中$\ x^{(j)}\ $为支持向量 70 | $$ 71 | \begin{aligned} 72 | &\mathop{\max}_{\omega,b}\ d=\dfrac{\vert\omega^Tx^{(j)}+b\vert}{\Vert\omega\Vert_2}\\ 73 | &s.t\begin{cases} 74 | \omega^Tx^{(i)}+b\geqslant 1, & \forall y^{(i)}=1 \\ 75 | \omega^Tx^{(i)}+b\leqslant -1, & \forall y^{(i)}=-1 76 | \end{cases} 77 | \end{aligned} 78 | $$ 79 | 根据支持向量所在的超平面方程可知$\ \vert\omega^Tx^{(j)}+b\vert=1\ $故上述模型可以写成 80 | $$ 81 | \begin{aligned} 82 | &\mathop{\max}_{\omega,b}\ \dfrac{1}{\Vert\omega\Vert_2}\\ 83 | &s.t\ \ \ \ \ y^{(i)}(\omega^Tx^{(i)}+b)\geqslant 1 84 | \end{aligned} 85 | $$ 86 | 即 87 | $$ 88 | \begin{aligned} 89 | &\mathop{\min}_{\omega,b}\ \dfrac{1}{2}\Vert\omega\Vert_2^2\\ 90 | &s.t\ \ \ \ \ y^{(i)}(\omega^Tx^{(i)}+b)\geqslant 1 91 | \end{aligned} 92 | $$ 93 | 94 | #### 拉格朗日乘数与对偶问题 95 | 96 | ##### 拉格朗日乘数法 97 | 98 | ​ 一般的假设$\ f(x),c_i(x),h_j(x)\ $是定义在$\ \R^n\ $上的连续可微函数,考虑约束最优化问题: 99 | $$ 100 | \begin{aligned} 101 | &\mathop{\min}_{x\in\R^n}\ f(x)\\ 102 | &s.t. 103 | \begin{cases} 104 | c_i(x) \leqslant 0,\ \ \ i=1,\cdots,k\\ 105 | h_j(x)=0,\ \ j=1,\cdots,l 106 | 107 | \end{cases} 108 | \end{aligned} 109 | $$ 110 | 称为约束最优化问题的原始问题。 111 | 112 | ​ 通过引入广义拉格朗日函数 113 | $$ 114 | \begin{aligned} 115 | \mathcal{L}(x,\alpha,\beta)&=f(x)+\sum\limits_{i=1}^k\alpha_ic_i(x)+\sum\limits_{j=1}^l\beta_jh_j(x)\\ 116 | &其中\ \ \ \alpha_i\geqslant0 117 | \end{aligned} 118 | $$ 119 | 现在如果把$\ \mathcal{L}(x,\alpha,\beta)\ $看作是$\ \alpha_i,\beta_j\ $的函数,要求其最大值,即 120 | $$ 121 | \mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathcal{L}(x,\alpha,\beta) 122 | $$ 123 | 需要注意的是$\ \mathcal{L}(x,\alpha,\beta)\ $是一个关于$\ \alpha_i,\beta_j\ $的函数,优化就是确定$\ \alpha_i,\beta_j\ $的值使得目标函数$\ \mathcal{L}(x,\alpha,\beta)\ $取得最大值,确定了$\ \alpha_i,\beta_j\ $的值,就可以得到$\ \mathcal{L}(x,\alpha,\beta)\ $的最大值,因为$\ \alpha_i,\beta_j\ $已经确定,显然$\ \begin{aligned}\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathcal{L}(x,\alpha,\beta)\end{aligned}\ $就是只关于$\ x\ $的函数,不妨定义这个函数为 124 | $$ 125 | \begin{aligned} 126 | \theta_p(x)&=\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathcal{L}(x,\alpha,\beta)\\ 127 | &=\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0}[f(x)+\sum\limits_{i=1}^k\alpha_ic_i(x)+\sum\limits_{j=1}^l\beta_jh_j(x)]\\ 128 | \end{aligned} 129 | $$ 130 | 接下来通过$\ x\ $是否满足约束条件来分析这个函数,若$\ x\ $不满足原始约束条件时也就是当$\ c_i(x)>0\ $时,则令$ \ \alpha_i\rightarrow+\infty \ $有$ \ \theta_p(x)=+\infty \ $;当$\ h_j(x)\neq0 \ $时,则存在$ \ \beta_jh_j(x)\rightarrow+\infty \ $有$ \ \theta_p(x)=+\infty \ $。若$\ x\ $满足原始约束条件,则有$\ \begin{aligned}\theta_p(x)=\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} [f(x)]=f(x)\end{aligned}\ $,注意上述最大化是确定$\ \alpha_i,\beta_j\ $的过程,将$\ f(x)\ $看成是一个常量,常量的最大值就是其本身。综上所述可以得到 131 | $$ 132 | \begin{aligned} 133 | \theta_p(x)= 134 | \begin{cases} 135 | f(x),\ \ \ \ \ x满足原始问题的约束条件\\ 136 | +\infty,\ \ \ \ \ 其他 137 | \end{cases} 138 | \end{aligned} 139 | $$ 140 | 那么当$\ x\ $满足原始问题的约束条件下有 141 | $$ 142 | \begin{aligned} 143 | \mathop{\min}_{x} \theta_p(x) =\mathop{\min}_{x} \mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathcal{L}(x,\alpha,\beta)=\mathop{\min}_{x}f(x) 144 | \end{aligned} 145 | $$ 146 | 即$\ \begin{aligned}\mathop{\min}_{x} \theta_p(x) \end{aligned}\ $与原始优化问题等价,所以$\ \begin{aligned}\mathop{\min}_{x} \theta_p(x) \end{aligned}\ $常用来代表原始问题,下标$\ p\ $表示原始问题,定义原始问题的最优值为 147 | $$ 148 | p^*=\mathop{\min}_{x} \theta_p(x) 149 | $$ 150 | **==通过拉格朗日乘数法重新定义了一个无约束问题这个无约束问题等价于原来的约束优化问题,从而将约束问题无约束化。==** 151 | 152 | ##### 对偶问题 153 | 154 | ​ 定义关于$\ \alpha,\beta\ $的函数$\ \theta_D(\alpha,\beta)=\min\limits_x\mathcal{L}(x,\alpha,\beta)\ $,注意等式的右边是关于$\ x\ $的函数的最小化,确定$\ x\ $后最小值就只和$\ \alpha,\beta\ $有关,所以是一个关于$\ \alpha,\beta\ $的函数。因此原问题的对偶问题写作 155 | $$ 156 | \begin{aligned} 157 | \mathop{\min}_{x} \theta_p(x) =\mathop{\min}_{x} \mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathcal{L}(x,\alpha,\beta)\rightarrow\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathop{\min}_{x} \mathcal{L}(x,\alpha,\beta)=\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \theta_D(\alpha,\beta) 158 | \end{aligned} 159 | $$ 160 | 可以看出原始问题和它的对偶问题很对称,原始问题是先固定$\ \mathcal{L}(x,\alpha,\beta)\ $中的$\ x\ $,优化出参数$\ \alpha,\beta\ $,再优化出最优$\ x\ $,而对偶问题是先固定$\ \alpha,\beta\ $,优化出最优$\ x\ $,然后再确定参数$\ \alpha,\beta\ $。定义对偶问题的最优值为 161 | $$ 162 | d^*=\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \theta_D(\alpha,\beta) 163 | $$ 164 | **定理1:**若原始问题与对偶问题都有最优值,则 165 | $$ 166 | \begin{aligned} 167 | d^*=\mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathop{\min}_{x} \mathcal{L}(x,\alpha,\beta)\leqslant\mathop{\min}_{x} \mathop{\max}_{\alpha,\beta;\alpha_i\geqslant0} \mathcal{L}(x,\alpha,\beta)=p^* 168 | \end{aligned} 169 | $$ 170 | 也就是说原始问题的最优值不小于对偶问题的最优值,但是我们需要通过对偶问题来求解原始问题,就必须使得原始问题的最优值与对偶问题的最优值相等,于是给出下面的推论 171 | 172 | **推论:**设$\ x^*\ $和$\ \alpha^*,\beta^*\ $分别是原始问题和对偶问题的可行解,如果$\ d^*=p^*\ $,那么$\ x^*\ $和$\ \alpha^*,\beta^*\ $都是原始问题和对偶问题的最优解。 173 | 174 | **定理2:**对于原始问题和对偶问题,假设函数$\ f(x)\ $和$\ c_i(x)\ $是凸函数,$\ h_j(x)\ $是仿射函数(即由一阶多项式构成的函数,$\ f(x)=Ax+b,A是矩阵,x、b是向量 \ $);并且假设不等式约束$\ c_i(x)\ $是严格可行的,即存在$\ x\ $,对所有$\ i\ $有$\ c_i(x)<0\ $,则$\ x^*\ $和$\ \alpha^*,\beta^*\ $分别是原始问题和对偶问题的最优解的充分必要条件是$\ x^*\ $和$\ \alpha^*,\beta^*\ $满足下面的$\ KKT\ $条件: 175 | $$ 176 | \begin{aligned} 177 | &\nabla_x\mathcal{L}(x^*,\alpha^*,\beta^*)=0\\ 178 | &\nabla_\alpha\mathcal{L}(x^*,\alpha^*,\beta^*)=0\\ 179 | &\nabla_\beta\mathcal{L}(x^*,\alpha^*,\beta^*)=0\\ 180 | &\alpha_i^*c_i(x^*)=0, i=1, 2,\cdots,k (KKT对偶互补条件)\\ 181 | &c_i(x^*)\leqslant0,i=1,2,\cdots,k\\ 182 | &\alpha_i^*\geqslant0,i=1,2,\cdots,k\\ 183 | &h_j(x^*)=0,j=1,2,\cdots,l 184 | \end{aligned} 185 | $$ 186 | 187 | #### 支持向量机算法的对偶问题 188 | 189 | ​ 回到支持向量机的优化模型 190 | $$ 191 | \begin{aligned} 192 | &\mathop{\min}_{\omega,b}\ \dfrac{1}{2}\Vert\omega\Vert_2^2\\ 193 | &s.t.\ \ \ \ \ y^{(i)}(\omega^Tx^{(i)}+b)\geqslant 1 194 | \end{aligned} 195 | $$ 196 | 由于该模型满足$\ KKT \ $条件,因此可以通过拉格朗日乘数法将有约束的优化目标转化为无约束的优化函数 197 | $$ 198 | \begin{aligned} 199 | \mathcal{L}(\omega,b,\alpha)&=\dfrac{1}{2}\Vert\omega\Vert_2^2-\sum\limits_{i=1}^m\alpha_i[y^{(i)}(\omega^Tx^{(i)}+b)-1]\\ 200 | s.t.\ \ &\alpha_i \geqslant0 201 | \end{aligned} 202 | $$ 203 | 因此优化目标转化为 204 | $$ 205 | \begin{aligned} 206 | \mathop{\min}_{\omega,b} \mathop{\max}_{\alpha_i\geqslant0} \mathcal{L}(\omega,b,\alpha) 207 | \end{aligned} 208 | $$ 209 | 该问题的对偶问题为 210 | $$ 211 | \begin{aligned} 212 | \mathop{\max}_{\alpha_i\geqslant0} \mathop{\min}_{\omega,b} \mathcal{L}(\omega,b,\alpha) 213 | \end{aligned} 214 | $$ 215 | 从上式中可以观察到先求优化函数对于$\ \omega,b\ $的极小值,然后再求拉格朗日乘子$\ \alpha_i\ $的极大值。首先为了求$\ \begin{aligned}\mathop{\min}_{\omega,b} \mathcal{L}(\omega,b,\alpha)\end{aligned}\ $,可以通过对$\ \omega,b\ $分别求偏导数令其为$\ 0\ $得到 216 | $$ 217 | \begin{aligned} 218 | &\nabla_\omega\mathcal{L}(\omega,b,\alpha)=0\Rightarrow\omega=\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)}\\ 219 | &\nabla_b\mathcal{L}(\omega,b,\alpha)=0\Rightarrow \sum\limits_{i=1}^m\alpha_iy^{(i)}=0 220 | 221 | \end{aligned} 222 | $$ 223 | 上面已经求出来的$\ \omega,\alpha\ $的关系,可以带入$\ \mathcal{L}(\omega,b,\alpha) \ $消去$\ \omega\ $,令$\ \phi(\alpha)=\begin{aligned}\mathop{\min}_{\omega,b} \mathcal{L}(\omega,b,\alpha)\end{aligned}\ $则 224 | $$ 225 | \begin{aligned} 226 | \phi(\alpha)&=\dfrac{1}{2}\Vert\omega\Vert_2^2-\sum\limits_{i=1}^m\alpha_i[y^{(i)}(\omega^Tx^{(i)}+b)-1]\\ 227 | &=\dfrac{1}{2}\omega^T\omega-\sum\limits_{i=1}^m\alpha_iy^{(i)}\omega^Tx^{(i)}-\sum\limits_{i=1}^m\alpha_iy^{(i)}b+\sum\limits_{i=1}^m\alpha_i\\ 228 | &=\dfrac{1}{2}\omega^T\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)}-\sum\limits_{i=1}^m\alpha_iy^{(i)}\omega^Tx^{(i)}-\sum\limits_{i=1}^m\alpha_iy^{(i)}b+\sum\limits_{i=1}^m\alpha_i\\ 229 | &=\dfrac{1}{2}\omega^T\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)}-\omega^T\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)}-\sum\limits_{i=1}^m\alpha_iy^{(i)}b+\sum\limits_{i=1}^m\alpha_i\\ 230 | &=-\dfrac{1}{2}\omega^T\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)}-\sum\limits_{i=1}^m\alpha_iy^{(i)}b+\sum\limits_{i=1}^m\alpha_i\\ 231 | &=-\dfrac{1}{2}(\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)})^T(\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)})-b\sum\limits_{i=1}^m\alpha_iy^{(i)}+\sum\limits_{i=1}^m\alpha_i\\ 232 | &=-\dfrac{1}{2}\sum\limits_{i=1}^m\alpha_iy^{(i)}(x^{(i)})^T\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)}-b\sum\limits_{i=1}^m\alpha_iy^{(i)}+\sum\limits_{i=1}^m\alpha_i\\ 233 | &=-\dfrac{1}{2}\sum\limits_{i=1,j=1}^m\alpha_iy^{(i)}(x^{(i)})^T\alpha_jy^{(j)}x^{(j)}+\sum\limits_{i=1}^m\alpha_i\\ 234 | &=\sum\limits_{i=1}^m\alpha_i-\dfrac{1}{2}\sum\limits_{i=1,j=1}^m\alpha_i\alpha_jy^{(i)}y^{(j)}(x^{(i)})^Tx^{(j)}\\ 235 | 236 | \end{aligned} 237 | $$ 238 | 对$\ \phi(\alpha)\ $极大化的数学表达式如下: 239 | $$ 240 | \begin{aligned} 241 | &\mathop{\max}_{\alpha}\ \sum\limits_{i=1}^m\alpha_i-\dfrac{1}{2}\sum\limits_{i=1,j=1}^m\alpha_i\alpha_jy^{(i)}y^{(j)}(x^{(i)},x^{(j)})\\ 242 | &s.t. 243 | \begin{cases} 244 | \sum\limits_{i=1}^m\alpha_iy^{(i)}=0\\ 245 | \alpha_i\geqslant0,i=1,2,\cdots,m 246 | \end{cases} 247 | \end{aligned} 248 | $$ 249 | 等价于求解如下极小化问题 250 | $$ 251 | \begin{aligned} 252 | &\mathop{\min}_{\alpha}\ \dfrac{1}{2}\sum\limits_{i=1,j=1}^m\alpha_i\alpha_jy^{(i)}y^{(j)}(x^{(i)},x^{(j)})-\sum\limits_{i=1}^m\alpha_i\\ 253 | &s.t. 254 | \begin{cases} 255 | \sum\limits_{i=1}^m\alpha_iy^{(i)}=0\\ 256 | \alpha_i\geqslant0,i=1,2,\cdots,m 257 | \end{cases} 258 | \end{aligned} 259 | $$ 260 | -------------------------------------------------------------------------------- /md/支持向量机(下篇).md: -------------------------------------------------------------------------------- 1 | ##
支持向量机(下篇)

2 | 3 |
杨航锋
4 | 5 | #### 支持向量机的二次优化模型 6 | 7 | ​ 在支持向量机(上篇)中推导出了对偶形式下的二次优化模型,为了不失一般性引入核函数,即求解下述问题 8 | $$ 9 | \begin{aligned} 10 | \mathop{\arg\min}_{\alpha}&\ \dfrac{1}{2}\sum\limits_{i=1,j=1}^m\alpha_i\alpha_jy^{(i)}y^{(j)}k(x^{(i)},x^{(j)})-\sum\limits_{i=1}^m\alpha_i\\ 11 | &s.t. 12 | \begin{cases} 13 | \sum\limits_{i=1}^m\alpha_iy^{(i)}=0\\ 14 | \alpha_i\geqslant0,i=1,2,\cdots,m 15 | \end{cases} 16 | \end{aligned} 17 | $$ 18 | 想知道上式详细推导过程的读者可以去[ML-NOTE](https://github.com/yhangf/ML-NOTE)下载,当然你也可以在我的[知乎专栏](https://zhuanlan.zhihu.com/jiqixuexi)进行阅读。 19 | 20 | #### SMO算法求解模型 21 | 22 | ##### SMO算法的基本思想 23 | 24 | ​ 在SMO算法迭代过程中,每一次需要选择一对变量$\ \{(\alpha_i,\alpha_j)|1\leqslant i\leqslant m,1\leqslant j\leqslant m,i\ne j\}\ $其他$\ m-2\ $个变量看成常数项,因为在支持向量机模型的约束条件中需要满足$\ \sum\limits_{i=1}^m\alpha_iy^{(i)}=0\ $,因此如果改变其中的一个$\ \alpha_i\ $那么至少需要改变一个$\ \alpha_j\ $才能满足约束条件,故SMO算法将一个复杂的二次优化问题转化为求解若干个比较简单的二变量优化问题。 为了方便推导不妨选择$\ \alpha_1、\alpha_2\ $作为初次迭代对象,记$\ k_{i,j}=k(x^{(i)},x^{(j)}),T=\sum\limits_{i=3}^m\alpha_i\ $则支持向量机的二次优化模型可以改写成 25 | $$ 26 | \begin{aligned} 27 | \mathop{\arg\min}_{\alpha_1,\alpha_2}&\ \dfrac{1}{2}k_{1,1}\alpha_1^2+\dfrac{1}{2}k_{2,2}\alpha_2^2+y^{(1)}y^{(2)}k_{1,2}\alpha_1\alpha_2-(\alpha_1+\alpha_2)+y^{(1)}\alpha_1\sum\limits_{i=3}^m\alpha_iy^{(i)}k_{i,1}\\ 28 | &+y^{(2)}\alpha_2\sum\limits_{i=3}^my^{(i)}\alpha_ik_{i,2}-T 29 | \\ 30 | &s.t. 31 | \begin{cases} 32 | \alpha_1y^{(1)}+\alpha_2y^{(2)}=-\sum\limits_{i=3}^m\alpha_iy^{(i)}=\gamma \\ 33 | \alpha_i\geqslant0,i=1,2,\cdots,m 34 | \end{cases} 35 | \end{aligned} 36 | $$ 37 | ##### SMO算法求解过程 38 | 39 | ![](F:\ML-NOTE\picture\smo.png) 40 | 41 | ​ 如图所示$\ \alpha_1、\alpha_2\ $之间的关系被限制在正方形框中的线段中,所以二变量的优化问题实际上仅仅是一个变量的优化问题。 记上一轮迭代得到的解为$\ \alpha_1^{old}、\alpha_2^{old}\ $,沿着约束方向$\ \alpha_2\ $没有经过约束的解为$\ \alpha_2^{new,unr}\ $,该轮迭代结束后的解为$\ \alpha_1^{new}、\alpha_2^{new}\ $。不妨假设$\ L、H\ $分别为$\ \alpha_2^{new}\ $的下界和上界,因此有 42 | $$ 43 | L\leqslant\alpha_2^{new}\leqslant H 44 | $$ 45 | 成立,那么怎么求解$\ L、H\ ​$呢?有已知条件当$\ y^{(1)}\ne y^{(2)}\ ​$时有(根据上图分析) 46 | $$ 47 | \begin{aligned} 48 | &\begin{cases} 49 | \alpha_1^{new}-\alpha_2^{new}=\gamma\\ 50 | \alpha_1^{old}-\alpha_2^{old}=\gamma 51 | \end{cases} 52 | \Rightarrow 53 | \alpha_1^{new}=\alpha_2^{new}+(\alpha_1^{old}-\alpha_2^{old})\\ 54 | \\ 55 | &\begin{cases} 56 | 0\leqslant\alpha_1^{new}\leqslant C\\ 57 | 0\leqslant\alpha_2^{new}\leqslant C 58 | \end{cases} 59 | \Rightarrow 60 | \begin{cases} 61 | 0\leqslant\alpha_2^{new}+(\alpha_1^{old}-\alpha_2^{old})\leqslant C\\ 62 | 0\leqslant\alpha_2^{new}\leqslant C 63 | \end{cases}\\ \\ 64 | &\Rightarrow 65 | 66 | \begin{cases} 67 | \alpha_2^{old}-\alpha_1^{old}\leqslant\alpha_2^{new}\leqslant C+(\alpha_2^{old}-\alpha_1^{old})\\ 68 | 0\leqslant\alpha_2^{new}\leqslant C 69 | \end{cases} 70 | \end{aligned} 71 | $$ 72 | 所以 73 | $$ 74 | \begin{aligned} 75 | \begin{cases} 76 | L=max\{0,\alpha_2^{old}-\alpha_1^{old}\}\\ 77 | H=min\{C,C+\alpha_2^{old}-\alpha_1^{old}\} 78 | \end{cases} 79 | \end{aligned} 80 | $$ 81 | 同理可得,当$\ y^{(1)}=y^{(2)}\ $时有 82 | $$ 83 | \begin{aligned} 84 | \begin{cases} 85 | L=max\{0,\alpha_2^{old}+\alpha_1^{old}-C\}\\ 86 | H=min\{C,\alpha_2^{old}+\alpha_1^{old}\} 87 | \end{cases} 88 | \end{aligned} 89 | $$ 90 | 也就是说当对二元函数$\ \phi(\alpha_1,\alpha_2)\ $求导得到无约束情况下的解$\ \alpha_2^{new,unr}\ $,则最终$\ \alpha_2^{new}\ $应该为 91 | $$ 92 | \begin{aligned} 93 | \alpha_2^{new} 94 | = 95 | \begin{cases} 96 | H, & \alpha_2^{new,unr}\gt H\\ 97 | \alpha_2^{new,unr}, & L\leqslant\alpha_2^{new,unr}\leqslant H\\ 98 | L,& \alpha_2^{new,unr}数值微分理论和简单代码实现
2 | 3 |
杨航锋
4 | 5 | 数值微分是数值方法中的名词,它可以根据函数在一些离散点的函数值,从而推算出它在某点的导数的近似值。在平常写代码的过程中,经常会调用某些优化算法比如随机梯度下降算法等,因为$TensorFlow$、$PyTorch$等深度学习算法库都已经封装好了相关算法,直接调用$API$即可得到相应结果,所以很自然的会忽略梯度的底层实现。带着这个疑惑我查阅了很多文献资料,阅读下来发现这些算法库自动计算梯度的理论还蛮复杂的,但是实现一个简单的数值微分算法还是挺简单的,具备中学数学知识即可! 6 | 7 | #### 1 一元函数的数值微分 8 | 9 | 可以根据函数在某点处导数的定义来实现代码,首先回顾一下函数在一点处导数的相关定义 10 | 11 | > **定义** 设函数$\ y=f(x)\ $在点$\ x_0\ $的某个邻域内有定义,当自变量$\ x\ $在$\ x_0\ $处取得增量$\ \Delta x\ $($x_0+\Delta x$仍在该邻域内)时,相应地,因变量取得增量$\ \Delta y=f(x_0+\Delta x)-f(x_0)\ $;如果$\ \Delta y\ $与$\ \Delta x\ $之比当$\ \Delta x\to 0\ $时极限存在,那么称函数$\ y=f(x)\ $在点$\ x_0\ $处可导,并称这个极限为函数$\ y=f(x)\ $在点$\ x_0\ $处地导数,记为$\ f'(x_0)\ $,即 12 | > $$ 13 | > f'(x_0)=\lim\limits_{\Delta x\to 0}\dfrac{\Delta y}{\Delta x}=\lim\limits_{\Delta x\to 0}\dfrac{f(x_0+\Delta x)-f(x_0)}{\Delta x} 14 | > $$ 15 | > 也可记作$\ y'\Big |_{x=x_0},\dfrac{\mathbb{d}y}{\mathbb{d}x}\Bigg |_{x=x_0} \ $或$\ \dfrac{\mathbb{d}f(x)}{\mathbb{d}x}\Bigg |_{x=x_0}\ $。 16 | 17 | 由于计算机计算数值微分会带来误差,故对原始定义做一个调整 18 | $$ 19 | f'(x_0)=\lim\limits_{\Delta x\to 0}\dfrac{f(x_0+\Delta x)-f(x_0-\Delta x)}{2\Delta x} 20 | $$ 21 | 使用调整后的导数定义求解数值微分要比单边近似地精度要高,有了理论基础就可以使用代码实现 22 | 23 | ```python 24 | def numerical_grad_1d(f, x, delta=1e-6): 25 | f_l, f_r = f(x + delta), f(x - delta) 26 | grad = (f_l - f_r) / (2 * delta) 27 | return grad 28 | ``` 29 | 30 | 例如使用上述代码计算函数$\ f(x)=x^2+x^{\frac{1}{3}}+\sin(x \cos^2(x)) \ $在$\ x=2.31\ $处地导数值 31 | 32 | ```python 33 | import numpy as np 34 | 35 | f = lambda x: x ** 2 + x ** (1/3) + np.sin(x * np.cos(x) ** 2) 36 | numerical_grad_1d(f, 2.31) 37 | ``` 38 | 39 | 通过$TensorFlow$自动微分可以验证计算地准确性 40 | 41 | ```python 42 | import tensorflow as tf # tensorflow2.0 43 | 44 | x = tf.Variable(2.31) 45 | with tf.GradientTape() as tape: 46 | g = x ** 2 + x ** (1/3) + tf.sin(x * tf.cos(x) ** 2) 47 | grad = tape.gradient(g, x) 48 | grad.numpy() 49 | ``` 50 | 51 | 两者计算结果对比 52 | 53 | 54 | 55 | #### 2 多元函数的数值微分 56 | 57 | 同理可以根据多元函数偏导数的定义来实现代码,多元函数在某一点处偏导数的定义如下 58 | 59 | > **定义** 设函数$\ z=f(x,y)\ $在点$\ (x_0,y_0)\ $的某一邻域内有定义,若$\ \lim\limits_{\Delta x\to 0}\frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x}\ $存在,则称此极限为$\ z=f(x,y)\ $函数在点$\ (x_0, y_0)\ $处对$\ x \ $的偏导数,记作$\ \frac{\partial z}{\partial x}\Bigg |_{(x_0,y_0)}, \frac{\partial f}{\partial x}\Bigg |_{(x_0,y_0)},z_x(x_0,y_0),f'_x(x_0,y_0)\ $。即 60 | > $$ 61 | > \frac{\partial z}{\partial x}\Bigg |_{(x_0,y_0)}=\lim\limits_{\Delta x\to 0}\frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x} 62 | > $$ 63 | > 同样的,若$\ \lim\limits_{\Delta y\to 0}\frac{f(x_0,y_0+\Delta y)-f(x_0,y_0)}{\Delta y}\ $存在,则称此极限为$\ z=f(x,y)\ $函数在点$\ (x_0, y_0)\ $处对$\ y \ $的偏导数,记作$\ \frac{\partial z}{\partial y}\Bigg |_{(x_0,y_0)}, \frac{\partial f}{\partial y}\Bigg |_{(x_0,y_0)},z_y(x_0,y_0),f'_y(x_0,y_0)\ $。即 64 | > $$ 65 | > \frac{\partial z}{\partial y}\Bigg |_{(x_0,y_0)}=\lim\limits_{\Delta y\to 0}\frac{f(x_0,y_0+\Delta y)-f(x_0,y_0)}{\Delta y} 66 | > $$ 67 | > 68 | 69 | 为了减小单边计算误差,对原始定义也做一些微调 70 | $$ 71 | \frac{\partial z}{\partial x}\Bigg |_{(x_0,y_0)}=\lim\limits_{\Delta x\to 0}\frac{f(x_0+\Delta x,y_0)-f(x_0-\Delta x,y_0)}{2\Delta x}\\ 72 | \frac{\partial z}{\partial y}\Bigg |_{(x_0,y_0)}=\lim\limits_{\Delta y\to 0}\frac{f(x_0,y_0+\Delta y)-f(x_0,y_0-\Delta y)}{2\Delta y} 73 | $$ 74 | 多元函数的数值微分代码实现 75 | 76 | ```python 77 | def numerical_grad_nd(f, x, delta=1e-6): 78 | grad = np.zeros_like(x) 79 | for idx in range(x.size): 80 | temp_value = x[idx] 81 | x[idx] = temp_value - delta 82 | f_l = f(x) 83 | 84 | x[idx] = temp_value + delta 85 | f_r = f(x) 86 | 87 | grad[idx] = (f_r - f_l) / (2 * delta) 88 | x[idx] = temp_value 89 | return grad 90 | ``` 91 | 92 | 例如使用上述代码计算多元函数$\ f(x,y,z)=x^2+y^2-5\sin(z^2)\tan(xyz)\ $在点$\ (2, 2.35, \pi)\ $处的梯度值 93 | 94 | ```python 95 | f = lambda x: x[0] ** 2 + x[1] ** 2 - 5 * np.sin(x[2] ** 2) * np.tan(x[0] * x[1] * x[2]) 96 | x = np.array([2., 2.35, np.pi]) 97 | numerical_grid(f, x) 98 | ``` 99 | 100 | 通过$TensorFlow$自动微分可以验证计算地准确性 101 | 102 | ```python 103 | x = tf.Variable([2, 2.35, np.pi]) 104 | with tf.GradientTape() as tape: 105 | g = x[0] ** 2 + x[1] ** 2 - 5 * tf.sin(x[2] ** 2) * tf.tan(x[0] * x[1] * x[2]) 106 | grad = tape.gradient(g, x) 107 | grad.numpy() 108 | ``` 109 | 110 | 两者计算结果对比 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /md/朴素贝叶斯算法.md: -------------------------------------------------------------------------------- 1 | ##
朴素贝叶斯算法
2 | 3 |
杨航锋
4 | 5 | ​ 朴素贝叶斯算法是经典的机器学习算法之一,它是基于贝叶斯定理和条件独立性假设的分类算法,该算法在训练过程中学习生成数据的机制,所以属于生成模型 。贝叶斯学派的思想可以概括为**先验概率+数据=后验概率** ,如果在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。先验概率就是对于数据所在领域的历史经验,但是这个经验常常难以量化或者模型化,于是贝叶斯学派大胆的假设先验分布 ,然后基于此分布对于给定的输入$\ X \ $,利用贝叶斯定理求出后验概率最大的输出$\ y \ $。 [更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### 朴素贝叶斯模型的推导 8 | 9 | ​ 假设输入空间 $\cal X \in \R^n \ $ 为$\ n\ $维向量的集合,输出空间为类别集合 $\ \cal Y=\{c_1, c_2, \cdots , c_t\}$,输入为特征向量 $\ x \in \cal X\ $,输出为所属类别$\ y \in \cal{Y}\ $。$\ X\ $是定义在输入空间$\ \cal X\ $上的随机向量,$\ Y\ $是定义在输出空间$\ \cal Y\ $上的随机变量。 $\ P(X,Y)\ $是$\ X \ $和$\ Y\ $的联合概率分布,训练数据集$\ T=\{(x^{(1)}, y^{(1)}),(x^{(2)}, y^{(2)}),\cdots,(x^{(m)}, y^{(m)})\}\ $由$\ P(X,Y)\ $独立同分布产生。 10 | 11 | ​ 朴素贝叶斯分类时对给定的输入$\ x^{(i)}\ $,通过学习到的模型计算后验概率分布 $\ P(Y=c_k | X=x^{(i)})\ $,将后验概率最大的类作为 $\ x\ $ 的所属类别输出。后验概率根据贝叶斯定理计算方式如下: 12 | $$ 13 | P(Y=c_k|X=x^{(i)}) = \dfrac{P(X=x^{(i)}|Y=c_k)P(Y=c_k)}{\sum\limits_{k=1}^t P(X=x^{(i)}|Y=c_k)P(Y=c_k)} \ \ \ \ \ \ \ \ \ \ \ (*) 14 | $$ 15 | 由于朴素贝叶斯算法对条件概率分布作了条件独立性假设,故 16 | $$ 17 | \begin{aligned} 18 | P(X=x^{(i)}|Y=c_k)&=P(X_1^{(i)}=x_1^{(i)},\cdots,X_n^{(i)}=x_n^{(i)}|Y=c_k)\\ 19 | &=\prod_{j=1}^n P(X_j^{(i)}=x_j^{(i)}|Y=c_k) 20 | \end{aligned} \ \ \ \ \ (**) 21 | $$ 22 | 将$\ (**)\ $式带入$\ (*)\ $式中得到朴素贝叶斯算法的基本形式: 23 | $$ 24 | \begin{aligned} 25 | P(Y=c_k|X=x^{(i)}) =\dfrac{\prod\limits_{j=1}^n P(X_j^{(i)}=x_j^{(i)}|Y=c_k)}{\sum\limits_{k=1}^t P(Y=c_k)\prod\limits_{j=1}^n P(X_j^{(i)}=x_j^{(i)}|Y=c_k)}P(Y=c_k) 26 | \end{aligned} 27 | $$ 28 | 因此朴素贝叶斯算法的优化模型为 29 | $$ 30 | \begin{aligned} 31 | \mathop{\arg\max}_{c_k}\ P(Y=c_k|X=x^{(i)})&=\mathop{\arg\max}_{c_k}\ \dfrac{\prod\limits_{j=1}^n P(X_j^{(i)}=x_j^{(i)}|Y=c_k)}{\sum\limits_{k=1}^t P(Y=c_k)\prod\limits_{j=1}^n P(X_j^{(i)}=x_j^{(i)}|Y=c_k)}P(Y=c_k)\\ 32 | &=\mathop{\arg\max}_{c_k}\ P(Y=c_k)\prod\limits_{j=1}^n P(X_j^{(i)}=x_j^{(i)}|Y=c_k) 33 | \end{aligned} 34 | $$ 35 | 因为对于每一个类别$\ c_k\ $,分母$\ \sum\limits_{k=1}^t P(Y=c_k)\prod\limits_{j=1}^n P(X_j^{(i)}=x_j^{(i)}|Y=c_k) \ $的值都是相同的。 36 | 37 | #### 朴素贝叶斯模型的求解 38 | 39 | ​ 求解朴素贝叶斯模型相当于求解几个概率值,对于样本数据集可以求出先验概率$\ p(Y=c_k)\ $ 40 | $$ 41 | p(Y=c_k)=\dfrac{\sum\limits_{i=1}^mI(y^{(i)}=c_k)}{t}\ \ \ \ \ k=1,2,\cdots,t 42 | $$ 43 | 其中$\ I(x)\ $为示性函数,当$\ x\ $为真时函数值为$\ 1\ $否则为$\ 0\ $。条件概率 44 | $$ 45 | \begin{aligned} 46 | P(X_j^{(i)}=x_j^{(i)}|Y&=c_k)=\dfrac{\sum\limits_{i=1}^mI(x_j^{(i)}=a_{jl},y^{(i)}=c_k)}{\sum\limits_{i=1}^m I(y^{(i)}=c_k)}\\ 47 | &j=1,2,\cdots,n\\ 48 | &l=1,2,\cdots,S_j 49 | 50 | \end{aligned} 51 | $$ 52 | 其中$x_j^{(i)}$代表第$\ i\ $个样本的第$\ j\ $个特征$\ x_j^{(i)}\in\{a_{j1},a_{j2},\cdots,a_{jS_j}\}\ $,$\ a_{jl}\ $表示第$\ j\ $个特征取得第$\ l\ $个值。 53 | 54 | #### 拉普拉斯平滑 55 | 56 | ​ 由于极大似然估计可能会出现需要估计的概率值为零的情况,而这会影响后验概率的计算,使分类产生偏差,于是可采用贝叶斯估计 57 | $$ 58 | \begin{aligned} 59 | &P_\lambda(Y=c_k)=\dfrac{\sum\limits_{i=1}^m I(y^{(i)}=c_k) + \lambda}{t+t\lambda}\\ 60 | &P_\lambda(X_j^{(i)}=x_j^{(i)}|Y=c_k)=\dfrac{\sum\limits_{i=1}^mI(x_j^{(i)}=a_{jl},y^{(i)}=c_k)+\lambda}{\sum\limits_{i=1}^m I(y^{(i)}=c_k)+S_j\lambda} 61 | \end{aligned} 62 | $$ 63 | 其中$\ \lambda\geqslant0 \ $,当$\ \lambda=1\ $时称为拉普拉斯平滑。 64 | 65 | #### 总结 66 | 67 | ​ 朴素贝叶斯算法通过贝叶斯定理和条件独立性假设,从而把难求的概率问题转化为容易求解的概率问题,直观一点表示就是 68 | $$ 69 | P(类别|特征)=\dfrac{P(特征|类别)P(类别)}{P(特征)} 70 | $$ 71 | 该算法的优点主要是模型简单实现上比较容易且有稳定的分类效果;缺点主要是现实世界中的数据一般不满足条件独立性假设,而且先验概率很多时候取决于假设的先验分布,假设的概率分布可以有很多种,因此在某些时候会由于假设的先验分布的原因导致预测效果不佳 。 -------------------------------------------------------------------------------- /md/某些特殊概率分布之间的相互变换.md: -------------------------------------------------------------------------------- 1 | ##
某些特殊概率分布之间的相互变换
2 | 3 |
杨航锋
4 | 5 | #### 1 离散分布的情况下 6 | 7 | ​ 已知$\ rand\_n()\ ​$表示可以均匀产生$\{1,2,\cdots,n\}​$之间的离散整数发生器,可以记作$\ rand\_n()\sim DU(1, n)\ ​$($DU​$表示离散均匀分布)。现有$\ rand\_7()\ ​$怎么构造$\ rand\_10()\ ​$呢?或者,可以先思考稍微简单点的问题怎么通过$\ rand\_10()\ ​$构造$\ rand\_7()\ ​$呢?很容易想到既然$\ rand\_10() \ ​$可以均匀产生$\{1, 2,\cdots,10\}​$,那么只需要把大于7的数字过滤掉即可,遵循这个算法可以得到如下代码: 8 | 9 | ```python 10 | def rand_7(): 11 | rand = float("inf") 12 | while rand > 7: 13 | rand = rand_10() 14 | return rand 15 | ``` 16 | 17 | 要证明这个算法产生$\ rand\_7() \ $的正确性,即证明$\ p(x=k)=\dfrac{1}{7}, k\in\{1,2,\cdots,7\}\ $。因为$\ rand\_10() \ $可能在第一次就产生合格的$\ k\ $,也可能第二次才产生合格的$\ k\ $,可能在第$m$次才产生合格的$\ k\ $ ,在这里仅证明$\ k=1\ $的情形,其它同理即可。故由概率论和幂级数(等比数列)相关知识可得 18 | $$ 19 | \begin{aligned} 20 | p(x=1)&=\dfrac{1}{10}+\dfrac{3}{10}\times\dfrac{1}{10}+\cdots+(\dfrac{3}{10})^{m-1}\times\dfrac{1}{10}\\ 21 | &=\dfrac{1}{10}\times(1+\dfrac{3}{10}+\cdots+(\dfrac{3}{10})^{m-1})\\ 22 | &=\dfrac{1}{10}\times\dfrac{1}{1-\dfrac{3}{10}}\\ 23 | &=\dfrac{1}{7} 24 | \end{aligned} 25 | $$ 26 | 至此证明完毕。根据上面的证明可以得到一个一般性的结论:当$\ a>b\ $时,$\ rand\_a()\ $可以实现$\ rand\_b()\ $。 27 | 28 | ```python 29 | def rand_b(): 30 | rand = float("inf") 31 | while rand > b: 32 | rand = rand_a() 33 | return rand 34 | ``` 35 | 36 | ​ 现在再来分析$\ rand\_7()\ $怎么构造$\ rand\_10()\ $,如果能够把$rand\_7()$映射到$\ rand\_t()\ $且$\ t>10\ $时就能够利用上述结论解决该问题。构造$\ (rand\_7()-1)\times7+rand\_7() \ $,首先分析$\ rand\_7()-1\ $的取值范围为$\ \{0,1,\cdots,6\} \ $,那么$\ rand\_7()-1)\times7\ $的取值范围为$\ \{0,7,\cdots,42\}\ $,而且每个数都只有一种组合得到,所以可以构造映射函数$\ rand\_49()\ $,即$\ rand\_49()=(rand\_7()-1)\times7+rand\_7() \ $。故可编写如下代码 37 | 38 | ```python 39 | def rand_10(): 40 | rand = float("inf") 41 | while rand > 10: 42 | rand = (rand_7() - 1) * 7 + rand_7() #rand_49() 43 | return rand 44 | ``` 45 | 46 | 上述代码可能有些瑕疵,从概率学的角度来说$\ rand\ ​$有很大的可能性会大于10,因此$\ while\ ​$循环将需要执行多次才能产生符合要求的$\ rand\ ​$,从而可以优化该代码,让$\ rand \ ​$与最接近49且小于49的10的倍数做比较,于是判断条件可以修改为$\ rand \gt 40\ ​$故$\ rand\in\{1,2,\cdots,40 \}\ ​$,然后通过模运算$\ rand \% 10+1\ ​$映射到$\{1,2,\cdots,10\}​$。 47 | 48 | ```python 49 | def rand_10(): 50 | rand = float("inf") 51 | while rand > 40: 52 | rand = (rand_7() - 1) * 7 + rand_7() 53 | return rand % 10 + 1 54 | ``` 55 | 56 | ​ 从特殊到一般归纳假设,假设有离散整数发生器$\ rand\_a()\ $和$\ rand\_b() \ $$且 $$\ a\neq b \ $,利用$\ rand\_a()\ $表示$\ rand\_b()\ $: 57 | 58 | 1. 如果$\ a > b\ $则进入步骤2;否则,构造$\ rand\_a^2()=(rand\_a()-1)\times a+rand\_a()\ $,如果$\ a^2b$,此时得到$\ rand\_a^k()\ $记为$\ rand\_A()\ $; 59 | 60 | 2. 经过步骤1有$\ a>b\ $或者$\ a^k>b\ $,利用下面代码构造$\ rand\_b() \ $。 61 | 62 | ```python 63 | def rand_b(): 64 | rand = float("inf") 65 | while rand > b * (A // b): #表示与最接近A且小于A的b的倍数作比较。 66 | rand = rand_A() 67 | return rand % b + 1 68 | ``` 69 | 70 | #### 2 连续分布的情况下 71 | 72 | ​ 不妨考虑一般化的情况,假设$\ rand\_ab()\sim U(a,b)\ $、$\ rand\_cd()\sim U(c,d)\ $,如何通过$\ rand\_ab()\ $来构造$\ rand\_cd()\ $呢?从几何的角度上看,可以把区间$\ [a, b]\ $上的点$\ x\ $一一映射到区间$\ [c,d] \ $上,只需要构造线性变换$\ f:\dfrac{x-a}{b-a}\times(d-c)+c \ $即可。如果能够证明$\ \vartheta=\dfrac{rand\_ab()-a}{b-a}\times(d-c)+c \ $且$\ \vartheta\sim U(c,d)\ $那么也就是构造出了$\ rand\_ab()\ $到$\ rand\_cd()\ $之间的映射关系。接下来将证明该结论: 73 | 74 | 由$\ rand\_ab()\sim U(a,b)\ $可知其概率密度函数为 75 | $$ 76 | f_X(x)= 77 | \begin{cases} 78 | \dfrac{1}{b-a},& a\leqslant x\leqslant b\\ 79 | \\ 80 | 0 81 | \end{cases} 82 | $$ 83 | 又因为$\ \vartheta=\dfrac{X-a}{b-a}\times(d-c)+c \ $,故$\ \vartheta\ $的概率分布函数为$\ F_\vartheta(\theta)\ $ 84 | $$ 85 | \begin{aligned} 86 | F_\vartheta(\theta)&=p(\vartheta\leqslant\theta)=p\left(\dfrac{d-c}{b-a}X-\dfrac{d-c}{b-a}a+c\leqslant\theta\right)\\ 87 | &=p\left(X\leqslant\dfrac{b-a}{d-c}(\theta-c)+a\right)\\ 88 | &=F_X\left(\dfrac{b-a}{d-c}(\theta-c)+a\right)\\ 89 | &=\int_a^{\frac{b-a}{d-c}(\theta-c)+a}\dfrac{1}{b-a}dx\\ 90 | &=\dfrac{\theta}{d-c}-\dfrac{c}{d-c} 91 | \end{aligned} 92 | $$ 93 | 其中$\ a\leqslant\dfrac{b-a}{d-c}(\theta-c)+a\leqslant b\ ​$,化简即$\ c\leqslant\theta\leqslant d\ ​$。对上式求导得$\ f_\vartheta(\theta)\ ​$ 94 | $$ 95 | f_\vartheta(\theta)= 96 | \begin{cases} 97 | \dfrac{1}{d-c},& c\leqslant \theta\leqslant d\\ 98 | \\ 99 | 0 100 | \end{cases} 101 | $$ 102 | 至此证明完毕。 -------------------------------------------------------------------------------- /md/核函数粗浅的理解.md: -------------------------------------------------------------------------------- 1 | ##
核函数粗浅的理解

2 | 3 |
杨航锋
4 | 5 | ![](../picture/k.png) 6 | 7 | #### 核函数的定义 8 | 9 | ​ 设$\ \mathbb{X} \ $是$\ \mathbb{R}^n\ $中的一个子集,称定义在$\ \mathbb{X}\times\mathbb{X} \ $上的函数$\ k(x,y)\ $是核函数,如果存在一个从$\ \mathbb{X}\ $到希尔伯特空间(特征空间)$\ \mathbb{H}\ $的映射$\ \phi\ $ 10 | $$ 11 | \phi : \xi\mapsto\phi(\xi)\in\mathbb{H} 12 | $$ 13 | 使得对任意的$\ x,y\in\mathbb{X}\ $, 14 | $$ 15 | k(x,y)=(\phi(x),\phi(y))=\phi(x)^T\phi(y) 16 | $$ 17 | 都成立。 18 | 19 | #### 具体例子 20 | 21 | ​ 假设$\ A=(1, 2)^T、B=(3,4)^T\ $,构造一个映射$\ \phi(\cdot)=(x_1^2,\sqrt{2}x_1x_2,x_2^2)^T\ $,则可知 22 | $$ 23 | \begin{aligned} 24 | &\phi(A)=(1,2\sqrt{2},4)^T\\ 25 | &\phi(B)=(9,12\sqrt{2},16)^T 26 | \end{aligned} 27 | $$ 28 | 因此通过映射$\ \phi(\cdot)\ $将点$\ A、B\ $从二维平面升维到三维空间。然后计算 29 | $$ 30 | \begin{aligned} 31 | \phi(A)^T\phi(B)&=1\times9+2\sqrt{2}\times12\sqrt{2}+4\times16\\ 32 | &=9+48+64\\ 33 | &=121 34 | \end{aligned} 35 | $$ 36 | 上述运算是在映射后的高维空间下做内积,那么是否能直接在原始的空间中进行相应的运算,使得低维情况下的运算结果等于高维情况下的运算结果呢?答案是肯定的可以通过核函数$\ k(x,y)=(x^Ty)^2\ $来实现 37 | $$ 38 | \begin{aligned} 39 | k(A,B)&=(A^TB)^2\\ 40 | &=(1\times3+2\times4)^2\\ 41 | &=121 42 | \end{aligned} 43 | $$ 44 | 是不是很神奇,低维空间和高维空间居然通过核函数巧妙的联通起来了,这样做最大的优点是避免了维度灾难,也就是说高维空间中的运算计算量很大呈指数级别复杂度,难以解决;低维空间中的运算计算量很小但是两者的最终结果是一致的。例如上述计算过程,高维空间中执行了9次乘法运算和2次加法运算,低维空间中仅执行了3次乘法运算和1次加法运算,要知道这才二维空间映射到三维空间如果映射到$\ n\ $维空间呢? 45 | 46 | #### 小结 47 | 48 | ​ **核函数是二元函数,输入是映射之前的两个向量,其输出等价于两个向量映射之后的内积。**对于$\ \phi(\cdot)\ $你并不需要知道具体对应哪种映射,表达式是什么,你需要知道的是核函数肯定对应于某一种映射$\ \phi(\cdot)\ $即可。 -------------------------------------------------------------------------------- /md/线性回归与最小二乘法.md: -------------------------------------------------------------------------------- 1 | ##
线性回归与最小二乘法
2 | 3 |
杨航锋
4 | 5 | ​ 本文先以一元线性回归为例推导出一元线性回归方程,然后再推导出更一般化的线性回归方程,在推导的过程中采取两种不同的方式:一是从样本数据出发,二是从统计理论着手。最后我们会发现,采用两种不同的方式最后推导出的线性回归模型的损失函数都会殊途同归。线性回归简单点讲就是对已知的样本数据进行最优拟合,然后通过拟合出的线性回归方程进行预测。[更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### 一元线性回归 8 | 9 | ​ 其实我们初中时就接触过一元线性回归方程,那时只需要记住两个参数$\alpha$ 和$\beta$ 直接套公式即可进行预测,现在完整的推导出一元线性回归方程。设一元线性回归方程为$\hat{y}=\alpha x+\beta$ ,数据样本点为($x_1$,$y_1$),($x_2$,$y_2$),$\dots$ ,($x_n$,$y_n$),要使得这$n$个样本点落在在一元线性回归方程附近,不妨假设误差为$\varepsilon$,使得每个样本点都落在一元线性回归方程上。因此有$\hat{y_i}=y_i+\varepsilon_i$恒成立,所以,回归直线应满足的条件是:全部观测值与对应的回归估计值的误差平方和最小,即: 10 | 11 | 12 | $$ 13 | \begin{aligned} 14 | \mathop{\arg\min}_{\alpha,\beta} \sum\limits_{i=1}^n\varepsilon_i^2 & = \mathop{\arg\min}_{\alpha,\beta} \sum\limits_{i=1}^n (y_i-\hat{y_i})^2 \\ 15 | & = \mathop{\arg\min}_{\alpha,\beta} \sum\limits_{i=1}^n (y_i-\alpha x_i -\beta)^2 16 | \end{aligned} 17 | $$ 18 | 令$J(\alpha,\beta) = \sum\limits_{i=1}^n(y_i-\alpha x_i-\beta)^2$原问题就转化为求二元函数的极小值,由微积分相关知识可知 19 | $$ 20 | \begin{aligned} 21 | \nabla_\alpha J(\alpha,\beta) &= -2\sum\limits_{i=1}^n(y_i-\alpha x_i-\beta)x_i \\ 22 | &=-2\sum\limits_{i=1}^n x_iy_i+2\alpha\sum\limits_{i=1}^n x_i^2+2\beta\sum\limits_{i=1}^n x_i\\ 23 | \nabla_\beta J(\alpha,\beta) &=-2\sum\limits_{i=1}^n (y_i-\alpha x_i-\beta) \\ 24 | &=-2\sum\limits_{i=1}^n y_i+2\alpha\sum\limits_{i=1}^n x_i+2n\beta 25 | \end{aligned} 26 | $$ 27 | 然后令$\nabla _\alpha J(\alpha,\beta)=0和\nabla _\beta J(\alpha,\beta)=0$即可求出$\alpha、\beta$的值 28 | $$ 29 | \begin{aligned} 30 | \nabla_\beta J(\alpha,\beta)&=0 \\ 31 | \Rightarrow \sum\limits_{i=1}^n y_i&=\alpha\sum\limits_{i=1}^n x_i+n \beta \\ 32 | \Rightarrow \bar{y} &=\alpha \bar{x} +\beta\\ 33 | ~\\ 34 | \nabla_\alpha J(\alpha, \beta)&=0\\ 35 | \Rightarrow \sum\limits_{i=1}^n x_iy_i&=\alpha\sum\limits_{i=1}^n x_i^2+\beta\sum\limits_{i=1}^n x_i \\ 36 | \Rightarrow \alpha&=\frac{\sum\limits_{i=1}^n(x_iy_i-\bar{y}x_i)}{\sum\limits_{i=1}^n(x_i^2-\bar{x}x_i)}=\frac{\sum\limits_{i=1}^n x_iy_i-\frac{1}{n}(\sum\limits_{i=1}^n x_i)(\sum\limits_{i=1}^n y_i)}{\sum\limits_{i=1}^n x_i^2-\frac{1}{n}(\sum\limits_{i=1}^n x_i)(\sum\limits_{i=1}^n x_i)}\\ 37 | &=\frac{\sum\limits_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})}{\sum\limits_{i=1}^n (x_i-\bar{x})^2}\\ 38 | ~根据:\\ 39 | \sum\limits_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})&=\sum\limits_{i=1}^n x_iy_i-\frac{1}{n}(\sum\limits_{i=1}^n x_i)(\sum\limits_{i=1}^n y_i)\\ 40 | \sum\limits_{i=1}^n (x_i-\bar{x})^2&=\sum\limits_{i=1}^n x_i^2-\frac{1}{n}(\sum\limits_{i=1}^n x_i)(\sum\limits_{i=1}^n x_i) 41 | 42 | \end{aligned} 43 | $$ 44 | 至此,一元线性回归方程就拟合出来了,上面的这些公式推导看起来很复杂其实如果引入矩阵表示,最后的结果将会很简洁。 45 | 46 | #### 一般化的线性回归算法推导 47 | 48 | ​ 对于给定了$m$个样本点($x^{(1)}$,$y^{(1)}$),($x^{(2)}$,$y^{(2)}$),$\dots$,($x^{(m)}$,$y^{(m)}$),其中$x^{(i)}\in\R^{n}$。定义假设函数为$h_\theta(x)$,即$h_\theta(x)$为最终的拟合函数,$\theta$为待拟合参数也称作权重。 49 | $$ 50 | \begin{aligned} 51 | h_\theta(x)&=\theta_0+\theta_1x_1+\cdots+\theta_nx_n \\ 52 | &=\begin{bmatrix} 53 | \theta_0, & \theta_1,& \cdots ,& \theta_n 54 | \end{bmatrix} 55 | \begin{bmatrix} 1\\x_1 \\ \vdots \\ x_n\end{bmatrix}\\ 56 | &=\theta^Tx 57 | 58 | \end{aligned} 59 | $$ 60 | 61 | ##### 从样本数据出发推导损失函数 62 | 63 | ​ 在样本数据中$y^{(i)}$是实际存在值而$h_\theta(x^{(i)})$对应的是模型预测值,显然如果想要模型预测的效果好,那么对应的误差就要小,假设函数在任意样本点的误差为$|h_\theta(x^{(i)})-y^{(i)}|$则$m$个样本点的误差和为$\ \sum\limits_{i=1}^m|h_\theta(x^{(i)})-y^{(i)}|$,因此问题就转化为求解$\ \begin{aligned}\mathop{\arg\min}_{\theta}\ \sum\limits_{i=1}^m|h_\theta(x^{(i)}-y^{(i)}|\end{aligned}$为了后续求解最优值(绝对值函数不好求导),所以损失函数采用了误差平方和的形式$\ \begin{aligned}\mathop{\arg\min}_{\theta} \sum\limits_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})^2\end{aligned}$。 64 | 65 | ##### 从统计学理论出发推导损失函数 66 | 67 | ​ 为什么线性回归问题的损失函数会是误差平方和的形式?这里从统计理论上进行解释,对于给定的$y^{(i)}$总能找到$\varepsilon^{(i)}$使得这个等式成立$y^{(i)}=h_\theta(x^{(i)})+\varepsilon^{(i))}$,$\ \varepsilon^{(i)}$代表真实值和预测值之间的误差且$\varepsilon^{(i)} \sim \mathcal{N}(0,\sigma^2)$,简单解释下为什么误差$\varepsilon^{(i)}$会服从均值为零的正态分布,误差的产生有很多种因素的影响,误差可以看作是这些因素(随机变量)之和共同作用而产生的,由中心极限定理可知随机变量和的分布近似的服从正态分布;更通俗易懂的解释是,当你在选择$h_\theta(x)$时主观的会认定这个$h_\theta(x)$是比较符合样本数据的,比如对一些样本数据可视化后,发现样本数据明显是趋近于一条直线,而你在对$h_\theta(x)$的选择上肯定会选择直线方程作为$h_\theta(x)$而不会选择多项式函数作为$h_\theta(x)$。而这种$h_\theta(x)$一旦选定,可以认为大部分数据都在$h_\theta(x)$的附近,因此误差大部分集中在零值附近所以$\mathcal{N}(0,\sigma^2)$作为$\varepsilon^{(i)}$的先验分布是比较合理的。 68 | 69 | ​ 随机变量$\varepsilon^{(i)}$的概率密度函数为: 70 | $$ 71 | p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(\varepsilon^{(i)})^2}{2\sigma^2}} 72 | $$ 73 | ​ 代入$h_\theta(x^{(i)}), \ y^{(i)}$则 74 | $$ 75 | p(y^{(i)}|x^{(i)};\theta) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(\theta^Tx^{(i)}-y^{(i)})^2}{2\sigma^2}} 76 | $$ 77 | 这里的$p(y^{(i)}|x^{(i)};\theta)$并不代表条件概率,只是一个记号它表示给定$x^{(i)},\ y^{(i)}\ $和一组$\theta$后的概率密度函数。由最大似然估计可知: 78 | $$ 79 | \begin{aligned} 80 | L(\theta)&=\prod\limits_{i=1}^mp(y^{(i)}|x^{(i)};\theta)\\ 81 | &=\prod\limits_{i=1}^m\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(\theta^Tx^{(i)}-y^{(i)})^2}{2\sigma^2}} 82 | \end{aligned} 83 | $$ 84 | 对$L(\theta)$取对数从而得到对数化最大似然估计函数 85 | $$ 86 | \begin{aligned} 87 | \mathcal L(\theta) &= \mathcal log(L(\theta)) \\ 88 | &=\mathcal \log \prod\limits_{i=1}^m\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(\theta^Tx^{(i)}-y^{(i)})^2}{2\sigma^2}}\\ 89 | &=\sum\limits_{i=1}^m \mathcal \log\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\theta^Tx^{(i)}-y^{(i)})^2}{2\sigma^2}}\\ 90 | &=m \mathcal \log \frac{1}{\sqrt{2\pi}\sigma} - \frac{1}{2\sigma^2}\sum\limits_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})^2 91 | \end{aligned} 92 | $$ 93 | 求解最大化对数似然函数可得: 94 | $$ 95 | \begin{aligned} 96 | \mathop{\arg\max}_{\theta} L(\theta) & \Leftrightarrow \mathop{\arg\max}_{\theta} \mathcal L(\theta)\\ 97 | & \Leftrightarrow \mathop{\arg\max}_{\theta}\left\{{m \mathcal \log \frac{1}{\sqrt{2\pi}\sigma} - \frac{1}{2\sigma^2}\sum\limits_{i=1}^ m(\theta^Tx^{(i)}-y^{(i)})^2} \right\}\\ 98 | &\Leftrightarrow \mathop{\arg\max}_{\theta}- \frac{1}{2\sigma^2}\sum\limits_{i=1}^ m(\theta^Tx^{(i)}-y^{(i)})^2\\ 99 | &\Leftrightarrow \mathop{\arg\min}_{\theta} \frac{1}{2\sigma^2}\sum\limits_{i=1}^ m(\theta^Tx^{(i)}-y^{(i)})^2\\ 100 | &\Leftrightarrow \mathop{\arg\min}_{\theta} \sum\limits_{i=1}^ m (\theta^Tx^{(i)}-y^{(i)})^2\\ 101 | &\Leftrightarrow \mathop{\arg\min}_{\theta} \sum\limits_{i=1}^ m (h_\theta(x^{(i)})-y^{(i)})^2 102 | \end{aligned} 103 | $$ 104 | 可以发现两种方法推导出的损失函数都是一样的,下面定义线性回归模型的损失函数$\ J(\theta)=\dfrac{1}{2}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2$,其实只是在先前的最优化模型前面乘了一个常系数$\dfrac{1}{2}$对最优化的结果并不会产生影响。 105 | 106 | #### 梯度下降算法求解凸优化问题 107 | 108 | ​ 在机器学习算法中,求解最小化损失函数时,可以通过梯度下降法来一步步进行迭代求解,从而得到最小化损失函数的模型参数值,梯度下降算法不一定能够找到全局的最优解,有可能是一个局部最优解。然而,如果损失函数是凸函数,那么梯度下降法得到的解就一定是全局最优解。 在这里不加证明的给出梯度下降法的迭代格式: 109 | $$ 110 | \theta_j:=\theta_j-\alpha\nabla_{\theta_j} {J(\theta)} 111 | $$ 112 | 其中$\theta_j$为假设函数$h_\theta(x)$的参数值,$\alpha \in (0,1]$且为常数代表模型学习速率,$\nabla _{\theta_j} J(\theta)$为损失函数$J(\theta)$对参数$\theta_j$的梯度。举一个简单的例子直观的解释一下梯度下降算法的流程和有效性,令$J(\theta) = \theta^2$使用梯度下降算法求$J(\theta)$的最小值的过程如下图所示。 113 | 114 | ![梯度下降算法过程](..\picture\LSM_1.png) 115 | 116 | 可以看出对于二次函数梯度下降算法最终会收敛到全局最小值。 117 | 118 | ​ 下面使用梯度下降算法求解上面推导出的线性回归模型的损失函数$\ J(\theta)=\dfrac{1}{2}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2$,为了实现该算法首先要求出损失函数$J(\theta)$对参数$\theta_j$的梯度: 119 | $$ 120 | \begin{aligned} 121 | \nabla_{\theta_j} J(\theta) &=\nabla_{\theta_j} \dfrac{1}{2} \sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\\ 122 | &=2\cdot\dfrac{1}{2}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)}) \nabla_{\theta_j}(h_\theta(x^{(i)})-y^{(i)})\\ 123 | &=\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)}) \nabla_{\theta_j}\theta^Tx^{(i)}\\ 124 | &=\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} 125 | \end{aligned} 126 | $$ 127 | 因此在线性回归模型中利用所有的样本数据,训练梯度下降算法的完整迭代格式为 128 | $$ 129 | \theta_j:=\theta_j-\alpha \sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \ \ \ ( j\ \ for \ \ 0 \ \sim \ n) 130 | $$ 131 | 上述迭代过程每次迭代都会使用所有的样本数据,数学上已经证明线性回归模型的损失函数通过梯度下降算法求解一定会全局收敛,所以如果要编程实现该算法只需要控制迭代次数即可,不过对于线性回归模型的求解一般不用梯度下降算法,还有更容易实现且更快捷的形式—正规方程。 132 | 133 | #### 正规方程 134 | 135 | ​ 对损失函数$J(\theta)=\dfrac{1}{2}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2$改写成矩阵乘法的形式,在此之前需要先定义一些矩阵,不妨令: 136 | $$ 137 | Y= 138 | \begin{bmatrix} 139 | (y^{(1)}) \\ (y^{(2)}) \\ \vdots \\ (y^{(m)}) 140 | \end{bmatrix} 141 | ~\\ 142 | X= 143 | \begin{bmatrix} 144 | (x^{(1)})^T \\ (x^{(2)})^T \\ \vdots \\ (x^{(m)})^T 145 | \end{bmatrix} 146 | = 147 | \begin{bmatrix} 148 | 1 & x_1^{(1)} & x_2^{(1)} & \cdots & x_n^{(1)} \\ 149 | 1 & x_1^{(2)} & x_2^{(2)} & \cdots & x_n^{(2)} \\ 150 | \vdots & \vdots & \vdots & \ddots & \vdots \\ 151 | 1 & x_1^{(m)} & x_2^{(m)} & \cdots & x_n^{(m)} 152 | \end{bmatrix} 153 | $$ 154 | 155 | 156 | 由于$h_\theta(x^{(i)})=\theta^Tx^{(i)}=(x^{(i)})^T\theta$,因此可以得出 157 | $$ 158 | X\theta - Y= 159 | \begin{bmatrix} 160 | (x^{(1)})^T\theta \\ 161 | (x^{(2)})^T\theta \\ 162 | \vdots\\ 163 | (x^{(m)})^T\theta 164 | \end{bmatrix} 165 | 166 | - 167 | \begin{bmatrix} 168 | (y^{(1)}) \\ (y^{(2)}) \\ \vdots \\ (y^{(m)}) 169 | \end{bmatrix} 170 | 171 | = 172 | \begin{bmatrix} 173 | (x^{(1)})^T\theta - (y^{(1)}) \\ (x^{(2)})^T\theta - (y^{(2)}) \\ \vdots \\ (x^{(m)})^T\theta - (y^{(m)}) 174 | \end{bmatrix} 175 | $$ 176 | 然后根据$\sum\limits_{i=1}^n\phi_i^2=\phi^T\phi$,综上可以得出$J(\theta)$的矩阵形式 177 | $$ 178 | J(\theta)=\dfrac{1}{2} \sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2=\dfrac{1}{2}(X\theta - Y)^T(X\theta-Y) 179 | $$ 180 | 最后求解$\begin{aligned}\mathop{\arg\min}_{\theta} \dfrac{1}{2}(X\theta-Y)^T(X\theta-Y) \end{aligned}$即可。 181 | 182 | ​ 在求解上述优化问题之前先简单的介绍下矩阵求导法则 183 | $$ 184 | \begin{aligned} 185 | \nabla_x x^Tb 186 | &= 187 | \nabla_x 188 | \begin{bmatrix} 189 | x_1, & x_2, & \cdots, & x_n 190 | \end{bmatrix} 191 | \begin{bmatrix} 192 | b_1\\ b_2\\ \vdots \\ b_n 193 | \end{bmatrix}\\ 194 | &=\nabla_{x_i} \sum\limits_{i=1}^nx_ib_i\\ 195 | &=b\\ 196 | 197 | \nabla_x Ax &= 198 | \nabla_{x} 199 | \begin{bmatrix} 200 | a_{11} & a_{12} & \cdots & a_{1n}\\ 201 | a_{21} & a_{22} & \cdots & a_{2n}\\ 202 | \vdots & \vdots & \ddots & \vdots\\ 203 | a_{n1} & a_{n2} & \cdots & a_{nn} 204 | \end{bmatrix} 205 | \begin{bmatrix} 206 | x_1 \\ x_2\\ \vdots \\ x_n 207 | \end{bmatrix}\\ 208 | &= 209 | \begin{bmatrix} 210 | \nabla_{x_i}\sum\limits_{i=1}^na_{1i}x_i \\ 211 | \nabla_{x_i}\sum\limits_{i=1}^na_{2i}x_i \\ 212 | \vdots\\ 213 | \nabla_{x_i}\sum\limits_{i=1}^na_{ni}x_i 214 | \end{bmatrix}\\ 215 | &= 216 | A^T 217 | 218 | \end{aligned} 219 | $$ 220 | 所以 221 | $$ 222 | \begin{aligned} 223 | \nabla_\theta J(\theta) &= \nabla_\theta \ \dfrac{1}{2}(X\theta-Y)^T(X\theta-Y) \\ 224 | &=\dfrac{1}{2} \nabla_\theta \ (\theta^TX^T-Y^T)(X\theta-Y) \\ 225 | &=\dfrac{1}{2} \nabla_\theta \ (\theta^TX^TX\theta-\theta^TX^TY-Y^TX\theta+Y^TY)\\ 226 | &=\dfrac{1}{2}(2X^TX\theta-2X^TY) \\ 227 | &=X^TX\theta-X^TY 228 | \end{aligned} 229 | $$ 230 | 称$\ X^TX\theta=X^TY \ $为正规方程,因此$\theta=(X^TX)^{-1}X^TY$,实际上$X^TX$不可逆的情况非常少就算$X^TX$真的是不可逆也无妨,可以先对原始数据进行特征筛选或者正则化即可。 231 | 232 | #### 总结 233 | 234 | ​ 一般情况下对于求解线性回归模型通常采用正规方程的方式,回过头来对于文章开头的求解一元线性回归方程系数的问题可以大大化简,具体参数形式为 235 | $$ 236 | \begin{bmatrix} 237 | \alpha\\ 238 | \beta 239 | \end{bmatrix} 240 | = 241 | \left(\begin{bmatrix} 242 | 1 & x_1^T\\ 243 | 1 & x_2^T\\ 244 | \vdots & \vdots\\ 245 | 1 & x_n^T 246 | \end{bmatrix}^T 247 | \begin{bmatrix} 248 | 1 & x_1^T\\ 249 | 1 & x_2^T\\ 250 | \vdots & \vdots\\ 251 | 1 & x_n^T 252 | \end{bmatrix}\right)^{-1} 253 | \begin{bmatrix} 254 | 1 & x_1^T\\ 255 | 1 & x_2^T\\ 256 | \vdots & \vdots\\ 257 | 1 & x_n^T 258 | \end{bmatrix}^T 259 | \begin{bmatrix} 260 | y_1\\y_2\\ \vdots \\ y_n 261 | \end{bmatrix} 262 | $$ 263 | 可以看出通过正规方程求解线性回归模型就转化为如何构造$X$矩阵,只要$X$矩阵构造出来后剩下的就是交给计算机做矩阵乘法运算就可以了。 -------------------------------------------------------------------------------- /md/逻辑回归算法.md: -------------------------------------------------------------------------------- 1 | ##
逻辑回归算法
2 | 3 |
杨航锋
4 | 5 | ​ 逻辑回归算法虽然名字中含有回归二字,但却是机器学习算法中典型的监督式二分类算法模型。本文在推导逻辑回归算法过程中遵循的顺序是,首先提出假设函数、其次构造出损失函数、最后求解损失函数得出假设函数中的参数值。在构造损失函数时同样采取两种不同的方式:一是从样本数据出发,二是从统计理论着手。不同的方式最后构造出的损失函数却是一致的,文章的最后会给出逻辑回归算法梯度下降求解的矩阵迭代更新形式,以便于后续编程实现。[更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### 引言 8 | 9 | ​ 对于二分类问题逻辑回归是经常被采用的方法,逻辑回归算法就是在样本数据中寻找一个超平面,然后可以把样本数据准确的分隔成不同的类别,并且能够对相应的新数据特征进行分类。 10 | 11 | ![](..\picture\二分类.png) 12 | 13 | 比如上图所示的两类数据样本,怎么寻找一个超平面(直线)分割开红色、蓝色样本?如果新给出一个样本的特征如何预测该样本属于哪个类别? 14 | 15 | #### 提出逻辑回归算法的假设函数 16 | 17 | ​ 回顾线性回归中的假设函数$h_\theta(x)=\theta_0+\theta_1x_1+\cdots+\theta_nx_n=\theta^Tx$这表示的是一个超平面,逻辑回归中的超平面与线性回归中的超平面并无什么本质上的差异,但是线性回归是回归问题逻辑回归是分类问题两者本质上不同,线性回归中样本集中在超平面附近且没有类别差异而逻辑回归中样本点被所超平面分割且有明确的类别。因此逻辑回归的假设函数需要判断样本点在超平面上还是超平面下,所以给出一种映射关系: 18 | $$ 19 | g(z) = \dfrac{1}{1+e^{-z}} 20 | $$ 21 | 函数$\ g(z)\ $称为$sigmoid$函数,其函数图像如下图所示: 22 | 23 | ![](..\picture\sigmoid.jpg) 24 | 25 | 使用$sigmoid$函数对超平面进行映射是因为它有一些很好的性质: 26 | 27 | - $sigmoid$函数把所有样本点都映射到(0,1)区间内 28 | 29 | - $sigmoid$函数连续可导,求导后的形式很$nice$ 30 | $$ 31 | \begin{aligned} 32 | g'(z) &=\dfrac{\mathrm{d}}{\mathrm{d}z} \dfrac{1}{1+e^{-z}}\\ 33 | &=\dfrac{1}{(1+e^{-z})^2}(e^{-z})\\ 34 | &=\dfrac{1}{1+e^{-z}} \cdot \left(1- \dfrac{1}{1+e^{-z}} \right)\\ 35 | &=g(z)\cdot(1-g(z)) 36 | \end{aligned} 37 | $$ 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 综上可以给出逻辑回归算法的假设函数$\ h_\theta(x)\ $ 48 | $$ 49 | h_\theta(x)=g(\theta^Tx)=\dfrac{1}{1+e^{-\theta^Tx}} 50 | $$ 51 | 52 | #### 构造逻辑回归算法的损失函数 53 | 54 | ​ 不妨假设含有$m$个样本数据($x^{(1)}$,$y^{(1)}$)、($x^{(2)}$,$y^{(2)}$)、$\cdots$、($x^{(m)}$,$y^{(m)}$),$y^{(i)} \in \{0,1\}$。由于$h_\theta(x) \in (0,1)$,且对于某个样本数据来说它只能属于两种类别中的某一类,所以有如下等式成立 55 | $$ 56 | \begin{aligned} 57 | P(y=1|x;\theta)&=h_\theta(x)\\ 58 | P(y=0|x;\theta)&=1-h_\theta(x) 59 | \end{aligned} 60 | $$ 61 | 62 | ##### 1、从样本数据出发 63 | 64 | ​ 构造误差函数$\ error(h_\theta(x),y)\ $为 65 | $$ 66 | \begin{aligned} 67 | error(h_\theta(x),y)&=\begin{cases} 68 | -\log h_\theta(x), & \mbox{if }y=1 \\ 69 | -\log (1-h_\theta(x)), & \mbox{if }y=0 70 | \end{cases}\\ 71 | &=y\cdot(-\log h_\theta(x)) + (1-y)\cdot(-\log (1-h_\theta(x)))\\ 72 | &=-\left\{y\cdot(\log h_\theta(x)) + (1-y)\cdot(\log (1-h_\theta(x)))\right\} 73 | \end{aligned} 74 | $$ 75 | 至于为什么选择它作为误差函数可以从$-\log x, x \in (0,1)​$的函数图像中得到解释: 76 | 77 | ![](..\picture\log.png) 78 | 79 | 1. 当$\ y=1\ $且$\ h_\theta(x)\ $预测为$1$时,误差函数$\ error(h_\theta(x),y)\ $为$0$ 80 | 2. 当$\ y=1\ $且$\ h_\theta(x)\ $预测为$0$时,误差函数$\ error(h_\theta(x),y)\ $为$\infty$ 81 | 3. 当$\ y=0\ $且$\ h_\theta(x)\ $预测为$0$时,误差函数$\ error(h_\theta(x),y)\ $为$0$ 82 | 4. 当$\ y=0\ $且$\ h_\theta(x)\ $预测为$1$时,误差函数$\ error(h_\theta(x),y)\ $为$\infty$ 83 | 84 | 通过对每一个样本数据计算误差函数值,损失函数$\ J(\theta) \ $即为误差函数值总和 85 | $$ 86 | \begin{aligned} 87 | J(\theta) &= \sum\limits_{i=1}^m error(h_\theta(x^{(i)}), y^{(i)})\\ 88 | &=\sum\limits_{i=1}^m \left\{{y^{(i)}}\cdot(-\log h_\theta(x^{(i)}))+ ({1-y^{(i)}})\cdot(-\log(1-h_\theta(x^{(i)})))\right\}\\ 89 | &=-\sum\limits_{i=1}^m \left\{{y^{(i)}}\cdot(\log h_\theta(x^{(i)}))+ ({1-y^{(i)}})\cdot(\log(1-h_\theta(x^{(i)})))\right\} 90 | \end{aligned} 91 | $$ 92 | 93 | ##### 2、从统计理论着手 94 | 95 | | $Y$ | 1 | 0 | 96 | | :------: | :-----------: | :-------------: | 97 | | $P(Y|X)$ | $h_\theta(X)$ | $1-h_\theta(X)$ | 98 | 99 | 因此可以得出概率分布:$p(y|x)=[h_\theta(x)]^{y}[1-h_\theta(x)]^{1-y}$。假设样本数据相互独立且同分布,所以它们的联合分布函数可以表示为各边际分布函数的乘积,故最大似然函数为 100 | $$ 101 | \begin{aligned} 102 | L(\theta) &=\prod\limits_{i=1}^m p(y^{(i)}|x^{(i)})\\ 103 | &=\prod\limits_{i=1}^m [h_\theta(x^{(i)})]^{y^{(i)}}[1-h_\theta(x^{(i)})]^{1-y^{(i)}} 104 | \end{aligned} 105 | $$ 106 | 对$L(\theta)$取对数从而得到对数化最大似然估计函数 107 | $$ 108 | \begin{aligned} 109 | \mathcal L(\theta) &= \mathcal \log(L(\theta)) \\ 110 | &= \log \prod\limits_{i=1}^m [h_\theta(x^{(i)})]^{y^{(i)}}[1-h_\theta(x^{(i)})]^{1-y^{(i)}}\\ 111 | &= \sum\limits_{i=1}^m \left\{y^{(i)} \cdot (\log h_\theta(x^{(i)})) +(1-y^{(i)})\cdot \log(1-h_\theta(x^{(i)}))\right\} 112 | \end{aligned} 113 | $$ 114 | 求解最大化对数似然函数可得: 115 | $$ 116 | \begin{aligned} 117 | \mathop{\arg\max}_{\theta} L(\theta) & \Leftrightarrow \mathop{\arg\max}_{\theta} \mathcal L(\theta)\\ 118 | & \Leftrightarrow \mathop{\arg\max}_{\theta} \sum\limits_{i=1}^m \left\{y^{(i)} \cdot (\log h_\theta(x^{(i)})) +(1-y^{(i)})\cdot \log(1-h_\theta(x^{(i)}))\right\}\\ 119 | & \Leftrightarrow \mathop{\arg\min}_{\theta} -\sum\limits_{i=1}^m \left\{y^{(i)} \cdot (\log h_\theta(x^{(i)})) +(1-y^{(i)})\cdot \log(1-h_\theta(x^{(i)}))\right\}\\ 120 | \end{aligned} 121 | $$ 122 | 即$J(\theta)=-\sum\limits_{i=1}^m \left\{y^{(i)} \cdot (\log h_\theta(x^{(i)})) +(1-y^{(i)})\cdot \log(1-h_\theta(x^{(i)}))\right\}$。 123 | 124 | 3、小结 125 | 126 | ​ 可以发现两种方法推导出的损失函数都是一样的,下面正式定义逻辑回归模型的损失函数$J(\theta)=-\dfrac{1}{m}\sum\limits_{i=1}^m \left\{y^{(i)} \cdot (\log h_\theta(x^{(i)})) +(1-y^{(i)})\cdot \log(1-h_\theta(x^{(i)}))\right\}$。只是在先前的基础上乘了一个常系数$-\dfrac{1}{m}$对下一步求解$J(\theta)$的结果并不会产生影响。 127 | 128 | #### 求解损失函数 129 | 130 | ​ 最小化损失函数采用梯度下降算法,在逻辑回归中梯度下降算法的迭代格式为 131 | $$ 132 | \theta_j:=\theta_j-\alpha\nabla_{\theta_j} {J(\theta)}\\ 133 | $$ 134 | 其中$\ \alpha \in (0,1]\ $代表逻辑回归算法的学习率,为了实现该算法首先要求出损失函数$J(\theta)$对参数$\theta_j$的梯度: 135 | $$ 136 | \begin{aligned} 137 | \nabla_{\theta_j} J(\theta) &=- \dfrac{1}{m}\nabla_{\theta_j}\sum\limits_{i=1}^m \left\{y^{(i)} \cdot (\log h_\theta(x^{(i)})) +(1-y^{(i)})\cdot \log(1-h_\theta(x^{(i)}))\right\}\\ 138 | &=- \dfrac{1}{m}\sum\limits_{i=1}^m\left( y^{(i)} \cdot \dfrac{1}{h_\theta(x^{(i)})}\nabla_{\theta_j}h_\theta(x^{(i)}) 139 | - (1-y^{(i)})\cdot \dfrac{1}{1-h_\theta(x^{(i)})} \nabla_{\theta_j}h_\theta(x^{(i)})\right) \\ 140 | &=- \dfrac{1}{m}\sum\limits_{i=1}^m\left( y^{(i)} \cdot \dfrac{1}{h_\theta(x^{(i)})} 141 | - (1-y^{(i)})\cdot \dfrac{1}{1-h_\theta(x^{(i)})}\right)\cdot\nabla_{\theta_j}h_\theta(x^{(i)}) \\ 142 | &=- \dfrac{1}{m}\sum\limits_{i=1}^m\left( y^{(i)} \cdot \dfrac{1}{h_\theta(x^{(i)})} 143 | - (1-y^{(i)})\cdot \dfrac{1}{1-h_\theta(x^{(i)})}\right)\cdot h_\theta(x^{(i)})\cdot(1-h_\theta(x^{(i)}))\nabla_{\theta_j}\theta^Tx^{(i)}\\ 144 | &=- \dfrac{1}{m}\sum\limits_{i=1}^m \left( y^{(i)}\cdot(1-h_\theta(x^{(i)})) - (1-y^{(i)})\cdot h_\theta(x^{(i)})\right)x_j^{(i)}\\ 145 | &=- \dfrac{1}{m}\sum\limits_{i=1}^m \left( y^{(i)} - h_\theta(x^{(i)})\right)x_j^{(i)}\\ 146 | &=\dfrac{1}{m}\sum\limits_{i=1}^m \left(h_\theta(x^{(i)}) - y^{(i)}\right)x_j^{(i)} 147 | \end{aligned} 148 | $$ 149 | 因此在逻辑回归模型中利用所有的样本数据,训练梯度下降算法的完整迭代更新格式为 150 | $$ 151 | \theta_j:=\theta_j-\alpha \sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \ \ \ ( j\ \ for \ \ 0 \ \sim \ n) 152 | $$ 153 | 可以发现逻辑回归模型的迭代更新格式和线性回归模型的迭代更新格式完全一样,==但是它们的假设函数$\ h_\theta(x)\ $的函数表达式是不一样的==。 154 | 155 | #### 梯度下降过程的向量化 156 | 157 | ​ 向量化是使用矩阵计算来代替$for$循环 ,以简化计算过程提高效率 ,上述迭代更新的过程中有一个连加符号,如果使用$for$循环则需要执行$m$次。在此之前需要先定义一些矩阵,不妨令: 158 | $$ 159 | \begin{aligned} 160 | Y&= 161 | \begin{bmatrix} 162 | (y^{(1)}) \\ (y^{(2)}) \\ \vdots \\ (y^{(m)}) 163 | \end{bmatrix}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 164 | \theta= 165 | \begin{bmatrix} 166 | \theta_0 \\ \theta_1 \\ \vdots \\ \theta_n 167 | \end{bmatrix}\\ 168 | ~\\ 169 | X&= 170 | \begin{bmatrix} 171 | (x^{(1)})^T \\ (x^{(2)})^T \\ \vdots \\ (x^{(m)})^T 172 | \end{bmatrix} 173 | = 174 | \begin{bmatrix} 175 | 1 & x_1^{(1)} & x_2^{(1)} & \cdots & x_n^{(1)} \\ 176 | 1 & x_1^{(2)} & x_2^{(2)} & \cdots & x_n^{(2)} \\ 177 | \vdots & \vdots & \vdots & \cdots & \vdots \\ 178 | 1 & x_1^{(m)} & x_2^{(m)} & \cdots & x_n^{(m)} 179 | \end{bmatrix}\\ 180 | \end{aligned} 181 | $$ 182 | 则 183 | $$ 184 | \begin{aligned} \phi&=g(X\theta)= \begin{bmatrix} h_\theta(x^{(1)}) \\ h_\theta(x^{(2)}) \\ \vdots \\ h_\theta(x^{(m)}) \end{bmatrix} =g\left(\begin{bmatrix} \theta_0+\theta_1x_1^{(1)}+\cdots + \theta_nx_n^{(1)} \\ \theta_0+\theta_1x_1^{(2)}+\cdots + \theta_nx_n^{(2)}\\ \vdots \\ \theta_0+\theta_1x_1^{(m)}+\cdots + \theta_nx_n^{(m)} \end{bmatrix}\right)\\ ~\\ E&=h_\theta(x)-y=\phi-Y= \begin{bmatrix} \varepsilon_1 \\ \varepsilon_2 \\ \vdots \\ \varepsilon_m \end{bmatrix}\\ \end{aligned}\\ 185 | $$ 186 | 所以 187 | $$ 188 | \sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} = X\Epsilon 189 | $$ 190 | 最后 191 | $$ 192 | \theta_j:=\theta_j-\alpha \sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \ \ \ ( j\ \ for \ \ 0 \ \sim \ n) 193 | $$ 194 | 向量化后可改为 195 | $$ 196 | \theta:=\theta-\alpha X\Epsilon \ \ \ \ \ \\ 197 | $$ 198 | 199 | #### 总结 200 | 201 | ​ 逻辑回归算法是机器学习算法中比较好理解的分类模型,训练速度也很快。因为只需要存储各个维度的特征值的原因,对资源尤其是内存的占用会比较小 ,在引入了$softmax$以后可以处理多分类的问题。 任何机器学习模型都是有自己的假设,在这个假设成立的情况下模型才是适用的。逻辑回归的第一个基本假设是**假设样本数据的先验分布为伯努利分布。** -------------------------------------------------------------------------------- /md/高斯判别分析.md: -------------------------------------------------------------------------------- 1 | ##
高斯判别分析
2 | 3 |
杨航锋
4 | 5 | ​ 高斯判别分析属于机器学习算法中的分类算法,不妨假设样本数据为两种类别,它的大致思想是通过两个先验假设:一是样本数据的类别$\ y\ $在给定的情况下服从伯努利分布,二是不同类别中的样本数据分别服从多元高斯分布。首先估计出先验概率以及多元高斯分布的均值和协方差矩阵,然后再由贝叶斯公式求出一个新样本分别属于两类别的概率,预测结果取概率值大者。本文推导高斯判别分析算法的流程是,首先简单的推导出多元高斯分布、其次提出高斯判别分析算法的假设函数、然后构造损失函数、最后求解损失函数得出假设函数中的参数值。[更多文章见GitHub地址](https://github.com/yhangf/ML-NOTE) 6 | 7 | #### 多元高斯分布 8 | 9 | ​ 高中时期就学习过正态分布$\ X\sim N(\mu,\sigma^2)\ $,它的概率密度函数$\ \varphi (x)\ $为 10 | $$ 11 | \varphi(x)=\dfrac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} 12 | $$ 13 | 假设$\ X_i\ $之间相互独立且$X_i\sim N(\mu_i,\sigma_i^2)\ i=1,2,\cdots,n\ $令$\ x=[x_1,x_2,\cdots,x_n]^T;\ \mu=[\mu_1,\mu_2,\cdots,\mu_n]^T;\ $ $ \sigma=[\sigma_1,\sigma_2,\cdots,\sigma_n]^T\ $则多元高斯分布的密度函数可以表示为 14 | $$ 15 | \begin{aligned} 16 | \varphi(x)&=\dfrac{1}{\sigma_1\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{x_1-\mu_1}{\sigma_1})^2}\cdot 17 | \dfrac{1}{\sigma_2\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{x_2-\mu_2}{\sigma_2})^2}\cdots 18 | \dfrac{1}{\sigma_n\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{x_n-\mu_n}{\sigma_n})^2}\\ 19 | &=\dfrac{1}{(2\pi)^{\frac{n}{2}}\prod\limits_{i=1}^n\sigma_i}e^{-\frac{1}{2}\sum\limits_{j=1}^n(\frac{x_j-\mu_j}{\sigma_j})^2} 20 | \end{aligned} 21 | $$ 22 | 对于上述指数部分$\xi^2(x,\mu,\sigma)={\sum\limits_{j=1}^n(\frac{x_j-\mu_j}{\sigma_j})^2}$可以表示为矩阵乘法的形式(联想下线性代数二次型的矩阵表示) 23 | $$ 24 | \begin{aligned} 25 | \xi^2(x,\mu,\sigma)&={\sum\limits_{j=1}^n(\frac{x_j-\mu_j}{\sigma_j})^2}\\ 26 | &={\sum\limits_{j=1}^n(x_j-\mu_j)(x_j-\mu_j)(\frac{1}{\sigma_j})^2}\\ 27 | &= 28 | \begin{bmatrix} 29 | x_1-\mu_1, x_2-\mu_2 , \cdots, x_n-\mu_n 30 | \end{bmatrix} 31 | \begin{bmatrix} 32 | \frac{1}{\sigma^2} &0 & \cdots & 0\\ 33 | 0 & \frac{1}{\sigma^2} & \cdots &0\\ 34 | \vdots & \vdots & \ddots & \vdots \\ 35 | 0 & 0 & \cdots & \frac{1}{\sigma^2} 36 | \end{bmatrix} 37 | \begin{bmatrix} 38 | x_1-\mu_1\\ x_2-\mu_2\\ \vdots \\ x_n-\mu_n 39 | \end{bmatrix}\\ 40 | &=(x-\mu)^T\Sigma^{-1}(x-\mu) 41 | \end{aligned} 42 | $$ 43 | 其中根据$\ X_i \ $相互独立知 44 | $$ 45 | \begin{aligned} 46 | \Sigma&=E\{(X-EX)(X-EX)^T\}\\ 47 | &= 48 | \begin{bmatrix} 49 | var(X_1) &cov(X_1,X_2) & \cdots & cov(X_1,X_n)\\ 50 | cov(X_2,X_1) & var(X_2)& \cdots &cov(X_2,X_n)\\ 51 | \vdots & \vdots & \ddots & \vdots \\ 52 | cov(X_n,X_1) & cov(X_n,X_2) & \cdots & var(X_n) 53 | \end{bmatrix}\\ 54 | &= 55 | \begin{bmatrix} 56 | {\sigma^2} &0 & \cdots & 0\\ 57 | 0 & {\sigma^2} & \cdots &0\\ 58 | \vdots & \vdots & \ddots & \vdots \\ 59 | 0 & 0 & \cdots & {\sigma^2} 60 | \end{bmatrix} 61 | \end{aligned} 62 | $$ 63 | 所以多元高斯分布$ X\sim N(\mu,\Sigma)$的密度函数为 64 | $$ 65 | \varphi(x,\mu,\Sigma)=\dfrac{1}{(2\pi)^{\frac{n}{2}}\vert \Sigma \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} 66 | $$ 67 | 双二维独立高斯分布的图像为 68 | 69 | ![](..\picture\双二维高斯分布.png) 70 | 71 | #### 高斯判别分析模型的假设函数 72 | 73 | ​ 不妨假设含有$m$个样本数据($x^{(1)}$,$y^{(1)}$)、($x^{(2)}$,$y^{(2)}$)、$\cdots$、($x^{(m)}$,$y^{(m)}$),$y^{(i)} \in \{0,1\}$。当需要构建高斯判别分析模型$\ p(x|y)\ $时,样本数据需满足以下给出的先验概率分布 74 | $$ 75 | \begin{aligned} 76 | y &\sim Bernoulli(\phi)\\ 77 | x|y=0 &\sim \mathcal{N}(\mu_0,\Sigma)\\ 78 | x|y=1 &\sim \mathcal{N}(\mu_1,\Sigma)\\ 79 | \end{aligned} 80 | $$ 81 | 写成分布函数的形式即 82 | $$ 83 | \begin{aligned} 84 | p(y) &= \phi^y(1-\phi)^{1-y}\\ 85 | p(x|y=0) &=\dfrac{1}{(2\pi)^{\frac{n}{2}}\vert \Sigma \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0)}\\ 86 | p(x|y=1)&=\dfrac{1}{(2\pi)^{\frac{n}{2}}\vert \Sigma \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(x-\mu_1)^T \Sigma^{-1}(x-\mu_1)} 87 | \end{aligned} 88 | $$ 89 | 上述模型中的未知参数为$\ \phi、\Sigma、\mu_0和\mu_1\ $,假设函数为$\ p(y|x)=\dfrac{p(x|y)p(y)}{p(x)}\ $分别计算$\ p(x|y=0)p(y=0)和p(x|y=1)p(y=1)\ $的概率,概率大者为样本数据所属类别。 90 | 91 | #### 高斯判别分析模型的损失函数 92 | 93 | ​ 已知样本数据含有参数的概率分布,根据统计学的最大似然估计可以推导高斯判别分析模型的损失函数为 94 | $$ 95 | \begin{aligned} 96 | \mathcal L(\phi,\mu_0,\mu_1,\Sigma) &= \log\prod\limits_{i=1}^{m}p(x^{(i)},y^{(i)};\phi,\mu_0,\mu_1,\Sigma)\\ 97 | &=\log\prod\limits_{i=1}^{m}p(x^{(i)}|y^{(i)};\mu_0,\mu_1,\Sigma)p(y^{(i)};\phi)\\ 98 | &=\sum\limits_{i=1}^{m}\log p(x^{(i)}|y^{(i)};\mu_0,\mu_1,\Sigma) + \sum\limits_{i=1}^{m}\log p(y^{(i)};\phi)\\ 99 | &=\sum\limits_{i=1}^{m}\log \left(p(x^{(i)}|y^{(i)}=1;\mu_1,\Sigma)^{y^{(i)}} \cdot p(x^{(i)}|y^{(i)}=0;\mu_0,\Sigma)^{1-y^{(i)}}\right)+ \sum\limits_{i=1}^{m}\log p(y^{(i)};\phi)\\ 100 | &=\sum\limits_{i=1}^{m}y^{(i)}\log p(x^{(i)}|y^{(i)}=1;\mu_1,\Sigma)+\sum\limits_{i=1}^{m}(1-y^{(i)})\log p(x^{(i)}|y^{(i)}=0;\mu_0,\Sigma) + \sum\limits_{i=1}^{m}\log p(y^{(i)};\phi)\\ 101 | \end{aligned} 102 | $$ 103 | 104 | #### 求解上述损失函数 105 | 106 | ​ 对最大似然函数$\ \mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)\ $求偏导并令其相应偏导数为零即可求出参数 107 | $$ 108 | \begin{aligned} 109 | \nabla_{\phi} \mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)&=\nabla_{\phi} \sum\limits_{i=1}^{m}\log p(y^{(i)};\phi)\\ 110 | &=\nabla_{\phi}\sum\limits_{i=1}^{m}\log\phi^{y^{(i)}}(1-\phi)^{(1-y^{(i)})}\\ 111 | &=\nabla_{\phi}\sum\limits_{i=1}^{m}\{y^{(i)}\log\phi+(1-y^{(i)})\log(1-\phi)\}\\ 112 | &=\sum\limits_{i=1}^{m}\{y^{(i)}\cdot \dfrac{1}{\phi}-(1-y^{(i)})\cdot\dfrac{1}{1-\phi} \}\\ 113 | &=\sum\limits_{i=1}^{m}\{I(y^{(i)}=1)\cdot\dfrac{1}{\phi}-I(y^{(i)}=0)\cdot\dfrac{1}{1-\phi} \} 114 | \end{aligned} 115 | $$ 116 | 其中$\ I(x)\ $为示性函数,当$\ x\ $为真时$\ I(x)\ $的值为$\ 1\ $,当$\ x\ $为假时$\ I(x)\ $的值为$\ 0\ $,令$\ \nabla_{\phi} \mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)=0\ $ 117 | $$ 118 | \begin{aligned} 119 | \phi=\dfrac{\sum\limits_{i=1}^{m}I(y^{(i)}=1)}{\sum\limits_{i=1}^{m}\{I(y^{(i)}=1)+I(y^{(i)}=0)\}}=\dfrac{\sum\limits_{i=1}^{m}I(y^{(i)}=1)}{m} 120 | \end{aligned} 121 | $$ 122 | 同样地对$\ \mu_0 \ $求偏导可得 123 | $$ 124 | \begin{aligned} 125 | \nabla_{\mu_0} \mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)&=\nabla_{\mu_0}\sum\limits_{i=1}^{m}(1-y^{(i)})\log p(x^{(i)}|y^{(i)}=0;\mu_0,\Sigma)\\ 126 | &=\nabla_{\mu_0}\sum\limits_{i=1}^{m}(1-y^{(i)})\cdot\log\dfrac{1}{(2\pi)^{\frac{n}{2}}\vert \Sigma \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(x^{(i)}-\mu_0)^T\Sigma^{-1}(x^{(i)}-\mu_0)}\\ 127 | &=\sum\limits_{i=1}^{m}(1-y^{(i)})\Sigma^{-1}(x^{(i)}-\mu_0)\\ 128 | &=\sum\limits_{i=1}^{m}(I(y^{(i)})=0)\Sigma^{-1}(x^{(i)}-\mu_0) 129 | \end{aligned} 130 | $$ 131 | 令$\ \nabla_{\mu_0} \mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)=0\ $ 132 | $$ 133 | \begin{aligned} 134 | \mu_0=\dfrac{\sum\limits_{i=1}^{m}I(y^{(i)}=0)x^{(i)}}{\sum\limits_{i=1}^{m}I(y^{(i)}=0)} 135 | \end{aligned} 136 | $$ 137 | 根据对称性可知 138 | $$ 139 | \begin{aligned} 140 | \mu_1=\dfrac{\sum\limits_{i=1}^{m}I(y^{(i)}=1)x^{(i)}}{\sum\limits_{i=1}^{m}I(y^{(i)}=1)} 141 | \end{aligned} 142 | $$ 143 | 最后对$\ \Sigma\ ​$求偏导可得 144 | $$ 145 | \begin{aligned} 146 | \nabla_{\Sigma} \mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)&=\nabla_{\Sigma} \left(\sum\limits_{i=1}^{m}y^{(i)}\log p(x^{(i)}|y^{(i)}=1;\mu_1,\Sigma)+\sum\limits_{i=1}^{m}(1-y^{(i)})\log p(x^{(i)}|y^{(i)}=0;\mu_0,\Sigma)\right)\\ 147 | &=\nabla_{\Sigma}\left( \sum\limits_{i=1}^{m}y^{(i)}\cdot\log\dfrac{1}{(2\pi)^{\frac{n}{2}}\vert \Sigma \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(x^{(i)}-\mu_1)^T\Sigma^{-1}(x^{(i)}-\mu_1)}+\\ 148 | \sum\limits_{i=1}^{m}(1-y^{(i)})\cdot\log\dfrac{1}{(2\pi)^{\frac{n}{2}}\vert \Sigma \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(x^{(i)}-\mu_0)^T\Sigma^{-1}(x^{(i)}-\mu_0)}\right)\\ 149 | &=\nabla_{\Sigma}\left(\sum\limits_{i=1}^m\log\dfrac{1}{(2\pi)^{\frac{n}{2}}\vert \Sigma \vert ^{\frac{1}{2}}}-\dfrac{1}{2}\sum\limits_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})\right)\\ 150 | &=\nabla_{\Sigma}\left(\sum\limits_{i=1}^m(-\dfrac{n}{2}\log2\pi-\dfrac{1}{2}\log\vert\Sigma\vert)-\dfrac{1}{2}\sum\limits_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})\right)\\ 151 | &=-\dfrac{1}{2}\sum\limits_{i=1}^m\dfrac{1}{\vert\Sigma\vert}\vert\Sigma\vert\Sigma^{-1} 152 | -\dfrac{1}{2}\sum\limits_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T\cdot\nabla_{\Sigma}\Sigma^{-1}\\ 153 | &=-\dfrac{m}{2}\Sigma^{-1}-\dfrac{1}{2}\sum\limits_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T(-\Sigma^{-2}) 154 | \end{aligned} 155 | $$ 156 | 其中直接利用了下面的结论 157 | $$ 158 | \begin{aligned} 159 | \nabla_{\Sigma}\vert\Sigma\vert&=\vert\Sigma\vert\Sigma^{-1}\\ 160 | \nabla_{\Sigma}\Sigma^{-1}&=-\Sigma^{-2} 161 | \end{aligned} 162 | $$ 163 | $\ \nabla_{\Sigma} \mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)=0 \ $从而推导出 164 | $$ 165 | \Sigma=\dfrac{1}{m}\sum\limits_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T 166 | $$ 167 | 168 | #### 总结 169 | 170 | ​ 上面的推导看上去有些复杂,但求解出的结果却是非常简洁。通过上述公式,所有的未知参数都已经估计出来了,当需要判断一个新样本$\ x^{(i)}\ $时,可分别求出$\ p(y^{(i)}=0|x^{(i)})\ $和$\ p(y^{(i)}=1|x^{(i)})\ $,取概率更大的那个类。 -------------------------------------------------------------------------------- /md/高维数据可视化之t-SNE算法.md: -------------------------------------------------------------------------------- 1 | ##
高维数据可视化之$\ t\text{-}SNE\ $算法
2 | 3 |
杨航锋
4 | 5 | ​ 假设你有一个包含数百个特征的数据集,却对该数据所属领域几乎没有什么了解,并且你需要去探索数据中存在的隐模式。那可谓是数无形时少直觉,根本无从下手,当数据各特征间存在高度的线性相关,这时你可能首先会想到使用$\ PCA\ ​$对数据进行降维处理,但是$\ PCA \ ​$是一种线性算法,它不能解释特征之间的复杂多项式关系,而$\ t\text{-}SNE​$ (t$\text{-}​$distributed stochastic neighbor embedding)是一种用于挖掘高维数据的非线性降维算法,它能够将多维数据映射到二维或三维空间中,**因此$\ t\text{-}SNE \ ​$非常适用于高维数据的可视化操作**。$\ t\text{-}SNE \ ​$是由$\ SNE \ ​$发展而来,因此本文将先介绍$\ SNE\ ​$的基本原理,之后再扩展到$\ t\text{-}SNE \ ​$。 6 | 7 | #### 1 $\ SNE\ $基本原理 8 | 9 | $\ SNE\ ​$是通过仿射变换将数据点映射到相应概率分布上,主要包括下面两个步骤: 10 | 11 | 1. 通过在高维空间中构建数据点之间的概率分布$\ P\ ​$,使得相似的数据点有更高的概率被选择,而不相似的数据点有较低的概率被选择; 12 | 2. 然后在低维空间里重构这些点的概率分布$\ Q\ $,使得这两个概率分布尽可能相似。 13 | 14 | 令输入空间是$\ X\in\R^{n} \ $,输出空间为$\ Y\in \R^t \ (t\ll n)$。不妨假设含有$m$个样本数据$\ \{x^{(1)},x^{(2)},\cdots,x^{(m)} \}\ $,其中$\ x^{(i)}\in X \ $,降维后的数据为$\ \{y^{(1)},y^{(2)},\cdots ,y^{(m)} \} \ $,$\ y^{(i)}\in Y \ $。$\ SNE\ $是先将欧几里得距离转化为条件概率来表达点与点之间的相似度,即首先是计算条件概率$\ p_{j|i}\ $,其正比于$\ x^{(i)}\ $和$\ x^{(j)} \ $之间的相似度,$\ p_{j|i }\ $的计算公式为: 15 | $$ 16 | p_{j|i}=\dfrac{exp({-\frac{\Vert x^{(i)}-x^{(j)}\Vert^2}{2\sigma_i^2}})}{\sum\limits_{k\neq i}exp(-\frac{\Vert x^{(i)}-x^{(k)} \Vert^2}{2\sigma_i^2})} 17 | $$ 18 | 在这里引入了一个参数$\ \sigma_i\ $,对于不同的数据点$\ x^{(i)}\ $取值亦不相同,因为我们关注的是不同数据点两两之间的相似度,故可设置$\ p_{i|i}=0 \ $。对于低维度下的数据点$\ y^{(i)} \ $,通过条件概率$\ q_{j|i}\ $来刻画$\ y^{(i)}\ $与$\ y^{(j)}\ $之间的相似度,$\ q_{j|i} \ $的计算公式为: 19 | $$ 20 | q_{j|i}=\dfrac{exp(-\Vert y^{(i)}-y^{(j)}\Vert^2)}{\sum\limits_{k\neq i}exp(-\Vert y^{(i)}-y^{(k)} \Vert^2)} 21 | $$ 22 | 同理,设置$\ q_{i|i}=0\ $。 23 | 24 | ​ 如果降维的效果比较好,局部特征保留完整,那么有$\ p_{i|j}=q_{i|j} \ $成立,因此通过优化两个分布之间的$\ KL\ $散度构造出的损失函数为: 25 | $$ 26 | C(y^{(i)})=\sum\limits_{i}KL(P_i\Vert Q_i)=\sum\limits_i\sum\limits_jp_{j|i}\log\frac{p_{j|i}}{q_{j|i}} 27 | $$ 28 | 这里的$\ P_i\ $表示在给定高维数据点$\ x^{(i)} \ $时,其他所有数据点的条件概率分布;$\ Q_i \ $则表示在给定低维数据点$\ y^{(i)}\ $时,其他所有数据点的条件概率分布。从损失函数可以看出,当$\ p_{j|i}\ $较大$\ q_{j|i} \ $较小时,惩罚较高;而$\ p_{j|i} \ $较小$\ q_{j|i} \ $较大时,惩罚较低。换句话说就是高维空间中两个数据点距离较近时,若映射到低维空间后距离较远,那么将得到一个很高的惩罚;反之,高维空间中两个数据点距离较远时,若映射到低维空间距离较近,将得到一个很低的惩罚值。也就是说,**$\ SNE\ $的损失函数更关注于局部特征,而忽视了全局结构。** 29 | 30 | #### 2 $\ SNE\ $对应目标函数的求解 31 | 32 | ​ 首先不同的数据点对应着不同的$\ \sigma_i \ $,$\ P_i \ $的熵会随着$\ \sigma_i\ $的增加而增加。$\ SNE\ $引入困惑度的概念,通过二分搜索的方式来寻找一个最佳$\ \boldsymbol{\sigma},\boldsymbol{\sigma}\in\R^n\ $。其中困惑度指: 33 | $$ 34 | Perp(P_i)=2^{H(P_i)} 35 | $$ 36 | 这里的$\ H(P_i)\ $是$\ P_i\ $的香农熵,即: 37 | $$ 38 | H(P_i)=-\sum\limits_jp_{j|i}\log_2^{p_{j|i}} 39 | $$ 40 | 困惑度可以理解为某个数据点附近有效近邻点的个数,**$\ SNE\ $对困惑度的调整具有鲁棒性,通常选择$\ 5\sim 50\ $之间**,给定之后通过二分搜索的方式即可寻找到合适的$\ \boldsymbol{\sigma}\ $。通过对$\ SNE\ $的损失函数求梯度可得: 41 | $$ 42 | \dfrac{\partial{C(y^{(i)})}}{\partial{y^{(i)}}}=2\sum\limits_j(p_{j|i}-q_{j|i}+p_{i|j}-q_{i|j})(y^{(i)}-y^{(j)}) 43 | $$ 44 | 在迭代初始化阶段,可以使用较小的$\ \boldsymbol{\sigma} \ $对高斯分布进行初始化。为了加速优化过程和避免陷入局部最优解,梯度中需要使用一个相对较大的动量,即参数更新过程中除了使用当前梯度,还要引入之前梯度累加的指数衰减项,迭代更新过程如下: 45 | $$ 46 | Y^{(t)}=Y^{(t-1)}+\eta\dfrac{\partial C(Y)}{\partial Y}+\alpha(t)(Y^{(t-1)}-Y^{(t-2)}) 47 | $$ 48 | 这里的$\ Y^{(t)}\ $表示迭代$\ t\ $次的解,$\ \eta\ $表示学习率,$\ \alpha(t)\ $表示迭代$\ t\ $次的动量。 49 | 50 | #### 3 对称$\ SNE\ $ 51 | 52 | ​ 优化$KL(P\Vert Q)$的一种替换思路是使用联合概率分布来替换条件概率分布,即$\ P\ $是高维空间里数据点的联合概率分布,$\ Q\ $是低维空间里数据点的联合概率分布,此时的损失函数为: 53 | $$ 54 | C(y^{(i)})=KL(P\Vert Q)=\sum\limits_i\sum\limits_jp_{ij}\log\dfrac{p_{ij}}{q_{ij}} 55 | $$ 56 | 同样的$\ p_{ii}=q_{ii}=0 \ $,这种改进下的$\ SNE\ $称为对称$\ SNE \ $,因为它的先验假设为对$\ \forall i\ $有$\ p_{ij}=p_{ji},q_{ij}=q_{ji} \ $成立,故概率分布可以改写成: 57 | $$ 58 | p_{ij}=\dfrac{exp(-\frac{\Vert x^{(i)}-x^{(j)}\Vert^2}{2\sigma^2})}{\sum\limits_{k\neq l}exp(-\frac{\Vert x^{(k)}-x^{(l)} \Vert^2}{2\sigma^2})}\ \ \ \ \ \ \ \ \ \ \ \ \ 59 | q_{ij}=\dfrac{exp(-\Vert y^{(i)}-y^{(j)} \Vert^2)}{\sum\limits_{k\neq l}exp(-\Vert y^{(k)}-y^{(l)} \Vert^2)} 60 | $$ 61 | 这种改进方法使得表达式简洁很多,但是容易受到异常点数据的影响,为了解决这个问题通过对联合概率分布定义修正为:$\ p_{ij}=\frac{p_{j|i}+p_{i|j}}{2} \ $,这保证了$\ \sum\limits_jp_{ij} \gt \frac{1}{2m}\ $,使得每个点对于损失函数都会有贡献。对称$\ SNE\ $最大的优点是简化了梯度计算,梯度公式改写为: 62 | $$ 63 | \dfrac{\partial C(y^{(i)})}{\partial y^{(i)}}=4\sum\limits_j(p_{ij}-q_{ij})(y^{(i)}-y^{(j)}) 64 | $$ 65 | 研究表明,对称$\ SNE\ $和$\ SNE\ $的效果差不多,有时甚至更好一点。 66 | 67 | #### 4 $\ t\text{-}SNE \ $ 68 | 69 | ​ $\ t\text{-}SNE \ $在对称$\ SNE \ $的改进是,首先通过在高维空间中使用高斯分布将距离转换为概率分布,然后在低维空间中,使用更加偏重长尾分布的方式来将距离转换为概率分布,使得高维度空间中的中低等距离在映射后能够有一个较大的距离。 70 | 71 | ![](..\picture\t-dist_and_normal_.png) 72 | 73 | 从图中可以看到,在没有异常点时,$\ t \ $分布与高斯分布的拟合结果基本一致。而在第二张图中,出现了部分异常点,由于高斯分布的尾部较低,对异常点比较敏感,为了照顾这些异常点,高斯分布的拟合结果偏离了大多数样本所在位置,方差也较大。相比之下,$\ t \ ​$分布的尾部较高,对异常点不敏感,保证了其鲁棒性,因此拟合结果更为合理,较好的捕获了数据的全局特征。 74 | 75 | 使用$\ t\ $分布替换高斯分布之后$\ q_{ij }\ $的变化如下: 76 | $$ 77 | q_{ij}=\dfrac{(1+\Vert y^{(i)}-y^{(j)} \Vert^2)^{-1}}{\sum\limits_{k\neq l}(1+\Vert y^{(i)}-y^{(j)} \Vert^2)^{-1}} 78 | $$ 79 | 此外,随着自由度的逐渐增大,$\ t \ $分布的密度函数逐渐接近标准正态分布,因此在计算梯度方面会简单很多,优化后的梯度公式如下: 80 | $$ 81 | \dfrac{\partial C(y^{(i)})}{\partial y^{(i)}}=4\sum\limits_{j}(p_{ij}-q_{ij})(y^{(i)}-y^{(j)})(1+\Vert y^{(i)}-y^{(j)} \Vert^2)^{-1} 82 | $$ 83 | 总的来说,$\ t\text{-}SNE \ $的梯度更新具有以下两个优势: 84 | 85 | * 对于低维空间中不相似的数据点,用一个较小的距离会产生较大的梯度让这些数据点排斥开来; 86 | * 这种排斥又不会无限大,因此避免了不相似的数据点距离太远。 87 | 88 | #### 5 与$\ PCA \ $降维效果对比 89 | 90 | ​ 在$\ MNIST\ $数据集上,该数据集的每张数字图片大小为$\ 28\times28\ $也就是说特征维度为$\ 728 \ $,通过使用$\ sklearn\ $算法库中的$\ t\text{-}SNE \ $和$\ PCA \ $算法进行降维可视化测试,测试结果如下图所示: 91 | 92 | ```python 93 | from sklearn.manifold import TSNE 94 | from sklearn.datasets import load_iris,load_digits 95 | from sklearn.decomposition import PCA 96 | import matplotlib.pyplot as plt 97 | import numpy as np 98 | %config InlineBackend.figure_format = "svg" 99 | 100 | digits = load_digits() 101 | X_tsne = TSNE(n_components=2, random_state=33).fit_transform(digits.data) 102 | X_pca = PCA(n_components=2).fit_transform(digits.data) 103 | 104 | font = {"color": "darkred", 105 | "size": 13, 106 | "family" : "serif"} 107 | 108 | plt.style.use("dark_background") 109 | plt.figure(figsize=(8.5, 4)) 110 | plt.subplot(1, 2, 1) 111 | plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=digits.target, alpha=0.6, 112 | cmap=plt.cm.get_cmap('rainbow', 10)) 113 | plt.title("t-SNE", fontdict=font) 114 | cbar = plt.colorbar(ticks=range(10)) 115 | cbar.set_label(label='digit value', fontdict=font) 116 | plt.clim(-0.5, 9.5) 117 | plt.subplot(1, 2, 2) 118 | plt.scatter(X_pca[:, 0], X_pca[:, 1], c=digits.target, alpha=0.6, 119 | cmap=plt.cm.get_cmap('rainbow', 10)) 120 | plt.title("PCA", fontdict=font) 121 | cbar = plt.colorbar(ticks=range(10)) 122 | cbar.set_label(label='digit value', fontdict=font) 123 | plt.clim(-0.5, 9.5) 124 | plt.tight_layout() 125 | ``` 126 | 127 | ![](..\picture\t-sne_and_pca_.png) 128 | 129 | 从实验结果可以看出$\ t\text{-}SNE\ $算法降维后的可视化效果要远远好于$\ PCA\ $算法。 130 | 131 | #### 6 总结 132 | 133 | $\ t\text{-}SNE \ $算法详细过程如下: 134 | 135 | 1. 数据准备:$\ \{x^{(1)},x^{(2)},\cdots,x^{(m)} \}\ $,其中$\ x^{(i)}\in \R^n \ $; 136 | 137 | 2. 初始化困惑度参数用于求解$\ \boldsymbol{\sigma}\ $,迭代次数$\ T\ $、学习率$\ \eta \ $和动量$\ \alpha{(t)}\ $; 138 | 139 | 3. 开始优化 140 | 141 | * 计算高维空间中的条件概率$\ p_{j|i }\ ​$; 142 | * 令$\ p_{ij}=\frac{p_{j|i}+p_{i|j}}{2m} \ $; 143 | * 使用正态分布$\ \mathcal{N}(0,10^{-4}) \ $随机初始化$\ Y_{m\times k}\ $矩阵; 144 | * 从$\ t=1,2,\cdots,T \ $进行迭代 145 | * 计算低维空间中的条件概率$\ q_{ij}\ $; 146 | * 计算损失函数$\ C(y^{(i)})\ $对$\ y^{(i)}\ $的梯度; 147 | * 更新$\ Y^{(t)}=Y^{(t-1)}+\eta\frac{\partial C(Y)}{\partial Y}+\alpha{(t)}(Y^{(t-1)}-Y^{(t-2)}) \ $。 148 | 149 | * 输出$\ Y\ $。 150 | 151 | 4. 算法结束。 152 | 153 | $\ t\text{-} SNE\ $算法其实就是在$\ SNE\ $算法的基础上增加了两个改进: 154 | 155 | - 把$\ SNE\ $修正为对称$\ SNE\ $,提高了计算效率,效果稍有提升; 156 | - 在低维空间中采用了$\ t \ $分布替换原来的高斯分布,解决了高维空间映射到低维空间所产生的拥挤问题,优化了$\ SNE \ $过于关注局部特征而忽略全局特征的问题 。 -------------------------------------------------------------------------------- /pdf/EM算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/EM算法.pdf -------------------------------------------------------------------------------- /pdf/FM算法简单梳理.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/FM算法简单梳理.pdf -------------------------------------------------------------------------------- /pdf/GBDT算法原理梳理.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/GBDT算法原理梳理.pdf -------------------------------------------------------------------------------- /pdf/Isolation Forest算法梳理.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/Isolation Forest算法梳理.pdf -------------------------------------------------------------------------------- /pdf/L1和L2正则化的概率解释.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/L1和L2正则化的概率解释.pdf -------------------------------------------------------------------------------- /pdf/LSTM和GRU算法简单梳理.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/LSTM和GRU算法简单梳理.pdf -------------------------------------------------------------------------------- /pdf/PCA算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/PCA算法.pdf -------------------------------------------------------------------------------- /pdf/k-means算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/k-means算法.pdf -------------------------------------------------------------------------------- /pdf/l1相对于l2更容易获得稀疏解的个人看法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/l1相对于l2更容易获得稀疏解的个人看法.pdf -------------------------------------------------------------------------------- /pdf/word2vec算法梳理.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/word2vec算法梳理.pdf -------------------------------------------------------------------------------- /pdf/关联规则算法原理浅析.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/关联规则算法原理浅析.pdf -------------------------------------------------------------------------------- /pdf/反向传播算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/反向传播算法.pdf -------------------------------------------------------------------------------- /pdf/多分类问题的交叉熵.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/多分类问题的交叉熵.pdf -------------------------------------------------------------------------------- /pdf/感知机算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/感知机算法.pdf -------------------------------------------------------------------------------- /pdf/支持向量机(上篇).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/支持向量机(上篇).pdf -------------------------------------------------------------------------------- /pdf/支持向量机(下篇).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/支持向量机(下篇).pdf -------------------------------------------------------------------------------- /pdf/数值微分理论和简单代码实现.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/数值微分理论和简单代码实现.pdf -------------------------------------------------------------------------------- /pdf/朴素贝叶斯算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/朴素贝叶斯算法.pdf -------------------------------------------------------------------------------- /pdf/某些特殊概率分布之间的相互变换.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/某些特殊概率分布之间的相互变换.pdf -------------------------------------------------------------------------------- /pdf/核函数粗浅的理解.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/核函数粗浅的理解.pdf -------------------------------------------------------------------------------- /pdf/线性回归与最小二乘法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/线性回归与最小二乘法.pdf -------------------------------------------------------------------------------- /pdf/逻辑回归算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/逻辑回归算法.pdf -------------------------------------------------------------------------------- /pdf/高斯判别分析.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/高斯判别分析.pdf -------------------------------------------------------------------------------- /pdf/高维数据可视化之t-SNE算法.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/pdf/高维数据可视化之t-SNE算法.pdf -------------------------------------------------------------------------------- /picture/GRU.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/GRU.jpg -------------------------------------------------------------------------------- /picture/LSM_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/LSM_1.png -------------------------------------------------------------------------------- /picture/LSTM-cellstate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/LSTM-cellstate.jpg -------------------------------------------------------------------------------- /picture/LSTM-input.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/LSTM-input.jpg -------------------------------------------------------------------------------- /picture/LSTM-output-gate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/LSTM-output-gate.jpg -------------------------------------------------------------------------------- /picture/LSTM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/LSTM.png -------------------------------------------------------------------------------- /picture/LSTM2-notation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/LSTM2-notation.png -------------------------------------------------------------------------------- /picture/bp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/bp.png -------------------------------------------------------------------------------- /picture/cbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/cbow.png -------------------------------------------------------------------------------- /picture/cbow_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/cbow_update.png -------------------------------------------------------------------------------- /picture/iForest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/iForest.png -------------------------------------------------------------------------------- /picture/iForest_instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/iForest_instance.png -------------------------------------------------------------------------------- /picture/iForest_psi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/iForest_psi.png -------------------------------------------------------------------------------- /picture/iForest_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/iForest_s.png -------------------------------------------------------------------------------- /picture/k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/k.png -------------------------------------------------------------------------------- /picture/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/log.png -------------------------------------------------------------------------------- /picture/numerical_grad_1d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/numerical_grad_1d.png -------------------------------------------------------------------------------- /picture/numerical_grad_nd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/numerical_grad_nd.png -------------------------------------------------------------------------------- /picture/pca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/pca.png -------------------------------------------------------------------------------- /picture/sigmoid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/sigmoid.jpg -------------------------------------------------------------------------------- /picture/skip-gram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/skip-gram.png -------------------------------------------------------------------------------- /picture/smo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/smo.png -------------------------------------------------------------------------------- /picture/svm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/svm.png -------------------------------------------------------------------------------- /picture/t-dist_and_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/t-dist_and_normal.png -------------------------------------------------------------------------------- /picture/t-dist_and_normal_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/t-dist_and_normal_.png -------------------------------------------------------------------------------- /picture/t-sne_and_pca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/t-sne_and_pca.png -------------------------------------------------------------------------------- /picture/t-sne_and_pca_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/t-sne_and_pca_.png -------------------------------------------------------------------------------- /picture/word2vec.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/word2vec.jpg -------------------------------------------------------------------------------- /picture/word2vec_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/word2vec_.png -------------------------------------------------------------------------------- /picture/二元高斯分布.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/二元高斯分布.png -------------------------------------------------------------------------------- /picture/二分类.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/二分类.png -------------------------------------------------------------------------------- /picture/双二维高斯分布.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/双二维高斯分布.png -------------------------------------------------------------------------------- /picture/感知机.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/感知机.png -------------------------------------------------------------------------------- /picture/支持向量.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/支持向量.png -------------------------------------------------------------------------------- /picture/神经网络.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/神经网络.jpeg -------------------------------------------------------------------------------- /picture/詹森不等式.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/詹森不等式.jpg -------------------------------------------------------------------------------- /picture/贝叶斯.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhangf/ML-NOTE/48ad52b199a972993f15b729441f037eacfda543/picture/贝叶斯.jpg --------------------------------------------------------------------------------