算法 | 模型 | 监督学习 | 线性 | 多分类 | 求解算法 | 计算复杂度 | 解释性 | 缺失值影响 |
---|---|---|---|---|---|---|---|---|
决策树 | 判别 | 有 | 非 | 支持 | 贪心算法,穷举搜索 | 低 | 容易 | 不敏感 |
随机森林 | 判别 | 有 | 非 | 支持 | 贪心算法,穷举搜索 | 低 | 容易 | 不敏感 |
KNN | 判别 | 有 | 非 | 支持 | kd树算法 | 高 | 一般 | 一般 |
K-means | 判别 | 无 | 非 | 支持 | 误差平方和法 | 低 | 容易 | 一般 |
线性回归 | 判别 | 有 | 是 | 不支持 | 梯度下降法 | 低 | 容易 | 敏感 |
逻辑回归 | 判别 | 有 | 是 | 不支持 | 梯度下降法、牛顿法 | 低 | 容易 | 敏感 |
SVM | 判别 | 有 | 非 | 不直接支持 | SMO算法 | 中 | 容易 | 敏感 |
朴素贝叶斯 | 生成 | 有 | 非 | 支持 | 公式解 | 中 | 容易 | 较不敏感 |
人工神经网络 | 判别 | 有 | 非 | 支持 | 梯度下降法+反向传播法 | 高 | 困难 | 不敏感 |
Adaboosting | 判别 | 有 | 非 | 支持 | 分阶段优化,公式解 | 低 | 容易 | 不敏感 |
决策树
优点:
- 数据的准备工作简单,能够同时处理数据型和常规型属性,其他的技术往往要求数据属性的单一;
缺点:
- 容易出现过拟合;
- 对于那些各类别样本数量不一致的数据,信息增益的结果偏向于那些具有更多数值的特征;
- 信息缺失时处理起来比较困难;
- 忽略数据集中属性之间的相关性;
随机森林
优点:
- 在训练完之后,随机森林能给出哪些特征比较重要;
- 训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的);
- 在训练过程中,能够检测到特征之间的影响;
- 对于不平衡数据集来说,随机森林能提供平衡数据集误差的有效方法;
- 如有很大一部分的特征遗失,用RF算法仍然可以维持准确度;
- 抗过拟合能力比较强;
缺点:
- 在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合);
- 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处);
KNN(K近邻)
优点:
- 训练时间复杂度为O(n);
- 对异常值不敏感;
缺点:
- K值需预先设定,对大小不平衡的数据易偏向大容量数据;
- 数量过大的时候不适用,计算量太大。但是单个样本又不能太少 否则容易发生误分;
K-means(K均值)
优点:
- 适合挖掘大规模数据集;
- 对大数据集有较高的效率并且是可伸缩性的;
- 能根据较少的已知聚类样本的类别对树进行剪枝确定部分样本的分类;
缺点:
- K值需预先设定;
- 对于初始选取的聚类中心点是敏感的,需要对初始划分进行优化;
- 对于异常值比较敏感;
- 需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的;
线性回归
优点:
- 建模速度快,存储资源低
缺点:
- 对复杂数据拟合不好,欠拟合
- 对异常值很敏感
逻辑回归
优点:
- 易于理解和实现,存储资源低;
- 适用于连续性和类别性自变量;
缺点:
- 容易欠拟合,分类精度不高;
SVM
优点:
- 可用于线性/非线性分类,也可以用于回归,泛化错误率低,计算开销不大;
- 可以解决小样本情况下的机器学习问题;
- 可以解决高维问题;
- 可以避免神经网络结构选择和局部极小点问题;
缺点:
- 对核函数以及参数敏感;
- 对非线性问题没有通用解决方案,必须谨慎选择Kernelfunction来处理;
朴素贝叶斯
优点:
- 发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;
- 所需估计的参数很少,对小规模的数据表现很好,适合增量式训练;
- 在属性相关性较小时,性能最为良好;
缺点:
- 对输入数据的表达形式很敏感;
- 需要知道先验概率;
- 分类决策存在错误率;
人工神经网络
优点:
- 分类的准确度高;
- 并行分布处理能力强;
- 分布存储及学习能力强;
- 对噪声神经有较强的鲁棒性和容错能力;
- 能充分逼近复杂的非线性关系;
- 具备联想记忆的功能等;
缺点:
- 需要大量的参数,如网络拓扑结构、权值和阈值的初始值;
- 不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;
- 学习时间过长,甚至可能达不到学习的目的;
Adaboosting
优点:
- 是一种有很高精度的分类器;
- 可以使用各种方法构建子分类器,Adaboost算法提供的是框架;
- 当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单;
- 不用做特征筛选;
- 不用担心过拟合;
缺点:
- 对异常值敏感;