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

Повышение производительности с помощью ансамблей

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

Последовательные ансамблевые методы

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

Параллельные ансамблевые методы

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

Методы ансамблевого обучения

Ниже приведены наиболее популярные методы ансамблевого обучения, то есть методы комбинирования прогнозов из разных моделей.

Упаковка

Термин пакетирование также известен как агрегирование начальной загрузки. В методах упаковки модель ансамбля пытается повысить точность прогнозирования и уменьшить дисперсию модели путем объединения прогнозов отдельных моделей, обученных на случайно сгенерированных обучающих выборках. Окончательный прогноз ансамблевой модели будет дан путем вычисления среднего значения всех прогнозов отдельных оценщиков. Один из лучших примеров использования мешков - случайные леса.

Повышение

В методе повышения главный принцип построения ансамблевой модели состоит в том, чтобы строить ее постепенно, последовательно обучая каждую оценку базовой модели. Как следует из названия, он в основном объединяет нескольких недельных базовых учеников, обучаемых последовательно на нескольких итерациях обучающих данных, для создания мощного ансамбля. Во время обучения недельных базовых учеников более высокие веса назначаются тем ученикам, которые ранее были неправильно классифицированы. Пример метода повышения - AdaBoost.

Голосование

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

Алгоритмы ансамбля мешков

Ниже приведены три алгоритма ансамбля пакетов:

Упакованное дерево решений

Как мы знаем, методы ансамбля пакетов хорошо работают с алгоритмами, имеющими высокую дисперсию, и в этом отношении лучшим из них является алгоритм дерева решений. В следующем рецепте Python мы собираемся построить модель ансамбля дерева решений с пакетом решений, используя функцию sklearn BaggingClassifier с DecisionTreeClasifier (алгоритм деревьев классификации и регрессии) на наборе данных о диабете индейцев пима.

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

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

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

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]

Затем введите данные для 10-кратной перекрестной проверки следующим образом:

seed = 7
kfold = KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()

Нам нужно указать количество деревьев, которые мы собираемся построить. Вот мы 150 деревьев строим -

num_trees = 150

Затем создайте модель с помощью следующего скрипта -

model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)

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

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Вывод

0.7733766233766234

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

Случайный лес

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

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

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

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

Теперь нам нужно загрузить набор данных о диабете 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]

Затем введите данные для 10-кратной перекрестной проверки следующим образом:

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

Нам нужно указать количество деревьев, которые мы собираемся построить. Здесь мы строим 150 деревьев с точками разделения, выбранными из 5 функций:

num_trees = 150
max_features = 5

Затем создайте модель с помощью следующего скрипта -

model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)

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

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Вывод

0.7629357484620642

Приведенные выше выходные данные показывают, что мы получили около 76% точности нашей модели классификатора случайных лесов.

Дополнительные деревья

Это еще одно расширение метода ансамбля дерева решений с мешками. В этом методе случайные деревья строятся из выборок обучающего набора данных.

В следующем рецепте Python мы собираемся построить дополнительную модель ансамбля деревьев, используя класс Sklearn ExtraTreesClassifier в наборе данных о диабете индейцев пима.

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

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier

Теперь нам нужно загрузить набор данных о диабете 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]

Затем введите данные для 10-кратной перекрестной проверки следующим образом:

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

Нам нужно указать количество деревьев, которые мы собираемся построить. Здесь мы строим 150 деревьев с точками разделения, выбранными из 5 функций:

num_trees = 150
max_features = 5

Затем создайте модель с помощью следующего скрипта -

model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)

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

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Вывод

0.7551435406698566

Приведенный выше результат показывает, что мы получили около 75,5% точности нашей модели классификатора дополнительных деревьев в мешках.

Повышение ансамблевых алгоритмов

Ниже приведены два наиболее распространенных алгоритма ансамбля повышения:

AdaBoost

Это один из наиболее успешных алгоритмов ансамбля повышения. Главный ключ этого алгоритма - это то, как они присваивают веса экземплярам в наборе данных. В связи с этим алгоритм должен уделять меньше внимания экземплярам при построении последующих моделей.

В следующем рецепте Python мы собираемся построить модель ансамбля Ada Boost для классификации с использованием класса Sklearn AdaBoostClassifier в наборе данных о диабете индейцев пима.

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

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier

Теперь нам нужно загрузить набор данных о диабете 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]

Затем введите данные для 10-кратной перекрестной проверки следующим образом:

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

Нам нужно указать количество деревьев, которые мы собираемся построить. Здесь мы строим 150 деревьев с точками разделения, выбранными из 5 функций:

num_trees = 50

Затем создайте модель с помощью следующего скрипта -

model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)

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

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Вывод

0.7539473684210527

Приведенный выше результат показывает, что мы получили около 75% точности нашей модели ансамбля классификатора AdaBoost.

Стохастическое повышение градиента

Это также называется машинами повышения градиента. В следующем рецепте Python мы собираемся построить модель Stochastic Gradient Boostingensemble для классификации с использованием класса Sklearn GradientBoostingClassifier на наборе данных о диабете индейцев пима.

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

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier

Теперь нам нужно загрузить набор данных о диабете 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]

Затем введите данные для 10-кратной перекрестной проверки следующим образом:

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

Нам нужно указать количество деревьев, которые мы собираемся построить. Здесь мы строим 150 деревьев с точками разделения, выбранными из 5 функций:

num_trees = 50

Затем создайте модель с помощью следующего скрипта -

model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)

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

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Вывод

0.7746582365003418

Приведенный выше результат показывает, что точность нашей модели классификатора Gradient Boosting составляет около 77,5%.

Алгоритмы ансамбля голосования

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

В следующем рецепте Python мы собираемся построить модель ансамбля голосования для классификации с использованием класса sklearn VotingClassifier на наборе данных о диабете индейцев пима. Мы объединяем прогнозы логистической регрессии, классификатора дерева решений и SVM вместе для задачи классификации следующим образом:

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

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier

Теперь нам нужно загрузить набор данных о диабете 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]

Затем введите данные для 10-кратной перекрестной проверки следующим образом:

kfold = KFold(n_splits=10, random_state=7)

Затем нам нужно создать подмодели следующим образом:

estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))

Теперь создайте модель ансамбля голосования, объединив прогнозы созданных выше подмоделей.

ensemble = VotingClassifier(estimators)
results = cross_val_score(ensemble, X, Y, cv=kfold)
print(results.mean())

Вывод

0.7382262474367738

Приведенный выше результат показывает, что точность нашей модели ансамбля классификаторов голосования составляет около 74%.