Python中的机器学习算法

2025年1月5日 | 阅读 31 分钟

监督式和无监督式机器学习算法大致可分为这两类。本文将深入探讨它们。

监督式学习

在此方法中,目标、结果或因变量是从一组预测变量或自变量中预测出来的。我们使用这组变量创建一个将输入变量映射到期望输出变量的函数。训练过程会反复进行,直到模型在训练数据上的准确率达到目标水平。

回归、决策树、随机森林、KNN、逻辑回归等都是监督式学习的例子。

无监督式学习

在此方法中,没有要预测或估计的目标、结果或因变量。为了对客户进行细分以采取有针对性的行动,它通常用于将给定的数据集聚集成不同的组。K-means 和 Apriori 算法是无监督式学习的两个例子。

强化学习

在此方法中,机器被训练以做出特定的决策。在这里,算法通过反馈和试错技术不断改进自身。为了做出准确的业务决策,该系统会尝试从过去学习,并尽力收集它能获得的最优知识。

强化学习使用马尔可夫决策过程来演示。

常见的机器学习算法

这里收集了一些流行的机器学习技术,可以用来解决几乎任何数据问题。

  • 线性回归
  • 逻辑回归
  • 决策树
  • SVM
  • 朴素贝叶斯
  • KNN
  • K-Means
  • 随机森林
  • 降维算法
  • 梯度提升算法,如 GBM、XGBoost、LightGBM 和 CatBoost

线性回归

基于连续变量,线性回归用于估算现实世界的价值,如房屋成本、接收到的呼叫量、总销售额等。在这里,我们通过拟合最佳直线来建立因变量和自变量之间的联系。回归线就是这条最佳拟合线的名称,它由线性方程 Y= a *X + b 表示。

在此方程中

  • Y - 因变量
  • a - 斜率
  • X - 自变量
  • b - 截距

这些系数 a 和 b 是通过最小化回归线与数据点之间的平方距离之和来计算的。

示例

通过一个例子可以最好地理解线性回归。假设我们需要根据身高给班里的学生排序。我们可以观察孩子们,通过视觉分析他们的身高和体型,然后结合这些特征来按需排列学生。这是线性回归的一个真实世界案例。我们发现体重和身高通过类似于上述方程的关系相关联。

线性回归的类型

简单线性回归和多元线性回归是线性回归的两种主要形式。简单线性回归有一个自变量,而多元线性回归有多个自变量。在确定最佳拟合线时,可以拟合多项式或曲线回归。为此,您可以使用以下代码。

构建线性回归器

回归是确定具有连续值的输入数据和输出数据之间关系的过程。我们的目标是估算控制输入到输出映射的基本函数,这些数据通常是实数形式。

考虑显示的输入-输出映射

通过检查模式,您可以轻松推断出输入和输出之间的关系。由于每个示例中的输出是输入的两倍,因此转换将是 f(x) = 2x。

线性回归使用输入变量的线性组合来估算相关函数。前面的示例使用了一个输入变量和一个输出变量。

线性回归的目标是找到连接输入变量和输出变量的合适线性模型。通过利用线性函数,它试图最小化实际发生输出与预期输出之间差异的平方和。这种方法称为普通最小二乘法。虽然您可能认为某个地方存在一条曲线可以更好地匹配这些点,但线性回归禁止这样做。线性回归的主要优点是简单。非线性回归可能提供更准确的模型,但它们会更慢。在这里,模型使用直线来尝试近似输入数据点。

让我们学习如何创建一个 Python 线性回归模型。

假设您收到一个名为 data_singlevar.txt 的数据文件。该文件包含逗号分隔的行,第一项是输入值,第二项是输出值。这应该是您使用的输入参数。

假设一组点有一条最佳拟合线,

y = a + b * x

其中 b = ( sum(xi * yi) - n * xbar * ybar ) / sum((xi - xbar)^2)

a = ybar - b * xbar

为此,请使用以下代码

程序代码

程序说明

该程序使用给定的样本点集 (X, Y) 来确定最佳拟合线性回归线。为此,首先使用简单线性回归的公式计算 X 和 Y 的均值,然后使用这些均值来确定最佳拟合线的斜率 (b) 和截距 (a)。然后打印最佳拟合线的方程。最后,使用 Matplotlib 创建的散点图上叠加了最佳拟合线,以提供可视化表示。方程 y = a + bx,其中 a 是 y 截距,'b' 是线的斜率,表示最适合数据的线。在给定情况下,最佳拟合线为 y = 1.48 + 0.92x。

如果您执行上面的代码,您可以看到图表的输出

Machine Learning Algorithms in Python

为了演示这种回归方法的二维图,应该注意的是,本示例仅使用了糖尿病数据集的第一个特征。该图说明了线性回归如何尝试创建一条直线,以最佳地最小化数据集中观测响应与线性近似所做的预测之间的残差平方和。

下面提供的程序代码可用于确定系数、残差平方和和方差得分。

程序代码

程序说明

该程序使用 Sklearn 包中的糖尿病数据集构建了一个线性回归模型。数据被分成训练集和测试集,构建模型,并进行预测。为了评估模型的准确性和数据拟合度,程序计算了系数、均方误差和 R 平方,其中 1 分表示完美匹配。

运行上面的代码后,您将看到如下所示的输出。

Automatically created module for IPython interactive environment
('Coefficients: \n', array([ 941.43097333]))
Mean squared error: 3035.06
Variance score: 0.41

Machine Learning Algorithms in Python

逻辑回归

另一个统计学家开发的机器学习方法是逻辑回归。对于二元分类问题——即只有两个类别值的-问题——这是首选方法。

顾名思义,它是一种分类方法,而不是回归方法。基于给定的自变量集,它用于估算离散值或像 0/1、Y/N 和 T/F 这样的值。通过拟合数据到 Logit 函数,它可以预测事件发生的可能性。因此,它也称为 Logit 回归。因为它预测概率,所以其输出值范围从 0 到 1。

示例

让我用一个简单的例子来解释这个方法。

假设您有一个任务,只有两个可能的结局:要么有解决方案,要么没有。现在想象一下,我们有各种各样的谜题,以了解一个人擅长哪些学科。如果提供三角学谜题,一个人完成它的可能性可能是 80%。另一方面,一个人完成地理谜题的可能性可能只有 20%。这是逻辑回归可以帮助解决的问题。根据数学,预测变量线性组合,以描述结果的对数概率。

在上面的例子中,p 代表感兴趣的特征出现的可能性。它选择参数来增加观察样本值的概率,而不是试图最小化传统回归中的平方误差和。

回想一下,对数是模拟阶跃函数最好的数学方法之一。

在处理逻辑回归时,以下详细信息可能很重要:

  • 目标是找到平衡每个输入变量的系数的值,这与回归类似。
  • 与线性回归不同,使用一种称为逻辑函数的非线性函数来找到输出的预测。
  • 逻辑函数类似于一个大的“S”,将任何数字转换为 0 到 1 的范围。这很有用,因为我们可以使用一个规则来预测类别值,并将 0 和 1 分配给逻辑函数的输出。
  • 逻辑回归模型以这样一种方式学习,它所做的预测也可用于确定某个数据实例是否属于类别 0 或类别 1。在需要为预测提供额外理由的情况下,这可能很有用。
  • 与线性回归类似,逻辑回归在消除可比且不相关的输出变量特征时表现更好。

下面的代码演示了如何创建逻辑表达式图,其中使用逻辑曲线和值(0 或 1 或类别一或二)将合成数据集分类为类别一或二。

程序代码

程序说明

对于二元分类问题,此代码说明了逻辑回归和线性回归模型。它创建了一个具有噪声和线性决策边界的合成数据集。在拟合逻辑回归模型(蓝色)到数据后,使用 Sigmoid 函数描绘了决策边界。还对数据(绿色)拟合了线性回归模型。虽然线性回归模型试图匹配线性关系,但逻辑回归模型更好地代表了问题本身的二元分类性质。该图通过显示数据点、逻辑回归决策边界和线性回归线,直观地比较了这两种模型。

输出

Machine Learning Algorithms in Python

决策树算法

这种监督式学习方法主要用于分类问题。它可用于离散和连续的因变量。我们使用这种方法将总体分成两个或多个同质组。为了创建尽可能多的独立组,这是基于最重要的特征完成的。

在机器学习中,决策树通常用于分类和回归。在决策分析中,决策树用于公开且直观地反映决策和决策制定。它采用类似决策树的方法。

决策树用其分支在底部,根部在顶部表示。图片中的粗体字表示一个内部节点或条件,树的分支和边是基于此构建的。

示例

设想一个使用泰坦尼克号数据集预测乘客生存或死亡的场景。性别、年龄和 sibs(配偶/子女数量)是数据集中用于下面模型的三个特征/属性/列。在此实例中,红色和绿色字母分别表示乘客死亡或生存。

Machine Learning Algorithms in Python

在某些情况下,根据各种特征将总体分成几组,以确定“他们是否做某事”。它使用各种方法,包括 Gini、信息增益、卡方、熵等,将总体分成几组异质组。

玩 Jezzball,一款经典的微软游戏,是理解决策树如何工作的最佳方法。在这款游戏中,您基本上必须在移动的墙壁房间里建造墙壁,以便在没有任何球的情况下清除大部分空间。

因此,每次用一堵墙分割空间时,您都在尝试将其容纳两个不同的种群。与决策树非常相似,一个种群被分成尽可能多的独立组。

查看下面的代码和输出

程序代码

程序说明

使用 Iris 数据集,可以使用提供的 Python 程序实现决策树分类器。它首先导入必要的库,包括 scikit-learn、pandas、matplotlib 和 numpy。从 CSV 文件导入后,Iris 数据集中的列被重命名为“X1”、“X2”、“X3”、“X4”和“Y”,分别用于特征和目标。

然后将数据集分成训练集和测试集,其中训练集占总数据集的 70%。使用“gini”标准设计决策树分类器,然后将其拟合到训练数据集。打印模型的准确率,以显示其在测试数据上的性能。

该程序生成决策树的图形表示,并使用 graphviz 和 Pydotplus 将其显示为图像以进行可视化。这使得能够看到树的组织方式和决策的制定方式。

输出

Accuracy:
0.955555555556

示例

为了在此案例中确定准确率,我们正在使用纸币认证数据集。

程序代码

运行上面的代码时,您可以看到如下输出

输出

Scores: [95.62043795620438, 97.8102189781022, 97.8102189781022, 
94.52554744525547, 98.90510948905109]
Mean Accuracy: 96.934%

支持向量机 (SVM)

已知的监督分类技术,用于区分不同数据类别,包括支持向量机或 SVM。

通过调整线的参数,可以通过使每个组中最接近的点彼此最远来对这些向量进行分类。

该向量定义上是线性的,并且通常线性表示。然而,如果内核类型从默认的“高斯”或线性类型更改,向量也可以呈现非线性形状。

这是一种分类技术,其中每个数据点被表示为 n 维空间中的一个点(n 是特征的数量),其中每个特征的值是特定坐标的值。

Machine Learning Algorithms in Python

找到一条线将数据分成两组已不同分类的数据。该线与每个组中最接近的点的距离将是最远的。

Machine Learning Algorithms in Python

上面示例中的黑线将数据分成两组,这两组被不同地分类,因为它是在最远的两个点最接近的线上。我们使用这条线来分类数据。然后可以根据测试数据落在线的哪一侧来对新数据进行分类。

程序代码

当您执行上述代码时,您可以看到结果和下面的图。

输出

Text(0.5,27.256,'X1')

Machine Learning Algorithms in Python

朴素贝叶斯算法

这是一种基于预测变量独立性和贝叶斯定理的分类方法。简单来说,朴素贝叶斯分类器认为一个特征在一个类中的存在与其他特征的存在无关。

例如,如果水果是球形、橙色且直径约为 3 英寸,则可以将水果归类为橙子。即使这些特征相互依赖或与其他特征的存在相关,朴素贝叶斯分类器也会单独考虑所有这些特征对该水果是橙子的可能性做出贡献。

朴素贝叶斯模型易于构建,尤其适用于大型数据集。除了易于使用之外,朴素贝叶斯还以比最复杂的分类技术更好的性能而闻名。

从 P(c)、P(x) 和 P(x|c),可以使用贝叶斯定理计算后验概率 P(c|x)。查看此处提供的方程

P(c/x) = P(x/c)P(c)/P(x)

其中,

  • P(c|x) 表示给定预测变量(属性)的类(目标)的后验概率。
  • 类(目标)的先验概率是 P(c)。
  • 似然度,或 P(x|c),是特定类预测变量的概率。
  • P(x) 是预测变量的先验概率。

看看下面的样本以更好地理解。

考虑一个具有相应目标变量“Play”的天气数据训练批次。现在我们必须根据天气对参与游戏的参与者进行分类。为了做到这一点,必须执行以下操作。

步骤 1:将数据集转换为频率表

步骤 2:通过确定概率来创建似然表,例如,阴天概率为 0.29,比赛概率为 0.64。

Machine Learning Algorithms in Python

步骤 3:为了确定每个类的后验概率,请使用朴素贝叶斯方程。预测结果是后验概率最高的类。

问题:如果天气晴朗,球员会玩吗?

解决方案:通过使用上述方法,所以 P(Yes | Sunny) = P( Sunny | Yes) * P(Yes) / P (Sunny)

这里我们有 P (Sunny |Yes) = 3/9 = 0.33,P(Sunny) = 5/14 = 0.36,P(Yes) = 9/14 = 0.64

现在,P (Yes | Sunny) = 0.33 * 0.64 / 0.36 = 0.60,具有更高的概率。

朴素贝叶斯使用类似的技术来预测基于不同属性的各种类的概率。当存在具有多个类的-问题时,此方法主要用于文本分类。

可以在下面的代码中找到实现朴素贝叶斯的示例。

程序代码

程序说明

提供的 Python 程序旨在实现最简单的二元分类问题的朴素贝叶斯分类器。它从 CSV 文件加载数据集,将其分成训练集和测试集,计算训练集中每个按类分类的属性的均值和标准差统计数据,并使用这些统计数据来计算测试实例属于与训练实例相同类的可能性,然后进行预测。最后,它评估了模型预测测试数据的准确性。然而,该代码存在许多问题,包括不正确的打印语句、缺失的“return”指令和不正确的缩进。

输出

Split 1372 rows into train = 919 and test = 453 rows
Accuracy: 83.6644591611%

K-最近邻 (KNN)

KNN,也称为 K-最近邻,是一种以分类为重点的监督式学习算法。这种简单的算法根据其 k 个邻居的多数票对传入的实例进行分组,并保存所有当前可访问的案例。根据距离函数,被分配到某个类的-案例是其 K 个最近邻中最常见的。这些距离函数包括曼哈顿距离、欧氏距离、汉明距离和闵可夫斯基距离。第四种函数(汉明距离)用于分类变量,而前三种用于连续函数。如果 K = 1,则示例被简单地放置在其最近邻的类中。有时,进行 KNN 建模最困难的部分是决定 K。

该方法考虑多个质心,并使用一个函数(通常是欧氏距离)计算它们之间的距离。然后它评估结果,并根据每个点在所有最近点中的最佳位置对其进行分组。

KNN 可应用于回归和分类-问题。然而,在行业中,它更常用于分类-问题。KNN 可以很容易地映射到现实世界。

在选择 KNN 之前,请牢记以下几点:

  • KNN 的计算成本很高。
  • 有必要对变量进行归一化,以防止更大范围变量的偏差。
  • 在使用 KNN 之前,更多地关注预处理步骤,例如噪声和异常值去除。
Machine Learning Algorithms in Python

查看下面的代码以更深入地理解 KNN

程序代码

程序说明

随附的代码演示了如何为基本的分类任务使用 scikit-learn 库的 K-最近邻 (KNN) 分类器。它导入了必要的库,加载了“iris_df.csv”数据集,并对数据进行了预处理、可视化和划分训练集和测试集。在用五个邻居训练 KNN 模型后,评估了其准确率。最后打印了准确率得分。然而,该代码确实存在一些问题。例如,“from sklearn.cross_validation”的导入语句是错误的;应该是“from sklearn.model_selection”。此外,还缺少“pandas”、“seaborn”和“matplotlib.pyplot”的导入语句。更详细的注释和说明也将提高代码的可读性。

输出

('Accuracy: \n,' 0.75555555555555554)

Machine Learning Algorithms in Python

K 均值

这种特殊的无监督方法解决了聚类-问题。其过程使用假定的 k 个聚类数量来直观且直接地对给定数据集进行分类。在聚类内,数据点在与同级组相比时表现出同质性和异质性。

K-means 如何形成聚类?

K-means 使用以下过程创建聚类:

  • K-means 为每个聚类选择 k 个质心或点。
  • 每个数据点与最近的质心一起创建一个聚类或 k 个聚类。
  • 根据当前聚类的成员确定每个聚类的质心。这里我们有了新的质心。

请重做步骤 2 和 3,因为我们有了新的质心。确定每个数据点与新质心的最近距离,以便加入新的 k 聚类。继续这样做,直到收敛或质心保持不变。

计算 K 的值

在 K-means 中,我们有聚类,每个聚类都有一个唯一的质心。聚类的平方和是聚类质心与其数据点之间差异的平方和。此外,通过将每个聚类的平方和相加,可以获得聚类解的总簇内平方和。

我们知道随着聚类数量的增加,这个值会减小,但是如果您绘制数据,您可以看到平方距离下降得很快,直到某个值 k,然后在此之后急剧减慢。这就是我们可以确定理想聚类大小的地方。

注意此代码

程序代码

输出

Machine Learning Algorithms in Python
[ [ 1.16666667 1.46666667] [ 7.33333333 9. ] ]
[0 1 0 1 0 1]
('coordinate:', array([ 1., 2.]), 'label:', 0)
('coordinate:', array([ 5., 8.]), 'label:', 1)
('coordinate:', array([ 1.5, 1.8]), 'label:', 0)
('coordinate:', array([ 8., 8.]), 'label:', 1)
('coordinate:', array([ 1. , 0.6]), 'label:', 0)
('coordinate:', array([ 9., 11.]), 'label:', 1)

Machine Learning Algorithms in Python

这是供您理解的附加代码

程序代码

输出



Machine Learning Algorithms in Python

随机森林

随机森林是一种流行的监督式集成学习方法。“集成”是指将一组“弱学习器”组合成一个强大的预测器。在这里,弱学习器都是随机构建的决策树,它们组合起来创建随机森林,也就是强大的预测器。

注意此代码

程序代码

输出

('Accuracy: \n', 1.0)

集成方法的目标是通过组合使用特定学习方法构建的多个基础估计器的预测,来提高泛化能力和鲁棒性,从而超越单个估计器。

sklearn.ensemble 模块包含两种基于随机决策树的平均策略:RandomForest 算法和 Extra-Trees 方法。这两种算法都是扰动-组合方法 [B1998],经过定制以与树一起使用。这意味着通过在分类器开发过程中添加随机性,会产生各种分类器。每个分类器的平均预测被作为集成预测。

如以下代码所示,森林分类器必须使用两个数组进行拟合:一个大小为 [n_samples] 的数组 Y 包含训练样本的目标值(类标签),以及一个大小为 [n_samples, n_features] 的稀疏或密集数组 X 包含训练数据。

编码

只要 Y 是一个维度为 [n_samples, n_outputs] 的数组,树林也适用于多输出情况。

与允许每个分类器对单个类进行投票的原始文章 [B2001] 不同,scikit-learn 方法通过平均其概率预测来组合分类器。

随机森林是指决策树的集成。我们在随机森林中拥有一组决策树,我们称之为“森林”。当根据新对象的特征对其进行分类时,每棵树都提供一个分类,称为该类的“投票”。森林选择所有森林树中投票最多的分类。

每棵树的种植和生长如下:

  • 选择 N 个实例的随机样本,但如果训练集中的案例数为 N,则有放回。训练集用于树的生长。
  • 当有 M 个输入变量时,给定一个数字 m<
  • 每棵树都生长到完全潜力。不进行修剪。

降维算法

减少维度是另一个流行的无监督学习问题。在某些情况下,可能存在成千上万甚至数百万个输入或解释变量,这会使处理和计算成本高昂。此外,如果任何输入变量捕获噪声或与基本关系无关,程序的泛化能力可能会减弱。

确定输入因子对输出或响应变量影响最大的过程称为降维。数据可视化有时也利用降维。当属性的大小沿图表的 x 轴显示,而属性的价格沿 y 轴绘制时,很容易可视化回归问题,例如根据属性大小预测属性价格。同样,添加第二个解释变量可以使属性价格回归问题易于可视化。例如,可以将房产的房间数量映射到 z 轴。然而,可视化具有数千个输入变量的问题变得不可行。

降维使用一组较小的输入变量来处理大量的解释变量,从而尽可能多地保留信息。

PCA 是一种有效的数据分析降维方法。尤其值得注意的是,在处理数百或数千个不同的输入变量时,它可以显著减少模型中所需的计算量。由于这是一项无监督学习活动,用户仍需评估结果,以确保保留了原始数据集约 95% 的行为。

查看下面的代码以更深入地理解

程序代码

输出

4L

在过去五年中,各级各点的数数据收集呈指数级增长。除了创建新的数据源外,政府机构、研究组织和公司还在不同时间和阶段收集极其全面的数据。

例如,为了向客户提供个性化关注,电子商务公司正在收集有关其客户的更多信息,包括他们的人口统计信息、浏览历史、偏好、过去购买记录和评论。在不丢失尽可能多信息的情况下,从现在存在的数百个特征中消除特征可能很困难。降维在这些情况下非常有用。

提升算法

一类称为“提升”的算法用于将弱学习器转换为强学习器。为了进一步理解这个定义,让我们来解决以下垃圾邮件识别问题。

应该使用什么过程来确定电子邮件是否为垃圾邮件?使用以下标准,我们将首先区分被认为是垃圾邮件和不是垃圾邮件的电子邮件:

  • 电子邮件是垃圾邮件,并且只包含一个图片文件(广告图形)。
  • 电子邮件中只有一个或多个链接;这是垃圾邮件。
  • 电子邮件正文是垃圾邮件,并包含像“您赢得了xxxxx美元的奖金。”这样的句子。
  • 不是垃圾邮件,而是来自我们官方网站“Tutorialspoint.com”的电子邮件。
  • 不是垃圾邮件,而是来自已知来源的电子邮件。

上面已经建立了几个标准来将电子邮件归类为“垃圾邮件”或“不是垃圾邮件”。然而,这些标准中没有一个足够强大,可以正确地将电子邮件归类为“垃圾邮件”或“不是垃圾邮件”。因此,这些规则被称为弱学习器。

为了将每个弱学习器转换为强学习器,我们使用以下技术集成它们的预测:

  • 使用加权/平均值
  • 考虑到投票数更高的预测

举个例子,假设我们已经识别了 7 个弱学习器。这七个中有五个被选为“垃圾邮件”,而两个被评为“非垃圾邮件”。考虑到“垃圾邮件”的投票总数超过五票,在这种情况下,我们将自动将电子邮件归类为垃圾邮件。

它是如何工作的?

提升通过组合弱或基本学习器来创建一个强大的规则。在本节中,您将了解提升如何找到弱规则。

我们使用具有不同分布的基本学习(ML)技术来寻找弱规则。基础学习方法每次使用时都会产生一个新的弱预测规则。这会反复使用迭代过程。提升方法在多次迭代后将这些弱规则合并为单个强大的预测规则。

为了选择每个轮次的合适分布,请遵循指定的过程:

步骤 1:基本学习器获取每个分布,并赋予其相同的权重。

步骤 2:如果初始基本学习过程产生了任何预测错误,我们会给预测错误更多的权重。然后使用下一个基本学习方法。

迭代步骤 2,直到达到基本学习算法的限制,或者获得更高的准确率。

最后,它通过合并弱学习器的输出来创建一个强学习器,这提高了模型的预测能力。提升更注重具有更高错误率或因错误规则而被错误分类的案例。

提升算法类型

可以使用各种引擎执行提升技术,包括最大化边缘的分类算法和决策树桩。这里有一个不同提升算法的列表。

  • AdaBoost(自适应提升)
  • 梯度树提升
  • XGBoost

本节将涵盖梯度提升和 AdaBoost 技术以及相应的提升算法。

AdaBoost

请参考附图以解释 Ada-boost 算法。

Machine Learning Algorithms in Python

以下是它的解释:

框 1:如您所见,每个数据项都赋予了相等的权重,我们使用决策过程将其分类为 +(加号)或 -(减号)。为了对数据点进行分类,决策树桩 (D1) 在左侧画了一条垂直线。这条垂直线将三个 +(加号)错误地预测为 -(减号)。因此,我们将应用另一个决策树桩,并赋予这三个 +(加号)更高的权重。

Machine Learning Algorithms in Python

框 2:在这种情况下,显然错误预测的三个 +(加号)数据点比其他数据点更大。在这种情况下,第二个决策树桩 (D2) 将尝试准确地预测它们。现在,三个错误分类的 +(加号)已被右侧的垂直线 (D2) 正确分类。然而,它再次产生了错误的分类。这次是三个 -(减号)数据点。再次,我们将应用另一个决策树桩,并赋予这三个 -(负号)数据点更大的权重。

Machine Learning Algorithms in Python

框 3:在这种情况下,三个 -(减号)数据值具有更高的权重。为了准确预测这些错误分类的观测值,使用了决策树桩 (D3)。这次,基于错误识别观测值的大权重创建了一条水平线,以将数据点分类为 +(加号)和 -(减号)。

Machine Learning Algorithms in Python

框 4:与单独的弱学习器相比,我们将 D1、D2 和 D3 结合起来,创建了一个具有复杂规则的强预测。与任何弱学习器相比,很明显我们的算法相当有效地分类了这些观测值。

Machine Learning Algorithms in Python

AdaBoost 或自适应提升

它的运行方式与之前涵盖的类似。它使用不同的加权训练集拟合一系列表现不佳的学习器。它开始时对原始数据集进行预测,并赋予每个观测值相同的权重。如果第一个学习器进行了错误的预测,它会赋予被错误预测的数据更多的权重。由于这是一个迭代过程,它会不断添加学习器,直到准确率或模型数量达到限制。

使用 AdaBoost,主要使用决策树桩。但是,如果机器学习算法从训练数据集中获取权重,我们可以将其用作基础学习器。AdaBoost 技术可应用于回归和分类问题。

为此,您可以使用以下 Python 代码

程序代码

梯度提升

梯度提升中连续训练许多模型。使用梯度下降方法,每个新模型逐渐最小化整个系统的损失函数(y = axe + b + e,“e”是误差分量)。为了响应更准确的变量估计,学习方法一个接一个地拟合新模型。

此技术的主要目标是创建适用于整个集成的新基础学习器,并且可以与损失函数的负梯度最优地相关联。

梯度树提升,或 GBRT,是提升到我们要在 Python Sklearn 模块中使用的任意可微分损失函数的泛化。它可以应用于分类和回归问题。

为此,您可以使用以下代码

程序代码