机器学习 - 网格搜索
在此页面上,W3schools.com 与 纽约数据科学学院 合作,为我们的学生提供数字培训内容。
网格搜索
大多数机器学习模型都包含可以调整以改变模型学习方式的参数。例如,来自 sklearn
的逻辑回归模型有一个参数 C
,用于控制正则化,这会影响模型的复杂性。
我们如何为 C
选择最佳值?最佳值取决于用于训练模型的数据。
它是如何工作的?
一种方法是尝试不同的值,然后选择给出最佳分数的值。这种技术被称为网格搜索。如果我们要为两个或更多参数选择值,我们将评估所有值的组合,从而形成一个值网格。
在我们开始示例之前,最好先了解我们正在更改的参数的作用。C
值越高,表示模型认为训练数据与真实世界信息越相似,对训练数据赋予更大的权重。而 C
值越低,则相反。
使用默认参数
首先,让我们看看在不使用网格搜索的情况下,仅使用基本参数能生成什么样的结果。
首先,我们必须加载将要使用的数据集。
来自 sklearn 的数据集
鸢尾花 = datasets.load_iris()
接下来,为了创建模型,我们必须有一组自变量 X 和一个因变量 y。
X = 鸢尾花['数据']
y = 鸢尾花['目标']
现在我们将加载逻辑模型来对鸢尾花进行分类。
来自 sklearn.linear_model 导入 LogisticRegression
创建模型,将 max_iter 设置为更高的值以确保模型找到结果。
请记住,逻辑回归模型中 C
的默认值是 1
,我们稍后会进行比较。
在下面的示例中,我们查看鸢尾花数据集,并尝试使用逻辑回归中 C
的不同值来训练模型。
逻辑回归 = LogisticRegression(max_iter = 10000)
创建模型后,我们必须将模型拟合到数据。
print(logit.fit(X,y))
为了评估模型,我们运行 score 方法。
print(logit.score(X,y))
示例
来自 sklearn 的数据集
来自 sklearn.linear_model 导入 LogisticRegression
鸢尾花 = datasets.load_iris()
X = 鸢尾花['数据']
y = 鸢尾花['目标']
逻辑回归 = LogisticRegression(max_iter = 10000)
print(logit.fit(X,y))
print(logit.score(X,y))
运行示例 »
在 C = 1
的默认设置下,我们取得了 0.973
的分数。
让我们看看通过使用不同值的网格搜索是否能做得更好,目前的分数为 0.973。
广告
实现网格搜索
我们将遵循之前的相同步骤,但这次我们将为 C
设置一个值范围。
知道为搜索参数设置哪些值需要领域知识和实践的结合。
由于 C
的默认值是 1
,我们将设置一个围绕它的值范围。
C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
接下来,我们将创建一个 for 循环来替换 C
的值,并在每次更改时评估模型。
首先我们将创建一个空列表来存储分数。
分数 = []
为了改变 C
的值,我们必须遍历值的范围,并在每次迭代中更新参数。
对于 C 中的每个选择
logit.set_params(C=choice)
logit.fit(X, y)
scores.append(logit.score(X, y))
将分数存储在列表中后,我们可以评估 C
的最佳选择。
print(scores)
示例
来自 sklearn 的数据集
来自 sklearn.linear_model 导入 LogisticRegression
鸢尾花 = datasets.load_iris()
X = 鸢尾花['数据']
y = 鸢尾花['目标']
逻辑回归 = LogisticRegression(max_iter = 10000)
C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
分数 = []
对于 C 中的每个选择
logit.set_params(C=choice)
logit.fit(X, y)
scores.append(logit.score(X, y))
print(scores)
运行示例 »
结果解释
我们可以看到,较低的 C
值表现不如基准参数 1
。然而,当我们将 C
的值增加到 1.75
时,模型的准确性有所提高。
似乎将 C
增加到超过这个量并不能提高模型准确性。
关于最佳实践的注意事项
我们使用训练逻辑回归模型的数据对它进行了评分。如果模型与该数据过于吻合,它可能不擅长预测未见过的数据。这种统计误差被称为**过拟合**。
为了避免被训练数据上的分数误导,我们可以留出我们数据的一部分,专门用于测试模型。请参考关于训练/测试分割的讲座,以避免被误导和过拟合。