目录

机器学习 - 网格搜索


在此页面上,W3schools.com 与纽约数据科学院,为我们的学生提供数字培训内容。


网格搜索

大多数机器学习模型都包含可以调整的参数,以改变模型的学习方式。例如,逻辑回归模型,由sklearn,有一个参数C控制正则化,影响模型的复杂性。

我们如何选择最有值的C?最佳值取决于用于训练模型的数据。


它是如何工作的?

一种方法是尝试不同的值,然后选择给出最佳分数的值。这种技术被称为网格搜索。如果我们必须选择两个或多个参数的值,我们将评估值集的所有组合,从而形成值网格。

在我们进入示例之前,最好先了解我们要更改的参数的作用。更高的值C告诉模型,训练数据类似于现实世界的信息,对训练数据给予更大的权重。虽然较低的值C做相反的事情。


使用默认参数

首先让我们看看在不使用基本参数进行网格搜索的情况下我们可以生成什么样的结果。

首先,我们必须首先加载我们将使用的数据集。

from sklearn import datasets
iris = datasets.load_iris()

接下来,为了创建模型,我们必须有一组自变量 X 和一个因变量 y。

X = iris['data']
y = iris['target']

现在我们将加载用于对鸢尾花进行分类的逻辑模型。

from sklearn.linear_model import LogisticRegression

创建模型,将 max_iter 设置为较高的值以确保模型找到结果。

请记住默认值C在逻辑回归模型中是1,我们稍后会对此进行比较。

在下面的示例中,我们查看 iris 数据集并尝试训练具有不同值的模型C在逻辑回归中。

logit = LogisticRegression(max_iter = 10000)

创建模型后,我们必须将模型与数据进行拟合。

print(logit.fit(X,y))

为了评估模型,我们运行评分方法。

print(logit.score(X,y))

示例

from sklearn import datasets
from sklearn.linear_model import LogisticRegression

iris = datasets.load_iris()

X = iris['data']
y = iris['target']

logit = LogisticRegression(max_iter = 10000)

print(logit.fit(X,y))

print(logit.score(X,y))
运行示例 »

默认设置为C = 1,我们取得了0.973

让我们看看是否可以通过实施差值为 0.973 的网格搜索来做得更好。


广告


实施网格搜索

我们将遵循之前的相同步骤,只是这次我们将为C

了解为搜索参数设置哪些值需要结合领域知识和实践。

由于默认值为C1,我们将围绕它设置一系列值。

C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]

接下来我们将创建一个 for 循环来更改C并评估每次更改的模型。

首先,我们将创建一个空列表来存储分数。

scores = []

要更改的值C我们必须循环遍历值的范围并每次更新参数。

for choice in C:
  logit.set_params(C=choice)
  logit.fit(X, y)
  scores.append(logit.score(X, y))

通过将分数存储在列表中,我们可以评估最佳选择C是。

print(scores)

示例

from sklearn import datasets
from sklearn.linear_model import LogisticRegression

iris = datasets.load_iris()

X = iris['data']
y = iris['target']

logit = LogisticRegression(max_iter = 10000)

C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]

scores = []

for choice in C:
  logit.set_params(C=choice)
  logit.fit(X, y)
  scores.append(logit.score(X, y))

print(scores)
运行示例 »

结果解释

我们可以看到较低的值C表现比基本参数差1。然而,当我们增加了C1.75该模型的准确性得到了提高。

看来越来越多C超过这个量无助于提高模型的准确性。


最佳实践注意事项

我们使用与训练逻辑回归模型相同的数据对逻辑回归模型进行评分。如果模型与该数据太接近,它可能不能很好地预测看不见的数据。这种统计误差被称为过拟合

为了避免被训练数据的分数误导,我们可以搁置一部分数据并将其专门用于测试模型的目的。请参阅有关训练/测试拆分的讲座,以避免被误导和过度拟合。