如何寻找合适的模型参数

如果大家一直在从事有关数据科学或机器学习的知识的研究,那么大家肯定遇到过使用MNIST数据集的文章及项目。该数据集一共包括70,000张图像,其中每个图像是0到9十个手写数字中的一个。我们使用相同的数据集来探索在微调机器学习模型参数时产生的前后差异。

本文我们结合代码详细的解释了如何使用GridSearchCV来找到该数据集的最佳拟合参数,并使用它们来提高模型的预测准确性并改善混淆矩阵。

GridSearchCV

首先我们介绍一下GridSearchCV,GridSearchCV是一种调参手段;实质上是通过穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。

为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫grid search

导入库和数据集

工程开始之前我们首先导入必要的库并将训练和测试数据作成.csv格式的文件。数据集中的每一行均由一个标签和784个像素值组成,表示为28x28的图像尺寸。

如何寻找合适的模型参数

如何寻找合适的模型参数

整个训练集数据包括60,000张图像,而测试数据集包括10,000张图像。一旦我们有数据,我们便可以将它的特征和标签分别存储在train_X,train_y,test_X和test_y中。

探索数据集

分析类的分布

正如我们在之前的文章中所讨论的那样,每个类的数据应该大致相同,以确保合适的模型训练且基本没有其他噪声引起的偏差。

如何寻找合适的模型参数

如何寻找合适的模型参数

通过上图我们发现每个数字的数量会有一些差异。然而,这些差异并不是太大,深度学习模型

查看训练图像

让我们看看真实的图像是什么样的。我们从训练数据中随机选择10个图像并使用plt.imshow()进行显示。

如何寻找合适的模型参数

如何寻找合适的模型参数

从数据集中随机选择的图像

我们在这10个随机图像中立即看到的是任何一种类型的数字之间的差异。看上面10张图片中的所有数字为4的图片。其中第一个是粗体和直线,第二个是粗体和对角线,而第三个是细和对角线。如果模型可以从数据中学习并实际检测出所有不同的样式的4,那将是非常了不起。

应用机器学习

我们决定使用随机森林分类器训练数据并预测测试数据。首先我们使用了所有参数的默认值。

如何寻找合适的模型参数

接下来,使用预测,我们计算了准确度和混淆矩阵。

如何寻找合适的模型参数

通过观察我们发现该模型的预测准确率已经达到94.4%。混淆矩阵表明该模型能够正确预测大量的图像。接下来,我们决定调整模型参数以尝试改进结果。

5. 参数调整

为了确定模型的最佳参数值组合,我们使用了GridSearchCV。这是一个由sklearn库提供的方法,它允许我们定义一组我们希望为给定模型尝试的可能值,通过它训练数据并从参数值的组合中得到最佳估计器。

如何寻找合适的模型参数

在这种特殊情况下,我们决定为一些参数选择一系列估计值。估计值的数量可以是100或200,最大深度可以是10,50或100,最小样本分为2或4,最大特征可以基于sqrt或log2。

通过GridSearchCV,我们使用的例子是random_forest_classifier。我们将可能的参数值传递给param_grid,并将交叉验证的值设置为5。设置verbose为5将日志输出到控制台,并且njobs为-1使模型使用机器上的所有核心。然后,我们训练这个网格,并用它来找到最好的估计。

最后,我们使用这个最佳模型来预测测试数据。

如何寻找合适的模型参数

看一下上面的准确性,我们看到通过改变模型的参数,精度从94.42%提高到97.08%。混淆矩阵还表明更多图像被正确分类。

机器学习不仅仅是读取数据并应用多种算法,直到我们得到一个好的模型才能使用,但它还涉及对模型进行微调以使它们最适合当前的数据。

确定正确的参数是决定使用哪种算法并根据数据充分利用它的关键步骤之一。

结论

在本文中,我们讨论了一个项目,我们通过选择最佳的参数值组合来提高随机森林分类器的准确性GridSearchCV。我们使用MNIST数据集并将准确度从94.42%提高到97.08%。

阿里云服务器

编辑该文章

编辑该文章,必须放入您本人的支付宝或微信收款码,通过审核后可,如果浏览者觉得您写的不错了直接对您打赏

复制加密链接

This is a modal dialog!

邮箱

This is a modal dialog!