NumPy相当于Keras函数utils.to_categorical

9
我是一名有用的助手,可以为您翻译文本。
我有一个使用Keras进行机器学习的Python脚本。 我正在构建X和Y,它们分别是特征和标签。
标签是这样构建的:
def main=():

   depth = 10
   nclass = 101
   skip = True
   output = "True"
   videos = 'sensor'
   img_rows, img_cols, frames = 8, 8, depth
   channel = 1 
   fname_npz = 'dataset_{}_{}_{}.npz'.format(
    nclass, depth, skip)

   vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
   nb_classes = nclass

   x, y = loaddata(videos, vid3d, nclass,
                    output, skip)

   X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
   Y = np_utils.to_categorical(y, nb_classes) # This needs to be changed

Keras中使用的函数"to_categorical"解释如下:

to_categorical

keras.utils.to_categorical(y, num_classes=None)

将类别向量(整数)转换为二进制类矩阵。

现在我正在使用NumPy。请告诉我如何构建与之相同的代码行以便工作?换句话说,我正在寻找NumPy中"to_categorical"函数的等效函数。


2
to_categorical 是用纯 NumPy 编写的。你可以直接从 源代码 中复制它。 - Yu-Yang
为什么不直接使用 https://github.com/keras-team/keras/blob/master/keras/utils/np_utils.py 中的代码并引用其来源呢? - wleao
3个回答

18

这里有一种简单的方法:

np.eye(nb_classes)[y]

1
尝试使用get_dummies。
>>> pd.core.reshape.get_dummies(df)
Out[30]: 
   cat_a  cat_b  cat_c
0      1      0      0
1      1      0      0
2      1      0      0
3      0      1      0
4      0      1      0
5      0      0      1

1
这对我来说看起来像是用另一个非 numpy 库替换一个非 numpy 库。 - Paul Panzer

0

像这样的东西(我不认为有内置的):

>>> import numpy as np
>>> 
>>> n_cls, n_smp = 3, 10
>>> 
>>> y = np.random.randint(0, n_cls, (n_smp,))
>>> y
array([0, 1, 1, 1, 2, 2, 1, 2, 1, 1])
>>> 
>>> res = np.zeros((y.size, n_cls), dtype=int)
>>> res[np.arange(y.size), y] = 1
>>> res
array([[1, 0, 0],
       [0, 1, 0],
       [0, 1, 0],
       [0, 1, 0],
       [0, 0, 1],
       [0, 0, 1],
       [0, 1, 0],
       [0, 0, 1],
       [0, 1, 0],
       [0, 1, 0]])

实际上,在我的代码中,“y”是实际数据,而“nbclasses”是标签,因此我将标签分配给数据,这是一组*.csv文件在训练分类器之前。你知道怎么做吗? - Danny
@Danny 我不确定我完全理解了。您想要向数据添加列吗?每个类别都添加一列? - Paul Panzer
我已经准备好了我的数据,现在需要创建X和Y。X是特征,而Y是这些特征的标签。我像这样创建了X:X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))。现在我需要创建Y - 这些特征的标签。 - Danny
@Danny 我认为最简单的方法是你可以更新你的问题,提供一个小但完整的示例,展示你现在拥有什么以及你想要得到什么。 - Paul Panzer
完成了。我刚刚更新了它,我认为sklearn也可以与NumPy一起使用。 - Danny
@Danny,我很感激你的努力,但那不是我想要的。我指的是一个示例(例如 '[4, 0, 1, 0]')来展示 y 可能的样子以及 Y 应该是什么样子。无论如何,我检查了一下,我写的代码与 to_categorical 基本上是一样的;唯一的区别是 to_categorical 返回浮点数。要获得完全相同的行为,只需在 res = np.zeros((y.size, n_cls), dtype=int) 中省略 dtype=int 即可。 - Paul Panzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接