线性模型
分类:把多种数据进行区分
回归:归纳出某种数据的分布规律
线性模型(linear model) :试图学得一个通过属性的线性组合来进行预测的函数
公式如下:
# x为特征值,w为权重,b为偏值
线性回归
## 转化为公式时,需要把特征值数值化:
1.若数据有“序” (order) 的关系,则连续化 (按序赋值)
2.若数据无序,则用向量编码(0&1)
* 若一个离散属性有k个可能的取值,则转化为一个k维的向量
求解过程:
** 最小二乘参数估计:对w,b求偏导,然后让导数为0
得到闭式(closed-form)解:
闭式解 vs 数值解
闭式解:
解析解(又称“”闭式解“),是指通过严格的公式所求得的解。即包含分式、三角函数、指数、对数甚至无限级数等基本函数的解的形式。给出解的具体函数形式,从解的表达式中就可以算出任何对应值。解析解为一封闭形式的函数,因此对任一独立变量,皆可将其代入解析函数求得正确的相依变量。因此,解析解也称为闭式解。
** 解析法
用来求得解析解的方法称为解析法,解析法是常见的微积分技巧,如分离变量法等。
数值解:
数值解(numerical solution)是采用某种计算方法,如有限元的方法, 数值逼近,插值的方法, 得到的解.别人只能利用数值计算的结果, 而不能随意给出自变量并求出计算值。
** 当无法藉由微积分技巧求得解析解时,这时便只能利用数值分析的方式来求得其数值解了。数值方法变成了求解过程重要的媒介。
多元(Multi-variate)线性回归
求解过程:
# 把方程简化为增广矩阵
# 矩阵有逆时:直接算 => 解方程组;
# 逆不存在时:加一个限制 => 加上偏好
线性模型变化
可以对线性模型稍加变化,用来求解非线性模型。 例如👇
广义(Generalized)线性模型
联系函数
把线性回归产生的结果和真正要的结果两者联系起来的函数
## 关键在于如何用这个回归的模型来解分类问题
对率回归
二分类任务
得到的为理想的“单位阶跃函数” (unit-step function)
# 不够光滑且有间断点 -> 性质不好,需找“替代函数” (surrogate function)
## 常用单调可微、任意阶可导的函数作为替代函数
将上式的单位阶跃函数替代为对数几率函数(logistic function),简称“对率函数"
图像如下👇
# 红色为单位阶跃函数,黑色为对数几率函数
对率回归的优点
1.无需事先假设数据分布
2.可得到“类别”的近似概率预测
3.可直接应用现有数值优化算法求取最优解
** 对率回归是分类学习算法!!不是回归算法!! why?👇
这个回归模型有联系函数的处理,是个广义的线性模型,因此可以做分类
对率回归求解
求解思路:
把非凸函数转化为凸函数从而能够求偏导
常用梯度下降来解原因:
1.多元时,x不是一维标量,而是很多维时,此时需要求逆,而有时这个逆时不存在的,这时就要想各种办法去近似它,很少能通过直接求导让导数为零而得到最优解
# 多元回归中w的方程
2.梯度下降算法中 w = w(上一轮) + Δw,是一个迭代的解法,比较容易变形化,比较适合用计算机来做,能够更好地利用计算机的优势
** 线性模型做“分类”
两种基本思路:
1.先做线性回归,然后找一个联系函数,把分类结果和回归结果联系起来 eg. 对率回归
2.“直接”做分类
线性判别分析(Linear Discriminant Analysis)
eg. 将上图加号跟减号分类 -> 让同类符号尽可能近,异类符号尽可能远 -> 把所有向量的坐标点投影到一条直线上进行距离的比较 【“监督降维”技术】👇
LDA
Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法
LDA的目标
最大化广义瑞利商(generalized Rayleigh quotient) => 使得降维后的数据点尽可能地容易被区分
最大瑞丽商:
#其中起作用的是w的方向
求解思路:
**奇异值分解
奇异值分解(Singular Value Decomposition, SVD)是一种线性代数的重要工具,用于将一个矩阵分解成三个更简单的矩阵的乘积。
它能够有效地降低矩阵维度,同时保持信息的关键特征。在机器学习领域,例如PCA(主成分分析)就是利用SVD来进行降维。
类内散度矩阵(within-class scatter matrix)
——只考虑同类对象内部的分散程度
#上式为第零类协方差矩阵和第一类协方差矩阵之间的关系
类间散度矩阵(between-class scatter matrix)![](https://i-blog.csdnimg.cn/direct/78d22e24a4f54a718fcda3669991c1fd.png)
## 两者都是对称阵 -> 两者间求关系无关顺序
LDA的多类推广
假定有N个类,
# 类似上面的分类:相同的类团的比较紧,不同类离得比较远
##
# tr (trace)迹:特征值的和 除以 主对角线元素的和
多分类学习——拆解法
将一个多分类任务拆分为若干个二分类任务
两类做法:
1.One VS One (OvO):每次考虑一个类作为正类,另一个类作为负类,所有的两两配对
从而得到模型
优劣:训练N(N-1)/2个分类器,存储开销和测试时间大;
训练只用两个类的样例,训练时间短,能够更好地做并行化。
2.One VS Rest (OvR):每次选取一个作为正类,其余的作为负类
优劣:训练N个分类器,存储开销和测试时间小;
训练用到全部训练样例,训练时间长。
# 最终结果选取出现最多次的结果;若出现次数相同 -> 考虑置信度。
# 预测性能取决于具体数据分布,多数情况下两者差不多
类别不平衡(class-inbalance)
不同类别的样本比例相差很大;“小类”往往更重要
基本思路:
# 将原先的用1/2为切分点做划分推广到任意比例做划分
基本策略:“再缩放”(rescaling)
然而,精确估计m-/m+通常很困难 -> 若直接用正负类的数据量带入则必须假设训练集为无偏采样
解决办法👇
常见类别不平衡学习方法
· 过采样(oversampling):
让小类增加到与大类一样多 -> SMOTE
SMOTE --Nitech chawla
SMOTE算法的基本思想就是对少数类别样本进行分析和模拟,并将人工模拟的新样本添加到数据集中,进而使原始数据中的类别不再严重失衡。该算法的模拟过程采用了KNN技术,模拟生成新样本的步骤如下:
①采样最邻近算法,计算出每个少数类样本的K个近邻;
②从K个近邻中随机挑选N个样本进行随机线性插值;
③构造新的少数类样本;
④将新样本与原数据合成,产生新的训练集.
· 欠采样(undersampling):
把大类变小到与小类一样多 -> EasyEnsemble
EasyEnsemble
EasyEnsemble算法是在大类里面取出与小类相同的数据量样本出来跟小类做模型,使得每一个子模型都是均衡的,重复多次,最后通过投票等办法结合,得到最终结果。
该方法能有效防止一些很有价值的大类被错误丢掉,利用到集成学习能够使精度得到提高。
· 阈值移动(threashold-moving):
移动切分点 (基于上面提到的基本思路),改变划分比例