对码当歌,猿生几何?

多种机器学习算法优缺点总结

 

一、无监督算法:

1、聚类算法:Kmeans

Kmeans中心思想:事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。

优点:
1、算法原理简单、处理速度较快
2、当聚类是密集的,且类与类之间区别明显时,效果较好

缺点:
1、在K-means算法中,K是事先给定的,比较难确定
2、对孤立点比较敏感,噪声敏感(中心点易偏移)
3、结果不稳定,初始值的选定对结果有一些影响,结果不一定全局最优,只能保证局部最优(与k的个数及初选值有关)
4、空间复杂度o(N),时间复杂度o(I*K*N #N-样本点个数;K-中心点个数;I-迭代次数)。

优化改进:
四种硬聚类算法(K-means++,二分K-means,ISODATA和Kernel K-means)

应用场景:
1、用户画像、广告推荐 / Data Segmentation / 搜索引擎的流量推荐 / 恶意流量识别
2、基于位置信息的商业推送 / 新闻聚类 / 筛选排序
3、图像分割,降维,识别 / 离群点检测,信用卡异常消费 / 发掘相同功能的基因片段

算法详细链接:https://blog.csdn.net/sinat_30353259/article/details/80887779

2、关联规则算法:Apriori

Apriori算法:算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法

优点:
1、使用先验性质,大大提高了频繁项集逐层产生的效率
2、简单易理解,数据集要求低

缺点:
1、计算量很大,当商品数据量大时更显著,基本是不可计算的
2、在验证候选频繁K项集的时候,需要对整个数据库进行扫描,非常耗时
3、商品并不是全部平等销售的, 仅使用支持度衡量,容易导致出现假性关联

应用:
1、交叉销售
2、捆绑销售
3、买了还买、看了还看、买了还同时买……
4、基于兴趣的实时新闻推荐

算法链接:https://blog.csdn.net/sinat_30353259/article/details/80950824

二、有监督算法

1、分类算法

决策树(Decision Tree)

决策树是一个基本的分类回归算法
决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树。

经典决策树算法:
ID3:只能对离散型属性的数据集构造决策树,信息增益作为节点特征选择
C4.5:ID3的扩展、可以处理连续型变量、可以处理缺失值、剪枝,信息增益比作为节点特征选择
CART:可以处理离散型或连续型变量、并可以分类/回归,使用gini系数作为节点特征选择

优点:
1、生成的决策树结果很直观
2、基本不需要预处理,不需要提前归一化,处理缺失值
3、既可以处理离散值也可以处理连续值
4、可以很容易处理分类问题
5、相比于神经网络之类的黑盒分类模型,决策树的可解释性很好
6、可以用交叉验证的剪枝来选择模型,从而提高泛化能力
7、对于异常值的容错能力号,健壮性高

缺点:
1、决策树算法容易过拟合
2、决策树会因为样本发生一点点的改动而导致结果变化
3、寻找最优的决策树是一个NP难的问题,容易陷入局部最优
4、有些复杂的关系,决策树很难学习到,例如异或关系
5、没有在线学习

适用情景:
因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。

同时它也是相对容易被攻击的分类器[3]。这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。

应用场景:
1、熵的例子:论坛流失性跟性别还是和活跃度有关
2、基尼的列子:拖欠贷款和是否有房、婚姻状况、收入的关联性
3、贷款风险评估
4、保险推广预测

算法链接:https://blog.csdn.net/sinat_30353259/article/details/80917362

支持向量机(SVM)

SVM:寻找到一个超平面使样本分成两类,并且间隔最大。

SVM分为:
线性可分支持向量机、线性近似可分支持向量机、非线性支持向量机

优点:
1、解决小样本下机器学习问题。
2、解决非线性问题。
3、无局部极小值问题。(相对于神经网络等算法)
4、可以很好的处理高维数据集。
5、泛化能力比较强。

缺点:
1、对于核函数的高维映射解释力不强,尤其是径向基函数。
2、对缺失数据敏感。
3、大规模数据计算复杂度大

应用场景:
机器视觉:
1、行人检测及目标识别
2、病理诊断
数据挖掘:
1、基因序列检测
2、生物蛋白质检测
自然语言处理:  文本分类

算法链接:https://blog.csdn.net/sinat_30353259/article/details/80991273

K近邻(kNN,k-NearestNeighbor)

KNN(K Near Neighbor):k个最近的邻居,即每个样本都可以用它最接近的k个邻居来代表。

流程:
1) 计算已知类别数据集中的点与当前点之间的距离
2) 按距离递增次序排序
3) 选取与当前点距离最小的k个点
4) 统计前k个点所在的类别出现的频率
5) 返回前k个点出现频率最高的类别作为当前点的预测分类

k近邻既可以分类又可以回归
k近邻算法的实现:kd树
kd树:是二叉树,是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构
构造方法:通常依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数为切分点,这样得到的kd树是平衡的,但未必是最优的

优点:
1、思想简单、易于理解,易于实现
2、无需估计参数,无须训练
3、算法复杂度低
4、适合类域交叉样本
5、适用大样本自动分类

缺点:
1、惰性学习
2、类别分类不标准化
3、输出可解释性不强
4、不均衡性
5、进行分类时计算量大(要扫描全部训练样本计算距离)

应用场景:
1、约会网站的匹配
2、手写数字识别

算法链接:https://blog.csdn.net/sinat_30353259/article/details/80901746

朴素贝叶斯

朴素贝叶斯是基于概率论的分类算法

朴素贝叶斯的基本方法:在统计数据的基础上,依据条件概率公式,计算当前特征的样本属于某个分类的概率,选最大的概率分类

优点:
1, 算法逻辑简单,易于实现( 算法思路很简单, 只要使用贝叶斯公式转化即可! )
2, 分类过程中时空开销小( 假设特征相互独立, 只会涉及到二维存储)

缺点:
理论上, 朴素贝叶斯模型与其他分类方法相比具有最小的误差率。 但是实际上并非总是如此, 这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时, 分类效果不好。

应用场景:
病人分类
社区账号分类
性别分类

算法链接:https://blog.csdn.net/sinat_30353259/article/details/80932111

逻辑回归

逻辑回归:解决分类问题

优点:
- 实现简单,广泛的应用于工业问题上;
- 简单易于理解,直接看到各个特征的权重
- 能容易地更新模型吸收新的数据
- 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;

缺点:
- 对数据和场景的适应能力有局限性,不如决策树算法适应性那么强。
- 当特征空间很大时,逻辑回归的性能不是很好;
- 容易欠拟合,一般准确度不太高
- 不能很好地处理大量多类特征或变量;
- 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分,对于非线性特征,需要进行转换;
- 使用前提: 自变量与因变量是线性关系。
- 只是广义线性模型,不是真正的非线性方法  。

应用领域:
1、预测是否发生、发生的概率(流失、客户响应等预测)
2、影响因素、危险因素分析(找出影响结果的主要因素)
3、判别、分类

算法链接:https://blog.csdn.net/sinat_30353259/article/details/81138453

2、回归算法

回归分析是在一系列的已知或能通过获取的自变量与因变量之间的相关关系的基础上,建立变量之间的回归方程,把回归方程作为算法模型,通过其来实现对新自变量得出因变量的关系。因此回归分析是实用的预测模型或分类模型。

线性回归

回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式,该公式就是所谓的回归方程(regression equation)。求回归方程中的回归系数的过程就是回归。

线性回归的几个特点:  
1. 建模速度快,不需要很复杂的计算,在数据量大的情况下依然运行速度很快。  
2. 可以根据系数给出每个变量的理解和解释  
3. 对异常值很敏感

多项式回归

如果一个回归,它的自变量指数超过1,则称为多项式回归

多项式回归的特点:  
1. 能够拟合非线性可分的数据,更加灵活的处理复杂的关系  
2. 因为需要设置变量的指数,所以它是完全控制要素变量的建模  
3. 需要一些数据的先验知识才能选择最佳指数  
4. 如果指数选择不当容易出现过拟合.

3、集成算法

a、bagging(Bootstrapped Aggregation)

Bagging(Bootstrapped Aggregation的简称)对于给定数据处理任务,采用不同的模型、参数、特征训练出多个模型,最后采用投票或者加权平均的方式输出最终结果。

随机森林

Bagging算法实现随机森林(有放回抽样)

优点:
- 所有的数据都能够有效利用,而且不用人为的分出一部分数据来做cross-validation;
- 随机森林可以实现很高的精确度,但是只有很少的参数,而且对于分类和回归都适用;
- 不用担心过拟合的问题;
- 不需要事先做特征选择,每次只用随机的选取几个特征来训练树。

缺点:
- 相比于其他算法,其输出预测可能较慢。

随机森林应用场景:应用于各项AI大赛。
数据维度相对低(几十维),同时对准确性有较高要求时。
因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

算法链接:https://blog.csdn.net/sinat_30353259/article/details/81034749
随机森林:
https://blog.csdn.net/sinat_30353259/article/details/81409980

b、boosting算法

Adaboost算法

AdaBoost,是英文”Adaptive Boosting”(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

AdaBoost优点:
- 容易实施
- 几乎没有参数需要调整
- 不用担心过拟合

缺点:
- 不能保证是最优解
- 对噪声很敏感

使用情景:
好的Boosting算法,它的准确性不逊于随机森林。虽然在[1]的实验中只有一个挤进前十,但是实际使用中它还是很强的。因为自带特征选择(feature selection)所以对新手很友好,是一个“不知道用什么就试一下它吧”的算法。

算法链接:https://blog.csdn.net/sinat_30353259/article/details/81071505

GBDT(梯度提升决策树)

梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越表现,在梯度提升决策树中,其基学习器是分类回归树CART,使用的是CART树中的回归树。

优点:
1、精度高(boosting的共同特点)
2、能处理非线性数据,能做回归和分类
3、能适应多种损失函数(Gradient梯度的特点)

缺点:
1、计算复杂度大,耗时(Boosting的共性缺点)

XGBoost

xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。

优点:
1、除了可以是CART也可以是线性分类器
2、损失函数中加入了正则项,用于控制模型的复杂度
3、借鉴了随机森林的做法,支持特征抽样,不仅防止过拟合,还能减少计算
4、XGBoost工具支持并行化
5、XGBoost的运算速度和算法都会优于GBDT

缺点:
1、XGBoostScikit-learn目前在Scikit-learn中没有实现,但可以通过python调用

使用场景:
凡是结构化数据上的竞赛,基本都是XGBoost胜;非结构化数据,如视频、音乐都是深度学习胜!

算法链接:https://blog.csdn.net/a358463121/article/details/68617389

阅读更多