keras.utils.to_categorical和one hot格式解析


Posted in Python onJuly 02, 2020

keras.utils.to_categorical这个方法,源码中,它是这样写的:

Converts a class vector (integers) to binary class matrix.

E.g. for use with categorical_crossentropy.

也就是说它是对于一个类型的容器(整型)的转化为二元类型矩阵。比如用来计算多类别交叉熵来使用的。

其参数也很简单:

def to_categorical(y, num_classes=None): 
Arguments 
y: class vector to be converted into a matrix 
(integers from 0 to num_classes). 
num_classes: total number of classes.

说的很明白了,y就是待转换容器(其类型为从0到类型数目),而num_classes则是类型的总数。

这样这一句就比较容易理解了:

先通过np生成一个1000*1维的其值为0-9的矩阵,然后再通过keras.utils.to_categorical方法获取成一个1000*10维的二元矩阵。

y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)

说了这么多,其实就是使用onehot对类型标签进行编码。下面的也都是这样解释。

one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程。

通过例子可能更容易理解这个概念。

假设我们有一个迷你数据集:

公司名 类别值 价格
VW 1 20000
Acura 2 10011
Honda 3 50000
Honda 3 10000

其中,类别值是分配给数据集中条目的数值编号。比如,如果我们在数据集中新加入一个公司,那么我们会给这家公司一个新类别值4。当独特的条目增加时,类别值将成比例增加。

在上面的表格中,类别值从1开始,更符合日常生活中的习惯。实际项目中,类别值从0开始(因为大多数计算机系统计数),所以,如果有N个类别,类别值为0至N-1.

sklear的LabelEncoder可以帮我们完成这一类别值分配工作。

现在让我们继续讨论one hot编码,将以上数据集one hot编码后,我们得到的表示如下:

VW Acura Honda 价格
1 0 0 20000
0 1 0 10011
0 0 1 50000
0 0 1 10000

简单来说:**keras.utils.to_categorical函数是把类别标签转换为onehot编码(categorical就是类别标签的意思,表示现实世界中你分类的各类别),

而onehot编码是一种方便计算机处理的二元编码。**

补充知识:序列预处理:序列填充之pad_sequences()和one-hot转化之keras.utils.to_categorical()

tensorflow文本处理中,经常会将 padding 和 one-hot 操作共同出现,所以以下两种方法为有效且常用的方法:

一、keras.preprocessing.sequence.pad_sequences()

keras.utils.to_categorical和one hot格式解析

实例:

>>>list_1 = [[2,3,4]]
>>>keras.preprocessing.sequence.pad_sequences(list_1, maxlen=10)
array([[0, 0, 0, 0, 0, 0, 0, 2, 3, 4]], dtype=int32)

>>>list_2 = [[1,2,3,4,5]]
>>>keras.preprocessing.sequence.pad_sequences(list_2, maxlen=10)
array([[0, 0, 0, 0, 0, 1, 2, 3, 4, 5]], dtype=int32)

二、keras.utils.to_categorical()

to_categorical(y, num_classes=None, dtype='float32')

将整型标签转为onehot。y为int数组,num_classes为标签类别总数,大于max(y)(标签从0开始的)。

返回:如果num_classes=None,返回len(y) * [max(y)+1](维度,m*n表示m行n列矩阵,下同),否则为len(y) * num_classes。说出来显得复杂,请看下面实例。

import keras

ohl=keras.utils.to_categorical([1,3])
# ohl=keras.utils.to_categorical([[1],[3]])
print(ohl)
"""
[[0. 1. 0. 0.]
 [0. 0. 0. 1.]]
"""
ohl=keras.utils.to_categorical([1,3],num_classes=5)
print(ohl)
"""
[[0. 1. 0. 0. 0.]
 [0. 0. 0. 1. 0.]]
"""

以上这篇keras.utils.to_categorical和one hot格式解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python判断两个对象相等的原理
Dec 12 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
django 删除数据库表后重新同步的方法
May 27 Python
python实现图片中文字分割效果
Jul 22 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
Django之腾讯云短信的实现
Jun 12 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
Python基础之hashlib模块详解
May 06 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 #Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 #Python
Python使用OpenPyXL处理Excel表格
Jul 02 #Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 #Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 #Python
如何基于Python爬取隐秘的角落评论
Jul 02 #Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 #Python
You might like
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
python中threading超线程用法实例分析
2015/05/16 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
手把手教你python实现SVM算法
2017/12/27 Python
Django 实现下载文件功能的示例
2018/03/06 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
python常量折叠基础知识点讲解
2021/02/28 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
程序员跳槽必看面试题总结
2013/06/28 面试题
物业管理工作方案
2014/05/10 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
保险内勤岗位职责
2015/04/13 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang