经典模型
KNN
KNN是一个non-parametric模型,可以用于分类和回归。通过选取k个最近的点,比较这k个点,找到个数最多的类别,则此类别为预测点的y值。
k的选择
k | 效果 |
---|---|
偏小 | 过拟合 |
适中 | fit |
偏大 | 欠拟合 |
regression
选取k个最近的点,然后取平均,最终会拟合成上面的一条曲线
距离的度量
在KNN的算法中,一个很重要的概念是距离最近。
那么在计算距离时,根据什么准则才是适合的度量方法呢。
例如上图,当单纯的计算左右两图像素的差距,它们的距离是非常小的。
但是其实从人的视觉来看,它们是完全两个不同的类别,距离应该很远。
因此在对于不同的问题上,应该适当的选择不同的距离度量方法
在选择距离的算法时,应该满足以下规则:
- d(A, B) = d(B, A)
- d(A, A) = 0
- d(A, B) = 0 if A==B
- d(A, B) <= d(A, C) + d(B, C)
闵氏距离
欧氏距离
曼哈顿距离
汉民距离
d(x, y) = x xor y
余弦相似度
自定义距离
有时候在处理处理特殊问题的时候,并不能用现有的距离函数来描述元素之间的远近。
例如上图,如何度量这三个人之间的相似度?
那么可以自定义一个距离度量的法则,例如是卷发还是直发,抽烟是否,鞋的颜色等等。
贝叶斯法则
假设X之间独立,有
Play-Tennis Problem
有上面的训练数据
![](https://img.haomeiwen.com/i24077087/2190de304215aa78.png)
决策树
通过比较信息增益,贪心的选择信息增益最大的一个类别,作为首选分支
信息商
由公式可见,p越靠近0.5,信息商越大,p越靠近0或者1,则信息商越小
信息商越小,代表越肯定
信息商越大,代表越不确定
信息嫡
信息增益
除了可以用信息嫡来度量外,还可以使用基尼系数/错分错误来度量
基尼系数
错分错误
系数图示
可见这三个系数都是类似的
- 信息商会更加平滑,但是计算复杂,因为要求对数
- 错分错误会计算更加简单
- 而基尼会位于它们之间
划分规则
- 可以每个属性只划分一遍
- 可以允许多次划分同一个属性
用途
- 分类
- 回归,通过求平均值或者分段函数回归
Tree Ensembles
bagging(随机森林)
原始数据有可能有一些噪点,如果直接用分类树来拟合,非常有可能拟合出一条过拟合的曲线,如左图1
bagging是通过对原始数据进行采样n次,然后用n个树来做分类。
最后通过n棵树投票的方式,获得最终的结果
这很有效的解决了噪点的问题。
因为噪点属于少量数据,在多次采样的过程中,只会有少量的树会采集到噪点
boosting(adaboost)
bagging由多棵树通过投票的方式产生最后的结果,而这些树预测的准确度是不一样的,在投票过程中却没有区分好树和坏树。
boosting通过组合多棵树,而且赋予每颗树不同的权重,来最终投票生成最终结果
线性模型
线性回归/逻辑斯特回归
loss function
通过最小二乘,直接算出(w,b)
缺点
对loss求导,要求loss函数一阶可导
但是实际过程中,并不是每个loss函数都可导的
通过加入L2正则项,可以有效的解决这个问题
L2 Loss function
通过加入L2正则项的线性回归,叫岭回归
L1 loss function
通过引入L1正则项的,为lasso回归
然而L1的loss函数是不可导的,这导致无法使用梯度下降来优化函数
需要通过下图的方法
先随机选取一个维度x,然后做垂线
然后在相切的地方对另外一个维度y做垂线
通过不断上面过程,直到逼近局部最优解
本质
Forward strategies
通过选取一个维度xk,通过wk+delta来跨出一步
然后比较delta(y)
然后再选出另外一个维度xm来优化
核方法
求最值
无约束条件
等式约束条件
根据拉格朗日乘子有
对L导数为0的几何意义如下
当g和f相切的时候,L取最值
则有g的导数与f的导数成一常数比例
不等式约束条件
根据拉格朗日乘子有
它的几何意义如下
- f(x)的最小值在h(x)<0的区域,那么f(x)直接求导得最小值
- f(x)的最小值不在h(x)<0的区域,那么最小值在它们相切的位置
SVM
svm通过优化margin到最大值
使得两个类别的点分开的距离更远
因此可以有以下公式
通过拉个朗日乘子法,优化以上函数
最终得到svm模型
统计学习
概率混合模型
EM算法:
- 通过随机固定概率A,Z,O求出Q(z)
- 通过新的Q求出概率A,Z,O
- 重复上述步骤直到收敛
Q(z)是z发生的概率
无监督学习
k-means
k-means通过选取k个中心点,计算点到中心点的距离,取最短的一个中心点,不断迭代
一般来说,计算距离是通过欧氏距离来计算的
欧氏距离在上图会表现得很好
但是在下图取未如人意
可以通过引入dijkstra距离度量,可以有效解决上面问题
dijkstra距离
相邻的点连接,较远的点通过其他连点到达
如上图
降维
SVD
SVD是一个线性降维的方法
任何一个Nxd的矩阵,通过线性变换,都可以分解成以上维度的三个矩阵
而通过对r的对角排序,提取最大的k个特征在第一个矩阵,则可以最大化的代表原来的矩阵
PCA
PCA是一个线性降维的矩阵
每个数据集都有原来的基坐标,例如x,y
每个点可以表示为(x, y)的组合,进而可以投影到基坐标中,并计算方差
然而往往原来的投影计算出来的方差不是最大的
PCA通过对每个维度进行去均值
并且旋转基坐标
试图找到一个基坐标,使得所有点投影到新的基坐标的方差最大
Isomap
Dijkstra距离
通过计算最近点的距离,并通过串联的方式,从一个远的点到近的点的距离
算法
通过Dijkstra距离来度量高维数据之间的距离
把高维特征投影到低维特征
最小化地位特征两点的距离跟高维特征的Dijkstra距离之间的差距
有以下优化公式
Local Linear Embedding (LLE)
高维特征的每个x,通过构造x = w*附近x,w代表它们的线性距离
并把高维特征投影到低维
在低维,保持x之间的w不变
从而保证了降维后,x的邻近距离得以保留
通过优化以下公式
T-SNE
通过修改LLE的w的计算方式
把w表示为以自己为中心的正态分布,以概率的方式计算其他的w
可以得到T-SNE
T-SNE由于引入了高斯核,因此它是非线性降维
网友评论