Как применить линейную регрессию sklearn для некоторой строковой переменной

Я собираюсь предсказать кассовые сборы фильма, используя логистическую регрессию. У меня есть некоторые данные о поезде, включая актеров и режиссеров. Это мои данные:

Director1|Actor1|300 million
Director2|Actor2|500 million

Я собираюсь закодировать режиссеров и актеров, используя целые числа.

1|1|300 million
2|2|300 million

Что означает, что X={[1,1],[2,2]} y=[300,500]и fit(X,y) это работает?


person KengoTokukawa    schedule 10.05.2016    source источник
comment
Должна ли это быть линейная регрессия или что-то еще, если вы пытаетесь предсказать скаляр. Логистическая регрессия предназначена для классификации вероятности того, что набор предикторов указывает на то, что y_hat имеет тип A или B.   -  person Noel Evans    schedule 10.05.2016
comment
Вы можете, скажем, использовать movie_revenue, чтобы предсказать, был ли режиссер Режиссером1 или Режиссером2.   -  person Noel Evans    schedule 10.05.2016
comment
Да, это линейная регрессия!   -  person KengoTokukawa    schedule 10.05.2016
comment
Я собираюсь предсказать скаляр   -  person KengoTokukawa    schedule 10.05.2016
comment
Зависимая переменная должна быть непрерывной, и кажется, что это так, поэтому линейная регрессия должна быть в порядке.   -  person C.B.    schedule 10.05.2016


Ответы (1)


Вы не можете использовать категориальные переменные в линейной регрессии. Линейная регрессия рассматривает все переменные как числовые переменные. Следовательно, если вы закодируете Director1 как 1, а Director2 как 2, линейная регрессия попытается найти взаимосвязь на основе этой схемы кодирования. Предполагается, что Director2 в два раза больше, чем Director1. На самом деле эти цифры ничего не значат. Вы можете кодировать их как 143 и 9879, разницы быть не должно. Они не имеют никакого числового значения. Чтобы убедиться, что линейная регрессия обрабатывает их правильно, вам нужно использовать фиктивные переменные.

С фиктивными переменными у вас есть переменная для каждого уровня категории. Например, если у вас 3 директора, у вас будет 3 переменные: D1, D2 и D3. D1 будет иметь значение 1, если соответствующий фильм был снят Режиссером1, и 0 в противном случае; D2 будет иметь значение 1, если фильм был снят режиссером Director2, и 0 в противном случае... Таким образом, с набором значений D2 D1 D2 D3 D1 D2 ваши фиктивные переменные будут:

    D1 D2 D3
D2  0  1  0
D1  1  0  0
D2  0  1  0
D3  0  0  1
D1  1  0  0
D2  0  1  0

В линейной регрессии, чтобы избежать мультиколлинеарности, мы используем только n-1 из этих переменных, где n — это количество категорий (количество директоров в этом примере). Один из директоров будет выбран в качестве базового и будет представлен константой в регрессионной модели. Неважно, какой. Например, если вы исключите D3, вы узнаете, что фильм был снят Режиссером3, если D1=0 и D2=0. Вам не нужно указывать D3=1.

В scikit-learn это преобразование выполняется с помощью OneHotEncoder. Пример взят из документации scikit-learn:

У вас есть три категориальные переменные: Пол, Регион и Браузер. Пол имеет 2 уровня: ["male", "female"], регион имеет три уровня: ["from Europe", "from US", "from Asia"] и браузер имеет четыре уровня: ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]. Предположим, что они закодированы числами, начинающимися с нуля. Итак, [0, 1, 2] означает мужчину из США, который использует Safari.

>>> enc = preprocessing.OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
OneHotEncoder(categorical_features='all', dtype=<... 'float'>,
       handle_unknown='error', n_values='auto', sparse=True)
>>> enc.transform([[0, 1, 3]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]])

С помощью enc.fit scikit-learn выводит количество уровней для каждой переменной. Для таких наблюдений, как [0, 1, 3], если вы вызовете enc.transform, вы увидите их фиктивные переменные. Обратите внимание, что длина результирующего массива равна 2 + 3 + 4 = 9. Первые два для пола (если мужчина, первый равен 1), следующие три для региона и так далее.

person ayhan    schedule 10.05.2016
comment
Что, если фильм снимают и Режиссер 1, и Режиссер 2, и результаты становятся 1 , 1, 0? Или 0,1,0,1,0,0? - person KengoTokukawa; 11.05.2016
comment
Это становится 1, 1, 0, поскольку это только одно наблюдение. Но теперь категории не являются взаимоисключающими, так что n-1 здесь не применимо. Вы включаете все три в регрессию. - person ayhan; 11.05.2016
comment
зачем нужен метод "подгонка"? - person LKM; 20.04.2017
comment
И как ввести этот массив как функцию в линейную регрессию? - person LKM; 20.04.2017