使用numpy.eye创建one-hot编码

一、np.eye说明

np.eye 是 NumPy 中的一个函数,用于创建一个二维数组,其中对角线上为1,其余元素为0。它通常用于生成单位矩阵或对角矩阵。其基本用法如下:

matrix = np.eye(3)
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

np.eye 函数的主要参数有:

N:生成的矩阵的行数。
M:生成的矩阵的列数(可选,默认为 N)。
k:对角线的索引(可选,默认为0,即主对角线,k>0 为上对角线,k<0 为下对角线)。
dtype:数组的数据类型(可选,默认为 float)。
例如,创建一个 3x3 的单位矩阵并将对角线向上移动一行:

matrix = np.eye(3, k=1)
[[0. 1. 0.]
 [0. 0. 1.]
 [0. 0. 0.]]

二、独热编码

假设Y_test_orig为一个一行多列的二维矩阵,例如:[ [0 0 0 5 1 0 3 1 5 1 5 1 ] ]

np.eye(6)[Y_test_orig.reshape(-1)] 创建和使用 one-hot 编码。分解一下这个表达式:

1、np.eye(6) 创建了一个 6x6 的单位矩阵(对角矩阵),其中对角线上的元素为 1,其余元素为 0。
例如:

import numpy as np
identity_matrix = np.eye(6)
print(identity_matrix)
[[1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 1.]]

Y_test_orig.reshape(-1) 将 Y_test_orig 重新调整为一维数组。

Y_test_orig = np.array([[0], [1], [2], [3], [4], [5]])
reshaped = Y_test_orig.reshape(-1)
print(reshaped)
[0 1 2 3 4 5]

3、np.eye(6)[Y_test_orig.reshape(-1)] 使用重新调整后的 Y_test_orig 数组作为索引,来选择单位矩阵中的相应行。这将生成一个 one-hot 编码矩阵,其中每个类标签都被编码为一个 one-hot 向量。

Y_test_orig = np.array([[0], [1], [2], [3], [4], [5]])
one_hot_encoded = np.eye(6)[Y_test_orig.reshape(-1)]
print(one_hot_encoded)
[[1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 1.]]

如果Y_test_orig_test为[ [0 0 0 5 1 0 3 1 5 1 5 1 ] ],那么结果将会是:

[[1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1.]
 [0. 1. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1.]
 [0. 1. 0. 0. 0. 0.]]

再转置一下,np.eye(6)[Y_test_orig.reshape(-1)].T就可以为机器学习所用了:

[[1. 1. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 1. 0. 1. 0. 1.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0.]]

故独热编码函数:C为类别数,Y为原始二维矩阵如:[ [0 0 0 5 1 0 3 1 5 1 5 1 ] ]

def convert_to_one_hot(Y, C):
    Y = np.eye(C)[Y.reshape(-1)].T
    return Y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值