Как легко построить границу принятия решения для любого алгоритма классификации
Определение границы принятия решения
В задачах классификации с двумя или более классами граница решения - это гиперповерхность, которая разделяет базовое векторное пространство на наборы, по одному для каждого класса. Эндрю Нг представляет собой прекрасный пример границы принятия решения в логистической регрессии.
Мы знаем, что существуют некоторые линейные (например, логистическая регрессия) и некоторые нелинейные (например, случайные леса) границы принятия решений. Давайте создадим фиктивный набор данных из двух независимых переменных и целевого объекта из двух классов и рассмотрим границы принятия решений для различных алгоритмов.
Создайте фиктивный набор данных
Мы создадим фиктивный набор данных с scikit-learn из 200 строк, 2 информативных независимых переменных и 1 цель из двух классов.
from sklearn.datasets import make_classification X, y = make_classification(n_samples=200, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=1)
Создайте границу принятия решения для каждого классификатора
Мы сравним 6 алгоритмов классификации, таких как:
Будем работать с библиотекой Mlxtend. Для простоты мы решили оставить параметры по умолчанию для каждого алгоритма.
from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from sklearn.naive_bayes import GaussianNB from sklearn.neural_network import MLPClassifier # Initializing Classifiers clf1 = LogisticRegression() clf2 = DecisionTreeClassifier() clf3 = RandomForestClassifier() clf4 = SVC(gamma='auto') clf5 = GaussianNB() clf6 = MLPClassifier() import matplotlib.pyplot as plt from mlxtend.plotting import plot_decision_regions import matplotlib.gridspec as gridspec %matplotlib inline gs = gridspec.GridSpec(3, 2) fig = plt.figure(figsize=(14,10)) labels = ['Logistic Regression', 'Decision Tree', 'Random Forest', 'SVM', 'Naive Bayes', 'Neural Network'] for clf, lab, grd in zip([clf1, clf2, clf3, clf4, clf5, clf6], labels, [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]): clf.fit(X, y) ax = plt.subplot(gs[grd[0], grd[1]]) fig = plot_decision_regions(X=X, y=y, clf=clf, legend=2) plt.title(lab) plt.show()
Обсуждение
Ясно, что логистическая регрессия имеет линейную границу решения, где древовидные алгоритмы, такие как дерево решений и случайный лес, создают прямоугольные разделы. Наивный байесовский метод во многих распространенных случаях приводит к линейной границе решения, но также может быть квадратичным, как в нашем случае. Виртуальные машины защиты могут захватывать множество границ в зависимости от gamma
и ядра. То же самое и с нейронными сетями.
Первоначально опубликовано на https://predictivehacks.com.