原标题:Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据

原文链接:http://tecdat.cn/?p=12693

介绍

在本教程中,我们将讨论一种非常强大的优化(或自动化)算法,即网格搜索算法。它最常用于机器学习模型中的超参数调整。我们将学习如何使用Python来实现它,以及如何将其应用到实际应用程序中,以了解它如何帮助我们为模型选择最佳参数并提高其准确性。

先决条件

要遵循本教程,您应该对Python或其他某种编程语言有基本的了解。您最好也具有机器学习的基本知识,但这不是必需的。除此之外,本文是初学者友好的,任何人都可以关注。

安装

要完成本教程,您需要在系统中安装以下库/框架:

Python 3

NumPy

Pandas

Keras

Scikit-Learn

它们的安装都非常简单-您可以单击它们各自的网站,以获取各自的详细安装说明。通常,可以使用pip安装软件包:

$ pip install numpy pandas tensorflow keras scikit-learn

如果遇到任何问题,请参考每个软件包的官方文档。

什么是网格搜索?

网格搜索本质上是一种优化算法,可让你从提供的参数选项列表中选择最适合优化问题的参数,从而使“试验和错误”方法自动化。尽管它可以应用于许多优化问题,但是由于其在机器学习中的使用而获得最广为人知的参数,该参数可以使模型获得最佳精度。

假设您的模型采用以下三个参数作为输入:

隐藏层数[2,4]

每层中的神经元数量[5,10]

神经元数[10,50]

如果对于每个参数输入,我们希望尝试两个选项(如上面的方括号中所述),则总计总共2 ^3 = 8个不同的组合(例如,一个可能的组合为[2,5,10])。手动执行此操作会很麻烦。

现在,假设我们有10个不同的输入参数,并且想为每个参数尝试5个可能的值。每当我们希望更改参数值,重新运行代码并跟踪所有参数组合的结果时,都需要从我们这边进行手动输入。网格搜索可自动执行该过程,因为它仅获取每个参数的可能值并运行代码以尝试所有可能的组合,输出每个组合的结果,并输出可提供最佳准确性的组合。

网格搜索实施

让我们将网格搜索应用于实际应用程序。讨论机器学习和数据预处理这一部分不在本教程的讨论范围之内,因此我们只需要运行其代码并深入讨论Grid Search的引入部分即可。

我们将使用Pima印度糖尿病数据集,该数据集包含有关患者是否基于不同属性(例如血糖,葡萄糖浓度,血压等)的糖尿病信息。使用Pandas read_csv()方法,您可以直接从在线资源中导入数据集。

以下脚本导入所需的库:

from sklearn.model_selection import GridSearchCV, KFold from keras.models import Sequential from keras.layers import Dense, Dropout from keras.wrappers.scikit_learn import KerasClassifier from keras.optimizers import Adam import sys import pandas as pd import numpy as np

以下脚本导入数据集并设置数据集的列标题。

df = pd.read_csv(data_path, names=columns)

让我们看一下数据集的前5行:

df.head()

输出:

如你所见,这5行都是用来描述每一列的标签,因此它们对我们没有用。我们将从删除这些非数据行开始,然后将所有NaN值替换为0:

for col in columns: df[col].replace(0, np.NaN, inplace=True) df.dropna(inplace=True) # Drop all rows with missing values

以下脚本将数据分为变量和标签集,并将标准化应用于数据集:

# Transform and display the training data X_standardized = scaler.transform(X)

以下方法创建了我们简单的深度学习模型:

def create_model(learn_rate, dropout_rate): # Create model model = Sequential() model.add(Dense(8, input_dim=8, kernel_initializer='normal', activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(4, input_dim=8, kernel_initializer='normal', activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(1, activation='sigmoid')) # Compile the model adam = Adam(lr=learn_rate) model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy']) return model

这是加载数据集,对其进行预处理并创建您的机器学习模型所需的所有代码。因为我们只对看到Grid Search的功能感兴趣,所以我没有进行训练/测试拆分,我们将模型拟合到整个数据集。

在下一节中,我们将开始了解Grid Search如何通过优化参数使生活变得更轻松。

在没有网格搜索的情况下训练模型

在下面的代码中,我们将随机决定或根据直觉决定的参数值创建模型,并查看模型的性能:

model = create_model(learn_rate, dropout_rate)

输出:

Epoch 1/1 130/130 [==============================] - 0s 2ms/step - loss: 0.6934 - accuracy: 0.6000

正如看到的,我们得到的精度是60.00%。这是相当低的。

使用网格搜索优化超参数

如果不使用Grid Search,则可以直接fit()在上面创建的模型上调用方法。但是,要使用网格搜索,我们需要将一些参数传递给create_model()函数。此外,我们需要使用不同的选项声明我们的网格,我们希望为每个参数尝试这些选项。让我们分部分进行。

首先,我们修改create_model()函数以接受调用函数的参数:

# Create the model model = KerasClassifier(build_fn=create_model, verbose=1)

现在,我们准备实现网格搜索算法并在其上拟合数据集:

# Build and fit the GridSearchCV grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=KFold(random_state=seed), verbose=10)

输出:

Best: 0.7959183612648322, using {'batch_size': 10, 'dropout_rate': 0.2, 'epochs': 10, 'learn_rate': 0.02}

在输出中,我们可以看到它为我们提供了最佳精度的参数组合。

可以肯定地说,网格搜索在Python中非常容易实现,并且在人工方面节省了很多时间。您可以列出所有您想要调整的参数,声明要测试的值,运行您的代码,而不必理会。您无需再输入任何信息。找到最佳参数组合后,您只需将其用于最终模型即可。

结论

总结起来,我们了解了什么是Grid Search,它如何帮助我们优化模型以及它带来的诸如自动化的好处。此外,我们学习了如何使用Python语言在几行代码中实现它。为了了解其有效性,我们还训练了带有和不带有Grid Search的机器学习模型,使用Grid Search的准确性提高了19%。返回搜狐,查看更多

责任编辑:

python网格搜索优化参数_Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据...相关推荐

  1. python网格搜索法_Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据...

    介绍 在本教程中,我们将讨论一种非常强大的优化(或自动化)算法,即网格搜索算法.它最常用于机器学习模型中的超参数调整.我们将学习如何使用Python来实现它,以及如何将其应用到实际应用程序中,以了解它 ...

  2. 【NLP-NER】命名实体识别中最常用的两种深度学习模型

    命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务.NER是信息提取.问答系统.句法分析.机器翻译等众多NLP任务的重要基础工具. 上一期我们介绍了N ...

  3. 【基于 docker 的 Flask 的深度学习模型部署】

    文章目录 1.前言 2.docker简介 3.基于Falsk的REST API实现 4.编写dockerfile 5.基于docker的模型部署 1.前言 模型部署一直是深度学习算法走向落地的重要的一 ...

  4. python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...

    一种方法是使用Pipeline,SVC(kernel ='precomputed')并将自定义内核函数包装为sklearn估计器(BaseEstimator和TransformerMixin的子类)) ...

  5. python 传不定量参数_Python中的定量金融

    python 传不定量参数 The first quantitative class for vanilla finance and quantitative finance majors alike ...

  6. python随机森林变量重要性_python中随机森林如何优化

    2.声纳数据集案例研究 在本节中,我们将把随机森林算法应用到声纳数据集. 该示例假定数据集的CSV副本位于当前工作目录中,文件名为sonar.all-data.csv. 首先加载数据集,将字符串值转换 ...

  7. python get方法列表参数_python中requests库get方法带参数请求

    起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={ 'cid':567464, 'page':, 'key':'', 'language':1, 'gtk':6, '_cid':5 ...

  8. python kwargs是什么参数_Python中*args 和 **kwargs的用法总结

    对于大部分Python新手来说,*args和**kwargs这两个魔法变量需要花大量的时间来解释.那么它们到底是什么呢?在什么时候使用它们呢?要搞清楚这些问题,首先你要明白,其实并不是必须写成*arg ...

  9. python什么是可变参数_python中的可变参数和不可变参数

    原博文 2016-11-08 21:35 − 知识点:Python中,万物皆对象. python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址. 一.可变对象和不可变对象 Pyth ...

  10. python get方法请求参数_python中requests库get方法带参数请求

    起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={'cid':567464,'page':1,'key':'','language':1,'gtk':6,'_cid':567464 ...

最新文章

  1. 面向小白的最全 Python 可视化教程,超全的!
  2. react 拖拽生成html,[React] 基于react 拖拽时间选择器
  3. Javascript权威指南学习笔记一:数据类型
  4. 计算机组成原理题库带答案详解,计算机组成原理试试题库(含答案解析) -.doc
  5. 如何防止用户重复提交表单
  6. 若微型计算机在工作时突然断电,16秋《计算机基础》作业1
  7. 计算时间差_小王子是怎么用四步法进行时间计算并成功避开日界线的
  8. 【Lintcode】076.Longest Increasing Subsequence
  9. CCCardinalSplineBy概念
  10. python在线题库推荐_Python题库.docx
  11. 机器学习期末复习题题库-单项选择题
  12. 2016/11/23【转载3】USB OTG 引脚定义
  13. RAID10磁盘阵列损坏修复操作
  14. APP开发的详细流程
  15. 数学 立方和公式 立方差公式
  16. hive 学习系列三(表格的创建create-table)
  17. 什么软件可以查手机卡的imsi_手机SIM卡卡号和IMSI码怎么查询
  18. Ubuntu下Apache重启错误:Could not reliably determin解决
  19. html5中音频循环那个属性,HTML5音频audio属性
  20. js-cookie设置token过期时间

热门文章

  1. pytorch搭建LSTM神经网络预测电力负荷
  2. UG NX机床搭建仿真三四五轴CSE视频教程
  3. android chrome 无法下载,Android Chrome浏览器将支持下载暂停和取消
  4. 《GO语言实战》笔记
  5. 计算机实验excel总结,EXCEL实验报告
  6. linux 平台,Qt 使用,微软雅黑/文泉驿 字体
  7. 使用ADB启动手机APP
  8. gif透明背景动画_汉服美女表情包(PS做GIF动图简易教程分享)
  9. 2921年3月计算机二级office,国家二级计算机考试office怎么报名
  10. 6G总体愿景与潜在关键技术白皮书【PPT】