市面上有太多现成的机器学习模型,学习起来可能会让人不知所措,特别是对于那些对数据科学相对陌生的人来说。随着我通过课程和工作经验了解更多关于机器学习的知识,我决定撰写我的第一篇 Medium 文章,从较高的层面涵盖一些最流行的 ML 算法。

本指南并不是所有重要想法的综合清单。相反,它概述了如何将 ML 算法用于不同目的。我将通过用例来介绍模型,例如预测数值、二元分类、聚类等。我将重点介绍简化每个模型的工作原理、使用指标分析模型性能以及其他一些相关概念。

预测数值

例如,根据广告支出预测销售额。

多元线性回归

多元线性回归模型
  • 通过最小二乘估计特征权重(系数):最小化残差平方和,其中残差=实际y值-预测y值。
  • 通过关联的 p 值评估每个特征(系数),其中原假设是特定特征 (x) 和目标 (y) 之间不存在相关性。
  • 通过 F 统计量评估模型的整体效用(如果它很大,则我们拒绝原假设并得出特征与目标之间存在某种关系的结论)。
  • 我们可以使用 R 平方度量来评估模型的准确性,R 平方是目标中可变性的比例,可以通过回归模型中的特征来解释(理想情况下,我们希望 R 平方较高,即接近 1)。请记住,添加更多预测变量(特征)总是会提高模型与训练数据的拟合度,从而增加 R 平方值(注意过度拟合:当模型与训练数据拟合得非常好时,就会失去一些识别模式的能力)测试集)。

决策树回归

决策树可用于回归和分类。这里我们重点关注使用决策树来预测一些数值。

  • 决策树使用标准差缩减将数据集划分为特定节点处的子集。具有相似值(同质)的数据点样本应该具有非常小的标准偏差。
  • 然后使用平均值和标准差来计算变异系数 (CV):
平均值的公式
标准差公式
CV用于决定何时停止分支

当我们使用决策树进行回归时,我们关心的是找到返回最大标准差减少量的属性。

我们选择SDR最大的属性作为分裂节点。迭代地重复此过程,直到某个停止条件:CV 小于某个阈值(即,当分支的 CV 变得小于 8% 的阈值时,停止分裂节点,因为该分支“足够同质”)。

示例:构建回归决策树

假设我们使用 3 个预测变量:

  • 天气(雨天、晴天或阴天),
  • 温度(热、温和或冷),以及
  • 湿度(高或正常)

预测在户外度过的小时数。

  1. 计算目标的标准偏差(在户外度过的#小时)。
  2. 分割 3 个不同属性(天气、温度、湿度)的数据,并计算分割后每个分支的标准差。从分割前的标准差中减去该结果。
  3. 计算标准偏差减少 (SDDR),其中 SDR(T, X) = S(T)-S(T, X) = S(# 户外时间)-S(# 户外时间,功能 X)
  4. 标准差减少量最大的属性用作分裂节点(在我们的例子中,选择天气作为根节点)。
  5. 根据所选属性(天气)的值划分数据,直到达到某个停止标准(即,当分支的 CV 小于 8% 的阈值时):

a) 如果特定节点的 CV 大于阈值,则该分支不够同质,我们通过选择具有最大 SDR 的特征来进一步分割它。

b) 如果特定节点的 CV 小于阈值,则该节点成为叶节点,因为该分支“足够同质”。

提高决策树的模型准确性

通过创建一组不同的决策树,我们可以构建随机森林,从而提高模型准确性并有助于防止过度拟合。下面将更详细地讨论随机森林的细节。

请注意,如果我们使用决策树进行分类,我们几乎可以复制与上述相同的过程。我们不使用 SDR,而是使用基尼杂质分数(我们需要较低的杂质分数,因为如果使用类分布对观察结果进行随机分类,它会衡量错误分类的可能性)作为分割节点的度量。

笔记

还有许多其他技术可以用于解决回归问题,例如神经网络和多项式回归。

二元分类

例如,对电子邮件是否为垃圾邮件进行分类。

逻辑回归

Logistic 回归旨在预测观测值是否属于某个类别的概率(值介于 0 和 1 之间)。

逻辑回归背后的主要思想是下面指定的 logit 函数:

输入的线性组合(右)映射到几率的对数(成功和失败概率的比率)

我们取上式右侧= z = B0 + B1X(这意味着中间输入)。

然后我们将 z 传递给 sigmoid 函数,该函数将返回 0 到 1 之间的概率值。

  • 通过最大似然估计来估计回归系数:选择预测概率尽可能接近观测值的系数集。
  • 我们可以使用偏差来评估模型性能。有2种类型——
  1. 零偏差:通过仅具有截距项的模型来预测响应;
  2. 残余偏差:通过具有截距项和附加预测变量的模型来预测响应。

如果残差偏差远小于零偏差,我们可以得出结论,包含附加参数可以显着提高模型精度。

朴素贝叶斯分类器

该模型基于贝叶斯定理,其关键假设是:

  1. 每个特征有条件地独立于其他特征;
  2. 每个特征具有相同的权重。

如果我们想将一封电子邮件分类为垃圾邮件 (1) 或非垃圾邮件 (0):

  • P(c|x) = P(y=1 | 电子邮件 x)
  • P(x|c) * P(c) = P(电子邮件 x | y=1) * P(y=1)
  • P(x) = P(电子邮件 x | y=1) * P(y=1) + P(电子邮件 x | y=0) * P(y=0)

评估二元分类器的性能

混淆矩阵(来源:MathWorks)

示例:预测客户是否会退货(正)或不会(负)?

我们可以使用从混淆矩阵导出的指标,例如:

  • 准确度 = (TP + TN) / (TP + FN + FP + TN)。在所有可能的数据点中,我们的模型正确分类的比例是多少?
  • 特异性 = TN / (FP + TN)。在所有未返回的客户(负数)中,我们的模型正确分类的比例是多少? (模型预测负数的准确性)
  • 灵敏度或召回率 = TP / (TP + FN)。在所有返回的客户(阳性)中,我们的模型正确分类的比例是多少? (模型预测积极结果的准确性)
  • 精度 = TP / (TP + FP)。在所有预计会回访(正)的客户中,实际回访的比例是多少?

在我们的示例中,我们将优先考虑我们的模型在正确分类客户是否会返回方面的准确性。因此,我们优化精确率和召回率分数是有意义的,但这两个指标之间需要权衡。

精确率 — 召回率权衡

ROC曲线

基于上述的一些指标,我们可以推导出接收者操作特征(ROC)曲线作为评估指标。

ROC 曲线可视化二元分类器区分两个类别的能力。 AUC 简单地表示 ROC 曲线下的面积:AUC 越高(接近 1),我们模型的诊断能力越好。

以下是得出 ROC 曲线的三个关键指标:

  • 真阳性率/召回率/灵敏度:在阳性类的所有数据点中,正确预测的比例是多少?
  • 真阴性率/特异性:在阴性类的所有数据点中,正确预测的比例是多少?
  • 假阳性率 = 1-真阴性率
ROC 曲线。资料来源:researchgate.net

多类分类

例如,预测图像是松饼、吉娃娃还是猫。

支持向量机 (SVM)

  • SVM 的目标是通过最大化边距(观测值与阈值(分类的分隔线)之间的最短距离)用超平面分离不同的类。
  • 简单来说,这就是 SVM 的工作原理:
  1. 我们从相对较低维度的数据集开始。
  2. 将数据转换为更高维度。
  3. 核函数用于查找将高维数据分为不同类的分类器(通过系统地计算每对观测值之间的关系)。
  • 支持向量分类器与软边距一起使用,这意味着允许一些错误分类(引入一些偏差以使阈值对异常值不太敏感)以获得更好的模型预测(更低的方差)。这也称为偏差-方差权衡。
  • SVM有几个关键参数:
  1. C(正则化参数)指定您希望避免对每个示例进行错误分类的程度。 C 值较高意味着如果模型具有较高的训练精度,则将使用较小的余量。较低的 C 值会带来更大的余量,同时会牺牲一些训练准确性。
  2. 伽玛定义了观察的影响有多远。高伽玛值意味着仅考虑附近的点,而低伽玛值意味着也考虑远点。
  3. 边距:到最近类点的分隔线。良好的余量意味着所有类别的分离超平面尽可能大致等距。

随机森林

随机森林在集成学习的基础上运行,这意味着使用具有不同特征子集的多个决策树,以提高模型准确性并帮助防止过度拟合。集成学习中有两个重要的概念与这里相关:

  • Bagging(引导聚合):通过从数据集中重复抽取随机样本来减少方差。对所有引导数据集进行训练,获得每组的预测,并对预测进行平均。
  • 提升:使用先前树的信息顺序生长树。从较弱的早期学习者(适合简单模型)开始并分析错误:当输入被错误分类时,增加其权重以提高分类性能。

随机森林可以通过以下步骤构建:

  1. 创建引导数据集(通过带替换的随机抽样来估计抽样分布)。
  2. 在引导数据集中选择 m(m < 特征总数)个随机特征,在每个步骤(节点)构建决策树。
  3. 重复步骤 1 和 2,这会产生各种各样的决策树。
  4. 由于每棵决策树都有一个用于对输入进行分类的投票,因此我们从每棵树中获取投票,并将输入变量分配给具有最大投票的类别。

无监督学习——聚类

例如,根据每月经常性收入和每月公司规模增长率来细分企业客户。

K 均值聚类

在 K 均值中,我们尝试最大化 Dunn 指数,其定义为 min(簇间距离)/ max(簇内距离)。

  • 较大的分子值表示彼此相距较远的簇。
  • 小分母值意味着每个簇相对紧凑。换句话说,簇内的点靠近簇质心。

我们可以通过以下步骤构建 K-Means 聚类模型:

  1. 使用肘部方法选择簇数 (k):根据每个数据点到其簇质心(y 轴)的平方距离平均值绘制 k(x 轴)的各种值。选择距离显着下降的 k 值。然后,我们随机初始化所有 k 个簇的质心。
  2. 然后,算法在以下之间迭代:
  • 数据分配步骤:通过最小化每个点到质心的平方距离,将每个点分配给最近的质心。换句话说,我们将观测值分类到质心最接近它的簇中。
  • 质心更新步骤:通过取该簇中所有观测值的平均值来重新计算簇质心。

…直到达到一些停止标准(即达到最大迭代次数)。

  • 主要优点:计算观测值和质心之间的距离具有线性时间复杂度, n)。
  • 主要缺点:结果可能缺乏一致性,因为模型以随机初始化数量的聚类中心开始。

K 最近邻 (kNN)

kNN 可用于分类和回归。

  1. 选择对观测值进行分类时要考虑的最近邻数 (k)(即 k = 11。在距未知点 P 最近的 11 个点中,8 个为绿色,3 个为红色 = x 被分类为绿色)。
  2. 计算点 P(测试数据)与每行训练数据之间的距离。
  3. 按升序对距离进行排序,并选择前 k 个最小的条目。
  4. 获取所选k个条目的标签:
  • 如果分类:返回k个标签的众数。
  • 如果回归:返回 k 个标签的平均值。

层次聚类

  • 最常见的类型称为凝聚聚类,它是以自下而上的分层方法构建的。
  1. 该算法将每个数据点视为一个簇。然后,选择一个相异性度量来衡量聚类之间的距离。例如,我们可以使用平均链接,它是第一个簇中的数据点和第二个簇中的数据点之间的平均距离(计算簇1中的观测值和簇2中的观测值之间的所有成对距离,然后对差异进行平均)。
  2. 在每次迭代中组合最相似的簇对(选择具有最小平均链接的 2 个簇)。
  3. 重复步骤 2,直到所有内容都成为包含所有数据点的一个簇(我们也可以选择任意停止标准,即当总共有 2 个簇时停止组合簇)。
资料来源:kdnuggets.com
  • 主要优点:
  1. 最初不需要人工输入来指定簇的数量。
  2. 对不同的距离度量不敏感。
  3. 对于具有分层结构的数据集很有用。
  • 缺点:效率较低 O(n3), 与具有线性复杂度的 K 均值聚类不同。

无监督学习——降维

主成分分析(PCA)

  • 如果要分析的特征太多,PCA 可以降低特征空间的维数,使得主成分 1 (PC1) 占我们数据集中的最大变化,PC2 占第二好,等等。
  • 简单来说,PCA 的工作原理如下:
  1. 找到一条“最佳拟合线”:将数据点投影到最佳拟合线上后,选择原始数据点残差平方和最小的一个。这相当于选择从投影数据点(投影现在位于最佳拟合线上)到原点的最大距离平方和 (SS)。
  2. 产生从投影点到原始点的最大 SS 的最佳拟合线称为主成分 1。对其他主成分重复此过程(如果您想要 2D PCA 图,只需让 PC2 垂直于 PC1)。
  3. 转换原始数据以与这些方向(主成分)对齐,这会压缩特征空间(删除不考虑数据集中大量变化的变量),同时保留原始变量。

线性判别分析 (LDA)

LDA 可用于分类和降维。

  • LDA 通过最大化类别之间的可分离性,从数据集中创建一个新轴。
  • LDA 通过以下方式生成这个新轴:
  1. 最大化(不同类别的)均值之间的距离;
  2. 最大限度地减少每个类别内的差异。
  • 如果我们有一个 2D 数据集(基因 1 和基因 2),LDA 只需使用两个基因创建一个新轴,并将原始数据投影到这个新轴上,以最大限度地分离 2 个类别(我们的数据现在是一维的)。

PCA 与 LDA

  • 两种模型都试图减少维度并按重要性顺序对新轴进行排序。
  • PCA 创建 PC1,它解释了我们数据中最大的变化,而 LDA 创建了 LD1,它解释了类别之间的最大变化。
  • LDA 适用于小型数据集,可用于预测 3 个或更多类别,而 PCA 可用于可视化更高维数据或删除不影响数据太大变化的变量。

处理文本数据

例如,总结一篇文章的要点。

词袋

词袋 (BoW) 是文本的表示形式,指定文档中单词的频率。 BoW 背后的主要思想非常直观:拥有单词的词汇表并计算给定文档中已知单词的存在情况。

这个单词“包”忽略了文档中单词的位置、结构或顺序;该模型仅考虑文档中已知单词的出现。

TF-IDF(术语频率 - 逆文档频率)

该模型用于反映单词对于文档的重要性。

  • 词频=给定文档中单词的频率/该文档中的单词总数
  • 逆文档频率 = log(文档总数 / 包含该单词的文档数量)
  • 方程 = TF * IDF

我们可以按照以下步骤使用 TF-IDF 来查找文档的含义:

  1. 数据清理:删除特殊字符,将所有单词更改为小写词根。
  2. 分成单独的单词和频率。
  3. 计算每个单词的词频 * 逆文档频率。

文本排名

TextRank 是一个强大的文本摘要工具。

  • 数据清理:删除特殊字符(和标点符号),删除停用词(is、am、the、of 等)。
  • 向量表示:可以使用导入的词嵌入、词袋或 TF-IDF 来表示句子。
  • 使用余弦相似度构建相似度矩阵。计算两个向量之间的角度的余弦,以确定它们是否指向相似的方向(如果是,则角度应该很窄,两个句子相似)。
  • 将相似度矩阵转换为图,其中节点代表句子,边代表句子之间的相似度分数。
  • 最后,根据排名提取前n个句子。

排名算法

例如,根据相关性对用户对产品进行排名。

学习排名 (LTR)

  • LTR 通过训练模型来预测特定项目排名高于另一个项目的概率(为每个项目“分配分数”,以便那些排名较高的项目也具有较高的分数)对项目进行排名
Sigmoid 函数,其中 s = 项目的分数
  • 使用 Sigmoid 函数,排名分数的巨大差异将导致更大的概率(项目 i 排名高于项目 j)。此外,相同的分数导致概率 = 0.5。
  • 定义一个损失函数 J(将事件映射到一个实数作为其相关的“成本”),该函数使用梯度下降进行优化(如果您试图从一座几乎看不见的山上下来,请分析当前位置的坡度,然后继续进行下降最陡的方向,即下坡)
i 排名高于 j 的概率的负对数似然

希望本文能够作为对多样化、强大的机器学习工具集的实用介绍,您可以为截然不同的用例进行部署。

参考