keras.utils.to_categorical和one hot格式解析
作者:gdl3463315 发布时间:2023-10-03 18:27:12
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()
实例:
>>>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.]]
"""
来源:https://blog.csdn.net/gdl3463315/article/details/82659378


猜你喜欢
- 中间件是什么?中间件是类似flask函数中钩子函数的东西。可以在请求视图函数前,或者视图函数响应后处理某些事情。中间件对全部视图都有效!中间
- 四、 用户注册(reg.php)在看用户注册之流程之前,我把表的用途做个简单说明,现在只是大概的说明,后面我们再仔细了解,大家可以记下这个说
- 前言:为了获取一定高级操作,如:微信模板消息(xiao,xin)推送,把消息推送给用户,或者是获取用户授权信息都需要用到access tok
- 科讯sql商业版中用到的ajax空间与分页函数,他们的js代码学习是非常不错的//ajax 控件 function Pa
- 行和列的位置都在以下三个列表中的一列中,则对应位置为1,其余位置全为0——[7-56,239-327,438-454,522-556,574
- 今天研究了下Python中的传值问题,通常在C、C++中有按值传递和按引用传递两种情况,按值传递时会拷贝实参,而按引用传递时只是给形参赋了一
- 本文实例讲述了python读写二进制文件的方法。分享给大家供大家参考。具体如下:初学python,现在要读一个二进制文件,查找doc只发现
- IE的特殊性 IE的DOM元素属性与Firefox, Opera, Safari有些不同。在IE中,我们可以给DOM添加任意自定
- 要想在ASP.NET项目中使用SQLite数据库,先需下载一个ADO.NET 2.0 SQLite Data Provider,下载地址为:
- ASP有一个最重要的功能,就是它可以让你非常轻松地连接数据库。通常都是和一个Access或者一个SQL数据库相连。因为Access是最容易起
- GetRepeatTimes(TheChar,TheString) 得到一个字符串在另一个字符串当中出现几次的函数(新)如:response
- 抓取网页数据的思路有好多种,一般有:直接代码请求http、模拟浏览器请求数据(通常需要登录验证)、控制浏览器实现数据抓取等。这篇不考虑复杂情
- 我就废话不多说了,大家还是直接看代码吧!from tensorflow.python.keras.models import Sequent
- 查到的可能原因:1.本地的go编译器版本2. go module构建模式未开启3. 是否在go.mod所在目录执行的go mod tidy解
- 1、sys.stdin.readline()与inputimport sys# sys.stdin.readline() 相当于input,
- 在工作中遇到把DataGrid中绑定的后台数据库数据展示给用户时把负数变为0的小问题,现在记录下来。例子中数据表示这个样子的:-------
- 注意,要看懂这里,必须具备简单的Python数据分析知识,必须知道matplotlib的简单使用!例1:plt.subplot(221) #
- 代码伺候:先看如下代码:例1: message = Message.objects.filter(pk=message_id2)messag
- 阅读目录一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * i
- Python安装selenium包打开命令行窗口,进入python交互环境python尝试导入selenium包,报错,说明尚未安装sele