Plot decision regions python

Как визуализировать что-либо в машинном обучении с помощью Yellowbrick и Mlxtend

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

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

Что такое Yellowbrick?

Согласно документации, Yellowbrick расширяет Scikit-Learn API, чтобы упростить выбор модели и настройку гиперпараметров. Под капотом он использует Matplotlib ». Используя Yellowbrick, мы можем выполнять визуализацию функций, классификацию, регрессию, кластеризацию, выбор модели, целевую и даже текстовую визуализацию. Мы даже можем визуализировать настройку гиперпараметров, используя это, чтобы получить наилучшие гиперпараметры для данной задачи. Подробнее см. Официальную документацию.

Yellowbrick требует python 3.4 или выше, scikit-learn 0.20 или выше и matplotlib версии 3.0.1 или выше, чтобы работать лучше всего. Установка с помощью pip

Установка с помощью conda для anaconda

conda install -c districtdatalabs yellowbrick

Первичный интерфейс Yellowbrick — это визуализатор, который представляет собой объект оценки scikit-learn, который учится на данных для создания визуализации. Визуализатор импортируется, настраивается и настраивается с помощью fit () для разработки визуализации. API визуализатора состоит из трех основных методов:

  • draw (): для добавления визуальных элементов к оси.
  • finalize (): для добавления более мелких деталей, таких как легенды, заголовки, оси, метки и т. д.
  • poof (): чтобы отобразить визуализатор или сохранить его на диск.
Читайте также:  Text nodes in html

Что такое Mlxtend

Mlxtend — это библиотека полезных инструментов для науки о данных на языке Python, которая может использоваться для построения различных алгоритмов машинного обучения и ансамблевого обучения (ансамблевое обучение — это метод объединения различных алгоритмов машинного обучения с целью уменьшения дисперсии и улучшения прогнозов).

Установка с помощью conda

conda install mlxtend --channel conda-forge

Визуализация данных с помощью Yellowbrick

Визуализация данных — это демонстрация получения данных (информации) и помещения их в визуальную среду, например, в руководство или диаграмму. Визуализация данных особенно важна, когда дело касается больших данных и проектов анализа данных. Они используются для визуализации экземпляров в пространстве данных, чтобы определить основные моменты, которые могут повлиять на последующую подгонку. Используя Yellowbrick, мы можем выполнять визуализатор рангов, проекцию PCA, визуализацию множества, среди прочего. В своей статье я использовал PCA и визуализацию многообразия, которые обсуждаются ниже.

  • PCA использует ортагональное преобразование, чтобы разложить данные более высокого измерения на два или три измерения, чтобы нанести каждый экземпляр на диаграмму рассеяния. This — отличная статья, чтобы узнать больше об этом.
from yellowbrick.features.pca import PCADecomposition from yellowbrick.draw import manual_legend import matplotlib.pyplot as plt def visual_pca(x_train, y_train): plt.figure() colors = np.array(['b' if yi else 'r' for yi in y_train]) visualizer = PCADecomposition(scale=True, color=colors) visualizer.fit_transform(x_train, y_train) manual_legend(visualizer, ('real', 'forged'), ('b', 'r')) visualizer.poof(outpath="pca.png") plt.close()

  • В визуализаторе Manifold используется многогранное обучение, чтобы уменьшить множество измерений до двух. Коллекторы захватывают нелинейные структуры, поскольку они используют подход ближайшего соседа. В статье использовалось множество различных алгоритмов, имеющих разные свойства и временную сложность, таких как lle, hessian, isomap, spectral, tsne и т. Д. Lle и isomap, которые будут рассмотрены ниже.
  1. Локально линейное встраивание (LLE) выполняет проекцию данных меньшей размерности и сохраняет расстояния в пределах локальных окрестностей. Это похоже на серию локальных анализов главных компонентов, которые сравниваются в глобальном масштабе, чтобы найти лучшее нелинейное вложение.
from yellowbrick.features.manifold import Manifold import matplotlib.pyplot as plt def visual_tsne(x_train, y_train): plt.figure() y = np.array(['real' if yi else 'forged' for yi in y_train]) visualizer = Manifold(manifold='lle', target='discrete') visualizer.fit_transform(x_train, y) visualizer.finalize() visualizer.poof(outpath="lle.png") plt.close()

2. Изокарта — это вложение меньшей размерности, которое поддерживает геодезические расстояния между всеми точками. Это расширение ядра PCA.

from yellowbrick.features.manifold import Manifold import matplotlib.pyplot as plt def visual_isomap(x_train, y_train): plt.figure() y = np.array(['real' if yi else 'forged' for yi in y_train]) visualizer = Manifold(manifold='isomap', target='discrete') visualizer.fit(x_train, y) visualizer.poof(outpath="isomap.png") plt.close()

Визуализация прогнозов модели машинного обучения с помощью Mlxtend

Визуализация моделей машинного обучения помогает нам ясно увидеть, как работает наша модель, и также дает отличные показатели 😁. Замечательно глубоко понять, как разные алгоритмы по-разному классифицируют границы, и при достаточной практике мы сможем затем увидеть данные и понять, какой классификатор будет работать лучше всего. Мы будем визуализировать Extra Trees, KNN, Random Forest и SVM. Чтобы узнать больше о SVM, KNN и Extra Trees and Random Forest нажмите здесь. Мы также создадим классификатор ансамбля, используя mlxtend, объединив все эти прогнозы.

Читайте также:  Kotlin что такое делегат

У Mlxtend есть недостаток, заключающийся в том, что мы можем построить связь между любыми двумя функциями только за один раз, а остальные функции должны быть переданы как значения-заполнители. Этот вопрос о переполнении стека точно описывает это. Однако мы можем выполнить уменьшение размеров с помощью PCA, чтобы уменьшить размеры до двух перед передачей в mlxtend ‘plot_decision_regions`, или вы можете передать значения-заполнители, как указано в ответе на этот вопрос о stackoverflow.

from mlxtend.classifier import EnsembleVoteClassifier from mlxtend.plotting import plot_decision_regions import matplotlib.pyplot as plt from sklearn.decomposition import PCA def visual_ml(clf1, clf2, clf3, clf4, X, y): y = np.array(y, dtype = np.uint) pca = PCA(n_components = 2) X = pca.fit_transform(X) eclf = EnsembleVoteClassifier(clfs = [clf1, clf2, clf3, clf4], verbose = 2) labels = ['KNN', 'Extra Trees', 'SVM', 'Random Forest', 'ensemble'] for clf, lab in zip([clf1, clf2, clf3, clf4, eclf], labels): clf.fit(X, y) plt.figure() fig = plot_decision_regions(X=X, y=y, clf=clf) plt.title(lab) plt.show() plt.close()

Это для части 1. Во второй части мы визуализируем настройку гиперпараметров и результаты.

Источник

How to plot Decision Regions in Python

plot

  1. Get the data and preprocess:# Train a model to classify the different flowers in Iris datasetfrom sklearn import datasetsimport numpy as npiris = datasets.load_iris() X = iris.data[:, [2, 3]] y = iris.target from sklearn.cross_validation import train_test_split # random_state : int or RandomState # Pseudo-random number generator state used for random sampling. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
  2. Define the decision regions plot function:from matplotlib.colors import ListedColormapimport matplotlib.pyplot as pltdef plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):# setup marker generator and color map markers = (‘s’, ‘x’, ‘o’, ‘^’, ‘v’) colors = (‘red’, ‘blue’, ‘lightgreen’, ‘gray’, ‘cyan’) cmap = ListedColormap(colors[:len(np.unique(y))]) # plot the decision surface x1_min, x1_max = X[:, 0].min() – 1, X[:, 0].max() + 1 x2_min, x2_max = X[:, 1].min() – 1, X[:, 1].max() + 1 xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution)) Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T) Z = Z.reshape(xx1.shape) plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap) plt.xlim(xx1.min(), xx1.max()) plt.ylim(xx2.min(), xx2.max()) # plot all samples X_test, y_test = X[test_idx, :], y[test_idx] for idx, cl in enumerate(np.unique(y)): plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1], alpha=0.8, c=cmap(idx), marker=markers[idx], label=cl) # highlight test samples if test_idx: X_test, y_test = X[test_idx, :], y[test_idx] plt.scatter(X_test[:, 0], X_test[:, 1], c=”, alpha=1.0, linewidth=1, marker=’o’, s=55, label=’test set’)
  3. Perform Decision Tree classifier on the dataset and plot decison regions:from sklearn.tree import DecisionTreeClassifiertree = DecisionTreeClassifier(criterion=’entropy’,max_depth=3, random_state=0)tree.fit(X_train, y_train)X_combined = np.vstack((X_train, X_train)) y_combined = np.hstack((y_train, y_test)) plot_decision_regions(X_combined, y_combined, classifier=tree, test_idx=range(105,150)) plt.xlabe(‘petal length [cm]’) plt.ylabel(‘petal width [cm]’) plt.legend(loc=’upper left’) plt.show()
Читайте также:  Python arcade sprite sheet

Источник

Оцените статью