Векторы OneHot с именами объектов - PullRequest
0 голосов
/ 05 ноября 2019

Глядя на документацию OneHotEncoder, кажется, нет способа включить имена объектов в качестве префикса векторов OneHot. Кто-нибудь знает способ обойти это? Я что-то упустил?

Пример кадра данных:

df = pd.DataFrame({'a':['c1', 'c1', 'c2', 'c1', 'c3'], 'b':['c1', 'c4', 'c1', 'c1', 'c1']})

from sklearn.preprocessing import OneHotEncoder

onehot = OneHotEncoder()
onehot.fit(df)

onehot.get_feature_names()
array(['x0_c1', 'x0_c2', 'x0_c3', 'x1_c1', 'x1_c4'], dtype=object)

Где при условии, что кодировщик получает кадр данных, я ожидаю возможность получить что-то вроде:

array(['a_c1', 'a_c2', 'a_c3', 'b_c1', 'b_c4'], dtype=object)

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Вот что вам нужно сделать, чтобы включить имена ваших функций из get_feature_name.

onehot.get_feature_names(input_features=df.columns)

Вывод:

array(['a_c1', 'a_c2', 'a_c3', 'b_c1', 'b_c4'], dtype=object)

По документам:

get_feature_name (self, input_features = None)
Возвращать имена объектов для выходных объектов.

Параметры: input_features: список строк, длина n_features, необязательные имена строк для входных объектов, еслидоступный. По умолчанию используются «x0», «x1»,… «xn_features».

Возвращает: output_feature_names: массив строк, длина n_output_features

0 голосов
/ 05 ноября 2019

С помощью pd.get_dummies() вы можете установить префикс и разделитель, а затем исходное имя столбца.

pd.get_dummies(df, ['a', 'b'], prefix_sep='_')

Out[23]: 

   a_c1  a_c2  a_c3  b_c1  b_c4
0     1     0     0     1     0
1     1     0     0     0     1
2     0     1     0     1     0
3     1     0     0     1     0
4     0     0     1     1     0
...