CS229 机器学习 常用模型总结 | Vol6
在机器学习看到一半的过程中,对于之前学习的广义线性模型、高斯判别分析、支持向量机、决策树、多层感知器进行阶段性的总结,并尝试使用过去课程中可能存在例子来进行展示,最后利用Kaggle的实验来进行展示
如有侵权,可以删除;如有错误,欢迎提出
0x01基本模型
1.1 GLM(logistic regression、linear regression、softmax regression)
Andrew Wu 第一部分–线性模型blog.tjdata.site/2022/01/29/Andrew-Wu-%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86-%E7%BA%BF%E6%80%A7%E6%A8%A1%E5%9E%8B/
吐槽: 明明是discriminate的模型,却叫广义线性模型(generative linear model);明明是generative的模型,却叫高斯判别分析(gaussian discriminat analysis)
广义线性模型中的步骤是,对于一群i.i.d(独立同分布)的数据集X,通过学习算法得到一个关于输出预测y的$P(\hat y|X)$,再每次输出中将期望值作为最终的输出,使得其的概率可以最大。其中做出三个基本假设
- ~$𝑋~𝐸𝑥𝑝𝑜𝑛𝑒𝑛𝑡𝑖𝑎𝑙 𝐹𝑎𝑚𝑖𝑙𝑦(𝜂)=𝑏(𝑦)𝑒𝑥𝑝(𝜂𝑇𝑇(𝑦)−𝑎(𝜂))$
- 输出的预测值 $𝑦^=ℎ𝜃(𝑥)=𝐸(𝑦|𝑥)$
- 由于是线性模型,最强的假设是 $𝜂=𝜃𝑇𝑥(𝑖)$
可以从三个例子来看出推导过程:
example01:逻辑回归(y=「0,1」,ps:y=[-1,1]不一样)
GLM分析: $ℎ𝜃(𝑥)=𝐸(𝑦|𝑥,𝜃)$ ,这里的分布假设是Bernoulli(伯努利分布),因此 $ℎ𝜃(𝑥)=𝜙=1/(1+𝑒−𝜂)=1/(1+𝑒−𝜃𝑇𝑥)$
数据集和假设 ()$(𝑥(𝑖),𝑦(𝑖)),𝑦∈0,1,ℎ𝜃(𝑥)=𝑔(𝑧),𝑔(𝑧)=11+𝑒−𝑧$
由此推导得到预测值的输出的损失函数: $𝑃(𝑦|𝑥)=∏ℎ𝜃(𝑥)𝑦∗(1−ℎ𝜃(𝑥)1−𝑦$
之后为了利用梯度下降Gradient Descent下降的方式需要计算 ,同时为了简便计算
example02: 线性回归
GLM分析: ,这里的分布假设是高斯分布
数据集和假设
由此推导得到预测值的输出的损失函数:
之后为了利用梯度下降Gradient Descent下降的方式需要计算 ,同时为了简便计算
等价于
example03: softmax 回归
GLM分析:
,这里我们不知道具体的概率分布是什么,只能假设每一类的输出是$\phi_k$,得到概率分布函数
经过化简可以得到
同时
可以得到
因此对于
在得到分布函数的基础上,我们就可以计算期望值
损失函数就是我们最初定义的:
1.2 GDA(Gaussian Discriminat Analysis)
与判别式模型(GLM)想比较$p(y|x)$,生成式模型generative用于生成$p(x|y)p(y)$来对每一种类别建模,寻找每个类别的特征,也就是比如输出多种类别,同时假设每个类别都是高斯分布,则可以计算两个类别的高斯分布参数,这样在得到输入可以直接使用分布函数来得到输出 计算就好了蛮
1.3 SVM(Support Vector Machine)
支持向量机是最大边缘方法,允许把模型表示为训练实例的一个子集的影响之和,这些影响用面向应用的相似性核给出,采用:不要在解决实际问题之前把解决一个更复杂的问题作为第一步;在训练过程中希望找到的是那个最佳分离平面hyperplane:$w^Tx+b$中的两个参数
模型的输入是$(x^{(i)},y^{(i)}),y\in{-1,+1}$,希望找到的是可以讲数据集可以正确区分开的参数$w\ b$
Ps:为了简单起见,可以从线性可分的情况来谈论,再拓展到非线性可分的情况
通过定义functional margin和geometry margin,我们可以建立最符合直觉的模型为: 经过凸优化中的相关变化,使其变成可以求解的形式 对于这种类型的凸优化问题,可以采用拉格朗日方法或者其他方法直接进行求解;也可以将其转换为对偶问题dual problem,再利用拉格朗日算法或者其他方法来求解,⚠️我们希望求解的是w和b!!
对于这个函数求极值,就是希望
等于0
将这个带入到L中,化简得到
构建对偶问题,等价于
其中需要满足KKT条件:
通过某种算法SMO可以很轻松的求解上述对偶问题,得到$\alpha_i$并根据KKT条件可以确定支持向量(support vector),由此计算得到w和b,这样就可以判断正例还是反例
- SMO算法?以后才知道吧
在线性不可分的情况,可以使用核机器(kernel function)来进行重新度量向量之间的非相似性
在间隔划分中,可以通过设置软间隔的方式来允许有部分噪声点发生
同时为了过拟合的风险,依旧可以增加模型复杂程度的项(term)
1.4 CART(Classfication and regression tree)
1.5 ANN(Artificial Neural Network)决策树CART1.5 ANN(Artificial Neural Network)
对于每个神经元包括两个部分,一个是接受前端的激活权重,另外一方面是自身的激活函数的选取
$线性连接:z^i=w^ia^{i-1}+b^i$
$激活输出:a^i=g(z^i)$
添加图片注释,不超过 140 字(可选)
假设对于这样的一个函数:
前向传递:
梯度下降来更新参数:
ps:解决问题要从源头一步一步解决
可以选取交叉熵作为误差函数
很amazing,在于输出的梯度下降可以和前一个节点的激活有关,如果使用内存把这些记录下来,可以大幅度的降低训练的时间,同时可以并行的计算一些参数
在定义好一个网络结果只是一个基础,还需要确定网络中的激活函数,定义好网络中训练的基本参数初始化、参数的随机选择、以及采用比较好的优化求解算法
激活函数
softmax、tanh、logistic、ReLu等等
参数归一化
min-max归一化、z-score、均值方差归一化
参数初始化
在网络层数变多的情况下,梯度会出现爆炸或者变小的情况,因此可以采用的随机化包括:均值、xvaier initiation、he initialization、np.random .randn(shaope)*np.sgrt(1/n[z-1]) simoid 用1比较好、relu用2比较好等等不知名的参数初始化
优化方法
GD、SGD、BGD、动量算法、Adam、启发式算法(模拟退火、遗传算法)等等
常见的网络
- RBF(radial basis function,径向基网络)
- ART(adaptive resonance theory,自适应谐振理论)
- SOM(self- organizing map ,自组织映射)
- CC(cascade- correlation,级联相关网络)
- Elamn网络
- Boltzmann机
0x02实验
一些比较简单的codebase
0x03Kaggle- Titanic
添加图片注释,不超过 140 字(可选)
草率的花了一晚上了解了一下kaggle的流程,有点拉胯,一万多.容易让人想起来痛苦的交通信息检测处理的大作业
1 |
|