一文了解11种最常见的机器学习算法应用场景 精华
近年来,机器学习的普及率急剧上升。机器学习从数据中创造价值的潜力使其对许多不同行业的企业都具有吸引力。大多数机器学习产品都是使用现成的机器学习算法设计和实现的,并进行了一些调整和微小的改动。
机器学习算法种类繁多,可分为三大类:
- 监督学习算法在给定一组观察值的情况下对特征(自变量)和标签(目标)之间的关系进行建模。然后该模型用于使用这些特征预测新观察的标签。根据目标变量的特性,它可以是分类(离散目标变量)或回归(连续目标变量)任务。
- 无监督学习算法试图在未标记的数据中找到数据规律。
- 强化学习基于行动奖励原则。代理通过迭代计算其行为的奖励来学习达到目标。
在这篇文章中,我将介绍前两类中最常见的算法。具体11种算法如下:
- 线性回归
- 支持向量机(SVM)
- 朴素贝叶斯
- 逻辑回归
- k最近邻(KNN)
- 决策树
- 随机森林
- 梯度提升树(GBDT)
- K-Means
- 层次聚类
- DBSCAN聚类
- 主成分分析(PCA)
1. 线性回归
线性回归是一种监督学习算法,它试图通过对数据拟合线性方程来模拟连续目标变量与一个或多个自变量之间的关系。
为了使线性回归成为一个好的选择,自变量和目标变量之间需要存在线性关系。有许多工具可以探索变量之间的关系,例如散点图和相关矩阵。例如,下面的散点图显示了自变量(x 轴)和因变量(y 轴)之间的正相关关系。随着一个增加,另一个也增加。
线性回归模型试图将回归线拟合到最能代表关系或相关性的数据点。最常用的技术是普通最小二乘法(OLE)。使用此方法,通过最小化数据点与回归线之间距离的平方和来找到最佳回归线。对于上面的数据点,使用 OLE 获得的回归线如下所示:
2.支持向量机
支持向量机 (SVM) 是一种监督学习算法,主要用于分类任务,但也适用于回归任务。
SVM 通过绘制决策边界来区分类别。 如何绘制或确定决策边界是支持向量机算法中最关键的部分。在创建决策边界之前,每个观察值(或数据点)都绘制在 n 维空间中。“n”是使用的特征数。例如,如果我们使用“长度”和“宽度”对不同的“细胞”进行分类,则观察结果绘制在二维空间中,决策边界是一条线。如果我们使用 3 个特征,则决策边界是 3 维空间中的一个平面。如果我们使用超过 3 个特征,决策边界就会变成一个很难可视化的超平面。
决策边界以支持向量的距离最大化的方式绘制。 如果决策边界太靠近支持向量,它将对噪声高度敏感并且不能很好地泛化。自变量即使非常小的变化也可能导致错误分类。
数据点并不总是像上图那样线性可分。在这些情况下,支持向量机使用内核技巧来测量高维空间中数据点的相似性(或接近度),以使它们线性可分。
核函数是一种相似性度量。输入是原始特征,输出是新特征空间中的相似性度量。这里的相似意味着某种程度的接近。将数据点实际转换到高维特征空间是一项代价高昂的操作。该算法实际上并没有将数据点转换到一个新的高维特征空间。核化 SVM 根据高维特征空间中的相似性度量计算决策边界,而无需实际进行转换。我认为这就是为什么它也被称为kernel trick的原因。
SVM在维数多于样本数的情况下特别有效。在寻找决策边界时,SVM 使用训练点的子集而不是所有点,这使得它具有内存效率。另一方面,大型数据集的训练时间会增加,这会对性能产生负面影响。
3.朴素贝叶斯
朴素贝叶斯是一种用于分类任务的监督学习算法。 因此,它也被称为朴素贝叶斯分类器。
朴素贝叶斯假设特征相互独立,特征之间不存在相关性。然而,现实生活中并非如此。这种特征不相关的朴素假设是该算法被称为“朴素”的原因。
朴素贝叶斯算法背后的直觉是贝叶斯定理:
p(A|B):事件 A 给定事件 B 已经发生的概率
p(B|A):给定事件 A 已经发生的事件 B 的概率
p(A):事件 A 的概率
p(B):事件 B 的概率
朴素贝叶斯分类器计算给定一组特征值(即 p(yi | x1, x2 , … , xn))的类的概率。 将其输入贝叶斯定理:
p(x1, x2 , … , xn | yi) 表示给定类别标签的特定特征组合(数据集中的观察/行)的概率。我们需要非常大的数据集来估计所有不同特征值组合的概率分布。为了克服这个问题,朴素贝叶斯算法假设所有特征都是相互独立的。 此外,可以删除分母 (p(x1,x2, … , xn)) 以简化等式,因为它仅归一化给定观察值的类的条件概率值 ( p(yi | x1,x2, … , xn) ).
类别的概率 ( p(yi) ) 计算起来非常简单:
在特征独立的假设下,p(x1, x2 , … , xn | yi) 可以写成:
给定类标签(即 p(x1 | yi) )的单个特征的条件概率可以更容易地从数据中估计。该算法需要独立存储每个类别的特征概率分布。例如,如果有 5 个类别和 10 个特征,则需要存储 50 个不同的概率分布。
将所有这些加起来,对于朴素贝叶斯算法来说,计算观察给定特征值的类的概率成为一项简单的任务(p(yi | x1,x2,...,xn))
所有特征都是独立的假设使得朴素贝叶斯算法与复杂算法相比非常快。 在某些情况下,速度比更高的精度更受欢迎。另一方面,同样的假设使得朴素贝叶斯算法不如复杂算法准确。速度是有代价的!
4.逻辑回归
逻辑回归是一种监督学习算法,主要用于二元 分类问题。虽然“回归”与“分类”相矛盾,但这里的重点是“逻辑”一词,指的是在该算法中执行分类任务的逻辑函数。 逻辑回归是一种简单但非常有效的分类算法,因此常用于许多二元分类任务。客户流失、垃圾邮件、网站或广告点击预测是逻辑回归提供强大解决方案的一些领域示例。
逻辑回归的基础是逻辑函数,也称为 sigmoid 函数,它接受任何实数值并将其映射到 0 到 1 之间的值。
考虑我们要求解以下线性方程:
逻辑回归模型以线性方程为输入,使用逻辑函数和对数概率来执行二元分类任务。然后,我们将得到著名的逻辑回归 s 形图:
我们可以“按原样”使用计算出的概率。例如,输出可以是“此电子邮件是垃圾邮件的概率为 95%”或“客户点击此广告的概率为 70%”。然而,在大多数情况下,概率用于对数据点进行分类。例如,如果概率大于 50%,则预测为正类 (1)。否则,预测为负类 (0)。
并不总是希望为所有高于 50% 的概率值选择正类。关于垃圾邮件案例,我们必须几乎确定才能将电子邮件归类为垃圾邮件。由于被检测为垃圾邮件的电子邮件直接进入垃圾邮件文件夹,我们不希望用户错过重要的电子邮件。除非我们几乎可以肯定,否则电子邮件不会被归类为垃圾邮件。另一方面,当健康相关问题的分类要求我们更加敏感时。即使我们有点怀疑某个细胞是恶性的,我们也不想错过它。因此,作为正类和负类之间阈值的值取决于问题。好消息是逻辑回归允许我们调整这个阈值。
5. K 最近邻 (kNN)
K 最近邻 (kNN) 是一种监督学习算法,可用于解决分类和回归任务。kNN 背后的主要思想是数据点的值或类别由它周围的数据点决定。
kNN 分类器通过多数表决原则确定数据点的类别。例如,如果 k 设置为 5,则检查 5 个最近点的类别。预测是根据多数类进行的。同样,kNN 回归取 5 个最近点的平均值。让我们来看一个例子。考虑以下属于 4 个不同类别的数据点:
让我们看看预测的类别如何根据 k 值变化:
确定最佳 k 值非常重要。如果 k 太低,则模型太具体并且不能很好地泛化。它也往往对噪音敏感。该模型在训练集上实现了高精度,但对新的、以前未见过的数据点的预测效果不佳。因此,我们很可能会得到一个过度拟合的模型。另一方面,如果 k 太大,则模型过于泛化,在训练集和测试集上都不是一个好的预测器。这种情况称为欠拟合。
kNN 简单易懂。它不做任何假设,因此可以在非线性任务中实现。随着数据点数量的增加,kNN 变得非常慢,因为模型需要存储所有数据点。因此,它的内存效率也不高。kNN 的另一个缺点是它对异常值很敏感。
6. 决策树
决策树建立在反复提出问题以划分数据的基础上。使用决策树的可视化表示更容易概念化分区数据:
这表示用于预测客户流失的决策树。第一个拆分是基于每月的费用金额。然后该算法不断提出问题以分离类别标签。随着树变得更深,问题变得更加具体。
决策树算法的目的是在每次分区时尽可能增加预测能力,以便模型不断获取有关数据集的信息。随机拆分特征通常不会给我们提供对数据集有价值的洞察力。增加节点纯度的拆分提供更多信息。节点的纯度与该节点中不同类别的分布成反比。以增加纯度或减少杂质的方式选择要问的问题。
我们问了多少问题?我们什么时候停止?我们的树什么时候足以解决我们的分类问题?所有这些问题的答案将我们引向机器学习中最重要的概念之一:过度拟合。该模型可以不断遍历,直到所有节点都是纯节点。但是,这将是一个过于具体的模型,并且不能很好地概括。它通过训练集实现了高精度,但在新的、以前未见过的数据点上表现不佳,这表明过度拟合。树的深度由scikit-learn 中决策树算法的max_depth参数控制。
决策树算法通常不需要对特征进行归一化或缩放。它也适用于混合特征数据类型(连续、分类、二进制)。不好的地方是,它容易过度拟合,需要进行模型集成才能很好地泛化。
6. 随机森林
随机森林是许多决策树的集合。随机森林是使用称为bagging的方法构建的,其中决策树用作并行估计器。如果用于分类问题,则结果基于从每个决策树收到的结果的多数投票。对于回归,叶节点的预测是该叶中目标值的平均值。随机森林回归取决策树结果的平均值。
随机森林降低了过度拟合的风险,准确率远高于单个决策树。此外,随机森林中的决策树并行运行,因此时间不会成为瓶颈。
随机森林的成功在很大程度上取决于使用不相关的决策树。如果我们使用相同或非常相似的树,整体结果与单个决策树的结果不会有太大差异。随机森林通过引导和特征随机性实现具有不相关的决策树。
Bootsrapping 是从训练数据中随机选择有放回的样本。它们被称为引导样本。
特征随机性是通过为随机森林中的每个决策树随机选择特征来实现的。可以使用max_features参数控制随机森林中每棵树使用的特征数量。
随机森林是针对许多不同问题的高度准确的模型,不需要归一化或缩放。然而,与快速线性模型(即朴素贝叶斯)相比,它对于高维数据集(即文本分类)并不是一个好的选择。
7.梯度提升决策树(GBDT)
GBDT是一种集成算法,它使用boosting方法来组合单个决策树。
Boosting 意味着将一个学习算法串联起来,从许多顺序连接的弱学习器中获得一个强学习器。在 GBDT 的情况下,弱学习器是决策树。
每棵树都试图最小化前一棵树的残差。boosting中的树模型是弱学习模型,但串联添加许多树,每棵树都关注前一棵树的残差,从而使 boosting 成为一个高效和准确的模型。与 bagging 不同,boosting 不涉及 bootstrap 采样。每次添加新树时,它都适合初始数据集的修改版本。
由于树是按顺序添加的,因此提升算法学习缓慢。在统计学习中,学习缓慢的模型表现更好。
损失函数用于检测残差。例如,均方误差 (MSE) 可用于回归任务,对数损失(对数损失)可用于分类任务。值得注意的是,当添加新树时,模型中的现有树不会改变。添加的决策树适合当前模型的残差。
学习率和n_estimators是梯度提升决策树的两个关键超参数。学习率,表示为 α,仅表示模型学习的速度。每棵新树都会修改整个模型。修改的幅度由学习率控制。n_estimator是模型中使用的树的数量。如果学习率低,我们需要更多的树来训练模型。但是,我们在选择树的数量时需要非常小心。使用过多的树会产生过度拟合的高风险。
GBDT 在分类和回归任务上都非常有效,并且与随机森林相比提供了更准确的预测。它可以处理混合类型的特征,不需要预处理。GBDT 需要仔细调整超参数,以防止模型过拟合。
GBDT 算法非常强大,已经实现了很多升级版本,如 XGBOOST、LightGBM、CatBoost。
关于过拟合的注意事项
随机森林和梯度提升决策树之间的一个关键区别是模型中使用的树的数量。增加随机森林中的树木数量不会导致过度拟合。在某个点之后,模型的准确性不会因添加更多树而增加,但也不会因添加过多的树而受到负面影响。由于计算原因,您仍然不想添加不必要数量的树,但不存在与随机森林中的树数量相关的过度拟合风险。
然而,梯度提升决策树中树的数量在过度拟合方面非常关键。添加太多树会导致过度拟合,因此在某个时候停止添加树很重要。
8. K-均值聚类
聚类是一种以类似数据点分组在一起的方式对一组数据点进行分组的方法。因此,聚类算法会寻找数据点之间的相似点或不同点。聚类是一种无监督学习方法,因此没有与数据点关联的标签。聚类算法试图找到数据的底层结构。
分类任务中的观察(或数据点)有标签。每个观察结果都根据一些测量结果进行分类。分类算法试图模拟观测值(特征)与它们分配的类别之间的关系。然后模型预测新观察的类别。
K均值聚类旨在将数据划分为k个簇,使得同一簇中的数据点相似,不同簇中的数据点相距较远。因此,它是一种基于分区的聚类技术。两点的相似性由它们之间的距离决定。
K 均值聚类试图最小化集群内的距离并最大化不同集群之间的距离。K-means 算法无法确定聚类的数量。我们需要在创建 KMeans 对象时定义它,这可能是一项具有挑战性的任务。
考虑以下数据集的二维可视化:
它可以分为 4 个不同的集群,如下所示:
现实生活中的数据集要复杂得多,其中的集群没有明确分开。但是,该算法以相同的方式工作。K-means 是一个迭代过程。它建立在期望最大化算法之上。确定集群数量后,它通过执行以下步骤来工作:
- 为每个集群随机选择质心(集群中心)。
- 计算所有数据点到质心的距离。
- 将数据点分配给最近的集群。
- 通过取集群中所有数据点的平均值来找到每个集群的新质心。
- 重复步骤 2、3 和 4,直到所有点收敛并且聚类中心停止移动。
K-Means 聚类相对较快且易于解释。它还能够以一种智能方式选择初始质心的位置,从而加快收敛速度。
k-means 的一个挑战是必须预先确定集群的数量。K-means 算法无法猜测数据中存在多少簇。如果数据中存在分离组的非线性结构,则 k-means 将不是一个好的选择。
9. 层次聚类
层次聚类意味着通过迭代分组或分离数据点来创建聚类树。有两种类型的层次聚类:
- 凝聚聚类
- 分裂聚类
层次聚类的优点之一是我们不必指定聚类的数量。
凝聚聚类是一种自下而上的方法。首先假定每个数据点是一个单独的集群。然后相似的簇被迭代组合。
上图称为树状图,它是表示基于树的方法的图。在层次聚类中,树状图用于可视化聚类之间的关系。
层次聚类的优点之一是我们不必事先指定聚类的数量。但是,将所有数据点合并到一个集群中并不明智。我们应该在某个时候停止合并集群。Scikit-learn 为此提供了两个选项:
- 达到多个集群后停止 (n_clusters)
- 设置链接的阈值 (distance_threshold)。如果两个簇之间的距离高于阈值,则不会合并这些簇。
分裂聚类在现实生活中并不常用,所以我会简单地提一下。简单而明确的解释是分裂聚类与凝聚聚类相反。我们从一个包含所有数据点的巨型集群开始。然后数据点被分成不同的集群。这是一种自上而下的方法。
层次聚类总是生成相同的聚类。K 均值聚类可能会产生不同的聚类,具体取决于质心(聚类中心)的启动方式。但是,与 k-means 相比,它是一种较慢的算法。层次聚类需要很长时间才能运行,尤其是对于大型数据集。
10. DBSCAN 聚类
基于分区和层次聚类技术对于正常形状的聚类非常有效。然而,当涉及到任意形状的簇或检测异常值时,基于密度的技术更有效。
DBSCAN代表具有噪声的基于密度的空间聚类。它能够找到任意形状的簇和带有噪声的簇(即异常值)。
DBSCAN 背后的主要思想是,如果一个点靠近该集群中的许多点,则该点属于该集群。
DBSCAN有两个关键参数:
- eps:指定邻域的距离。如果两点之间的距离小于或等于 eps,则认为它们是相邻点。
- minPts:定义集群的最小数据点数。
基于这两个参数,点被分类为核心点、边界点或离群点:
- 核心点:如果一个点在其周围半径为eps的区域中至少有minPts个点(包括点本身),则该点是核心点。
- 边界点:如果一个点可以从核心点到达并且其周围区域内的点数少于 minPts,则该点是边界点。
- 离群点:如果一个点不是核心点并且无法从任何核心点到达,则该点是离群点。
DBSCAN 不需要事先指定簇数。它对异常值具有鲁棒性并且能够检测异常值。
在某些情况下,确定适当的邻域距离 (eps) 并不容易,它需要领域知识。
11.主成分分析(PCA)
PCA 是一种降维算法,它基本上从现有特征中导出新特征,同时保留尽可能多的信息。PCA 是一种无监督学习算法,但它也被广泛用作监督学习算法的预处理步骤。
PCA 通过查找数据集中特征之间的关系来导出新特征。
注意:PCA 是一种线性降维算法。也有可用的非线性方法。
PCA 的目的是通过使用较少的特征(或列)尽可能多地解释原始数据集中的方差。新的派生特征称为主成分。主成分的顺序是根据它们解释的原始数据集的方差分数来确定的。
主成分是原始数据集特征的线性组合。
PCA 的优点是使用比原始数据集少得多的特征保留了原始数据集的大量方差。主成分根据它们解释的方差量排序。
本文转载自 沐白AI笔记,作者: 杨沐白