Keras入门(八)K折交叉验证

  在文章Keras入门(一)搭建深度神经网络(DNN)解决多分类问题中,笔者介绍了如何搭建DNN模型来解决IRIS数据集的多分类问题。
  本文将在此基础上介绍如何在Keras中实现K折交叉验证。

什么是K折交叉验证?

  K折交叉验证是机器学习中的一个专业术语,它指的是将原始数据随机分成K份,每次选择K-1份作为训练集,剩余的1份作为测试集。交叉验证重复K次,取K次准确率的平均值作为最终模型的评价指标。一般取K=10,即10折交叉验证,如下图所示:
10折交叉验证
  用交叉验证的目的是为了得到可靠稳定的模型。K折交叉验证能够有效提高模型的学习能力,类似于增加了训练样本数量,使得学习的模型更加稳健,鲁棒性更强。选择合适的K值能够有效避免过拟合。

Keras实现K折交叉验证

  我们仍采用文章Keras入门(一)搭建深度神经网络(DNN)解决多分类问题中的模型,如下:
DNN模型结构图
同时,我们对IRIS数据集采用10折交叉验证,完整的实现代码如下:

# -*- coding: utf-8 -*-
# model_train.py
# Python 3.6.8, TensorFlow 2.3.0, Keras 2.4.3
# 导入模块
import keras as K
import pandas as pd
from sklearn.model_selection import KFold# 读取CSV数据集
# 该函数的传入参数为csv_file_path: csv文件路径
def load_data(sv_file_path):iris = pd.read_csv(sv_file_path)target_var = 'class'  # 目标变量# 数据集的特征features = list(iris.columns)features.remove(target_var)# 目标变量的类别Class = iris[target_var].unique()# 目标变量的类别字典Class_dict = dict(zip(Class, range(len(Class))))# 增加一列target, 将目标变量转化为类别变量iris['target'] = iris[target_var].apply(lambda x: Class_dict[x])return features, 'target', iris# 创建模型
def create_model():init = K.initializers.glorot_uniform(seed=1)simple_adam = K.optimizers.Adam()model = K.models.Sequential()model.add(K.layers.Dense(units=5, input_dim=4, kernel_initializer=init, activation='relu'))model.add(K.layers.Dense(units=6, kernel_initializer=init, activation='relu'))model.add(K.layers.Dense(units=3, kernel_initializer=init, activation='softmax'))model.compile(loss='sparse_categorical_crossentropy', optimizer=simple_adam, metrics=['accuracy'])return modeldef main():# 1. 读取CSV数据集print("Loading Iris data into memory")n_split = 10features, target, data = load_data("./iris_data.csv")x = data[features]y = data[target]avg_accuracy = 0avg_loss = 0for train_index, test_index in KFold(n_split).split(x):print("test index: ", test_index)x_train, x_test = x.iloc[train_index], x.iloc[test_index]y_train, y_test = y.iloc[train_index], y.iloc[test_index]print("create model and train model")model = create_model()model.fit(x_train, y_train, batch_size=1, epochs=80, verbose=0)print('Model evaluation: ', model.evaluate(x_test, y_test))avg_accuracy += model.evaluate(x_test, y_test)[1]avg_loss += model.evaluate(x_test, y_test)[0]print("K fold average accuracy: {}".format(avg_accuracy / n_split))print("K fold average accuracy: {}".format(avg_loss / n_split))main()

模型的输出结果如下:

Iterationlossaccuracy
10.000561.0
20.000211.0
30.000221.0
40.006081.0
50.219250.8667
60.523900.8667
70.009981.0
80.044311.0
90.145901.0
100.212860.8667
avg0.116330.9600

10折交叉验证的平均loss为0.11633,平均准确率为96.00%。

总结

  本文代码已存放至Github,网址为:https://github.com/percent4/Keras-K-fold-test 。
  感谢大家的阅读~
  2020.1.24于上海浦东

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253750.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于R语言进行K折交叉验证

我们在建立数据模型后通常希望在外部数据验证模型的检验能力。然而当没有外部数据可以验证的时候,交叉验证也不失为一种方法。交叉验验证(交叉验证,CV)则是一种评估模型泛化能力的方法,广泛应用…

【机器学习】Stacking与K折交叉验证

其他机器学习系列文章见于专题:机器学习进阶之路——学习笔记整理,欢迎大家关注。 1. Stacking定义 Stacking并不是简单地对个体学习器的结果做简单逻辑处理,而是先从初始数据集训练出初级学习器,将初级学习器的输出当成特征&…

K折交叉验证实现

K折交叉验证 k折交叉验证是划分数据集的一种方式,特别适合少量数据集 在原始数据中划分k份,取1份作为测试集,k-1份作为训练集 最后算出平均性能值 以MINIST数据为例子 python from tensorflow import keras import numpy as np import mat…

简述k折交叉验证法

1、以二分类任务为例,假定数据集D包含1000个样本,将其划分为训练集S和测试集T,其中S包含800个样本, T包含200个样本,用S进行训练后,如果模型在T上有50个样本分类错误,那么模型的正确率为75% 。 …

root 密码破解(rd.break)

在Linux系统中,忘记root密码时,可以用此方法进行暴力修改root密码 示例: 设置一个新的记不住的密码 $ echo cnakdnvf | passwd --stdin root $ poweroff 1.启动此虚拟机,选中以下行,并按 【 e 】进入内核编辑页面 …

k折交叉验证

一般情况将K折交叉验证用于模型调优,找到使得模型泛化性能最优的超参值。,找到后,在全部训练集上重新训练模型,并使用独立测试集对模型性能做出最终评价。 K折交叉验证使用了无重复抽样技术的好处:每次迭代过程中每个样…

Python连接达梦数据库

python如果想连接达梦数据库,必须要安装dmPython。 简介:dmPython 是 DM 提供的依据 Python DB API version 2.0 中 API 使用规定而开发的数据库访问接口。dmPython 实现这些 API,使 Python 应用程序能够对 DM 数据库进行访问。 dmPython 通…

Jenkins+Python自动化测试之持续集成详细教程

前言 今天呢笔者想和大家来聊聊JenkinsPython自动化测试持续集成,废话呢就不多说了哟咱们直接进入主题哟。 一、Jenkins安装 ​ Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供…

C++ 常用算数生成算法

&#x1f914;常用算数生成算法&#xff1a; 该算法函数需要调用<numeric>头文件 1.accumulate 计算总和 在 C STL 中&#xff0c;accumulate() 是一种常用的算法&#xff0c;用于计算指定范围内的元素之和。 accumulate() 的函数原型为&#xff1a; template<c…

Windows的Powershell终端增强

Ubuntu上一直用的Oh My Zsh强化终端&#xff0c;体验非常nice。最近在Win上做东西比较多&#xff0c;于是也想把Powershell这个简陋的终端加强一下。 说干就干&#xff0c;网上查了一圈&#xff0c;发现大部分人用Oh My Posh来操作&#xff0c;因此试了一下&#xff0c;发现卡…

python图像处理实战(一)—图像基础

&#x1f680;写在前面&#x1f680; &#x1f58a;个人主页&#xff1a;https://blog.csdn.net/m0_52051577?typeblog &#x1f381;欢迎各位大佬支持点赞收藏&#xff0c;三连必回&#xff01;&#xff01; &#x1f508;本人新开系列专栏—python图像处理 ❀愿每一个骤雨初…

MYSQL语句。

一些常用的操作内容&#xff0c;非常重要。首先从数据的增删改查谈起。 #增加一条数据 INSERT INTO studentdb.book(name, maker, price, num, time, autor) VALUES (Sping, 中国邮政, 500元, 456, 2021/11/30, spingsping) #查询表单结构 DESC book #查询表的内容 SELECT * FR…

MySQL语句的使用

目录 一&#xff0c;基本的增删改查 二&#xff0c;案例演示 三&#xff0c;排序拓展 1.拓展一 2. 拓展二 一&#xff0c;基本的增删改查 &#xff08;SQLServer与PLSQL的语句基本一致&#xff09; 提示&#xff1a;但是"" 在MySQL里面加号不做拼接&#xff0c…

chatgpt赋能python:Python中浮点数的定义

Python中浮点数的定义 什么是浮点数&#xff1f; 在计算机科学中&#xff0c;浮点数&#xff08;floating-point number&#xff09;是一种用于表示实数的近似值的数值类型。Python中的浮点数是由整数部分和小数部分组成的&#xff0c;可以使用小数点来表示。例如&#xff0c…

高级MySQL语句

高级MySQL语句 一、高级SQL语句 1、SELECT ----显示表格中一个或数个栏位的所有资料2、DISTINCT ----不显示重复的资料3、WHERE ----有条件查询4、AND OR ----且 或5、IN ----显示已知的值的资料6、BETWEEN ----显示两个值范围内的资料7、通配符 ----通常通配符都是跟 LIKE 一起…

MySQL语句优化

MySQL语句优化 1.通过EXPLAIN分析低效SQL的执行计划2.使用索引&#xff08;其下测试效率通过查询结果的type列的值进行评判&#xff09;1&#xff09;对于创建的多列索引&#xff0c;只要查询的条件中用到了最左边的列&#xff0c;索引一般就会被使用&#xff0c; 举例说明如下…

Mysql语句

查询 select 查询显示的列表 from 表名 select类似于&#xff1a; system.out.print(查询显示的列表), 特点: 1.查询列表可以是: 表中的字段,常量值,函数,表达式 2.查询出的表格是虚拟的表格(临时表格) 一基础查询 1.查询表中单个字段 date #1.查询表中单个字段 select us…

Mysql基本语句

1、数据库的基本类型 1.关系数据库 特点&#xff1a;以表和表的关联构成的数据结构 优点&#xff1a;能表达复杂的数据关系。强大的查询语言&#xff0c;能精确查找想要的数据 缺点&#xff1a;读写性能比较差&#xff0c;尤其是海量数据的读写。数据结构比较死板 用途&am…

MySQL的基本语句

目录 1.什么是数据库 2.数据库的操作 2.1.显示数据库 2.2.创建数据库 2.3.使用数据库 2.4.删除数据库 3.数据类型 3.1数值类型 3.2字符串类型 3.3日期类型 4.表的操作 4.1创建表 4.2往表中增加信息 5.删除表 1.什么是数据库 数据库大体可以分为关系型数据库和非关系…

MySQL 操作语句大全(详细)

sql语句总结 总结内容1. 基本概念2. SQL列的常用类型3. DDL简单操作3.1 数据库操作3.2 表操作 4. DML操作4.1 修改操作&#xff08;UPDATE SET&#xff09;4.2 插入操作&#xff08;INSERT INTO VALUE&#xff09;4.3 删除操作&#xff08;DELETE&#xff09; 5. DQL操作被操作…