Дерево классификации и регрессии (CART) — это алгоритм обучения дерева решений. Его можно использовать как для классификации, так и для регрессии, в зависимости от доступной информации набора данных. Деревья классификации используются, когда мы знаем класс каждого экземпляра. Построение деревьев классификации с помощью CART аналогично построению с ID3, за исключением меры информации. В CART в качестве информационной меры используется примесь Джини (G), а не энтропия. G определяется следующим образом:

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

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

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

Классификатор голосования представляет собой ансамблевый подход. Рассмотрим задачу бинарной классификации более подробно. Ансамбль в этой ситуации состоит из N классификаторов, делающих прогнозы P0, P1, to, PN с P = 0 или 1. Метамодель использует жесткое голосование для получения окончательного прогноза. Рассмотрим классификатор голосования, состоящий из трех обученных классификаторов, как показано на диаграмме, чтобы лучше понять жесткое голосование. Классификатор 2 предсказывает метку 0 для новой точки данных, в то время как классификаторы 1 и 3 ожидают метку 1. В этой ситуации 1 имеет два голоса, а 0 — только один. В результате классификатор голосования прогнозирует 1.

Давайте рассмотрим пример набора данных пациентов, в котором мы создадим три классификатора, чтобы предсказать, страдает ли пациент заболеванием печени, используя все функции, представленные в наборе данных X, y.

# Set seed for reproducibility
SEED=1
# Instantiate lr
lr = LogisticRegression(random_state=SEED)
# Instantiate knn
knn = KNN(n_neighbors=27)
# Instantiate dt
dt = DecisionTreeClassifier(min_samples_leaf=0.13, random_state=SEED)
# Define the list classifiers
classifiers = [('Logistic Regression', lr), ('K Nearest Neighbours', knn), ('Classification Tree', dt)]
# Iterate over the pre-defined list of classifiers
for clf_name, clf in classifiers:    
 
    # Fit clf to the training set
    clf.fit(X_train, y_train)    
   
    # Predict y_pred
    y_pred = clf.predict(X_test)
    
    # Calculate accuracy
    accuracy = accuracy_score(y_test, y_pred) 
   
    # Evaluate clf's accuracy on the test set
    print('{:s} : {:.3f}'.format(clf_name, accuracy))
Logistic Regression : 0.741 
K Nearest Neighbours : 0.701 
Classification Tree : 0.707

Логистическая регрессия достигла наивысшей точности 74,1%. Давайте посмотрим на классификатор голосования.

# Import VotingClassifier from sklearn.ensemble
from sklearn.ensemble import VotingClassifier
# Instantiate a VotingClassifier vc
vc = VotingClassifier(estimators= classifiers)
# Fit vc to the training set
vc.fit(X_train, y_train)
# Evaluate the test set predictions
y_pred = vc.predict(X_test)
# Calculate accuracy score
accuracy = accuracy_score(y_test, y_pred)
print('Voting Classifier: {:.3f}'.format(accuracy))
Voting Classifier: 0.764

Классификатор голосования достигает точности набора тестов 76,4%. Это значение больше, чем достигнутое LogisticRegression.

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

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

# Import DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
# Import BaggingClassifier
from sklearn.ensemble import BaggingClassifier
# Instantiate dt
dt = DecisionTreeClassifier(random_state=1)
# Instantiate bc
bc = BaggingClassifier(base_estimator=dt, n_estimators=50, random_state=1)
# Fit bc to the training set
bc.fit(X_train, y_train)
# Predict test set labels
y_pred = bc.predict(X_test)
# Evaluate acc_test
acc_test = accuracy_score(y_test, y_pred)
print('Test set accuracy of bc: {:.2f}'.format(acc_test))
Test set accuracy of bc: 0.67

Одно дерево dt достигло бы точности 63%, что на 4% ниже, чем точность bc. 63 % обучающих случаев обычно отбираются для каждой модели, что называется случаями Out-of-bag или OOB, остальные 37 % не были отобраны. Экземпляры OOB можно использовать для оценки производительности ансамбля без необходимости перекрестной проверки, поскольку они не наблюдаются моделью во время обучения. Этот метод известен как оценка OOB.

Экземпляры начальной загрузки отображаются здесь для каждой модели синим цветом, а экземпляры OOB — красным. Затем N моделей ансамбля обучаются на соответствующих образцах начальной загрузки и оцениваются с использованием экземпляров OOB. Это приводит к получению оценок N OOB с метками от OOB1 до OOBN. В соответствии с методом, приведенным выше, оценка OOB ансамбля бэггинга рассчитывается как среднее этих значений N OOB. Давайте рассмотрим пример набора данных пациента «Печень», где мы можем оценить точность OOB ансамблевого классификатора, установив параметр oob_score на True во время создания экземпляра и обучив bc и сравнив точность его тестового набора с его точностью OOB.

# Import DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
# Import BaggingClassifier
from sklearn.ensemble import BaggingClassifier
# Instantiate dt
dt = DecisionTreeClassifier(min_samples_leaf=8, random_state=1)
# Instantiate bc
bc = BaggingClassifier(base_estimator=dt, 
            n_estimators=50,
            oob_score=True,
            random_state=1)
# Fit bc to the training set 
bc.fit(X_train, y_train)
# Predict test set labels
y_pred = bc.predict(X_test)
# Evaluate test set accuracy
acc_test = accuracy_score(y_test, y_pred)
# Evaluate OOB accuracy
acc_oob = bc.oob_score_
# Print acc_test and acc_oob
print('Test set accuracy: {:.3f}, OOB accuracy: {:.3f}'.format(acc_test, acc_oob))
Test set accuracy: 0.698, 
OOB accuracy: 0.702

Точность тестового набора и точность OOB bc примерно равны 70%. Таким образом, мы смогли использовать различные алгоритмы обучения ансамбля для повышения точности модели.

Источник: Datacamp.com