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

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

Что такое Yellowbrick?

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

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

$ pip install yellowbrick

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

conda install -c districtdatalabs yellowbrick

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

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

Что такое Mlxtend

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

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

pip install mlxtend

Установка с помощью 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, объединив все эти прогнозы.

У 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. Во второй части мы визуализируем настройку гиперпараметров и результаты.