2016-05-10 7 views
0

Я собираюсь предсказать кассовую съемку фильма с использованием логистической регрессии. У меня есть данные поезда, включая актеров и режиссеров. Это мои данные:Как применить линейную регрессию 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) ли это работает?

+0

Должно быть, это линейная регрессия или что-то еще, если вы пытаетесь предсказать скаляр. Логистическая регрессия состоит в том, чтобы классифицировать вероятность того, что набор предикторов указывает, что y_hat имеет тип A или B –

+0

Вы можете сказать - используйте movie_revenue, чтобы предсказать, был ли директор Director1 или Director2 –

+0

Да, это линейная регрессия! – KengoTokukawa

ответ

6

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

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

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 documentation:

У вас есть три категориальных переменных: пол, регион и браузер. Пол имеет 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-узнать выводит количество уровней для каждой переменной. Для наблюдения, подобного [0, 1, 3], если вы вызываете enc.transform, вы увидите их фиктивные переменные. Обратите внимание, что длина результирующего массива равна 2 + 3 + 4 = 9. Первые два для пола (если мужчина, первый - 1), следующие три для региона и т. Д.

+0

Что делать, если фильм режиссером и режиссером 1 и директором 2, и результаты становятся 1, 1, 0? Или 0,1,0,1,0,0? – KengoTokukawa

+0

Это становится 1, 1, 0, так как это только одно наблюдение. Но теперь категории не являются взаимоисключающими, поэтому здесь «n-1» не применяется. Вы включаете все три в регрессию. – ayhan

+0

Почему нужен метод «fit»? – LKM