机器学习常见算法总结
监督学习 Supervised Learning
线性回归算法
优点:
- 建模速度快,存储资源低;
- 思想简单,实现容易。建模迅速,对于小数据量、简单的关系很有效;
-
是许多强大的非线性模型的基础;
-
线性回归模型十分容易理解,结果具有很好的可解释性,有利于决策分析;
-
蕴含机器学习中的很多重要思想。
-
能解决回归问题。
缺点:
- 对复杂数据拟合不好,欠拟合;
- 对异常值很敏感;
-
对于非线性数据或者数据特征间具有相关性多项式回归难以建模.;
-
难以很好地表达高度复杂的数据。
弹性网络回归的几个关键点
- 它鼓励在高度相关变量的情况下的群体效应,而不是像Lasso那样将其中一些置零。当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso 倾向于随机选择其中一个,而弹性网络更倾向于选择两个;
- 对所选变量的数量没有限制。
多项式回归的要点
- 能够模拟非线性可分的数据;线性回归不能做到这一点。它总体上更灵活,可以模拟一些相当复杂的关系;
- 完全控制要素变量的建模(要设置变量的指数);
- 需要仔细的设计。需要一些数据的先验知识才能选择最佳指数;
- 如果指数选择不当,容易过拟合。
岭回归的要点
- 这种回归的假设与最小平方回归相同,不同点在于最小平方回归的时候,我们假设数据的误差服从高斯分布使用的是极大似然估计(MLE),在岭回归的时候,由于添加了偏差因子,即w的先验信息,使用的是极大后验估计(MAP)来得到最终参数的;
- 它缩小了系数的值,但没有达到零,这表明没有特征选择功能。
Lasso回归的要点
岭回归和Lasso回归之间存在一些差异,基本上可以归结为L2和L1正则化的性质差异:
- 内置的特征选择(Built-in feature selection):这是L1范数的一个非常有用的属性,而L2范数不具有这种特性。这实际上因为是L1范数倾向于产生稀疏系数。例如,假设模型有100个系数,但其中只有10个系数是非零系数,这实际上是说“其他90个变量对预测目标值没有用处”。 而L2范数产生非稀疏系数,所以没有这个属性。因此,可以说Lasso回归做了一种“参数选择”形式,未被选中的特征变量对整体的权重为0。
- 稀疏性:指矩阵(或向量)中只有极少数条目非零。 L1范数具有产生具有零值或具有很少大系数的非常小值的许多系数的属性。
- 计算效率:L1范数没有解析解,但L2范数有。这使得L2范数的解可以通过计算得到。然而,L1范数的解具有稀疏性,这使得它可以与稀疏算法一起使用,这使得在计算上更有效率。
KNN算法的要点
优点:
- KNN可以处理分类问题,同时天然可以处理多分类问题,比如鸢尾花的分类;
- 简单,易懂,同时也很强大,对于手写数字的识别,鸢尾花这一类问题来说,准确率很高
- KNN还可以处理回归问题,也就是预测
缺点:
- 效率低,因为每一次分类或者回归,都要把训练数据和测试数据都算一遍,如果数据量很大的话,需要的算力会很惊人,但是在机器学习中,大数据处理又是很常见的一件事;
- 对训练数据依赖度特别大,虽然所有机器学习的算法对数据的依赖度很高,但是KNN尤其严重,因为如果我们的训练数据集中,有一两个数据是错误的,刚刚好又在我们需要分类的数值的旁边,这样就会直接导致预测的数据的不准确,对训练数据的容错性太差;
- 维数灾难,KNN对于多维度的数据处理也不是很好。
-
算法优点:
(1)简单,易于理解,易于实现,无需估计参数。
(2)训练时间为零。它没有显示的训练,不像其它有监督的算法会用训练集train一个模型(也就是拟合一个函数),然后验证集或测试集用该模型分类。KNN只是把样本保存起来,收到测试数据时再处理,所以KNN训练时间为零。
(3)KNN可以处理分类问题,同时天然可以处理多分类问题,适合对稀有事件进行分类。
(4)特别适合于多分类问题(multi-modal,对象具有多个类别标签), KNN比SVM的表现要好。
(5)KNN还可以处理回归问题,也就是预测。
(6)和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感。
算法缺点:
(1)计算量太大,尤其是特征数非常多的时候。每一个待分类文本都要计算它到全体已知样本的距离,才能得到它的第K个最近邻点。
(2)可理解性差,无法给出像决策树那样的规则。
(3)是慵懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢。
(4)样本不平衡的时候,对稀有类别的预测准确率低。当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
(5)对训练数据依赖度特别大,对训练数据的容错性太差。如果训练数据集中,有一两个数据是错误的,刚刚好又在需要分类的数值的旁边,这样就会直接导致预测的数据的不准确。
逻辑回归
优点:
- 易于理解和实现,存储资源低;
- 适用于连续性和类别性自变量;
缺点:
- 容易欠拟合,分类精度不高;
- 当特征空间很大时,逻辑回归的性能不是很好;
- 对于非线性特征,需要进行转换;
- 不能很好地处理大量多类特征或变量;
- 只能处理两分类问题,且必须线性可分;
朴素贝叶斯 NBA
优点:
- 朴素贝叶斯模型发源于古典数学理理论,有稳定的分类效率;
- 对小规模的数据表现良好,能够处理多分类任务,适合增量式训练,尤其是数据量超过内存时,可以逐批地去增量训练。
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类;
-
实时预测:速度非常快,可以实时使用;
-
可通过大型数据集进行扩展;
-
对无关特征不敏感;
-
具有高维数据的良好性能(特征数量很大)。
缺点:
- 理论上,朴素贝叶斯模型与其他分类方法相比,具有最小的误差率。但是,实际上并非总是如此,因为,朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好;而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有关朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
- 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候,会由于假设的先验模型的原因导致预测效果不佳。
- 由于我们是通过先验和数据来决定后验的概率,从而决定分类,所以,分类决策存在一定的错误率。
- 对输入数据的表达形式很敏感。
朴素贝叶斯的应用范围:
可用于文本分类(可以预测多个类别,并且不介意处理不相关的特征)、垃圾邮件过滤(识别垃圾邮件)、情感分析(在社交媒体分析中识别正面和负面情绪),推荐系统(用户下一步将购买什么)。
支持向量机 SVM
优点:
- 在高维中表现良好。在现实世界中有无限维度(不仅仅是2D和3D)。例如,图像数据、基因数据、医学数据等具有更高的维数,支持向量机在这方面是有用的。基本上,当特征/列的数量较多时,SVM表现良好。
- 类可分离时的最佳算法(当两个类的实例可以通过直线或非线性轻松分隔时)。
-
离群值的影响较小;
-
SVM适用于极端情况下的二元分类。
缺点:
- 慢:对于较大的机器学习数据集,需要大量时间来处理;
- 重叠类的性能不佳:重叠类的情况下效果不佳;
- 选择适当的超参数很重要:这将允许足够的泛化性能;
- 选择适当的核函数可能比较麻烦。
SVM的应用范围:
Bag of words应用程序(许多特征和列),语音识别数据,图像分类(非线性数据),医学分析(非线性数据),文本分类(许多特征)。
决策树
优点:
- 易于理解和解释,可以可视化分析,容易提取出规则;
- 可以同时处理标称型和数值型数据;
- 比较适合处理有缺失属性的样本;
- 能够处理不相关的特征;
- 测试数据集时,运行速度比较快;
- 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。
缺点:
- 决策树容易发生过拟合,但是随机森林可以很大程度上减少过拟合;
- 决策树容易忽略数据集中属性的相互关联;
- 对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向;信息增益准则对可取数目较多的属性有所偏好,而增益率准则CART则对可取数目较少的属性有所偏好,但CART进行属性划分时候不再简单地直接利用增益率尽心划分,而是采用一种启发式规则。
随机森林
优点:
- 对于大部分的数据,它的分类效果比较好;
- 能处理高维特征,不容易产生过拟合,模型训练速度比较快,特别是对于大数据而言;
- 在决定类别时,它可以评估变数的重要性;
- 对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。
缺点:
- 对少量数据集和低维数据集的分类不一定可以得到很好的效果;
- 计算速度比单个的决策树慢;
- 当我们需要推断超出范围的独立变量或非独立变量,随机森林做得并不好。
无监督学习 Unsupervised Learning
K-Means
优点:
- 原理易懂、易于实现;
- 当簇间的区别较明显时,聚类效果较好;
缺点:
- 当样本集规模大时,收敛速度会变慢;
- 对孤立点数据敏感,少量噪声就会对平均值造成较大影响;
- k的取值十分关键,对不同数据集,k选择没有参考性,需要大量实验;
DBSCAN
优点:
- 聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类;
- 与K-MEANS比较起来,不需要输入要划分的聚类个数;
- 聚类簇的形状没有偏倚;
- 可以在需要时输入过滤噪声的参数。
缺点:
- 当数据量增大时,要求较大的内存支持I/O消耗也很大;
- 当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难;
- 算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。
FP Growth
经典的关联规则挖掘算法包括Apriori算法和FP-growth算法。
Apriori算法多次扫描交易数据库,每次利用候选频繁zd集产生频繁集;而FP-growth则利用树形结构,无需产生候选频繁集而是直接得到频繁集,大大减少扫描交易数据库的次数,从而提高了算法的效率。但是Apriori的算法扩展性较好,专可以用于并行计算等领域。
Apriori Algorithm是关联规则里一项基本算法。是由Rakesh Agrawal和Ramakrishnan Srikant两位博士在1994年提出的关联规则挖掘算法。关联规则的目的就是在一个数据集中找出项与项之间的关系,也属被称为购物蓝分析 (Market Basket analysis),因为“购物蓝分析”很贴切的表达了适用该算法情景中的一个子集。
Apriori
Apriori算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法 。
Apriori算法分为两个阶段:
1)寻找频繁项集
2)由频繁项集找关联规则
缺点:
- 在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;
- 每次计算项集的支持度时,都对数据库中 的全部记录进行了一遍扫描比较,需要很大的I/O负载。
PCA
优点:
- 使得数据集更易使用;
- 降低算法的计算开销;
- 去除噪声;
- 使得结果容易理解;
- 完全无参数限制。
缺点:
- 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高;
- 特征值分解有一些局限性,比如变换的矩阵必须是方阵;
- 在非高斯分布情况下,PCA方法得出的主元可能并不是最优的。
PCA算法应用:
- 高维数据集的探索与可视化;
- 数据压缩;
- 数据预处理;
- 图象、语音、通信的分析处理;
- 降维(最主要),去除数据冗余与噪声。
集成学习 Ensemble Learning
XGBoost
优点:
- 所需的特征工程较少(不需要数据缩放,数据归一化,也可以很好地处理缺失值);
- 可以发现特征的重要性(它输出每个特征的重要性,可用于特征选择);
- 离群值具有最小的影响;
- 可以很好地处理大型数据集;
- 良好的执行速度;
- 出色的模型表现(在大多数Kaggle比赛中获胜);
- 不太容易过拟合。
缺点:
- 解释困难,可视化困难;
- 如果参数未正确调整,则可能过度拟合;
- 由于存在太多超参数,因此难以调整。
XGBoost的应用领域:
可用于任何分类问题。如果特征太多、数据集太大、存在离群值和缺失值,并且不想进行太多特征工程,则XGBoost特别有用。它几乎赢得了所有比赛的胜利,因此这是解决任何分类问题时必须牢记的一种算法。
AdaBoosting
Adaboost是一种加和模型,每个模型都是基于上一次模型的错误率来建立的,过分关注分错的样本,而对正确分类的样本减少关注度,逐次迭代之后,可以得到一个相对较好的模型。该算法是一种典型的boosting算法,其加和理论的优势可以使用Hoeffding不等式得以解释。
优点就是具有很高精度的特性。这种算法可以使用各种方法构建子分类器,Adaboost算法提供的是框架。同时,当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。而简单也是其中一个特点,不用做特征筛选。最后就是不易发生overfitting。而缺点只有一个,那就是对outlier比较敏感。
分类 | 小分类 | 算法 | 计算复杂性 | 解释性 | 缺失值影响 |
监督学习 Supervised Learning |
回归 Regression |
线性回归 Linear Regression |
低 | 容易 | 敏感 |
弹性网络回归 ElasticNet Regression |
|||||
多项式回归 Ploynominal Regression |
|||||
岭回归 Ridge Regression | |||||
Lasso回归 | |||||
分类 Classification |
K邻近算法(KNN) | 高 | 一般 | 一般 | |
逻辑回归 Logistic Regression |
低 | 容易 | 敏感 | ||
朴素贝叶斯 NBA Naive Bayesian Algorithm |
中 | 容易 | 较不敏感 | ||
支持向量机 SVM | 中 | 容易 | 敏感 | ||
决策树 Decision Tree |
低 | 容易 | 不敏感 | ||
随机森林 Random Forest |
低 | 容易 | 不敏感 | ||
无监督学习 Unsupervised Learning |
聚类 Clustering |
Fuzzy C-Means | |||
Means Shift | |||||
K-Means | 低 | 容易 | 一般 | ||
DBSCAN | |||||
层次聚类 Agglomerative | |||||
关联规则学习 Association Rule Learning |
FP Growth | ||||
Apriori | |||||
Euclat | |||||
降维 Dimensionality Reduction Algorithm |
LDA | ||||
SVD | |||||
LSA | |||||
PCA | |||||
t-SNE | |||||
集成学习 Ensemble Learning |
Boosting | XGBoost | |||
LightGBM | |||||
CatBoost | |||||
AdaBoosting | 低 | 容易 | 不敏感 | ||
神经网络和 深度学习 Neural Network and Deep Learning |
CNN | 高 | 困难 | 不敏感 | |
RNN | |||||
强化学习 Reinforcement Learning |
Q-Learning | ||||
DQN | |||||
SARSA | |||||
A3C | |||||
Genetic Algorithm |