机器学习算法太多啦,什么模型怎么运用,适合什么场景,首先要有一个大概的框架,多运用才能比较清晰。
支持向量机support vector machine
将两类分开,想要得到一个超平面,使两类的margin(离它最近的一点的距离)最大。
SVM算法是介于简单算法和神经网络之间的最好的算法。
只通过几个支持向量就确定了超平面,说明它不在乎细枝末节,所以不容易过拟合,但不能确保一定不会过拟合。可以处理复杂的非线性问题。
核:高斯核函数
缺点:计算量大
朴素贝叶斯
应用场景:源于推理的需要,例如:通过商品的描述(特征X)来推理商品的类别(Y)。
“朴素”:特征与特征之间是独立的,互不干扰。如果特征比较多时,往往独立性的条件不重要(互相抵消),可以用朴素贝叶斯。
训练的时候:得出条件概率表
推理的时候:比较条件概率的大小
特点:训练容易,推理难
knn近邻(有监督,分类算法)
给一个新数据,离它最近的k个邻居中,哪个类别多,就属于哪一类。
缺点:求所有邻居距离,效率低
优点:可填充缺失值,处理非线性问题
调优:选择k,k小,容易过拟合
应用:样本数少,特征数少。适合处理分类规则相对复杂的问题,如推荐系统。
knn和贝叶斯算法有联系,可贝叶斯估算knn误差
Kmeans(无监督,聚类,随机算法)
最常用的无监督。最常用的归一化预处理方法。应用可去除孤立点,可以离散化。
欧氏距离,曼哈顿距离。理论上只能求球形的簇。
设置超参数K时只需要设置最大k,最终一定会得到稳定的k个中心点(可用KM算法解释)
调优方法:bi-kmeans方法依次补刀,层次聚类(逐步聚拢),初始点不同,收敛的结果也可能不一致。
聚类效果:sse误差平方和指标判断。簇内越紧越好,簇间距离越远越好。
决策树(有监督,概率算法)
根据一些 feature分类(离散),每个节点提一个问题,通过判断,将数据分为两类,再继续提问。剪枝,过拟合等等。
条件熵H,选择特征
这些问题是根据已有数据学习出来的,再投入新数据的时候,就可以根据这棵树上的问题,将数据划分到合适的叶子上。
优点:可解释性强,可视化。
缺点:容易过拟合(通过剪枝避免过拟合),难调优,准确率不高
二分类,正负样本数目相差是否悬殊,投票机制
决策树算法可以看成是把多个逻辑回归算法集成起来。
随机森林RF
如何解决决策树的过拟合,提高精度?
Random Forest 本质是多个算法平等的聚集在一起。每个单个的决策树,都是随机生成的训练集(行),随机生成的特征集(列),来进行训练而得到的。
随机性的引入使得随机森林不容易陷入过拟合,具有很好的抗噪能力,有效的缓解了单棵决策树的过拟合问题。 每一棵决策树训练样本是随机的有样本的放回抽样。
在源数据中随机选取数据,组成几个子集,从M个子集中得到M个决策树,将新数据投入到这M个树中,得到M个分类结果,计数看预测成哪一类的数目最多,就作为预测结果。
Adaboost
boosting方法之一(将若干个分类效果不好的分类器综合起来考虑,得到要给效果比较好的分类器,每个弱分类器有一定的准确性,分类器之间又具备差异性)
比如手写识别中,可以在画板上抓取到很多features。training时得到每个feature的weight权重,有些weight小,最后预测结果综合考虑这些features。
Xgboost(kaggle比赛常用)
这个我还没有很了解,先记录一下。核心思想就是不断增加树,不断进行特征分裂来生长一棵树,每次添加一棵树,就是学习一个新函数,拟合上次预测的残差。
xgboost有三个关键点:①4.2.1节中,理清楚xgboost目标函数各项和泰勒展开二项的一一对应关系,②4.2.2节中对计算数的得分w时使用的一个数学技巧,③4.3.1节中所示的树的分裂算法。
xhboost是由很多CART树(classification and regression tree分类回归树) 集成。常用的决策树有两种:分类树(预测结果是所属的类),回归树(预测结果可以被认为是实数)
1.决策树
量化分类效果的方式:如信息增益ID3(信息熵entropy,已信息增益度属性选择,选择分裂后信息增益最大的属性进行分裂)、信息增益率(C4.5)、基尼系数(CART)等等。
2.回归树CART
回归树的本质就是在该特征维度对样本空间进行划分,对回归树,不能信息增益什么来判定,要用预测误差(均方,对数)
3.boosting集成学习
集成:构建按多个弱分类器,然后集成预测,一定的准确性+差异性。按弱分类器有无依赖关系分为boosting(串行,adaboost,GBDT)和bagging(随机森林)两大流派。
4、GBDT(gradient boosting decision tree)所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的梯度/残差。负梯度。比如预测一个人年龄,他30岁,第一个弱分类器用20来拟合,第二棵树用6岁拟合剩下的损失,还有三岁。这个很符合人类做预测的普遍常识(先从经验试探)
5.Adaboost(adaptive)自适应增强,前一个基本分类器分错的样本会得到增强,再下一个分类器,同时每一轮加入一个新的弱分类器,发挥GBDT的速度和效率。
XGBoost的优缺点与GBDT对比
1.GBDT的基分类器只支持CART树,而XGBoost支持线性分类器,此时相当于带有L1和L2正则项的逻辑回归(分类问题)和线性回归(回归问题)。
2.GBDT在优化时只使用了一阶倒数,而XGBoost对目标函数进行二阶泰勒展开,此外,XGBoost支持自定义损失函数,只要损失函数二阶可导
3.XGBoost借鉴随机森林算法,支持列抽样和行抽样,这样即能降低过拟合风险,又能降低计算。
4.XGBoost在目标函数中引入了正则项,正则项包括叶节点的个数及叶节点的输出值的L2范数。通过约束树结构,降低模型方差,防止过拟合。
5.XGBoost对缺失值不敏感,能自动学习其分裂方向
6.XGBoost在每一步中引入缩减因子,降低单颗树对结果的影响,让后续模型有更大的优化空间,进一步防止过拟合。
7.XGBoost在训练之前,对数据预先进行排序并保存为block,后续迭代中重复使用,减少计算,同时在计算分割点时,可以并行计算
8.可并行的近似直方图算法,树结点在进行分裂时,需要计算每个节点的增益,若数据量较大,对所有节点的特征进行排序,遍历的得到最优分割点,这种贪心法异常耗时,这时引进近似直方图算法,用于生成高效的分割点,即用分裂后的某种值减去分裂前的某种值,获得增益,为了限制树的增长,引入阈值,当增益大于阈值时,进行分裂;
PCA主成分分析(无监督)
是线性降维(特征提取方法),计算样本集合(D维度) 的均值矢量和协方差矩阵,特征值降序排列,取前d个特征矢量构成矩阵E。最小平方差(最佳拟合样本点,也就是最小化平方误差,来获得最佳线性函数),数据压缩,数据处理。
无法使用先验知识,不需要人为设定参数。
第一主成分,第二主成分
主成分如何得到?
FLD(fisher线性判定)
线性变换,有监督,不同于PCA最大化数据的方差,LDA最大化不同类之间的分离。
HMM隐马尔可夫链
逻辑回归logitic regression
可看作最简单的神经网络,损失函数是一个对数似然函数(值越大越好,梯度上升)
markov
markov chains 由state状态和transition转移组成。
先给每个单词设定成一个状态,然后计算状态间转换的概率。
当你用大量文本去做统计时,会得到更大的状态转移矩阵,例如the 后,可连接的单词,及相应的概率。
任何一个贝叶斯模型对应于唯一模型的一个马尔可夫
markov是一种统计模型,广泛应用于语音识别,词性自动标注
EM算法
expectation-maximization algorithm最大期望算法,时maximum likelihood estimation MLE最大似然估计的优化算法,常做牛顿迭代法的替代。因为迭代规则容易实现并可灵活考虑隐变量----对包含隐变量(latent variable)或缺失数据(imcomplete)的概率模型进行参数估计。因广泛应用于高斯混合模型额隐马尔可夫模型的参数估计。
由E和M交替组成,收敛性可确保逼近局部最大值。