监督学习中各算法优缺点及应用场景概览

记录一波监督学习算法的应用场景和优缺点。

高斯朴素贝叶斯

场景:该模型常用于性别分类(https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Sex_classification),即通过一些测量的特征,包括身高、体重、脚的尺寸,判定一个人是男性还是女性。

优点:这个模型的优势是处理连续数据,特别当数据是高斯分布时,有一个很好的表现。处理连续数据数值问题的另一种常用技术是通过离散化连续数值的方法。通常,当训练样本数量较少或者是精确的分布已知时,通过概率分布的方法是一种更好的选择。在大量样本的情形下离散化的方法表现最优,因为大量的样本可以学习到数据的分布。

缺点:由于高斯朴素贝叶斯使用的是概率分布估计的方法,不合适在大数据集上应用,因为容易出现欠拟合,在数据分布不准确时或数据样本很大时,表现很差。

决策树

场景:百度到一个相亲用决策树的应用,每个节点是一个评判标准,最后决定是否要嫁/娶。

优点:决策过程接近人的思维习惯,模型容易理解。

缺点:决策树学习方法的准确率不如其他模型,不支持在线学习,有新样本来的时候需要重建决策树,容易产生过拟合现象。(http://m.blog.csdn.net/article/details?id=47616255)

KNN

场景:KNN的应用有分类未知案例的项目(摘自百度百科)。

优点:无需估计参数,简单,易于理解。特别适合于多分类问题(multi-modal,对象具有多个类别标签), KNN比SVM的表现要好(svm更适合二分类)。

缺点:当有偏斜类的情况下,由于算法只计算最近的k个样本,假设小样本总数小于k/2,即使都很近,也会分错。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。

集成学习之AdaBoost

场景:人脸检测,AdaBoost以弱学习器作为基分类器,并且输入数据,使其通过权重向量进行加权,第一次迭代时所有数据等权重,在后续迭代中,前次迭代分错的数据权重会增大。

优点:它有错误调节能力,分类精度高;在Adaboost的框架下可以使用各种回归分类模型来构建弱学习器,非常灵活;作为简单的二元分类器时,构造简单,结果可理解;不容易发生过拟合。

缺点:对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

SVM

场景:进行文本的分类

优点:在解决小样本、非线性以及高维模式识别中表现出许多特有的优势,对于非线性的分类问题,可以通过核函数把原来低维的空间中线性不可分的问题映射到高维,变成线性可分的问题进而得以解决。同样,也可以采用SMO的方式,将分解的思维推向极致,用SVM来处理多分类的问题。

缺点:在处理数据上面的时间较慢,复杂度较高,在处理多分类的问题上面存在着不足,还需要在二分类的基础上自己构造多分类相关的算法,代价比较大。

随机梯度下降分类器(SGDC)

场景:图片分类。

优点:普通的梯度下降算法在更新回归系数时要遍历整个数据集,是一种批处理方法,这样训练数据特别忙庞大时,可能出现收敛过程可能非常慢、不能保证找到全局最小值这样的问题。而随机梯度下降分类器能够更好地处理上述问题,更能避免进入局部极小值中。SGDC处理大规模问题表现比较好。

缺点:不太适合用于高精度问题,当处理高精度问题时它的表现很差。

Logistic回归

场景:主要用于危险因素探索(摘自百度百科)

优点:分类时计算量非常小,速度很快,易于理解和实现。他是一个单调上升的函数,具有良好的连续性,不存在不连续点。

缺点:当特征空间很大时,逻辑回归的性能不是很好;容易欠拟合,一般准确度不太高;不能很好地处理大量多类特征或变量;对于非线性特征,需要进行转换;只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

1716
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

1938
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

19110
来自专栏alexqdjay

HashMap 多线程下死循环分析及JDK8修复

1K4
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1192
来自专栏项勇

笔记68 | 切换fragmengt的replace和add方法笔记

1444
来自专栏xingoo, 一个梦想做发明家的程序员

AOE关键路径

这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间。 从而算出活动最早开始的时间和最晚开始的时间,如果这两个...

2507
来自专栏赵俊的Java专栏

从源码上分析 ArrayList

1171
来自专栏拭心的安卓进阶之路

Java 集合深入理解(12):古老的 Vector

今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相...

2437
来自专栏desperate633

LeetCode Invert Binary Tree题目分析

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9 to4 / \ 7 2 / \ / \9 6 3 1 Tri...

841

扫码关注云+社区