Отказ от категорических функций от быстрого кодирования в Scikit-Learn?

Я пытаюсь построить модель прогнозирования лассо-регрессии. Я закодировал все свои категориальные целочисленные функции, используя схему one-of-K, которая называется One-of-K, с использованием OneHotEncoder в scikit-learn. Основываясь на результате, только 51 параметр фактически влияет на модель прогнозирования. Я хочу исследовать эти параметры, но они закодированы, как описано выше. Знаете ли вы, как я могу извлечь, какая целочисленная категориальная особенность соответствует какому горячему кодированному массиву? Спасибо!

3 ответа

Используя атрибуты active_features_, feature_indices_ и n_values_ sklearn.preprocessing.OneHotEncoder, вектор категориальных объектов, упорядоченных по их "позиции" в массиве с одним горячим элементом, может быть создан следующим образом:

import numpy as np
from sklearn import preprocessing

enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
enc.active_features_ - np.repeat(enc.feature_indices_[:-1], enc.n_values_)
# array([0, 1, 0, 1, 2, 0, 1, 2, 3], dtype=int64)

Кроме того, исходные данные могут быть возвращены из горячего массива следующим образом:

x = enc.transform([[0, 1, 1], [1, 2, 3]]).toarray()
# array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.],
#       [ 0.,  1.,  0.,  0.,  1.,  0.,  0.,  0.,  1.]])

cond = x > 0
[enc.active_features_[c.ravel()] - enc.feature_indices_[:-1] for c in cond]
# [array([0, 1, 1], dtype=int64), array([1, 2, 3], dtype=int64)]

Это работает:

      import pickle


with open('model.pickle', 'rb') as handle:
    one_hot_categories = pickle.load(handle)      


print(one_hot_categories.categories_)

Я разработал конструкцию для улучшения Pipele и FeatureUnion в sklearn, благодаря которой мы также можем откатить категориальные функции после горячего кодирования или других этапов предварительной обработки. Кроме того, мы можем "нарисовать" преобразование с помощью GraphX: например,

например

Вы можете найти их на моей странице Github.

Другие вопросы по тегам