各类机器学习算法的优缺点和适用场景汇总

目录

    • 朴素贝叶斯分类器(NB:naive Bayes classifiers)
    • 半朴素贝叶斯分类器(SNB:semi-naive Bayes classifiers)
    • 贝叶斯网(信念网)
    • 决策树(decision tree)
    • 支持向量机(SVM)
    • 神经网络
    • 词向量(word2vec)
    • k近邻分类(kNN)
    • 线性模型
    • 高斯混合聚类与k均值(k-means)及其变种(k-means++、ISODATA、Kernel K-means)的对比
    • 关于学习算法的性能实验结果

朴素贝叶斯分类器(NB:naive Bayes classifiers)

顾名思义,其适用于分类任务、并且假设每个属性独立地对分类结果发生影响,然而现实中各个因素往往并不独立,那是否就无法解决问题呢?
事实上并非如此,相反,朴素贝叶斯分类器在很多情况下都能获得相当好的性能,一种解释是:无需精准概率值即可导致正确分类结果;另一种解释是:若属性间依赖对所有类别影响相同,或依赖关系的影响能相互抵消,则属性条件独立性假设在降低计算开销的同时,不会对性能产生负面影响。

优点:
1、计算量较小
2、支持懒惰学习、增量学习
3、对缺失数据不太敏感
4、推断即查表,速度极快。
缺点:
1、没有考虑属性间依赖
2、通过类先验概率产生模型

半朴素贝叶斯分类器(SNB:semi-naive Bayes classifiers)

相比NB的不考虑依赖,SNB则是考虑了一个(独依赖估计策略:ODE)或多个(多依赖估计策略:kDE)属性依赖
优点:
1、考虑了一个或多个比较强的属性依赖关系,泛化性能可能得到提升
2、计算开销不大
3、同样支持懒惰学习、增量学习
缺点:
1、通过类先验概率产生模型

贝叶斯网(信念网)

贝叶斯网借助有向无环图刻画属性之间的依赖关系,通过吉布斯采样或者变分推断等方式来近似推断后验概率。
优点:
1、更加完整地考虑了属性间依赖关系,泛化性能将进一步提升
2、近似估算后验概率
3、可用于推测属性缺失的样本
4、良好的可解释性
5、常用于语音识别、机器翻译等
缺点:
1、结构学习NP难,通过评分搜索方法缓解
2、推断算法的收敛速度较慢


决策树(decision tree)

决策树通过信息纯度(信息增益、增益率、基尼指数等)来决定结点的生成,通过剪枝来缩小决策树的尺寸以及缓解过拟合。是一种非参数学习算法。
优点:
1、计算量较小
2、清晰表达属性的重要程度
3、可增量学习对模型进行部分重构
4、不需要任何领域知识和参数假设
5、适合高维数据
6、随机森林是基于决策树的集成学习策略,随机森林鲜有短板
缺点:
1、没有考虑属性间依赖
2、容易过拟合,通过剪枝缓解
3、不可用于推测属性缺失的样本


支持向量机(SVM)

基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开,是一种针对二分类设计的算法,但稍加改造为支持向量回归即可用于回归学习。
优点:
1、可解决小样本的机器学习任务
2、可解决高维问题
3、可通过核方法解决非线性问题
缺点:
1、对缺失数据敏感
2、对于非线性问题,核函数方法选择一直是个未决问题


神经网络

优点:
1、分类的准确度极高
2、可解决复杂的非线性问题
3、对噪声神经有较强的鲁棒性和容错能力
4、并行分布处理能力强,分布存储及学习能力强
5、常用于图像识别
6、数据量越大,表现越好
缺点:
1、黑箱模型,难以解释
2、需要初始化以及训练大量参数,如网络结构、权值、阈值,计算复杂
3、误差逆传播的损失
4、容易陷入局部最小

词向量(word2vec)

将文章的每句话当成一行,将每个词用符号隔开(如使用中文分词工具jieba),根据上下文,可以找出相似词义的词。
比如:我 喜欢 你,我 爱 你,我 讨厌 你。根据上下文,可以找到喜欢的相似词,有讨厌
再一般地如:1 2 3 X 4 5 6,1 2 3 Y 4 5 6。根据上下文1 2 34 5 6,可以找到XY相似。
gensim是一个很好用的Python NLP的包,不光可以用于使用word2vec,还有很多其他的API可以用。它封装了google的C语言版的word2vec。


k近邻分类(kNN)

基于某种距离度量找出训练集中与其最靠近的k个训练样本,或者指定距离e之内的训练样本,分类任务中通过投票法(以及加权投票等)将出现最多的类别标记作为预测结果,回归任务中则使用平均法(以及加权平均等)
优点:
1、思想简单,易于理解,易于实现,无需估计参数,无需训练;
2、适合对稀有事件进行分类;
3、特别适用于多分类问题
缺点:
1、需要计算出待测样本与所有样本的距离,计算量大
2、样本不平衡时影响大
3、适用的特征维度低


线性模型

优点:
1、算法简单,编程方便
2、计算简单,决策速度快
缺点:
1、拟合效果较差


高斯混合聚类与k均值(k-means)及其变种(k-means++、ISODATA、Kernel K-means)的对比

k-means是高斯混合聚类在混合成分方差相等、且每个样本仅指派给一个混合成分时的特例,因此k-means计算简单,但效果不如高斯混合聚类
由于计算太过复杂,高斯混合聚类并不常用,推荐使用k-means++(与k-means随机选定不同,k-means++初始选定的几个样本距离尽量远,这样能更快得出分簇结果)等k-means变种。


关于学习算法的性能实验结果

点击查看原文

14年的时候有人做过一个实验[1],比较在不同数据集上(121个),不同的分类器(179个)的实际效果。
论文题为:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?
没有最好的分类器,只有最合适的分类器。
1、随机森林平均来说最强,但也只在9.9%的数据集上拿到了第一,优点是鲜有短板。
2、SVM的平均水平紧随其后,在10.7%的数据集上拿到第一。
3、神经网络(13.2%)和boosting(~9%)表现不错。
4、数据维度越高,随机森林就比AdaBoost强越多,但是整体不及SVM[2]。
5、数据量越大,神经网络就越强。

你可能感兴趣的:(机器学习)