归纳&总结
机器学习技能树整理
按问题类型划分
分类问题
Logistic Regression
总结:特征的线性组合+非线性映射。推导时从单个样本开始,单个样本经过sigmoid函数后划分为正类的概率为:
,由于sigmoid函数值域为[0,1],负类概率为
将上述两个式子整理成一个式子:
结合样本间独立同分布(i.i.d)假设,所有样本的联合概率分布为:
等式两边取对数,得到对数分布:
接下来的求解使用极大似然估计的思想即可。
Factorization Machine
总结:FM在线性模型的基础上引入了特征间的二次组合项。
FM的提出是为了解决特征高度系数的问题,太多的零项交叉导致二阶w矩阵无法求解,因此引入隐向量的概念,每一维特征都对应一个k维向量v。
FM的求解过程巧妙的消解了交叉项,这也是FM的精髓所在。
AdaBoost(也可以做回归,但一般不用)
总结:AdaBoost最绝妙的地方在于借用:
①指数损失函数的性质,将加法模型中迭代项分裂开;
②逻辑回归中预测值和实际值结乘积,该式只和分类是否正确有关而和具体分类结果无关。
具体推导过程可以参考https://www.cnblogs.com/gasongjian/p/7648633.html
Naive Bayes
朴素贝叶斯的关键点在于如何将求解步骤三中各项后验概率的值,也就是给定x的情况下该样本属于某类的概率。
根据贝叶斯公式
那么对于某个样本i来说
将分母展开
因此只需要求
Decision Tree/Random Forest
总结:决策树分为ID3和C4.5,两者最大的不同在于如何选择分裂属性,因此首先要知道熵的几种计算方式:
熵:表示随机变量X概率分布的不确定性,
条件熵:已知随机变量X时,随机变量Y的不确定性,
信息增益(ID3):特征A对数据集D的信息增益表示使用A对数据集D分类能够减少的不确定性程度。
信息增益比(C4.5):信息增益与数据集D关于A的取值概率分布的熵
注意区别条件熵和
基尼不纯度(CART):表示一个随机选中的样本在子集中被分错的可能性,
决策树算法框架:
回归问题
Linear Regression
总结:线性回归是一切回归问题的基础,不管数据是否是明确的线性可分,都可以尝试,非线性数据的用核函数映射到高维后,再做线性回归即可。
线性回归用最小二乘法(最小平方损失)求解,具体参考https://www.cnblogs.com/futurehau/p/6105011.html
Ridge/Lasso Regression
https://zhuanlan.zhihu.com/p/32134351
带约束最优化问题:
转化为无约束最优化问题:
式子q表示范数,q=1是L1范数,q=2则是L2范数。通常带约束的形式是最原始的优化模型,但是不好求解,因此转化为无约束形式。两种形式等价的条件是带约束最优化是凸优化。
用一个直观的例子解释L1的作用:
下面两个图可以很直观的感受到,L1正则项在做的事情就是让原本较小的为0(可以理解成舍弃不太重要的特征维度,因此L1也有降维和特征选择的作用),让原本很大的为(即强度不超过)
不同维度权重差距较小,无法得到稀疏解 不同维度权重差距很Regression Tree
分类&回归
SVM
CART
当CART树用作回归时也叫做最小二乘回归树。自然地,选择误差平方和作为损失函数。某个特征上的最有切分点能够使划分后左右子树分别对应的损失函数和最小,表示成公式就是:
当CART树用作分类时又叫做基尼指数最小化分类树。确定特征A上划分点的公式为:
不管分类树还是回归树最优切分点和最优特征的搜索过程都是一样的,唯一的区别就是确定最优切分点的方式。
GBDT/XGBoost(CART Based)
GBDT和XGBoost的弱分类器都是CART,自然也能同时解决分类和回归问题,并且也不要求输入都是离散或连续变量,对特征工程要求较低。
聚类问题
KNN
K-means
层次聚类
其他无监督方法
Manifold Learning(Dimension Deduction): PCA /LDA/ AutoEncoder
Matrix Decomposition: SVD/SVD++/NMF/LFM
总结:
SVD矩阵奇异值分解是推荐系统工程中常用的一种算法,理解的关键点
① 为什么(m,n)维矩阵M能够分解成的形式?
以二维空间中的任意矩阵M为例,总能找到一组标准正交基,使得是正交的,设,那么存在另一组正交基,使得:
设矩阵,为组成的对角阵
那么有
两边同时右乘,得到
② 怎样通过m阶和n阶的方阵间接获得U和V?
设
将上面的到的M带入式子中,可以通过方阵的特征值分解得到和
③ 使用SVD有什么好处,能够解决什么问题?
分解后的是一个非常稀疏的对角矩阵,便于存储,并且对角线上的值会向后大幅度衰减,也能够起到降维的作用。
但推荐系统中的SVD和SVD++和传统的SVD理论方法有一定出入,具体参考
https://www.jianshu.com/p/d54d0f9f7574
统计方法
Maximum Likelyhood Estimation
Maximum Posteriori Estimation
Gaussian Mixture Model&Expectation Maximization
Hypothesis Testing
概率图模型
Hidden Markov Model
Conditional Random Field
最优化理论
Stochastic Gradient Descent: Truncated Gradient/FOBOS/RDA/FTRL(Online Learning)
Stochastic Gradient Descent: Momentum SGD/Nesterov Accelerated Gradient/ADAM/AdaDelta/RMS-drop(Deep Learning)
Newton Method/Quasi-Newton Methods
问题推导方法论:
1. 根据分类或回归问题首先确定损失函数,例如LR用交叉熵损失,SVM使用最大间隔损失,多分类问题使用SoftMax;一般的回归问题则使用最大平方误差损失。
2. 假定样本符合某一分布,选择模型,确定最终需要求解的参数。在计算出所有样本上的损失和后,对损失相对每一个参数求导,得到参数的梯度,也就是参数在每一轮迭代中下降的方向。
3. 最后根据不同的模型选择优化方法,例如LR使用SGD即可,神经网络则选择AdaDelta等。
Boosting算法(加法模型):
Boosting和Bagging最大的区别在于后者中的弱分类器是并行生成的,而Boosting中每一轮迭代的弱分类器都依赖于上一轮生成的强分类器。
推导XGBoost和GBDT都可以从前向分布算法开始:
在确定了样本及损失函数后,加法模型的参数求解变成了样本损失极小化问题:
第m轮的强分类器由m-1轮的强分类器和根据m-1轮样本损失学习到的第m个弱分类器得到:
那么第m步弱分类器的问题也转化为了损失极小化问题:
可见,前向分布算法是一种贪心算法,把求解所有参数的问题转化成逐步求解每一对参数。上式结合二阶泰勒展开公式可以得到一阶和二阶泰勒系数,分别作为GBDT和XGBoost需要拟合的梯度。这也是两者最重要的区别。