使用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
到此这篇关于使用numpy.eye创建one-hot编码的实现的文章就介绍到这了,更多相关numpy.eye创建one-hot编码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!