На этом шаге мы рассмотрим подведем некоторые итоги.
Основной параметр линейных моделей - параметр регуляризации, называемый alpha в моделях регрессии и C в LinearSVC и LogisticRegression. Большие значения alpha или маленькие значения C означают простые модели. Конкретно для регрессионных моделей настройка этих параметров имеет весьма важное значение. Как правило, поиск C и alpha осуществляется по логарифмической шкале. Кроме того вы должны решить, какой вид регуляризации нужно использовать: L1 или L2. Если вы полагаете, что на самом деле важны лишь некоторые признаки, следует использовать L1. В противном случае используйте установленную по умолчанию L2 регуляризацию. Еще L1 регуляризация может быть полезна, если интерпретируемость модели имеет важное значение. Поскольку L1 регуляризация будет использовать лишь несколько признаков, легче будет объяснить, какие признаки важны для модели и каковы эффекты этих признаков.
Линейные модели очень быстро обучаются, а также быстро прогнозируют. Они масштабируются на очень большие наборы данных, а также хорошо работают с разреженными данными. При работе с данными, состоящими из сотен тысяч или миллионов примеров, вас, возможно, заинтересует опция solver='sag' в LogisticRegression и Ridge, которая позволяет получить результаты быстрее, чем настройки по умолчанию. Еще пара опций - это класс SGDClassifier и класс SGDRegressor, реализующие более масштабируемые версии описанных на предыдущих шагах линейных моделей.
Еще одно преимущество линейных моделей заключается в том, что они позволяют относительно легко понять, как был получен прогноз, при помощи формул, которые мы видели ранее для регрессии и классификации. К сожалению, часто бывает совершенно не понятно, почему были получены именно такие коэффициенты. Это особенно актуально, если ваш набор данных содержит высоко коррелированные признаки, в таких случаях коэффициенты сложно интерпретировать.
Как правило, линейные модели хорошо работают, когда количество признаков превышает количество наблюдений. Кроме того, они часто используются на очень больших наборах данных, просто потому, что не представляется возможным обучить другие модели. Вместе с тем в низкоразмерном пространстве альтернативные модели могут показать более высокую обобщающую способность. Позднее мы рассмотрим несколько примеров, в которых использование линейных моделей не увенчалось успехом.
Во всех моделях scikit-learn метод fit возвращает self. Это позволяет писать код, приведенный ниже и уже широко использованный нами в предыдущих шагах:
[In 39]: # создаем экземпляр модели и подгоняем его в одной строке logreg = LogisticRegression().fit(X_train, y_train)
Здесь мы использовали значение, возвращаемое методом fit (self), чтобы присвоить обученную модель переменной logreg. Эта конкатенация вызовов методов (в данном случае _init_, а затем fit) известна как цепочка методов (method chaining). Еще одно обшераспространенное применение цепочки методов в scikit-learn - это связывание методов fit и predict в одной строке:
[In 40]: logreg = LogisticRegression() y_pred = logreg.fit(X_train, y_train).predict(X_test)
Наконец, вы можете создать экземпляр модели, подогнать модель и получить прогнозы в одной строке:
[In 43]: y_pred = LogisticRegression().fit(X_train, y_train).predict(X_test)
Однако этот очень короткий вариант не идеален. В одной строке происходит масса всего, что может сделать код трудночитаемым. Кроме того, подогнанная модель логистической регрессии не сохранена в какой-то определенной переменной, поэтому мы не можем проверить или использовать ее, чтобы получить прогнозы для других данных.
На следующем шаге мы дадим понятие наивных байесовских классификаторов.