如何选择机器学习算法、选择哪一个算法以及算法建模时该

机器学习无疑是当前数据分析领域的热门话题。其理论和方法已被广泛用于解决工程应用中的复杂问题。许多人在日常工作中或多或少地使用机器学习算法。在机器学习领域,没有一种算法可以完美地解决所有问题。例如,神经网络并非在所有情况下都优于决策树,反之亦然。它们受到许多因素的影响,例如数据集的大小或结构。

因此,在给定测试集上评估性能和选择算法时,您应该根据具体问题使用不同的算法。例如,如果模型需要很强的可解释性,首先想到的是逻辑(线性)回归。如果模型需要高精度和快速的速度,首先想到的就是 Xgboost。如果数据量巨大且稀疏,首先想到的是什么?用神经网络解决这个问题。

因此,如何选择机器学习算法,选择哪种算法,在建模算法时要注意哪些问题,成为了工程师们的难题。本文的目的是总结常用机器学习算法的优缺点,供大家在工作、学习甚至面试中参考。机器学习主要分为监督学习和无监督学习。本文对这两个方面进行了梳理。

一、监督算法

监督学习是指模型在学习时有一个特定的目标,即目标是人工标注的,主要用于分类或回归。常用的监督学习算法主要有knn、逻辑(线性)回归、决策树、随机森林、adaboost、GBDT、xgboost、svm、朴素贝叶斯、人工神经网络等算法。

1. 最近邻算法 – KNN

KNN 可以说是最简单的分类算法,和另一种机器学习算法 K-means 算法有点相似,但是有本质的区别(K-means 算法是一种无监督算法)。KNN的全称是KNearestNeighbors,意思是K个最近邻。KNN的原理是在预测一个新的值x时,根据K个最近点的哪个类别来判断x属于哪个类别。

KNN算法的优点:

KNN算法的缺点:

2. 逻辑(线性)回归

逻辑回归是分类模型,线性回归是回归模型。逻辑回归和线性回归的原理相似。事实上,逻辑回归只是在线性回归的基础上应用的逻辑函数。

线性回归的损失函数是均方误差损失,逻辑回归的损失函数是交叉熵损失。

为什么逻辑回归的损失函数选择交叉熵损失而不是均方误差是面试中经常被问到的问题。这里简单说明一下:如果使用MSE作为损失函数,其梯度与sigmod函数的导数有关。如果当前模型的输出接近0或者1的时候会很小,接近0,这样得到的梯度很小,损失函数收敛很慢。

但是如果我们使用交叉熵,就不会发生这种情况。它的导数是不同的。如果误差大,更新会更快,如果误差小,更新会更慢。这正是我们想要的逻辑(线性)回归的优点:

逻辑(线性)回归的缺点:

它最大的缺点是对特征工程的要求很高,主要体现在以下几个方面:

当然,除了以上缺点外,容易欠拟合,准确率不是很高(个人认为比决策树强,弱于SVM、GBDT等强分类器)。

3. 决策树

决策树的生成算法包括ID3、C4.5和C5.0等。决策树是一种树结构,其中每个内部节点代表对一个属性的判断,每个分支代表输出一个判断结果,最后每个叶子节点代表一个分类结果。

决策树的优点:

计算量比较小,很容易转化为分类规则。只要树根下到叶子,沿途的分裂条件就可以唯一确定一个分类的谓词;有一定的可解释性,树的结构可视化;

它具有一定的特征选择能力,可以自行处理不相关的特征。

决策树的缺点:

4. 随机森林

它是一种基于决策树的集成学习算法。如果是分类模型,会投票多棵决策树。如果是回归模型,会对多棵决策树的结果进行平均。

随机森林的优点:

随机森林的缺点:

随机森林已被证明在一些嘈杂的分类或回归问题上过拟合。对于属性值不同的数据,分值越多的属性对随机森林的影响越大,所以随机森林对此类数据产生的属性权重是不可信的。

5. GBDT

GBDT是一种利用加法模型(即基函数的线性组合)对数据进行分类或回归的算法,不断减少训练过程中产生的残差。它是一种决策树的boosting算法,是一种传统的机器学习算法。拟合真实分布的最佳算法之一。

GBDT的优势:

GBDT的缺点:

由于弱学习器之间的依赖关系,很难并行训练数据;与其他树模型一样,它不适用于高维稀疏特征。

6. Xgboost

XGBoost的全称是eXtremeGradientBoosting,它是一个优化的分布式梯度提升库,旨在高效、灵活、便携。

XGBoost是一个大规模并行的boostingtree工具,是目前最快最好的开源boostingtree工具包,比普通工具包快10倍以上。

在数据科学方面,大量 Kaggle 玩家选择 XGBoost 进行数据挖掘比赛,这是大型数据科学比赛的必备武器;在业界大数据方面,XGBoost的分布式版本具有广泛的可移植性,支持运行在Kubernetes、Hadoop、SGE、MPI、Dask等各种分布式环境上,很好的解决了问题行业内的海量数据。它是 GBDT 的高级版本,即 Xgboost 具有 GBDT 的所有优点。

此外,与GBDT相比,xgBoosting还有以下改进:

收敛速度更快:GBDT优化时只使用一阶导数,xgBoosting对代价函数进行二阶Talor展开,引入一阶导数和二阶导数;

正则化:在一定程度上防止过拟合。XGBoost 在成本函数中添加了一个正则项来控制模型的复杂性。正则项包含树的叶节点数和每个叶节点上输出的分数的 L2 模的平方和。

从Bias-variancetradeoff的角度来看,正则项降低了模型的方差,使学习的模型更简单机器学习防止过拟合,防止过拟合;

并行处理:XGBoost 工具支持并行。Boosting 不是串行结构吗?平行度如何?

图片[1]-如何选择机器学习算法、选择哪一个算法以及算法建模时该-老王博客

注意XGBoost的并行度并不是树粒度的并行度,XGBoost只能在一次迭代后进行下一次迭代(第t次迭代的代价函数包含前t-1次迭代的预测值)。XGBoost 的并行性处于特征粒度。

我们知道,决策树学习中最耗时的步骤之一就是对特征的值进行排序(因为需要确定最佳分割点)。XGBoost 在训练前预先对数据进行排序,然后将其保存为块结构。在迭代中重复使用这种结构大大减少了计算量。

这种块结构也使并行性成为可能。分裂节点时,需要计算每个特征的增益,最后选择增益最大的特征进行分裂,那么每个特征的增益计算可以在多个线程中进行;

收缩率:相当于学习率。XGBoost进行一次迭代后,会将叶子节点的权重乘以这个系数,主要是为了削弱每棵树的影响,让后面有更多的学习空间。传统的 GBDT 实现也有学习率。

列采样:XGBoost借鉴了随机森林的做法,支持列采样,既减少了过拟合,又减少了计算量。这也是 XGBoost 区别于传统 GBDT 的一个特点。

缺失值处理:对于特征值缺失的样本,XGBoost采用的稀疏感知算法可以自动学习其分裂方向;

内置交叉验证:XGBoost 允许在每一轮提升迭代中使用交叉验证。

因此,可以很容易地获得最优的 Boosting 迭代次数。虽然 GBM 使用网格搜索,但它只能检测有限数量的值。

Xgboost的缺点:和其他树模型一样机器学习防止过拟合,不适合高维稀疏特征;算法参数过多,参数调整复杂。要想用好XGBoost,需要非常清楚XGBoost的原理。

7. 支持向量机

SVM是一个支持向量机,它将向量映射到一个更高维的空间,并在这个空间中建立一个最大区间超平面。两个平行的超平面建立在分离数据的超平面的两侧,分离的超平面使两个平行的超平面之间的距离最大化。假设平行超平面之间的距离或间隙越大,分类器的总误差越小。

支持向量机的优点:

核函数可用于映射到高维空间;属于强分类器,准确率高;

处理非线性特征相互作用的能力。

SVM的缺点:

SVM最大的缺点是我认为会消耗大量的机器内存和计算时间,这也是为什么随着数据量的增加,业界越来越少使用SVM的原因;它对丢失的数据很敏感;它对非线性问题很敏感 如果没有通用解决方案,有时很难找到合适的核函数。

8. 朴素贝叶斯算法

朴素贝叶斯算法是一种基于贝叶斯定理和特征条件独立性假设的分类方法,属于生成模型。

朴素贝叶斯的优点:

朴素贝叶斯的缺点:

理论上,朴素贝叶斯模型与其他分类方法相比具有最小的错误率。但情况并非总是如此,因为朴素贝叶斯模型假设属性是相互独立的,而这种假设在实际应用中往往不成立。

虽然朴素贝叶斯在属性相关性较小时表现良好。但是当属性数量比较多或者属性之间的相关性比较大时,分类效果不好;先验概率需要知道,而先验概率在很多情况下取决于假设,并且可以有各种模型进行假设。,由于假设的先验模型,导致在某些时候预测不佳。

因为分类是由先验和数据确定后验概率,所以分类决策有一定的错误率;它对输入数据的表达形式非常敏感。

9. 人工神经网络

以上都是传统的有监督机器学习算法,但是传统的机器学习算法在数据量面前会遇到天花板。一旦达到极限,传统的机器学习算法将无法跟上数据增长的步伐,性能将停滞不前。而且数据越多,神经网络得到的波就越多!随着数据量的不断增加,人工神经网络的应用也越来越广泛。

人工神经网络的优势:

人工神经网络的缺点:

二、无监督算法

无监督学习输入数据没有标注,也没有确定的结果,样本数据类别未知,需要根据样本之间的相似度对样本集进行分类。常用的无监督模型主要是指各种聚类,主要有K-means聚类、层次聚类、密度聚类等。

1. K 均值聚类

K-Means 的主要优势:

原理简单,易于实现;可解释性强。

K-Means 的主要缺点:

2. 密度聚类

密度聚类的优点:

密度聚类的缺点:

3. 层次聚类

层次聚类的优点:

层次聚类的缺点:

三、概览

总之,选择哪种算法必须适用于您自己的问题,这需要选择正确的机器学习任务。然而,在很多情况下,好的数据胜过好的算法。设计好的特征,做特征工程更有意义。但是,只有了解了每种机器算法的原理、优缺点,才能根据不同的机器学习算法做出相应的特征。工程(对特征工程感兴趣的同学可以参考我在一个数据人公众号上写的另一篇文章:机器学习中的特征工程)。

作者:飞虎冲冲,在国内某知名央企负责AI算法建模;曾在京东、美团等大型互联网公司担任算法工程师;具有丰富的算法开发经验;“数据创造者联盟”成员。

本文最初由@a数据人私房发表,大家都是产品经理。禁止任何未经许可的复制。

标题图片来自 Unsplash,基于 CC0 协议。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论