Дерево классификации и регрессии (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