Повышение производительности модели машинного обучения (продолжение…)

Повышение производительности за счет настройки алгоритма

Как мы знаем, модели машинного обучения параметризованы таким образом, что их поведение можно настроить для конкретной проблемы. Настройка алгоритма означает поиск наилучшей комбинации этих параметров, чтобы можно было улучшить производительность модели машинного обучения. Этот процесс иногда называют гиперпараметрической оптимизацией, а параметры самого алгоритма называют гиперпараметрами, а коэффициенты, найденные алгоритмом ML, называют параметрами.

Здесь мы собираемся обсудить некоторые методы настройки параметров алгоритма, предоставляемые Python Scikit-learn.

Настройка параметров поиска по сетке

Это подход к настройке параметров. Ключевым моментом работы этого метода является то, что он строит и методично оценивает модель для всех возможных комбинаций параметров алгоритма, указанных в сетке. Следовательно, можно сказать, что этот алгоритм носит поисковый характер.

Example

В следующем рецепте Python мы собираемся выполнить поиск по сетке с использованием класса sklearn GridSearchCV для оценки различных альфа-значений для алгоритма регрессии хребта в наборе данных о диабете индейцев пима.

Сначала импортируйте необходимые пакеты следующим образом:

import numpy
from pandas import read_csv
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV

Теперь нам нужно загрузить набор данных о диабете Pima, как это было в предыдущих примерах -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Затем оцените различные значения альфа следующим образом:

alphas = numpy.array([1,0.1,0.01,0.001,0.0001,0])
param_grid = dict(alpha=alphas)

Теперь нам нужно применить поиск по сетке к нашей модели -

model = Ridge()
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid.fit(X, Y)

Распечатайте результат со следующей строкой скрипта -

print(grid.best_score_)
print(grid.best_estimator_.alpha)

Output

0.2796175593129722
1.0

Приведенный выше результат дает нам оптимальную оценку и набор параметров в сетке, которые достигли этой оценки. Альфа-значение в данном случае равно 1.0.

Настройка параметров случайного поиска

Это подход к настройке параметров. Ключевым моментом работы этого метода является то, что он выбирает параметры алгоритма из случайного распределения для фиксированного числа итераций.

Example

В следующем рецепте Python мы собираемся выполнить случайный поиск с использованием класса sklearn RandomizedSearchCV для оценки различных альфа-значений от 0 до 1 для алгоритма регрессии Ridge в наборе данных о диабете индейцев пима.

Сначала импортируйте необходимые пакеты следующим образом:

import numpy
from pandas import read_csv
from scipy.stats import uniform
from sklearn.linear_model import Ridge
from sklearn.model_selection import RandomizedSearchCV

Теперь нам нужно загрузить набор данных о диабете Pima, как это было в предыдущих примерах -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Затем оцените различные значения альфа в алгоритме регрессии Риджа следующим образом:

param_grid = {'alpha': uniform()}
model = Ridge()
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=50,
random_state=7)
random_search.fit(X, Y)

Распечатайте результат со следующей строкой скрипта -

print(random_search.best_score_)
print(random_search.best_estimator_.alpha)

Output

0.27961712703051084
0.9779895119966027

Приведенный выше результат дает нам оптимальную оценку, аналогичную поиску по сетке.