Использование категориальных данных в качестве функций в sklean LogisticRegression

Я пытаюсь понять, как использовать категориальные данные в качестве функций в sklearn.linear_model в sklearn.linear_model .

Я понимаю, конечно, мне нужно его закодировать.

  1. Я не понимаю, как передать закодированную функцию в регрессию Logistic, поэтому она обрабатывается как категориальная функция, а не интерпретирует значение int, полученное при кодировании в качестве стандартной измеряемой функции.

  2. (Менее важно) Может ли кто-нибудь объяснить разницу между использованием preprocessing.LabelEncoder() , DictVectorizer.vocabulary или просто кодированием категориальных данных самим простым dict? Комментарий Алексея здесь затрагивает тему, но не очень глубоко.

Особенно с первым!

3 Solutions collect form web for “Использование категориальных данных в качестве функций в sklean LogisticRegression”

Вы можете создавать переменные индикатора для разных категорий. Например:

 animal_names = {'mouse';'cat';'dog'} Indicator_cat = strcmp(animal_names,'cat') Indicator_dog = strcmp(animal_names,'dog') 

Тогда мы имеем:

  [0 [0 Indicator_cat = 1 Indicator_dog = 0 0] 1] 

И вы можете связать их с исходной матрицей данных:

 X_with_indicator_vars = [X, Indicator_cat, Indicator_dog] 

Помните, однако, чтобы оставить одну категорию без индикатора, если постоянный член включен в матрицу данных! В противном случае ваша матрица данных не будет полным столбцом (или в эконометрических терминах, у вас есть многоколлинеарность).

 [1 1 0 0 Notice how constant term, an indicator for mouse, 1 0 1 0 an indicator for ca,t and an indicator for dog 1 0 0 1] leads to a less than full column rank matrix: the first column is the sum of the last three. 
  1. Стандартный подход для преобразования категориальных функций в числовые – OneHotEncoding
  2. Это совершенно разные классы:

    [DictVectorizer][2].vocabulary_

    Имена функций сопоставления словаря для индексов функций.

    т.е. после fit() DictVectorizer имеет все возможные имена функций, и теперь он знает, в каком конкретном столбце он поместит особое значение функции. Таким образом, DictVectorizer.vocabulary_ содержит признаки функций, но не значения.

    LabelEncoder в противоположных картах отображает каждую возможную метку (ярлык может быть строкой или целым числом) до некоторого целочисленного значения и возвращает 1D-вектор этих целых значений.

Предположим, что тип каждой категориальной переменной является «объектом». Во-первых, вы можете создать panda.index категориальных имен столбцов:

 import pandas as pd catColumns = df.select_dtypes(['object']).columns 

Затем вы можете создать переменные индикатора, используя приведенный ниже цикл. Для двоичных категориальных переменных используйте LabelEncoder() чтобы преобразовать его в 0 и 1 . Для категориальных переменных с более чем двумя категориями используйте pd.getDummies() чтобы получить переменные индикатора, а затем отбросить одну категорию (чтобы избежать проблемы многоколлинеарности).

 from sklearn import preprocessing le = preprocessing.LabelEncoder() for col in catColumns: n = len(df[col].unique()) if (n > 2): X = pd.get_dummies(df[col]) X = X.drop(X.columns[0], axis=1) df[X.columns] = X df.drop(col, axis=1, inplace=True) # drop the original categorical variable (optional) else: le.fit(df[col]) df[col] = le.transform(df[col]) 
  • Текст Классификация с множеством выходов
  • измерение данных запроса scitkit-learn должно соответствовать размеру данных обучения
  • Прогнозирование отсутствующих значений с помощью модуля Imputer scikit-learn
  • Как визуализировать точки данных векторов tf-idf для кластеризации kmeans?
  • Почему GridSearchCV тратит более 50% времени на {метод 'приобретать' объектов thread.lock}?
  • Использование scikit для определения вклада каждой функции в предсказание определенного класса
  • Python - Что такое sklearn.pipeline.Pipeline?
  • iPython (python 2) - ImportError: нет модуля с именем model_selection
  • Python - лучший язык программирования в мире.