Scikit Learn PolynomialFeatures — для чего используется опция include_bias?

В препроцессоре scikit-learn PolynomialFeatures есть возможность включить include_bias. По сути, это просто добавляет столбец единиц в фрейм данных. Мне было интересно, какой смысл иметь это. Конечно, вы можете установить значение False. Но теоретически, как наличие или отсутствие столбца единиц вместе с сгенерированными полиномиальными функциями влияет на регрессию.

Это объяснение в документации, но я не могу извлечь из него ничего полезного относительно того, почему его следует использовать или нет.

include_bias : логическое значение

Если True (по умолчанию), то включите столбец смещения, функцию, в которой все полиномиальные степени равны нулю (т. е. столбец единиц — действует как член пересечения в линейной модели).


person Anup Sebastian    schedule 14.01.2020    source источник


Ответы (1)


Предположим, вы хотите выполнить следующую регрессию:

y ~ a + b x + c x^2

где x — общий образец. Лучшие коэффициенты a,b,c вычисляются с помощью простого матричного исчисления. Во-первых, обозначим через X = [1 | X | X^2] матрицу с N строками, где N — количество отсчетов. Первый столбец — это столбец 1, второй столбец — это столбец значений x_i для всех выборок i, третий столбец — это столбец значений x_i^2 для всех выборок i. Обозначим через B следующий вектор-столбец B=[a b c]^T Если Y является вектором-столбцом N целевых значений для всех выборок i, мы можем записать регрессию как

y ~ X B

i-я строка этого уравнения равна y_i ~ [1 x_i x^2] [a b c]^t = a + b x_i + c x_i^2.

Цель обучения регрессии — найти B=[a b c] так, чтобы X B было как можно ближе к y.

Если вы не добавите столбец 1, вы априори предполагаете, что a=0, что может быть неверным.

На практике, когда вы пишете код Python и используете PolynomialFeatures вместе с sklearn.linear_model.LinearRegression, последний по умолчанию добавляет столбец из 1 (поскольку в LinearRegression параметр fit_intercept равен True по умолчанию), поэтому вам не нужно добавлять это также и в PolynomialFeatures. Поэтому в PolynomialFeatures обычно оставляют include_bias=False.

Ситуация отличается, если вы используете statsmodels.OLS вместо LinearRegression

person Andrea Araldo    schedule 16.02.2020
comment
Спасибо, последняя часть вашего ответа была именно тем, что я искал. - person Anup Sebastian; 18.02.2020
comment
Как и Анупу, мне понравилось, как вы включили последние два абзаца, чтобы устранить любую путаницу. - person Apie; 28.10.2020