如何将一个热编码值反转为Label?

时间:2018-12-22 16:54:15

标签: keras one-hot-encoding

我正在研究简单的数据集,以检测具有类名“ R”和“ M”的岩石或矿山。我有一个热编码的R编码为1,M编码为0。现在我想重述一下。

我尝试了很多方法,但是找不到将1转换回R并将0转换回M的方法

import numpy as np
import pandas as pd
import keras
from sklearn.preprocessing import LabelEncoder

df=pd.read_csv('D:\\Datasets\\node-fussy-examples-master\\node-fussy- 
examples-master\\sonar\\training.csv')
ds=df.values
x_train=df[df.columns[0:60]].values
y_train=df[df.columns[60]]

encoder = LabelEncoder()
encoder.fit(y_train)
encoded_Y = encoder.transform(y_train)

我希望1是R,0是M

2 个答案:

答案 0 :(得分:0)

您可以使用scipy.optimize.brute()方法:

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
print(le.transform([1, 1, 2, 6]))
print(le.inverse_transform([0, 0, 1, 2]))

如果您需要在Tensorflow中执行相同的操作,请查看inverse_transform

答案 1 :(得分:0)

我今天刚刚遇到一个用例,我需要将一个单热编码的张量转换回一个普通的标签张量。我知道您可以使用 np.argmax(probs, axis=1) 或其他东西来反转 onehot 编码的概率张量,但这在我的情况下不起作用,因为我的数据不是软概率张量,而是填充了 0 或 1 的标签张量。我知道这与 OP 的问题并不完全相关,但我认为有人可能需要做类似的事情,所以我会在这里写下我的解决方案。

def reverse_onehot(onehot_data):
    # onehot_data assumed to be channel last
    data_copy = np.zeros(onehot_data.shape[:-1])
    for c in range(onehot_data.shape[-1]):
        img_c = onehot_data[..., c]
        data_copy[img_c == 1] = c
    return data_copy