Python, как инвертировать обратно фактические значения после использования one-hot-encode / pd.get_dummies - PullRequest
1 голос
/ 23 декабря 2019

Я использую

pd.get_dummies

для преобразования категориального вектора с 4 метками (строками) в 2d массив с 4 столбцами. Однако после того, как я не смог найти способ вернуться к исходным значениям впоследствии. Я также не мог сделать это при использовании

sklearn.preprocessing.OneHotEncoder

Что лучше всего подходит для категориального вектора с горячим кодированием, но обладает способностьюобратное первоначальное значение впоследствии?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2019

Вы можете найти максимум строки и заменить его именем этого столбца. импорт numpy как np импорт pandas как pd

df = pd.DataFrame({"A":[0,1,0,0],"B":[1,0,0,0],"C":[0,0,1,0], "D":[0,0,0,1]})

def decode(row):
    for c in df.columns:
        if row[c]==1:
            return c


df = df.apply(decode,axis=1)
print(df)

Вывод:

0    B
1    A
2    C
3    D
dtype: object
0 голосов
/ 23 декабря 2019

Вы можете использовать inverse_transform метод sklearn.preprocessing.OneHotEncoder, чтобы сделать это. Я проиллюстрировал это на следующем примере:

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male'], ['Female'], ['Female']]
enc.fit(X)
enc.categories_

[array(['Female', 'Male'], dtype=object)]

enc.transform([['Female'], ['Male']]).toarray()

array([[1., 0.],
       [0., 1.]])

enc.inverse_transform([[0, 1], [1,0], [0, 1]])

array([['Male'],
       ['Female'],
       ['Male']], dtype=object)

Чтобы получить словарь категории к ключу, вы могли бы сделать это:

A = {}
for i in enc.categories_[0]:
    A[i] = enc.transform([[i]]).toarray()

Но может быть лучший способ сделать этоэто.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...