У меня есть набор данных, где:
X1 - категорически независимая переменная
X2 - непрерывная независимая переменная
y - непрерывная зависимая переменная
И я хочу использовать X1 и X2 для прогнозирования y. Является ли линейная регрессия подходящей для этого (имеет ли смысл даже регрессировать над категориальной независимой переменной?)? Если да, то как я могу использовать линейную регрессию, когда X1 является категориальной независимой переменной (например, цвет глаз)?
Должен ли я создать отдельную модель линейной регрессии для каждой из категорий в X1? Или попытайтесь создать модель с несколькими линейными регрессиями?
В режиме онлайн в основном есть ресурсы, касающиеся непрерывной независимой → непрерывной зависимости (линейная регрессия) или непрерывной независимой → категориальной зависимости (логистическая регрессия).
Было бы полезно указать на любые ресурсы/инструменты, которые могли бы мне помочь.
Вы можете использовать линейную регрессию, но сначала вам нужно сначала кодировать X1 как ряд переменных.
Вот простой пример, используя метод "фиктивного кодирования":
┏━━━━━━━━━━━━┳━━━━━┳━━━━━┓
┃ Eye Colour ┃ x11 ┃ x12 ┃
┣━━━━━━━━━━━━╋━━━━━╋━━━━━┫
┃ Blue ┃ 0 ┃ 0 ┃
┣━━━━━━━━━━━━╋━━━━━╋━━━━━┫
┃ Brown ┃ 1 ┃ 0 ┃
┣━━━━━━━━━━━━╋━━━━━╋━━━━━┫
┃ Green ┃ 0 ┃ 1 ┃
┗━━━━━━━━━━━━┻━━━━━┻━━━━━┛
Здесь статья, объясняющая различные методы кодирования:
При линейной регрессии с категориальными переменными вы должны быть осторожны с фиктивной переменной. Ловушка фиктивной переменной - это сценарий, в котором независимые переменные являются мультиколлинеарными - сценарий, в котором две или более переменных сильно коррелированы; Проще говоря, одну переменную можно предсказать из других. Это может привести к необычности модели, то есть ваша модель просто не будет работать. Читайте об этом здесь
Идея состоит в том, чтобы использовать фиктивную переменную с кодировкой drop_first=True
, при этом будет исключен один столбец из каждой категории после преобразования категориальной переменной в фиктивные/индикаторные переменные. Делая это, вы НЕ БУДЕТЕ потерять и релевантную информацию просто потому, что весь ваш смысл в наборе данных может быть полностью объяснен остальными функциями.
Вот полный код того, как вы можете сделать это для своего набора данных жилья
Итак, у вас есть категорические особенности:
District, Condition, Material, Security, Type
И одна из числовых особенностей, которую вы пытаетесь предсказать:
Price
Сначала вам нужно разделить ваш начальный набор данных на входные переменные и прогнозирование, предполагая, что его кадр данных pandas будет выглядеть так:
Входные переменные:
X = housing[['District','Condition','Material','Security','Type']]
Прогноз:
Y = housing['Price']
Преобразуйте категориальные переменные в фиктивные/индикаторные переменные и поместите по одной в каждую категорию:
X = pd.get_dummies(data=X, drop_first=True)
Так что теперь, если вы проверите форму X с помощью drop_first=True
вы увидите, что у него на 4 столбца меньше - по одному для каждой из ваших категориальных переменных.
Теперь вы можете продолжать использовать их в вашей линейной модели. Для реализации scikit-learn это может выглядеть так:
from sklearn import linear_model
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = .20, random_state = 40)
regr = linear_model.LinearRegression() # Do not use fit_intercept = False if you have removed 1 column after dummy encoding
regr.fit(X_train, Y_train)
predicted = regr.predict(X_test)