【问题标题】:NumPy equivalent to Keras function utils.to_categoricalNumPy 等效于 Keras 函数 utils.to_categorical
【发布时间】:2018-09-15 23:39:01
【问题描述】:

我有一个使用 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”函数的等价物。

【问题讨论】:

标签: python numpy machine-learning keras


【解决方案1】:

这是一种简单的方法:

np.eye(nb_classes)[y]

【讨论】:

    【解决方案2】:

    尝试使用 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
    

    【讨论】:

    • 这在我看来就像用另一个非 numpy 库替换一个非 numpy 库。
    【解决方案3】:

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

    >>> 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 我不确定我是否理解 100%。您想在数据中添加列吗?每个类别一个?
    • 我已经准备好数据,然后我需要创建 X 和 Y。X 是特征,而 Y 是这些特征的标签。我这样创建了 X:X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel)) 现在我需要创建 Y - 特征的标签
    • @Danny 我认为如果你能用一个小而完整的例子来更新你的问题,说明你现在拥有什么以及你想要得到什么,那将是最简单的。
    • 完成。我刚刚更新了,我觉得sklearn也可以和NumPy一起使用。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2013-03-25
    • 2014-05-31
    • 2019-07-30
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多