目录
1.逻辑回归
二项logistic回归模型是一种分类模型,由条件机率分布P(Y|X)表示,形式为参数化的logistic分布。这里随机变量X取值为实数,随机变量Y取值为1或0。可以通过有监督的方式来恐怕模型参数。
优点:
1. 计算代价不高,易于理解和实现;
2. 适用于须要得到有分类机率额场景;
3.对小数据噪音的鲁棒性好,不会收轻微的多重共线性的影响
缺点:
1. 容易欠拟合,分类精度可能不高;
2.数据有缺位和特点很大的时侯表现不好 。
2.支持向量机
对于两类线性可分学习任务,SVM找到一个间隔最大的超平面将两类样本分开,最大间隔才能保证该超平面具有最好的泛化能力。
优点:
1. 可以解决小样本情况下的ML问题;
2. 可以提升泛化性能;
3. 可以解决高维问题,避免维数灾难;
4. 可以解决非线性问题;
5. 可以避免神经网路结构选择和局部极小点问题。
参数C和g的选择对分类性能的影响:
C是惩罚系数,C越大,交叉validation高,容易过学习;
g是核函数的抵达0的速度,g越小,函数增长快,交叉validation高,也容易引起过学习。
缺点:
1. 对缺位数据敏感;
2. 对非线性问题没有通用解决方案,必须慎重选择kernel function来处理。
SVM算法的主要优点有:
1)解决高维特点的分类问题和回归问题很有效,在特点维度小于样本数时仍然有挺好的疗效。
2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
3) 有大量的核函数可以使用,从而可以很灵活的来解决各类非线性的分类回归问题。
4)样本量不是海量数据的时侯,分类准确率高,泛化能力强。
SVM算法的主要缺点有:
1) 如果特点维度远远小于样本数,则SVM表现通常。
2) SVM在样本量特别大,核函数映射维度特别高时,计算量过大,不太适宜使用。(不适用于大数据集)
3)非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
4)SVM对缺位数据敏感。
1)一般推荐在做训练之前对数据进行归一化,当然测试集中的数据也须要归一化。。
2)在特点数十分多的情况下,或者样本数远大于特点数的时侯,使用线性核,效果早已挺好,并且只须要选择惩罚系数C即可。
3)在选择核函数时,如果线性拟合不好,一般推荐使用默认的高斯核'rbf'。这时我们主要须要对惩罚系数C和核函数参数γ进行坚苦的调参,通过多轮的交叉验证选择合适的惩罚系数C和核函数参数γ。
4)理论上高斯核不会比线性核差,但是这个理论却构建在要耗费更多的时间来调参上。所以实际上能用线性核解决问题我们尽量使用线性核。
3.决策树
一种启发式算法,核心是在决策树各个节点上应用信息增益等准则来选定特点,进而递归地构造决策树。
优点:
1. 计算复杂度不高,易于理解和解释,可以理解决策树所抒发的意义;
2. 数据预处理阶段比较简单,且可以处理缺位数据;
3. 能够同时处理数据型和分类型属性,且可对有许多属性的数据集构造决策树;
4. 是一个白盒模型,给定一个观察模型,则依照所形成的决策树很容易推论出相应的逻辑表达式;
5. 在相对短的时间内就能对大数据集合作出可行且疗效良好的分类结果。
6. 可以对有许多属性的数据集构造决策树。
缺点:
1. 对于这些各类别样本数量不一致的数据,信息增益的结果偏向于这些具有更多数值的属性;
2. 对噪音数据较为敏感;
3. 容易出现过拟合问题;
4. 忽略了数据集中属性之间的相关性;
5.处理缺位数据时的困难
参考blog
决策树优点:
1)简单直观,生成的决策树很直观。
2)基本不需要预处理,不需要提早归一化,处理缺位值。
3)使用决策树预测的代价是
。 m为样本数。
4)既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或则连续值。
5)可以处理多维度输出的分类问题。
6)相比于神经网路之类的黑盒分类模型,决策树在逻辑上可以得到挺好的解释
7)可以交叉验证的分株来选择模型,从而提升泛化能力。
8) 对于异常点的容错能力好,健壮性高。
决策树算法的缺点:
1)决策树算法十分容易过拟合人工神经网络和支持向量机优点,导致泛化能力不强。可以通过设置节点最少样本数目和限制决策树深度来改进。
2)决策树会由于样本发生一点点的改动,就会造成树结构的剧烈改变。这个可以通过集成学习之类的方式解决。
3)寻找最优的决策树是一个NP难的问题,我们通常是通过启发式方式,容易深陷局部最优。可以通过集成学习之类的方式来改善。
4)有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这些关系可以换神经网路分类方式来解决。
5)如果个别特点的样本比列过大,生成决策树容易偏向于这种特点。这个可以通过调节样本权重来改善。
4.KNN算法
一种惰性分类方式,从训练集中找出k个最接近测试对象的训练对象,再从这k个训练对象中找出稳居主导的类别,将其赋给测试对象。
优点:
1. 简单有效,容易理解和实现;
2. 重新训练的代价较低(类别体系的变化和训练集的变化);
3. 计算时间和空间线性于训练集的规模;
4. 错误率渐进收敛于贝叶斯错误率,可作为贝叶斯的近似;
5. 适合处理单模分类和多标签分类问题;
6. 对于类域的交叉或重叠较多的待分类样本集较为适宜;
缺点:
1. 是懒散学习方法,比一些积极学习的算法要慢;
2. 计算量比较大,需对样本点进行剪辑;
3. 对于样本不平衡的数据集疗效不佳,可采用加权投票法改进;
4. k值的选择对分类疗效有很大影响,较小的话对噪音敏感,需恐怕最佳k值。
5.可解释性不强,计算量大。
KNN的主要优点有:
1) 理论成熟,思想简单,既可以拿来做分类也可以拿来做回归
2) 可用于非线性分类
3) 训练时间复杂度比支持向量机之类的算法低,仅为O(n)
4) 和朴素贝叶斯之类的算法比,对数据没有假定,准确度高,对异常点不敏感
5) 由于KNN方式主要靠周围有限的毗邻的样本,而不是靠分辨类域的方式来确定所属类别的,因此对于类域的 交叉或重叠较多的待分样本集来说,KNN方式较其他方式更为适宜
6)该算法比较适用于样本容量比较大的类域的自动分类,而这些样本容量较小的类域采用这些算法比较容易形成误分
KNN的主要缺点有:
1)计算量大,尤其是特点数特别多的时侯
2)样本不平衡的时侯,对稀有类别的预测准确率低
3)KD树,球树之类的模型构建须要大量的显存
4)使用懒散学习方法,基本上不学习,导致预测时速率比起逻辑回归之类的算法慢
5)相比决策树模型,KNN模型可解释性不强
5.朴素贝叶斯算法
贝叶斯分类器的分类原理是借助各个类别的先验概率,再借助贝叶斯公式及独立性假定估算出属性的类别机率以及对象的后验机率,即该对象属于某一类的机率,选择具有最大后验机率的类作为该对象所属的类别。
优点:
1. 数学基础坚实,分类效率稳定,容易解释;
2. 所需恐怕的参数极少,对缺位数据不太敏感;
3. 无需复杂的迭代求解框架,适用于规模巨大的数据集。
缺点:
1. 属性之间的独立性假定常常不创立(可考虑用聚类算法先将相关性较大的属性进行降维);
2. 需要晓得先验机率,分类决策存在错误率。
朴素贝叶斯的主要优点有:
1)朴素贝叶斯模型发祥于古典物理理论,有稳定的分类效率。
2)对小规模的数据表现挺好,能个处理多分类任务,适合增量式训练,尤其是数据量超出显存时,我们可以一批批的去增量训练。
3)对缺位数据不太敏感,算法也比较简单,常用于文本分类。
朴素贝叶斯的主要缺点有:
1) 理论上,朴素贝叶斯模型与其他分类方式相比具有最小的偏差率。但是实际上并非总是这么,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间互相独立,这个假定在实际应用中常常是不创立的,在属性个数比较多或则属性之间相关性较大时,分类疗效不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部份关联性适度改进。
2)需要晓得先验机率,且先验机率好多时侯取决于假定,假设的模型可以有很多种,因此在个别时侯会因为假定的先验模型的诱因引起预测疗效不佳。
3)由于我们是通过先验和数据来决定后验的机率因而决定分类,所以分类决策存在一定的错误率。
4)对输入数据的抒发方式很敏感。
6.随机森林
RF的主要优点有:
1) 训练可以高度并行化,对于大数据时代的大样本训练速率有优势。最主要的优点。
2) 由于可以随机选择决策树节点界定特点,这样在样本特征维度很高的时侯人工神经网络和支持向量机优点,仍然能高效的训练模型。
3) 在训练后,可以给出各个特点对于输出的重要性
4) 由于采用了随机采样,训练出的模型的残差小,泛化能力强。
5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
6) 对部份特点缺位不敏感。
RF的主要缺点有:
1)在个别噪声比较大的样本集上,RF模型容易身陷过拟合。
2) 取值界定比较多的特点容易对RF的决策形成更大的影响,从而影响拟合的模型的疗效。
7.AdaBoost算法
提升方式是从弱学习算法出发,反复学习,得到一系列的弱分类器(即基本分类器),然后组合这种弱分类器,构成一个强分类器,大多数的提高方式都是改变训练数据集的机率分布(训练数据的残差分布),针对不同的训练数据分布调用弱学习算法学习一系列的弱分类器。
优点:
1. 分类精度高;
2. 可以使用各类方式建立子分类器,Adaboost算法提供的是框架;
3. 简单,且不用做特点筛选;
4. 不会导致overfitting。
缺点:
1. 对分类错误的样本多次被分错而多次加权后,导致权重过大,影响分类器的选择,造成退化问题;(需改进残差更新方法)
2. 数据不平衡问题造成分类精度的大幅上涨;
3. 算法训练历时,拓展困难;
4. 存在过拟合,鲁棒性不强等问题。
Adaboost的主要优点有:
1)Adaboost作为分类器时,分类精度很高
2)在Adaboost的框架下,可以使用各类回归分类模型来建立弱学习器,非常灵活。
3)作为简单的二元分类器时,构造简单,结果可理解。
4)不容易发生过拟合
Adaboost的主要缺点有:
1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
8.GBDT算法
GBDT主要的优点有:
1) 可以灵活处理各类类型的数据,包括连续值和离散值。
2) 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
3)使用一些强壮的损失函数,对异常值的鲁棒性特别强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自取样的SGBT来达到部份并行。
9.XGBoost
1.XGBoost与GBDT相比,其优势:
2.与lightGBM相比的不足点:
参考:
10.人工神经网络
优点:
1. 分类的准确度高,并行分布处理能力强,分布储存及学习能力强;
2. 对噪音神经有较强的鲁棒性和容错能力,能充分迫近复杂的非线性关系,具备联想记忆的功能等。
缺点:
1. 神经网路须要大量的参数,如网路拓扑结构、权值和阀值的初始值;
2. 不能观察之间的学习过程,输出结果无法解释,会影响到结果的可信度和可接受程度;
3. 学习时间过长,甚至可能达不到学习的目的。
遗传算法
优点:
1. 与问题领域无关且快速随机的搜索能力;
2. 搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较,鲁棒性好;
3. 搜索使用评价函数启发,过程简单;
4. 使用机率机制进行迭代,具有随机性;
5. 具有可扩展性,容易与其他算法结合。
缺点:
1. 遗传算法的编程实现比较复杂,找到最优解以后还须要对问题进行解码;
2. 三个算子的实现也有许多参数,如交叉率和变异率,并且这种参数的选择严重影响解的品质,而目前这种参数的选择大部分是借助经验。
3.算法的搜索速率比较慢,要得要较精确的解须要较多的训练时间;
4. 算法对初始种群的选择有一定的依赖性,能够结合一些启发算法进行改进。