每个程序员都应该知道的 40 个算法(二)(4)

简介: 每个程序员都应该知道的 40 个算法(二)

每个程序员都应该知道的 40 个算法(二)(3)https://developer.aliyun.com/article/1506342

分类记录

决策树分类器可用于对数据点进行分类,例如以下示例:

  • 抵押贷款申请:训练一个二元分类器,以确定申请人是否可能违约。
  • 客户细分:将客户分类为高价值、中价值和低价值客户,以便为每个类别定制营销策略。
  • 医学诊断:训练一个分类器,可以对良性或恶性生长进行分类。
  • 治疗效果分析:训练一个分类器,可以标记对特定治疗产生积极反应的患者。

特征选择

决策树分类算法选择一小部分特征来创建规则。当特征数量很大时,可以使用该特征选择来选择另一个机器学习算法的特征。

理解集成方法

集成是一种机器学习方法,通过使用不同的参数创建多个略有不同的模型,然后将它们组合成一个聚合模型。为了创建有效的集成,我们需要找到我们的聚合标准,以生成最终模型。让我们看看一些集成算法。

使用 XGBoost 算法实现梯度提升

XGBoost 于 2014 年创建,基于梯度提升原理。它已成为最受欢迎的集成分类算法之一。它生成一堆相互关联的树,并使用梯度下降来最小化残差误差。这使其非常适合分布式基础设施,如 Apache Spark,或云计算,如 Google Cloud 或亚马逊网络服务(AWS)

现在让我们看看如何使用 XGBoost 算法实现梯度提升:

  1. 首先,我们将实例化 XGBClassfier 分类器,并使用数据的训练部分来训练模型:

  1. 然后,我们将基于新训练的模型生成预测:
y_pred = classifier.predict(X_test)
cm = metrics.confusion_matrix(y_test, y_pred)
cm

产生以下输出:

  1. 最后,我们将量化模型的性能:
accuracy= metrics.accuracy_score(y_test,y_pred)
recall = metrics.recall_score(y_test,y_pred)
precision = metrics.precision_score(y_test,y_pred)
print(accuracy,recall,precision)

这给我们以下输出:

接下来,让我们看看随机森林算法。

使用随机森林算法

随机森林是一种集成方法,通过组合多个决策树来减少偏差和方差。

训练随机森林算法

在训练中,该算法从训练数据中获取N个样本,并创建我们整体数据的m个子集。这些子集是通过随机选择输入数据的一些行和列来创建的。该算法构建m个独立的决策树。这些分类树由C[1]C[m]表示。

使用随机森林进行预测

模型训练完成后,可以用于标记新数据。每个个体树生成一个标签。最终预测由这些个体预测的投票决定,如下所示:

请注意,在上图中,训练了m棵树,表示为C[1]C[m]。即树 = {C[1],…,C[m]}

每棵树生成一个由一组表示的预测:

个体预测 = P= {P[1],…, P[m]}

最终预测由P[f]表示。它由个体预测的大多数决定。mode函数可用于找到多数决定(mode是最常重复且处于多数的数字)。个体预测和最终预测如下所示:

P[f] = mode §

区分随机森林算法和集成提升

随机森林算法生成的每棵树都是完全独立的。它不知道集成中其他树的任何细节。这使它与其他技术有所不同,如集成增强。

使用随机森林算法进行分类器挑战

让我们实例化随机森林算法,并使用它来训练我们的模型使用训练数据。

这里有两个关键的超参数:

  • n_estimators
  • max_depth

n_estimators超参数控制构建多少个独立的决策树,max_depth超参数控制每个独立决策树可以有多深。

换句话说,决策树可以不断分裂,直到它有一个节点代表训练集中的每个给定示例。通过设置max_depth,我们限制了它可以进行多少级别的分裂。这控制了模型的复杂性,并确定了它与训练数据的拟合程度。如果我们参考以下输出,n_estimators控制了随机森林模型的宽度,max_depth控制了模型的深度:

一旦随机森林模型训练好了,让我们用它进行预测:

y_pred = classifier.predict(X_test)
cm = metrics.confusion_matrix(y_test, y_pred)
cm

它的输出是:

现在,让我们量化我们的模型有多好:

accuracy= metrics.accuracy_score(y_test,y_pred)
recall = metrics.recall_score(y_test,y_pred)
precision = metrics.precision_score(y_test,y_pred)
print(accuracy,recall,precision)

我们将观察以下输出:

接下来,让我们来看看逻辑回归。

逻辑回归

逻辑回归是一种用于二元分类的分类算法。它使用逻辑函数来制定输入特征和目标变量之间的交互。它是用于建模二元因变量的最简单的分类技术之一。

假设

逻辑回归假设以下内容:

  • 训练数据集没有缺失值。
  • 标签是一个二进制类别变量。
  • 标签是有序的,换句话说,是一个具有有序值的分类变量。
  • 所有特征或输入变量彼此独立。

建立关系

对于逻辑回归,预测值计算如下:

假设

所以现在:

上述关系可以用图形表示如下:

注意,如果z很大,σ (z)将等于1。如果z非常小或非常负,σ (z)将等于0。因此,逻辑回归的目标是找到Wj的正确值。

逻辑回归是根据用于制定它的函数命名的,称为逻辑Sigmoid 函数

损失和成本函数

loss函数定义了我们想要量化训练数据中特定示例的错误的方式。cost函数定义了我们想要最小化整个训练数据集中的错误的方式。因此,loss函数用于训练数据集中的一个示例,cost函数用于量化实际值和预测值的整体偏差。它取决于wh的选择。

逻辑回归中使用的loss函数如下:

Loss (ý^((i)), y^((i))) = - (y^((i))log ý((i))+(1-y((i)) ) log (1-ý^((i)))

注意当*y^((i)) = 1, Loss(ý^((i)), y^((i))**) = - logý((i))*.最小化损失将导致ý((i))的值很大。作为 Sigmoid 函数,最大值将是1

如果*y^((i)) = 0, Loss (ý^((i)), y^((i))) = - log (1-ý((i))**)*。最小化损失将导致*ý((i))*尽可能小,即0

逻辑回归的成本函数如下:

何时使用逻辑回归

逻辑回归在二元分类器方面表现出色。当数据量很大但数据质量不佳时,逻辑回归效果不佳。它可以捕捉不太复杂的关系。虽然它通常不会产生最佳性能,但它确实为起步设定了一个很好的基准。

使用逻辑回归算法进行分类器挑战

在本节中,我们将看到如何使用逻辑回归算法进行分类器挑战:

  1. 首先,让我们实例化一个逻辑回归模型,并使用训练数据对其进行训练:
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state = 0)
classifier.fit(X_train, y_train)
  1. 让我们预测test数据的值并创建一个混淆矩阵:
y_pred = classifier.predict(X_test)
cm = metrics.confusion_matrix(y_test, y_pred)
cm

运行上述代码后,我们得到以下输出:

  1. 现在,让我们看看性能指标:
accuracy= metrics.accuracy_score(y_test,y_pred)
recall = metrics.recall_score(y_test,y_pred)
precision = metrics.precision_score(y_test,y_pred)
print(accuracy,recall,precision)
  1. 运行上述代码后,我们得到以下输出:

接下来,让我们看看SVM

SVM 算法

现在,让我们看看 SVM。SVM 是一种找到最大化两个类之间间隔的最优超平面的分类器。在 SVM 中,我们的优化目标是最大化间隔。间隔被定义为分隔超平面(决策边界)与最靠近该超平面的训练样本之间的距离,称为支持向量。因此,让我们从一个只有两个维度X1X2的非常基本的例子开始。我们希望有一条线将圆圈与十字分开。如下图所示:

我们画了两条线,都完美地将十字与圆圈分开。然而,必须有一个最佳线或决策边界,使我们有最佳机会正确分类大多数额外的例子。一个合理的选择可能是一条均匀分布在这两个类之间的线,为每个类提供一点缓冲,如下所示:

现在,让我们看看如何使用 SVM 来训练我们挑战的分类器。

使用 SVM 算法进行分类器挑战

  1. 首先,让我们实例化 SVM 分类器,然后使用标记数据的训练部分对其进行训练。kernel超参数确定应用于输入数据的转换类型,以使其线性可分。
from sklearn.svm import SVC
classifier = SVC(kernel = 'linear', random_state = 0)
classifier.fit(X_train, y_train)
  1. 训练完成后,让我们生成一些预测并查看混淆矩阵:
y_pred = classifier.predict(X_test)
cm = metrics.confusion_matrix(y_test, y_pred)
cm
  1. 观察以下输出:

  1. 现在,让我们来看看各种性能指标:
accuracy= metrics.accuracy_score(y_test,y_pred)
recall = metrics.recall_score(y_test,y_pred)
precision = metrics.precision_score(y_test,y_pred)
print(accuracy,recall,precision)

运行上述代码后,我们得到以下值作为输出:

理解朴素贝叶斯算法

基于概率论,朴素贝叶斯是最简单的分类算法之一。如果使用正确,它可以得出准确的预测。朴素贝叶斯算法之所以被如此命名有两个原因:

  • 它基于一个天真的假设,即特征和输入变量之间是独立的。
  • 它基于贝叶斯定理。

该算法试图基于先前属性/实例的概率对实例进行分类,假设属性完全独立。

有三种类型的事件:

  • 独立事件不会影响另一个事件发生的概率(例如,收到一封电子邮件提供免费参加科技活动的机会公司进行重新组织)。
  • 依赖事件会影响另一个事件发生的概率;也就是说,它们在某种程度上是相关的(例如,你准时参加会议的概率可能会受到航空公司员工罢工或航班不准时的影响)。
  • 互斥事件不能同时发生(例如,单次掷骰子得到三和六的概率为 0——这两个结果是互斥的)。

贝叶斯定理

贝叶斯定理用于计算两个独立事件AB之间的条件概率。事件AB发生的概率由 P(A)和 P(B)表示。条件概率由 P(B|A)表示,这是事件A发生的条件概率,假设事件B已经发生:

计算概率

朴素贝叶斯基于概率基本原理。单个事件发生的概率(观察概率)是通过将事件发生的次数除以可能导致该事件发生的总进程次数来计算的。例如,呼叫中心每天接到 100 多个支持电话,一个月内有 50 次。您想知道基于以前的响应时间,呼叫在 3 分钟内得到响应的概率。如果呼叫中心在 27 次匹配这个时间记录,那么 100 次呼叫在 3 分钟内得到响应的观察概率如下:

  • P(3 分钟内 100 个支持电话)=(27/50)= 0.54(54%)*

根据过去的 50 次记录,100 次呼叫大约有一半的时间可以在 3 分钟内得到响应。

AND 事件的乘法规则

要计算两个或更多事件同时发生的概率,请考虑事件是独立还是相关的。如果它们是独立的,则使用简单的乘法规则:

  • P(结果 1 和结果 2)= P(结果 1)* P(结果 2)*

例如,要计算收到免费参加技术活动的电子邮件的概率工作场所发生重新组织的概率,将使用这个简单的乘法规则。这两个事件是独立的,因为其中一个发生并不影响另一个发生的机会

如果收到技术活动的电子邮件的概率为 31%,并且员工重新组织的概率为 82%,则同时发生的概率如下计算:

P(电子邮件和重新组织)= P(电子邮件)* P(重新组织)=(0.31)*(0.82)= 0.2542(25%)

一般乘法规则

如果两个或更多事件是相关的,则使用一般乘法规则。这个公式实际上在独立和相关事件的情况下都是有效的:

  • P(结果 1 和结果 2)= P(结果 1)* P(结果 2 | 结果 1)*

请注意,P(结果 2 | 结果 1)指的是结果 1已经发生的情况下结果 2发生的条件概率。该公式包含了事件之间的依赖关系。如果事件是独立的,那么条件概率是无关紧要的,因为一个结果不会影响另一个发生的机会,P(结果 2 | 结果 1)就是P(结果 2)。请注意,在这种情况下,该公式变成了简单的乘法规则。

OR 事件的加法规则

在计算两个事件中的一个或另一个发生的概率(互斥)时,使用以下简单的加法规则:

  • P(结果 1 或结果 2)= P(结果 1)+ P(结果 2)*

例如,掷出 6 或 3 的概率是多少?要回答这个问题,首先注意到两个结果不能同时发生。掷出 6 的概率是(1/6),掷出 3 的概率也是如此:

  • P(6 或 3)=(1/6)+(1/6)= 0.33(33%)*

如果事件不是互斥的并且可以同时发生,请使用以下一般加法公式,这在互斥和非互斥的情况下都是有效的:

  • P(结果 1 或结果 2)= P(结果 1)+ P(结果 2)P(结果 1 和结果 2)*

使用朴素贝叶斯算法进行分类器挑战

现在,让我们使用朴素贝叶斯算法来解决分类器挑战:

  1. 首先,我们导入GaussianNB()函数并用它来训练模型:
from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(X_train, y_train)
  1. 现在,让我们使用训练好的模型来预测结果。我们将用它来预测我们的测试分区X_test的标签:
Predicting the Test set results
y_pred = classifier.predict(X_test)
cm = metrics.confusion_matrix(y_test, y_pred)
cm
  1. 现在,让我们打印混淆矩阵:

  1. 现在,让我们打印性能矩阵来量化我们训练模型的质量:
accuracy= metrics.accuracy_score(y_test,y_pred)
recall = metrics.recall_score(y_test,y_pred)
precision = metrics.precision_score(y_test,y_pred)
print(accuracy,recall,precision)

这将产生以下输出:

对于分类算法,获胜者是…

让我们看一下我们提出的各种算法的性能指标。这在下表中总结如下:

算法 准确度 召回率 精确度
决策树 0.94 0.93 0.88
XGBoost 0.93 0.90 0.87
随机森林 0.93 0.90 0.87
逻辑回归 0.91 0.81 0.89
支持向量机 0.89 0.71 0.92
朴素贝叶斯 0.92 0.81 0.92

从前面的表中可以看出,决策树分类器在准确性和召回率方面表现最佳。如果我们寻求精确度,那么支持向量机和朴素贝叶斯之间存在平局,因此任何一个都适用于我们。

了解回归算法

监督机器学习模型使用回归算法之一,如果目标变量是连续变量。在这种情况下,机器学习模型被称为回归器。

在本节中,我们将介绍各种可用于训练监督机器学习回归模型的算法,或者简单地说,回归器。在我们深入了解算法的细节之前,让我们首先为这些算法创建一个挑战,以测试它们的性能、能力和有效性。

呈现回归器挑战

与分类算法使用的方法类似,我们将首先提出一个问题,作为所有回归算法的挑战来解决。我们将把这个共同的问题称为回归器挑战。然后,我们将使用三种不同的回归算法来解决这个挑战。使用一个共同的挑战来测试不同的回归算法有两个好处:

  • 我们可以准备一次数据,然后在所有三个回归算法上使用准备好的数据。
  • 我们可以以有意义的方式比较三种回归算法的性能,因为我们将使用它们来解决同一个问题。

让我们看一下挑战的问题陈述。

回归器挑战的问题陈述

预测不同车辆的里程数在当今是很重要的。高效的车辆对环境有益,也具有成本效益。里程数可以根据发动机功率和车辆特性来估算。让我们为回归器创建一个挑战,训练一个能够根据车辆特性预测车辆的每加仑英里数MPG)的模型。

让我们看看我们将用来训练回归器的历史数据集。

探索历史数据集

以下是我们拥有的历史数据集数据的特征:

名称 类型 描述
名称 类别 标识特定车辆
CYLINDERS 连续 气缸数量(4 至 8 之间)
DISPLACEMENT 连续 发动机排量(立方英寸)
HORSEPOWER 连续 发动机马力
ACCELERATION 连续 从 0 到 60 英里/小时的加速时间(秒)

这个问题的目标变量是一个连续变量,MPG,它指定了每辆车的英里数。

让我们首先为这个问题设计数据处理管道。

使用数据处理管道进行特征工程

让我们看看如何设计一个可重复使用的处理管道来解决回归器挑战。如前所述,我们将一次准备数据,然后在所有回归算法中使用它。让我们按照以下步骤进行:

  1. 我们首先导入数据集,如下所示:
dataset = pd.read_csv('auto.csv')
  1. 现在让我们预览数据集:
dataset.head(5)

数据集将如下所示:

  1. 现在,让我们继续进行特征选择。让我们删除 NAME 列,因为它只是一个用于汽车的标识符。用于识别数据集中行的列对于训练模型是不相关的。让我们删除这一列:
dataset=dataset.drop(columns=['NAME'])
  1. 让我们转换所有的输入变量并填充所有的空值:
dataset=dataset.drop(columns=['NAME'])
dataset= dataset.apply(pd.to_numeric, errors='coerce')
dataset.fillna(0, inplace=True)

填充提高了数据的质量,并准备好用于训练模型。现在,让我们看最后一步:

  1. 让我们将数据分成测试和训练分区:
from sklearn.model_selection import train_test_split
#from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

这创建了以下四个数据结构:

  • X_train:包含训练数据的特征的数据结构
  • X_test:包含训练测试的特征的数据结构
  • y_train:包含训练数据集中标签的值的向量
  • y_test:包含测试数据集中标签的值的向量

现在,让我们使用准备好的数据在三个不同的回归器上,以便比较它们的性能。

线性回归

在所有监督学习技术中,线性回归算法是最容易理解的。我们首先看一下简单线性回归,然后将概念扩展到多元线性回归。

简单线性回归

在其最简单的形式中,线性回归阐述了单个连续自变量和单个连续自变量之间的关系。回归用于显示因变量(显示在 y 轴上)的变化程度可以归因于解释变量(显示在 x 轴上)的变化程度。它可以表示如下:

这个公式可以解释如下:

  • y 是因变量。
  • X 是自变量。
  • 是斜率,表示每增加一个 X,线就上升多少。
  • α 是截距,表示 X = 0 时 y 的值。

单个连续因变量和单个连续自变量之间关系的一些例子如下:

  • 一个人的体重和他们的卡路里摄入量
  • 特定社区房屋价格和面积
  • 空气中的湿度和下雨的可能性

对于线性回归,输入(自变量)和目标(因变量)变量都必须是数值型的。最佳关系是通过最小化每个点到通过所有点的线的垂直距离的平方和来找到的。假设预测变量和目标变量之间是线性关系。例如,投入研发的资金越多,销售额就越高。

让我们看一个具体的例子。让我们尝试阐明特定产品的营销支出和销售之间的关系。它们被发现直接相关。营销支出和销售在二维图上绘制,并显示为蓝色的钻石。这种关系最好通过绘制一条直线来近似,如下图所示:

一旦画出线性线,我们就可以看到营销支出和销售之间的数学关系。

评估回归器

我们画的线性线是因变量和自变量之间关系的近似值。即使最佳线也会与实际值有一些偏差,如下所示:

评估线性回归模型性能的一种典型方法是使用均方根误差RMSE)。这通过数学计算训练模型产生的误差的标准偏差。对于训练数据集中的某个示例,loss 函数计算如下:

损失(ý^((i)), y^((i))) = 1/2(ý^((i)-) y^((i)))²

这导致以下cost函数,最小化训练集中所有示例的损失:

让我们尝试解释 RMSE。如果我们的示例模型的 RMSE 为$50,这意味着大约 68.2%的预测值将在真实值(即α)的$50 范围内。这也意味着 95%的预测值将在实际值的$100(即 2α)范围内。最后,99.7%的预测值将在实际值的$150 范围内。

多元回归

事实上,大多数现实世界的分析都有多个自变量。多元回归是简单线性回归的扩展。关键区别在于额外的预测变量有额外的 beta 系数。在训练模型时,目标是找到最小化线性方程误差的 beta 系数。让我们尝试数学上阐述因变量和一组自变量(特征)之间的关系。

与简单线性方程类似,因变量y被量化为截距项的总和,加上β系数乘以每个i特征的x值:

y = α + β [1] x [1] + β [2] x 2 +…+ β [i] x [i] + ε

误差用ε表示,表明预测并不完美。

β系数允许每个特征对y的值有单独的估计影响,因为y每增加一个单位的x[i],y的变化量为β [i]。此外,截距(α)表示当独立变量都为 0 时y的期望值。

请注意,前述方程中的所有变量都可以用一堆向量表示。目标和预测变量现在是带有行的向量,而回归系数β和误差ε也是向量。

使用线性回归算法进行回归挑战

现在,让我们使用数据集的训练部分来训练模型:

  1. 让我们从导入线性回归包开始:
from sklearn.linear_model import LinearRegression
  1. 然后,让我们实例化线性回归模型,并使用训练数据集对其进行训练:
regressor = LinearRegression()
regressor.fit(X_train, y_train)
  1. 现在,让我们使用数据集的测试部分来预测结果:
y_pred = regressor.predict(X_test)
from sklearn.metrics import mean_squared_error
from math import sqrt
sqrt(mean_squared_error(y_test, y_pred))
  1. 运行上述代码生成的输出将生成以下内容:

如前一节所讨论的,RMSE 是误差的标准差。它表明 68.2%的预测值将在目标变量值的4.36范围内。

何时使用线性回归?

线性回归用于解决许多现实世界的问题,包括以下内容:

  • 销售预测
  • 预测最佳产品价格
  • 量化事件和响应之间的因果关系,例如临床药物试验、工程安全测试或市场研究
  • 识别可用于预测未来行为的模式,给定已知条件,例如预测保险索赔、自然灾害损失、选举结果和犯罪率

线性回归的弱点

线性回归的弱点如下:

  • 它只适用于数值特征。
  • 分类数据需要进行预处理。
  • 它无法很好地处理缺失数据。
  • 它对数据做出假设。

回归树算法

回归树算法类似于分类树算法,只是目标变量是连续变量,而不是类别变量。

使用回归树算法进行回归挑战

在本节中,我们将看到如何使用回归树算法进行回归挑战:

  1. 首先,我们使用回归树算法训练模型:

  1. 一旦回归树模型训练完成,我们就可以使用训练好的模型来预测值:
y_pred = regressor.predict(X_test)
  1. 然后,我们计算 RMSE 来量化模型的性能:
from sklearn.metrics import mean_squared_error
from math import sqrt
sqrt(mean_squared_error(y_test, y_pred))

我们得到以下输出:

梯度提升回归算法

现在,让我们来看看梯度提升回归算法。它使用一组决策树来更好地表达数据中的潜在模式。

使用梯度提升回归算法来解决回归问题

在这一部分,我们将看到如何使用梯度提升回归算法来解决回归问题:

  1. 首先,我们使用梯度提升回归算法来训练模型:

  1. 一旦梯度回归算法模型被训练,我们就可以用它来预测数值:
y_pred = regressor.predict(X_test)
  1. 最后,我们计算 RMSE 来量化模型的性能:
from sklearn.metrics import mean_squared_error
from math import sqrt
sqrt(mean_squared_error(y_test, y_pred))
  1. 运行这个将给我们输出值,如下所示:

对于回归算法,获胜者是…

让我们来看看我们在相同数据和完全相同用例上使用的三种回归算法的表现:

算法 RMSE
线性回归 4.36214129677179
回归树 5.2771702288377
梯度提升回归 4.034836373089085

从所有回归算法的表现来看,很明显梯度提升回归的表现最好,因为它具有最低的 RMSE。其次是线性回归。对于这个问题,回归树算法的表现最差。

实际例子 - 如何预测天气

让我们看看如何使用本章中开发的概念来预测天气。假设我们想根据一年内针对特定城市收集的数据来预测明天是否会下雨。

用于训练该模型的数据在名为weather.csv的 CSV 文件中:

  1. 让我们将数据导入为一个 pandas 数据框:
import numpy as np 
import pandas as pd
df = pd.read_csv("weather.csv")
  1. 让我们来看看数据框的列:

  1. 接下来,让我们来看一下weather.csv数据的前 13 列的标题:

  1. 现在,让我们来看一下weather.csv数据的最后 10 列:

  1. 让我们用x来代表输入特征。我们将在特征列表中删除Date字段,因为在预测的情境下它没有用处。我们还将删除RainTomorrow标签:
x = df.drop(['Date','RainTomorrow'],axis=1)
  1. 让我们用y来代表标签:
y = df['RainTomorrow']
  1. 现在,让我们将数据分成train_test_split
from sklearn.model_selection import train_test_split
train_x , train_y ,test_x , test_y = train_test_split(x,y , test_size = 0.2,random_state = 2)
  1. 由于标签是一个二元变量,我们正在训练一个分类器。因此,在这里逻辑回归将是一个不错的选择。首先,让我们实例化逻辑回归模型:
model = LogisticRegression()
  1. 现在,我们可以使用train_xtest_x来训练模型:
model.fit(train_x , test_x)
  1. 一旦模型被训练,让我们用它进行预测:
predict = model.predict(train_y)
  1. 现在,让我们找出我们训练模型的准确性:

现在,这个二元分类器可以用来预测明天是否会下雨。

摘要

在本章中,我们首先了解了监督式机器学习的基础知识。然后,我们更详细地了解了各种分类算法。接下来,我们研究了评估分类器性能的不同方法,并研究了各种回归算法。我们还研究了用于评估我们研究的算法性能的不同方法。

在下一章中,我们将研究神经网络和深度学习算法。我们将研究训练神经网络所使用的方法,还将研究用于评估和部署神经网络的各种工具和框架。

相关文章
|
18天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
20天前
|
机器学习/深度学习 算法 数据挖掘
每个程序员都应该知道的 40 个算法(四)(4)
每个程序员都应该知道的 40 个算法(四)
16 1
|
20天前
|
机器学习/深度学习 人工智能 算法
每个程序员都应该知道的 40 个算法(四)(3)
每个程序员都应该知道的 40 个算法(四)
18 2
|
20天前
|
分布式计算 并行计算 算法
每个程序员都应该知道的 40 个算法(四)(2)
每个程序员都应该知道的 40 个算法(四)
19 1
|
20天前
|
分布式计算 并行计算 算法
每个程序员都应该知道的 40 个算法(四)(1)
每个程序员都应该知道的 40 个算法(四)
22 2
|
20天前
|
存储 算法 安全
每个程序员都应该知道的 40 个算法(三)(4)
每个程序员都应该知道的 40 个算法(三)
20 1
|
20天前
|
存储 算法 安全
每个程序员都应该知道的 40 个算法(三)(3)
每个程序员都应该知道的 40 个算法(三)
17 0
|
20天前
|
机器学习/深度学习 自然语言处理 算法
每个程序员都应该知道的 40 个算法(三)(2)
每个程序员都应该知道的 40 个算法(三)
17 1
|
20天前
|
机器学习/深度学习 人工智能 算法
每个程序员都应该知道的 40 个算法(三)(1)
每个程序员都应该知道的 40 个算法(三)
18 0
|
4天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于DCT变换和位平面分解的数字水印嵌入提取算法matlab仿真
这是一个关于数字水印算法的摘要:使用MATLAB2022a实现,结合DCT和位平面分解技术。算法先通过DCT变换将图像转至频域,随后利用位平面分解嵌入水印,确保在图像处理后仍能提取。核心程序包括水印嵌入和提取,以及性能分析部分,通过PSNR和NC指标评估水印在不同噪声条件下的鲁棒性。