目录
- 步骤
- 一、最近邻算法(KNN)
- 二、朴素贝叶斯(Base)
-
- 三、决策树(Decision Tree )
- 四、逻辑斯蒂回归( Logistic Regression )
- 五、 SVM 支持向量机
- 常见问题
-
- 集成学习
- bagging和boosting的区别
- XGBOOST和GDBT的区别
- AdaBoost和GBDT的区别
- 主成分分析PCA
- 回归
- 常见问题
步骤
- 数据清洗(Data Cleaning)
- 探索性可视化(Exploratory Visualization)
- 特征工程(Feature Engineering)
统计:低方差的特征比高方差的特征差,所以可以考虑去掉方差阈值少于一定阈值的特征。
暴力搜索
- 基本建模&评估(Basic Modeling& Evaluation)
- 参数调整(Hyperparameters Tuning)
- 集成方法(EnsembleMethods)
泰坦尼克号的建模流程
一、最近邻算法(KNN)
KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
优点:
- 简单,易于理解,无需建模与训练,易于实现
- 适合分类
缺点:
- 效率低,因为每一次分类或者回归,都要把训练数据和测试数据都算一遍。
- 对训练数据依赖度特别大,虽然所有机器学习的算法对数据的依赖度很高,但是KNN尤其严重,因为如果我们的训练数据集中,有一两个数据是错误的,刚刚好又在我们需要分类的数值的旁边,这样就会直接导致预测的数据的不准确,对训练数据的容错性太差
- 维数灾难,KNN对于多维度的数据处理也不是很好
二、朴素贝叶斯(Base)
贝叶斯定理
贝叶斯定理是用来描述两个条件概率之间的公式
条件概率公式:在事件B发生的条件下, 事件A发生的概率, 记作P(A|B).
P(A|B) = P(AB)/P(B)
先验概率(prior probability)是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现的概率
后验概率是指在得到“结果”的信息后重新修正的概率,是“执果寻因”问题中的"果"。先验概率与后验概率有不可分割的联系,后验概率的计算要以先验概率为基础.
事情还没有发生,要求这件事情发生的可能性的大小,是先验概率。事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小,是后验概率。
- 朴素贝叶斯分类模型要做的事就是在先验概率的基础上将数据集归为n个标签中后验概率最大的标签
计算方式
优点有:
- 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
- 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
- 对缺失数据不太敏感,算法也比较简单
缺点有:
- 因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
- 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
- 是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
- 对输入数据的表达形式很敏感。
三、决策树(Decision Tree )
- 决策树,就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个特征的测试,树的分支代表该特征的每一个测试结果,而树的每一个叶子节点代表一个类别。
- 逻辑回归是将所有特征变换为概率后,通过大于某一概率阈值的划分为一类,小于某一概率阈值的为另一类;而决策树是对每一个特征做一个划分
优点:
- 速度快: 计算量相对较小, 且容易转化成分类规则. 只要沿着树根向下一直走到叶, 沿途的分裂条件就能够唯一确定一条分类的谓词.
- 准确性高: 挖掘出来的分类规则准确性高, 便于理解, 决策树可以清晰的显示哪些字段比较重要, 即可以生成可以理解的规则.
- 可以处理连续和种类字段
- 不需要任何领域知识和参数假设
- 适合高维数据
缺点:
- 对于各类别样本数量不一致的数据, 信息增益偏向于那些更多数值的特征
- 容易过拟合
- 忽略属性之间的相关性
四、逻辑斯蒂回归( Logistic Regression )
- 逻辑回归算法就是在样本数据中寻找一个超平面,然后可以把样本数据准确的分隔成不同的类别,并且能够对相应的新数据特征进行分类。
逻辑回归可以将预测范围从实数域压缩到(0,1)范围内,进而提升预测准曲率。
优点:
- 速度快,适合二分类问题
- 简单易于理解,直接看到各个特征的权重
- 能容易地更新模型吸收新的数据
缺点:
- 对数据和场景的适应能力有局限性,不如决策树算法适应性那么强
五、 SVM 支持向量机
把数据映射到多维空间中以点的形式存在,然后找到能够分类的最优超平面,最后根据这个平面来分类。
优点:
- 使用核函数可以向高维空间进行映射
- 使用核函数可以解决非线性的分类
- 分类思想很简单,就是将样本与决策面的间隔最大化
- 分类效果较好
缺点:
- SVM算法对大规模训练样本难以实施
- 用SVM解决多分类问题存在困难
- 对缺失数据敏感,对参数和核函数的选择敏感
参考:机器学习算法优缺点总结
常见问题
过拟合
就是指模型在训练集上的效果很好,在测试集上的预测效果很差.
如何避免过拟合问题?
- 重采样bootstrap
- L1,l2正则化
- 决策树的剪枝操作
- 交叉验证
交叉验证
就是将原始数据集(dataset)划分为两个部分.一部分为训练集用来训练模型,另外一部分作为测试集测试模型效果.
算法的误差
- 因模型无法表示基本数据的复杂度而造成的偏差(bias).—欠拟合
- 因模型过度拟合训练集数据而造成的方差(variance).—过拟合
机器学习面试问题总结1
机器学习面试问题总结2
集成学习
- 集成学习方法是指组合多个模型,以获得更好的效果,使集成的模型具有更强的泛化能力。对于多个模型,如何组合这些模型,主要有以下几种不同的方法:
- 对多个模型的预测结果进行投票或者取平均值;(个体之间不存在强依赖关系,可以同时生成的并行化方法)------Bagging,减小方差
- 对多个模型的预测结果做加权平均。(个体学习器之间存在强依赖关系,必须串行生成的序列化方法)----- Boosting,减小偏差
- 模型融合,多模型的学习加上再学习------Stacking,改进预测
bagging和boosting的区别
Bagging即套袋法,其算法过程如下:
- 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
- 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
- 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
Boosting
AdaBoosting方式每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的残差。当残差足够小或者达到设置的最大迭代次数则停止。Boosting会减小在上一轮训练正确的样本的权重,增大错误样本的权重。(对的残差小,错的残差大)
1)在每一轮如何改变训练数据的权值或概率分布?
通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
2)通过什么方式来组合弱分类器?
通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
下面是将决策树与这些算法框架进行结合所得到的新的算法:
1)Bagging + 决策树 = 随机森林
2)AdaBoost + 决策树 = 提升树
3)Gradient Boosting + 决策树 = GBDT
XGBOOST和GDBT的区别
- XGBoost是集成学习Boosting家族的成员,是在GBDT的基础上对boosting算法进行的改进。GBDT是用模型在数据上的负梯度作为残差的近似值,从而拟合残差。XGBoost也是拟合的在数据上的残差,但是它是用泰勒展式对模型损失残差的近似;同时XGBoost对模型的损失函数进行的改进,并加入了模型复杂度的正则项。
- 传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;
- XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性
传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。Xgboost在代价函数里加入了正则项,用于控制模型的复杂度,降低了过拟合的可能性。
AdaBoost和GBDT的区别
每轮训练结束后,AdaBoost框架会对样本的权重进行调整,该调整的结果是越到后面被错误分类的样本权重会越高。这样到后面,单个弱分类器为了达到较低的带权分类误差都会把样本权重高的样本分类正确。虽然单独来看,单个弱分类器仍会造成分类错误,但这些被错误分类的样本的权重都较低,在AdaBoost框架的最后输出时会被前面正确分类的高权重弱分类器“平衡”掉。这样造成的结果就是,虽然每个弱分类器可能都有分错的样本,然而整个AdaBoost框架却能保证对每个样本进行正确分类,从而实现快速收敛。
- Adaboost与GBDT两者boosting的不同策略是两者的本质区别。
- Adaboost强调Adaptive(自适应),通过不断修改样本权重(增大分错样本权重,降低分对样本权重),不断加入弱分类器进行boosting。
- 而GBDT则是旨在不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。
- 而XGBoost的boosting策略则与GBDT类似,区别在于GBDT旨在通过不断加入新的树最快速度降低残差,而XGBoost则可以人为定义损失函数(可以是最小平方差、logistic loss function、hinge loss function或者人为定义的loss function),只需要知道该loss function对参数的一阶、二阶导数便可以进行boosting,其进一步增大了模型的泛华能力,其贪婪法寻找添加树的结构以及loss function中的损失函数与正则项等一系列策略也使得XGBoost预测更准确。
- GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。
- XGBoost则可以自定义一套损失函数,借助泰勒展开(只需知道损失函数的一阶、二阶导数即可求出损失函数)转换为一元二次函数,得到极值点与对应极值即为所求。
主成分分析PCA
它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。
回归
岭回归是加了二阶正则项的最小二乘,主要适用于过拟合严重或各变量之间存在多重共线性的时候
Lasso回归,使用了拉格朗日
常见问题
如何根据数据量去选择模型
根据数据选择模型:
离散指大量01,连续就是连续值。
大量高维离散特征:
LR:很好的拟合,可以使用正则化避免过拟合,实现更简单
RF:也可以,主要优点是对缺失值不敏感,bagging策略防止过拟合。对低维少量样本不适合。
GDBT: 不适合,容易过拟合,(如训练时通过个别特征就可以拟合,但只有一层)
SVM:处理具备高维特征的数据集,离散连续都可以
少量低维连续特征:
GDBT:适合,内部使用CART回归实现,节点分支则自动实现特征选择和离散等处理。特征多,使用全部特征处理,不能有效存储。
RF: 不适合,难以拟合。特征数量少
LR: 可能存在共线性,导致模型不稳定
SVM: 特征较多的适合比较合适。
样本量:
大:LR、RF、GDBT
小:SVM
各模型之间的对比:
LR逻辑回归:①分类模型 ②判别模型 ③用条件概率最大化求最优解 ④模型复杂度不高,适合大量简单数据 ⑥数据离散和归一化
SVM支持向量机:①分类模型(改造下可用于回归) ②判别模型 ③用分离超平面,几何间隔最大化求最优解 ④适合求解比较复杂数据 ⑤对缺失值敏感,距离度量 小样本表现由于其他模型 ⑥数据归一化
DT决策树:①分类模型、回归模型 ②判别模型 ③选择最优解点划分样本空间,使样本混乱度减少 ④适合较为复杂数据
集成模型:
RF随机森林:①bagging集成方法 ②通过减少模型的方差(波动)进行性能提升 ③对异常值不敏感,但容易对噪声数据过拟合 ④分类树或回归树都可以(分类:信息熵、基尼指数,回归:最小二乘法,即均方误差)适合离散型或连续型特征。对海量数据,尽量避免了过度拟合的问题;对高维数据,不会出现特征选择困难的问题。可以并行。
GDBT梯度提升树:①boosting集成方法 ②通过减少模型的偏差进行性能提升 ③对异常值敏感 ④回归树(CART) ⑤做分类时情况 ⑥数据归一化会加快收敛速度
极大似然估计
贝叶斯的极大似然估计