我正在研究简单的数据集,以检测具有类名“ 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
答案 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