Как реализовать полиномиальную логистическую регрессию в scikit-learn? - PullRequest
2 голосов
/ 01 мая 2019

Я пытаюсь создать нелинейную логистическую регрессию, то есть полиномиальную логистическую регрессию, используя scikit-learn.Но я не мог найти, как я могу определить степень полинома.Кто-нибудь пробовал это?Большое спасибо!

1 Ответ

4 голосов
/ 02 мая 2019

Для этого вам нужно будет выполнить два шага.Предположим, вы используете набор данных iris (поэтому у вас есть воспроизводимый пример):

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline

data = load_iris()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y)

Шаг 1

Сначала вам нужно преобразовать данные в полиномиальные объекты.Первоначально наши данные имеют 4 столбца:

X_train.shape
>>> (112,4)

Вы можете создавать полиномиальные объекты с помощью scikit learn (здесь это для степени 2):

poly = PolynomialFeatures(degree = 2, interaction_only=False, include_bias=False)
X_poly = poly.fit_transform(X_train)
X_poly.shape
>>> (112,14)

Мы знаем, что имеется 14 функций (исходные 4, их квадрат и 6 скрещенных комбинаций)

Шаг 2

Теперь вы можете построить свою логистическую регрессию, назвав X_poly

lr = LogisticRegression()
lr.fit(X_poly,y_train)

Примечание: если вы затем хотите оценить свою модель по тестовым данным, вам также необходимо выполнить следующие 2 шага и выполнить:

lr.score(poly.transform(X_test), y_test)

Собрать все вместе в конвейер (необязательно)

Выможет потребоваться использовать конвейер, который обрабатывает эти два шага в одном объекте, чтобы избежать создания промежуточных объектов:

pipe = Pipeline([('polynomial_features',poly), ('logistic_regression',lr)])
pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...