Вы не можете использовать категориальные переменные в линейной регрессии. Линейная регрессия обрабатывает все переменные, такие как числовые переменные. Поэтому, если вы укажете 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), следующие три для региона и т. Д.
Должно быть, это линейная регрессия или что-то еще, если вы пытаетесь предсказать скаляр. Логистическая регрессия состоит в том, чтобы классифицировать вероятность того, что набор предикторов указывает, что y_hat имеет тип A или B –
Вы можете сказать - используйте movie_revenue, чтобы предсказать, был ли директор Director1 или Director2 –
Да, это линейная регрессия! – KengoTokukawa