首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从one-hot表示到标签

从one-hot表示到标签
EN

Stack Overflow用户
提问于 2019-01-28 04:27:49
回答 1查看 96关注 0票数 0

我的预测是在张量pred下,而pred.shape(4254, 10, 3)。所以我们有了维度为(10, 3)4254矩阵。让我们看看这些矩阵中的一个。

代码语言:javascript
复制
W = array([[0.04592975, 0.09632163, 0.85774857],
          [0.03408821, 0.27141285, 0.6944989 ],
          [0.02538731, 0.4691383 , 0.50547445],
          [0.01959289, 0.6456455 , 0.33476162],
          [0.01333424, 0.7494791 , 0.23718661],
          [0.0109237 , 0.77042925, 0.218647  ],
          [0.01438793, 0.7796771 , 0.20593494],
          [0.01474626, 0.6817438 , 0.30350992],
          [0.02189695, 0.57687664, 0.40122634],
          [0.03810155, 0.5130332 , 0.44886518]], dtype=float32)

从上面的例子中可以看到,有10个向量代表一个标签的一个热点表示。例如,np.argmax([0.04592975, 0.09632163, 0.85774857]) = 2

为什么我要按10个向量的批次进行操作?我正在研究一个时间序列预测问题,在time t_0上,我预测time t_1到time t_10的下10个标签。

对于这些矩阵中的每一个,我都有兴趣获得原始标签。所以对于矩阵W,我应该得到数组array([2, 2, 2, 1, 1, 1, 1, 1, 1, 1])

让我们定义阈值数组threshold_array = np.array([0.6, 0.65, 0.70, 0.75, 0.80, 0.80, 0.80, 0.80, 0.80, 0.80])并取回labels = array([2, 2, 2, 1, 1, 1, 1, 1, 1, 1])。假设中立位置为1,操作为02。这里的目标是根据threshold_array和我们的矩阵W修改labels

如果我用W[0],我们知道np.argmax(W[0]) = 2W[0][2] = 0.85774857。作为W[0][2] >= threshold_array[0]labels[0]将仍然是2

另一个例子有点不同。如果我用W[2],我们知道np.argmax(W[2]) = 2W[2][2] = 0.50547445。作为W[2][2] < threshold_array[2],则labels[2]将从2更改为0

如果我将该策略应用于来自W的每个向量,则labels现在被设置为array([2, 2, 0, 1, 1, 1, 1, 1, 1, 1])。请注意,只有动作才能成为中性位置,而不是相反的位置。

如何在python中对pred中每个矩阵W进行编码,得到一个维数为(4254, 10)的标签矩阵

EN

回答 1

Stack Overflow用户

发布于 2019-01-28 06:20:42

我不确定这是不是解决这个问题的最佳方法,但这里有一个答案。

代码语言:javascript
复制
import numpy as np

threshold_array = np.array([0.6, 0.65, 0.70, 0.75, 0.80, 0.80, 0.80, 0.80, 0.80, 0.80])   

def get_labels(W, threshold_array):

    labels = []
    for i, vect in enumerate(W):
        neutral_position = 1
        label = np.argmax(vect)
        if label in [0, 2]:
            if vect[label] < threshold_array[i]:
                labels.append(neutral_position)
            else:
                labels.append(label)
        else:
            labels.append(label)
    return np.array(labels)

if __name__ == "__main__":
    labels = []
    for matrix in pred:
        labels.append(get_labels(matrix, theshold_array))
    labels = np.array(labels)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54392563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档