存在即合理,欢迎补充,拍砖
KNN
- 优点
- 简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归;
- 可用于数值型和离散型数据;
- 训练时间复杂度为O(n),无数据输入假定;
- 对异常值不敏感。
- 缺点
- 计算复杂性高;空间复杂性高;
- 样本不平衡问题;
朴素贝叶斯
- 优点
- 生成式模型,通过计算概率来进行分类,可以用来处理多分类问题;
- 对小规模的数据表现很好,适合多分类任务,适合增量式训练,算法也比较简单。
- 缺点
- 对输入数据的表达形式很敏感;
- 由于朴素贝叶斯的“朴素”特点,所以会带来一些准确率上的损失;
- 需要计算先验概率,分类决策存在错误率.
决策树
- 优点
- 概念简单,计算复杂度不高,可解释性强,输出结果易于理解;
- 数据的准备工作简单,能够同时处理数据型和常规型属性,其他的技术往往要求数据属性的单一;
- 对中间值得确实不敏感,比较适合处理有缺失属性值的样本,能够处理不相关的特征;
- 应用范围广,可以对很多属性的数据集构造决策树,可扩展性强。决策树可以用于不熟悉的数据集合,并从中提取出一些列规则,这一点强于 KNN。
- 缺点
- 容易出现过拟合;
- 对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征;
- 信息缺失时处理起来比较困难,忽略数据集中属性之间的相关性。
SVM
- 优点
- 泛化能力比较强,泛化错误率低;
- 解决小样本情况下的机器学习问题;
- 可用于线性和非线性分类,也可以用于回归;
- 可以解决高维问题,可以避免神经网络结构选择和局部极小点问题。
- 缺点
- 对参数调节和和函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题;
- 对于核函数的高维映射解释力不强,尤其是径向基函数;
- 对缺失数据敏感;
- 在数据量大的时候,计算开销太大。
逻辑回归
- 优点
- 实现简单,易于理解和实现;
- 计算代价不高,速度很快,存储资源低;
- 实现简单,广泛的应用于工业问题上;
- 便利的观测样本概率分数。
- 缺点
- 容易欠拟合,分类精度可能不高;
- 不能拟合非线性数据;
- 对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性。
AdaBoost
- 优点
- 很好的利用了弱分类器进行级联;
- 可以将不同的分类算法作为弱分类器;
- AdaBoost 具有很高的精度
- 相对于 bagging 算法和 Random Forest 算法,AdaBoost 充分考虑的每个分类器的权重。
- 缺点
- AdaBoost 迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定;
- 数据不平衡导致分类精度下降;
- 训练比较耗时,每次重新选择当前分类器最好切分点。
GBDT
- 优点
- 可以灵活处理各种类型的数据,包括连续值和离散值;
- 在相对少的调参时间情况下,预测的准备率也可以比较高(这个是相对 SVM 来说的);
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber 损失函数和 Quantile 损失函数。
- 缺点
- 由于弱学习器之间存在依赖关系,难以并行训练数据;
- 不适合处理高维稀疏特征(相对于神经网络)。
随机森林
- 优点
- 它能够处理很高维度(feature 很多)的数据,并且不用做特征选择;
- 能够计算特征重要性;
- 模型泛化能力强;
- 训练速度快,容易做成并行化方法。
- 缺点
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟;
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
神经网络
- 优点
- 分类准确度高,学习能力极强;
- 对噪声数据鲁棒性和容错性较强;
- 有联想能力,能逼近任意非线性关系。
- 缺点
- 神经网络参数较多,权值和阈值;
- 黑盒过程,不能观察中间结果;
- 学习过程比较长,有可能陷入局部极小值。