This repository has been archived on 2020-04-25. You can view files and clone it, but cannot push or open issues or pull requests.
ml/regression/线性模型.md
2020-04-25 17:04:35 +08:00

97 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 线性回归
线性回归问题就是试图学到一个线性模型尽可能准确地预测新样本的输出值,例如通过历年的人口数据预测2017年人口数量。
有时这些输入的属性值并不能直接被我们的学习模型所用,需要进行相应的处理,对于连续值的属性,一般都可以被学习器所用,有时
会根据具体的情形作相应的预处理,例如:归一化等;对于离散值的属性,可作下面的处理:
- 若属性值之间存在“序关系”,则可以将其转化为连续值,例如:身高属性分为“高”“中等”“矮”,可转化为数值:{1 0.5 0}。
- 若属性值之间不存在“序关系”,则通常将其转化为向量的形式,例如:性别属性分为“男”“女”,可转化为二维向量:{1001}。
(1) 当输入属性只有一个的时候就是最简单的情形也就是我们高中时最熟悉的“最小二乘法”Euclidean distance首先计算出每个样
本预测值与真实值之间的误差并求和通过最小化均方误差MSE使用求偏导等于零的方法计算出拟合直线y=wx+b的两个参数w和b计算
过程如下图所示:
![一元线性](https://img.zeekling.cn/images/2020/04/25/be7d04ba87ddec119f7a852fbfcb82a5.png)
(2) 当输入属性有多个的时候例如对于一个样本有d个属性{x1,x2...xd,y}则y=wx+b需要写成<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/fd7899c7f80219a07018d70326140405.png)<br>
通常对于多元问题常常使用矩阵的形式来表示数据。在本问题中将具有m个样本的数据集表示成矩阵X将系数w与b合并成一个列向
量,这样每个样本的预测值以及所有样本的均方误差最小化就可以写成下面的形式:<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/8db030a1fd1b5da90e9f3920aaba8adf.png)<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/ee17120d052d277bac379915e8833e76.png)<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/b5e2c0d50a6c5894734f1e5ed869e3b9.png)<br>
同样地我们使用最小二乘法对w和b进行估计令均方误差的求导等于0需要注意的是当一个矩阵的行列式不等于0时我们才可能
对其求逆因此对于下式我们需要考虑矩阵X的转置*X的行列式是否为0若不为0则可以求出其解若为0则需要使用其它的
方法进行计算,书中提到了引入正则化<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/193e5ae855379a8849a56b1cd54c14f7.png)<br>
另一方面有时像上面这种原始的线性回归可能并不能满足需求例如y值并不是线性变化而是在指数尺度上变化。这时我们可以采
用线性模型来逼近y的衍生物例如lny这时衍生的线性模型如下所示实际上就是相当于将指数曲线投影在一条直线上如下图所示<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/be3eb5738b4946ef8dd1d3af1f7e4029.png)<br>
更一般地考虑所有y的衍生物的情形就得到了“广义的线性模型”generalized linear model其中g*称为联系函数link
function<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/265895dc8e25ed1e5a4072d6b4909aac.png)<br>
# 对数几率函数
回归就是通过输入的属性值得到一个预测值,利用上述广义线性模型的特征,是否可以通过一个联系函数,将预测值转化为离散值从而
进行分类呢线性几率回归正是研究这样的问题。对数几率引入了一个对数几率函数logistic function,将预测值投影到0-1之间
从而将线性回归问题转化为二分类问题。<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/13354d2c03c7a7c775dd1e0acbf0c9df.png)<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/1f621ccbd74d7792243c4564bd84885c.png)<br>
若将y看做样本为正例的概率1-y看做样本为反例的概率则上式实际上使用线性回归模型的预测结果器逼近真实标记的对数几率。
因此这个模型称为“对数几率回归”logistic regression也有一些书籍称之为“逻辑回归”。下面使用最大似然估计的方法来计算出
w和b两个参数的取值下面只列出求解的思路不列出具体的计算过程。<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/bba80d65271cd32539e354a9389b7348.png)<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/2eaad6dbca01061774aaaebebb57b134.png)<br>
# 线性判别分析
线性判别分析Linear Discriminant Analysis简称LDA,其基本思想是:将训练样本投影到一条直线上,使得同类的样例尽可能近,
不同类的样例尽可能远。如图所示:<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/c99c4fa4913fff7a48ad2b60f5d955ae.png)<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/28fc07107348eb061f1329c949a84e0a.png)<br>
想让同类样本点的投影点尽可能接近,不同类样本点投影之间尽可能远,即:让各类的协方差之和尽可能小,不用类之间中心的距离尽
可能大。基于这样的考虑LDA定义了两个散度矩阵。<br>
- 类内散度矩阵within-class scatter matrix
![一元线性](https://img.zeekling.cn/images/2020/04/25/da08ad0a8765f1ab5985092fbe7967cf.png)<br>
- 类间散度矩阵(between-class scaltter matrix) <br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/b761b8729c98792c169bd31bca77a84c.png)<br>
因此得到了LDA的最大化目标“广义瑞利商”generalized Rayleigh quotient<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/b729f99dea935248d3f6dc6057ee489d.png)<br>
从而分类问题转化为最优化求解w的问题当求解出w后对新的样本进行分类时只需将该样本点投影到这条直线上根据与各个类别
的中心值进行比较从而判定出新样本与哪个类别距离最近。求解w的方法如下所示使用的方法为λ乘子。<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/d02a2886d37695d5bb3b9c2e0dd1360e.png)<br>
若将w看做一个投影矩阵类似PCA的思想则LDA可将样本投影到N-1维空间N为类簇数投影的过程使用了类别信息标记信息
因此LDA也常被视为一种经典的监督降维技术。
# 多分类学习(不太明白)
现实中我们经常遇到不只两个类别的分类问题,即多分类问题,在这种情形下,我们常常运用“拆分”的策略,通过多个二分类学习器来解
决多分类问题,即将多分类问题拆解为多个二分类问题,训练出多个二分类学习器,最后将多个分类结果进行集成得出结论。最为经典的
拆分策略有三种“一对一”OvO、“一对其余”OvR和“多对多”MvM核心思想与示意图如下所示。
- OvO给定数据集D假定其中有N个真实类别将这N个类别进行两两配对一个正类/一个反类从而产生NN-1/2个二分类学习
在测试阶段将新样本放入所有的二分类学习器中测试得出NN-1个结果最终通过投票产生最终的分类结果。
- OvM给定数据集D假定其中有N个真实类别每次取出一个类作为正类剩余的所有类别作为一个新的反类从而产生N个二分类学
习器在测试阶段得出N个结果若仅有一个学习器预测为正类则对应的类标作为最终分类结果。
- MvM给定数据集D假定其中有N个真实类别每次取若干个类作为正类若干个类作为反类通过ECOC码给出编码若进行了M次
划分则生成了M个二分类学习器在测试阶段解码得出M个结果组成一个新的码最终通过计算海明/欧式距离选择距离最小的
类别作为最终分类结果。
![一元线性](https://img.zeekling.cn/images/2020/04/25/d56cb1bec30b546d7cf1ec1922c0dbc1.png)<br>
![一元线性](https://img.zeekling.cn/images/2020/04/25/49ffea9e9de2739864dbd5abae793db1.png)<br>
# 类别不平衡问题(不太明白)
类别不平衡class-imbanlance就是指分类问题中不同类别的训练样本相差悬殊的情况例如正例有900个而反例只有100个这个时
候我们就需要进行相应的处理来平衡这个问题。常见的做法有三种:
- 在训练样本较多的类别中进行“欠采样”undersampling,比如从正例中采出100个常见的算法有EasyEnsemble。
- 在训练样本较少的类别中进行“过采样”oversampling,例如通过对反例中的数据进行插值来产生额外的反例常见的算法有SMOTE。
- 直接基于原数据集进行学习,对预测值进行“再缩放”处理。其中再缩放也是代价敏感学习的基础。
![一元线性](https://img.zeekling.cn/images/2020/04/25/9338b5e5b091aab77f43cc8fc31cda4f.png)<br>