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两种遍历字典(dict)的方法比较
May 29 Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 Python
Python实现简单的四则运算计算器
Nov 02 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
python如何用matplotlib创建三维图表
Jan 26 Python
python开发飞机大战游戏
Jul 15 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生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
js实现前端图片上传即时预览功能
2017/08/02 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Django中Model的使用方法教程
2018/03/07 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
python程序变成软件的实操方法
2019/06/24 Python
生物科学系大学生的自我评价
2013/12/20 职场文书
完美的中文自荐信
2014/05/24 职场文书
联片教研活动总结
2014/07/01 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
小学校本教研总结
2015/08/13 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL