Scikit Learn PolynomialFeatures - какая польза от опции include_bias? - PullRequest
1 голос
/ 14 января 2020

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

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

include_bias: boolean

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

1 Ответ

0 голосов
/ 17 февраля 2020

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

y ~ a + b x + c x^2

, где x - это образец c. Лучшие коэффициенты 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

...