前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >找到合适的模型参数提高准确度

找到合适的模型参数提高准确度

作者头像
代码医生工作室
发布于 2019-06-21 10:04:59
发布于 2019-06-21 10:04:59
73100
代码可运行
举报
文章被收录于专栏:相约机器人相约机器人
运行总次数:0
代码可运行

作者 | Karan Bhanot

来源 | Towards Data Science

编辑 | 代码医生团队

如果一直在阅读有关数据科学或机器学习的知识,那么一定遇到与MNIST数据集一起使用的文章和项目。数据集包括一组70,000个图像,其中每个图像是从0到9的手写数字。决定使用相同的数据集来了解如何微调机器学习模型参数可以产生差异。

本文解释了如何GridSearchCV找到该数据集的最佳拟合参数,并使用它们来提高准确性并改善混淆矩阵。可以在下面的GitHub存储库中找到代码:

https://github.com/kb22/Digit-Recognition-with-Parameter-Tuning

导入库和数据集

首先导入必要的库。训练和测试数据.csv在这里。数据集中的每一行由一个标签和784个像素值组成,以表示28x28图像。

https://www.kaggle.com/oddrationale/mnist-in-csv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.cm import rainbow
%matplotlib inline

from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.ensemble import RandomForestClassifier

训练数据包括60,000个图像,而测试数据集包括10,000个图像。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("Training data:")
print("Shape: {}".format(train_data.shape))
print("Total images: {}".format(train_data.shape[0]))

print("Testing data:")
print("Shape: {}".format(test_data.shape))
print("Total images: {}".format(test_data.shape[0]))

## OUTPUT:
# Training data:
# Shape: (60000, 785)
# Total images: 60000
# Testing data:
# Shape: (10000, 785)
# Total images: 10000

一旦有数据,从它得到的功能和标签并将其存储在train_X,train_y,test_X和test_y。

探索数据集

分析类分布

每个类的数据应该大致相同,以确保正确的模型训练。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
train_labels = train_y.value_counts()
plt.figure(figsize = (12, 8))
cmap = rainbow(np.linspace(0, 1, train_labels.shape[0]))
plt.bar(train_labels.index.values, train_labels, color = cmap)
plt.xticks(train_labels.index.values)
plt.xlabel('Digits')
plt.ylabel('Count of images')
plt.title('Count of images for each digit (0 - 9)')

每个数字的图像数量(0-9)

如果看一下情节,每个数字的计数会有一些差异。然而差异并不是太大,模型仍然能够很好地训练数据。因此可以继续进行。

查看训练图像

看看图像实际是怎样的。从训练数据中随机选择10个图像并使用它进行显示plt.imshow()。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
np.random.seed(0)
plt.figure(figsize = (20, 8))
for i in range(10):
    index = np.random.randint(train_X.shape[0])
    image_matrix = train_X.iloc[index].values.reshape(28, 28)
    plt.subplot(2, 5, i+1)
    plt.imshow(image_matrix, cmap=plt.cm.gray)

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

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

应用机器学习

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
random_forest_classifier = RandomForestClassifier()
random_forest_classifier.fit(train_X,train_y)
pred_y = random_forest_classifier.predict(test_X)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("Accuracy: {}%".format(accuracy_score(test_y, pred_y)*100))
print("Confusion Matrix:")
print("{}".format(confusion_matrix(test_y, pred_y)))

## Output
# Accuracy: 94.42%
# Confusion Matrix:
# [[ 966    0    5    0    2    1    1    2    3    0]
#  [   0 1118    3    3    1    2    3    0    5    0]
#  [   8    4  977    9    5    1    4   14   10    0]
#  [   4    0   25  940    0   21    0    7   10    3]
#  [   3    2    3    2  931    0    9    3    7   22]
#  [   5    3    6   26    1  830    6    3    8    4]
#  [  11    3    3    2    6    8  918    0    7    0]
#  [   3    4   29    4    7    1    0  964    2   14]
#  [   9    0   11   23   16   14    9    6  874   12]
#  [   8    7    7   13   27    7    0    6   10  924]]

该模型的准确率达到94.4%。混淆矩阵表明该模型能够正确预测大量图像。接下来调整模型参数以尝试改进结果。

参数调整

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.model_selection import GridSearchCV

param_grid = {
    'n_estimators': [100, 200],
    'max_depth': [10, 50, 100],
    'min_samples_split': [2, 4],
    'max_features': ['sqrt', 'log2']
}

grid = GridSearchCV(random_forest_classifier, param_grid = param_grid, cv = 5, verbose = 5, n_jobs = -1)
grid.fit(train_X, train_y)

best_estimator = grid.best_estimator_

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

将可能的参数值传递为param_grid,并将交叉验证设置为5.设置verbose为5将日志输出到控制台,并且njobs为-1使模型使用机器上的所有核心。然后适合这个网格,并用它来找到最好的估算。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
best_pred_y = best_estimator.predict(test_X)
print("Accuracy: {}%".format(accuracy_score(test_y, best_pred_y)*100))
print("Confusion Matrix:")
print("{}".format(confusion_matrix(test_y, best_pred_y)))

## Output
# Accuracy: 97.08%
# Confusion Matrix:
# [[ 971    0    1    0    0    1    3    1    3    0]
#  [   0 1122    3    3    1    2    2    1    1    0]
#  [   6    0 1000    6    3    0    3    9    5    0]
#  [   0    0    9  979    0    5    0    8    6    3]
#  [   1    0    1    0  955    0    6    0    2   17]
#  [   3    0    1   10    3  859    6    2    5    3]
#  [   8    3    0    0    3    4  937    0    3    0]
#  [   1    4   18    1    0    0    0  990    5    9]
#  [   4    0    5    8    3    8    3    4  931    8]
#  [   7    5    1   10   11    2    1    4    4  964]]

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

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

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

结论

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于Titanic数据集的完整数据分析
本文是一个极度适合入门数据分析的案例,采用的是经典数据集:泰坦尼克数据集(train部分),主要内容包含:
皮大大
2023/05/05
1.3K0
用Python与Scikit-learn构建高效机器学习模型
文章链接:https://cloud.tencent.com/developer/article/2472162
一键难忘
2024/11/29
1660
sklearn 下常用模型分类算法简单调用对比(借鉴),SKlearn 中clf模型保存于调回
数据为近红外测试猕猴桃软硬和时间差异的数据,可以作为分类软硬以及前后时间差的分类。数据资源:直通车
学到老
2019/01/25
1.2K0
使用逻辑回归模型预测用户购买会员意向
会员付费模式是互联网中常用的变现方式,并具有高用户忠诚度和粘性,帮助电商应用增加收入的优点。会员的销售模式,依赖于线下会销+线上直播+代理商电话销售的模式。为使用户有良好的用户体验,以及满足精细化运营的需求,如何在海量用户中筛选出有价值的用户成为会员转化运营工作的重点。 因此,本文采用了逻辑回归的算法,使用用户在平台上的行为数据特征(登录、协议、商品、交易等),通过模型预测出用户购买会员的概率,对于预测结果有较大概率购买会员的用户,进行重点触达,提高交易转化。
政采云前端团队
2023/10/16
9780
使用逻辑回归模型预测用户购买会员意向
【Python篇】从零到精通:全面分析Scikit-Learn在机器学习中的绝妙应用
机器学习正在快速改变我们的世界,而Scikit-Learn作为Python生态中最为强大的机器学习库之一,是每个数据科学家和工程师不可或缺的工具。本篇文章旨在从零开始,带领你逐步掌握Scikit-Learn的核心功能与实际应用。无论你是刚刚接触机器学习的初学者,还是希望提升技能的进阶学习者,这篇文章都将为你提供一条清晰的学习路径,助你在数据科学领域中不断成长和突破。让我们一起踏上这段充满探索与发现的旅程,解锁机器学习的无限可能。
半截诗
2024/10/09
5350
机器学习模型评估与超参数调优详解
机器学习分为两类基本问题----回归与分类。在之前的文章中,也介绍了很多基本的机器学习模型。
Datawhale
2020/07/09
1.3K0
机器学习模型评估与超参数调优详解
【推荐收藏】模型评估与调参(Python版)
“管道工作流”这个概念可能有点陌生,其实可以理解为一个容器,然后把我们需要进行的操作都封装在这个管道里面进行操作,比如数据标准化、特征降维、主成分分析、模型预测等等,下面还是以一个实例来讲解。
Sam Gor
2019/07/08
1.8K0
数据挖掘实战:基于机器学习的肺癌患者建模预测分类
肺癌是全球范围内最常见的癌症之一,也是导致癌症相关死亡的主要原因。早期发现和诊断对于提高患者的生存率和治疗效果至关重要。
皮大大
2024/04/09
1.3K3
基于自然语言处理的垃圾短信识别系统
本项目旨在利用自然语言处理(NLP)技术,开发一个高效的垃圾短信识别系统。通过分词、停用词处理、情感分析和机器学习模型,实现对垃圾短信的自动分类和识别,提高短信过滤的准确性和效率。
LucianaiB
2025/01/25
1230
基于自然语言处理的垃圾短信识别系统
RDKit | 化合物活性数据的不平衡学习
顾名思义即我们的数据集样本类别极不均衡,以二分类问题为例,数据集中的多数类 为Smax,少数类为Smin,通常情况下把多数类样本的比例为100:1、1000:1,甚至是10000:1这种情况下为不平衡数据。
DrugAI
2021/01/28
8160
机器学习还能预测心血管疾病?没错,我用Python写出来了
全球每年约有1700万人死于心血管疾病,当中主要表现为心肌梗死和心力衰竭。当心脏不能泵出足够的血液来满足人体的需要时,就会发生心力衰竭,通常由糖尿病、高血压或其他心脏疾病引起。
CDA数据分析师
2020/09/14
2.9K2
机器学习还能预测心血管疾病?没错,我用Python写出来了
Python机器学习库scikit-learn实践
一、概述 以最广泛的分类算法为例,大致可以分为线性和非线性两大派别。线性算法有著名的逻辑回归、朴素贝叶斯、最大熵等,非线性算法有随机森林、决策树、神经网络、核机器等等。线性算法举的大旗是训练和预测的效率比较高,但最终效果对特征的依赖程度较高,需要数据在特征层面上是线性可分的。因此,使用线性算法需要在特征工程上下不少功夫,尽量对特征进行选择、变换或者组合等使得特征具有区分性。而非线性算法则牛逼点,可以建模复杂的分类面,从而能更好的拟合数据。 那在我们选择了特征的基础上,哪个机器学习算法能取得更
机器学习AI算法工程
2018/03/13
9110
机器学习中的逻辑回归
逻辑回归是机器学习领域中一种用于二分类问题的常用算法。尽管其名字中包含"回归"一词,但实际上,逻辑回归是一种分类算法,用于估计输入特征与某个事件发生的概率之间的关系。本文将深入讲解逻辑回归的原理、实际应用以及使用 Python 进行实现的代码。
GeekLiHua
2025/01/21
1500
TensorFlow (1) - 线性模型
原作者:Magnus Erik Hvass Pedersen / GitHub / Videos on YouTube
Gaussic
2020/07/03
9150
【模式识别】SVM实现人脸表情分类
本文是模式识别课程关于支持向量机(SVM)算法的课程设计,根据人脸的面部特征,通过SVM算法将表情分为7类。 本文的jupyter文件和数据集下载地址: https://download.csdn.net/download/qq1198768105/66912662
zstar
2022/06/14
1.2K0
Machine Learning-模型评估与调参 ——评价指标代码
可以通过在make_scorer中设定参数,确定需要用来评价的指标(这里用了fl_score),这个函数可以直接输出结果。
Sam Gor
2019/08/22
7020
Adaboost,一个超强算法模型,!!
说起Adaboost,它的全称是Adaptive Boosting,是一种机器学习元算法,目标就是通过结合多个弱分类器来创建一个强分类器。
Python编程爱好者
2024/05/22
1800
Adaboost,一个超强算法模型,!!
基于Python的随机森林(RF)回归与模型超参数搜索优化
  本文详细介绍基于Python的随机森林(Random Forest)回归算法代码与模型超参数(包括决策树个数与最大深度、最小分离样本数、最小叶子节点样本数、最大分离特征数等等)自动优化代码。
郭好奇同学
2021/05/28
16.9K0
基于Python的随机森林(RF)回归与模型超参数搜索优化
SciPyCon 2018 sklearn 教程(下)
在前面的章节和笔记本中,我们将数据集分为两部分:训练集和测试集。 我们使用训练集来拟合我们的模型,并且我们使用测试集来评估其泛化能力 - 它对新的,没见过的数据的表现情况。
ApacheCN_飞龙
2022/12/02
1K0
B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)含特征优化模型融合等
K折交叉验证: KFold 将所有的样例划分为 k 个组,称为折叠 (fold) (如果 k = n, 这等价于 Leave One Out(留一) 策略),都具有相同的大小(如果可能)。预测函数学习时使用 k - 1 个折叠中的数据,最后一个剩下的折叠会用于测试。
汀丶人工智能
2023/03/28
1.6K0
B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)含特征优化模型融合等
推荐阅读
相关推荐
基于Titanic数据集的完整数据分析
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文