Инструмент визуализации машинного обучения — Yellowbrick

машинное обучение
Инструмент визуализации машинного обучения — Yellowbrick

Это 26-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

Знакомство с Йеллоубриком

Yellowbrick — это инструмент визуального анализа и диагностики, облегчающий выбор модели машинного обучения. Он расширяет API-интерфейс scikit-learn и позволяет нам легче ориентироваться на этапе оптимизации модели. Короче говоря, yellowbrick органично сочетает в себе scikit-learn и matplotlib, чтобы помочь нам оптимизировать модель с помощью визуализации.

Установить

pip install -U yellowbrick

Хотя Yellowbrick предоставляет такие параметры, как цвет, размер и заголовок, которые помогут вам настроить график. Однако иногда вы просто хотите нарисовать график с помощью одной строки кода. Yellowbrick предоставляет множество инструментов, которые можно визуализировать с помощью одной строки кода.

Некоторые популярные инструменты визуализации для анализа признаков, классификации, регрессии, кластеризации и оценки объектов показаны ниже.

Визуализация анализа признаков

Rank1D/Rank2D

По умолчанию Rank1D использует алгоритм Шапиро-Уилка для оценки нормальности распределений признаков. Затем строится столбчатая диаграмма, показывающая относительный ранг каждого признака.

Алгоритм Шапиро-УилкаСтатистически сравнивает выборочное распределение с нормальным распределением, чтобы определить, показывают ли данные отклонения от нормальности или соответствие ей.

from yellowbrick.features import rank1d
from yellowbrick.datasets import load_energy


X, _ = load_energy()
visualizer = rank1d(X, color="r")

image.png

По умолчанию визуализатор Rank2D использует коэффициент корреляции Пирсона для обнаружения корреляции между двумя функциями.

from yellowbrick.features import rank2d
from yellowbrick.datasets import load_credit


X, _ = load_credit()
print(X[['limit','sex', 'edu']].head())
visualizer = rank2d(X)

image.png

Параллельные координаты

Параллельные координаты — это метод визуализации многомерных объектов, где вертикальная ось (ось Y) представляет собой значение каждого объекта, а ось Y представляет объект. Цвет полилинии представляет целевое значение. Это позволяет визуализировать несколько измерений одновременно; на самом деле, при наличии бесконечного горизонтального пространства (например, окна прокрутки) может отображаться технически бесконечное количество измерений!

from sklearn.datasets import load_wine
from yellowbrick.features import parallel_coordinates


X, y = load_wine(return_X_y=True)

print(X.shape,y.shape) #(178, 13) (178,)
visualizer = parallel_coordinates(X, y, normalize="standard")

image.png

Радиальная визуализация

RadViz — это многомерный алгоритм визуализации данных, который равномерно рисует каждое измерение объекта по окружности круга, а затем рисует точку внутри круга, чтобы точка нормализовала свое значение по оси от центра к каждой дуге. Этот механизм позволяет легко разместить на круге как можно больше измерений, значительно расширяя размерность визуализации.

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

Если ваши данные содержат строки с пропущенными значениями (numpy.nan), эти пропущенные значения не отображаются. Другими словами, вы можете не получить полной картины ваших данных. РадВиз отправитDataWarningПредупреждение, сообщающее вам, какой процент отсутствует.

Если вы получили это предупреждение, возможно, вы захотите взглянуть на стратегии вменения. Подробнее о том, как заполнить пропущенные значения, см.:scikit-learn Imputer.

from yellowbrick.features import radviz
from yellowbrick.datasets import load_occupancy


X, y = load_occupancy()
visualizer = radviz(X, y, colors=["maroon", "gold"])

image.png

PCA

Визуализатор PCA Decomposition использует анализ основных компонентов для разложения многомерных данных на два или три измерения, чтобы каждый экземпляр можно было представить на диаграмме рассеивания. Использование PCA означает, что эти投影的数据集Анализ может быть выполнен по осям основных вариаций и может быть интерпретирован, чтобы определить, можно ли использовать метрики сферического расстояния.

from yellowbrick.datasets import load_spam
from yellowbrick.features import pca_decomposition

X, y = load_spam()
print(X.shape,y.shape) # (4600, 57) (4600,)
visualizer = pca_decomposition(X, y)

image.png

Многообразие

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

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

from sklearn.datasets import load_iris
from yellowbrick.features import manifold_embedding


X, y = load_iris(return_X_y=True)
visualizer = manifold_embedding(X, y)

image.png

Визуализация модели классификации

Ошибка предсказания класса

ClassPredictionErrorГрафик будет соответствовать поддержке (количеству обучающих выборок) для каждого класса в модели классификации и отображаться в виде гистограммы с накоплением. Каждый столбец сегментирован, чтобы показать прогнозируемые пропорции для каждой категории (как ложноотрицательные, так и ложноположительные, как в матрице путаницы).

ты можешь использовать этоClassPredictionErrorвизуализировать классы, с которыми ваш классификатор сталкивается особенно сложно,

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

Графики ошибок предсказания класса позволяют быстро увидеть, насколько хорошо классификатор предсказывает правильный класс.

from yellowbrick.datasets import load_game
from sklearn.preprocessing import OneHotEncoder
from sklearn.ensemble import RandomForestClassifier
from yellowbrick.classifier import class_prediction_error


X, y = load_game()
X = OneHotEncoder().fit_transform(X)
visualizer = class_prediction_error(
    RandomForestClassifier(n_estimators=10), X, y
)

image.png

Отчет о классификации

Визуализатор отчета о классификации показывает точность, полноту и оценку модели F1. Для облегчения интерпретации и обнаружения проблем в отчете числовые оценки объединены с тепловыми картами с цветовой кодировкой. Все тепловые карты находятся в(0.0, 1.0)диапазон для удобного сравнения моделей классификации между различными классификационными отчетами.

from yellowbrick.datasets import load_credit
from sklearn.ensemble import RandomForestClassifier
from yellowbrick.classifier import classification_report


X, y = load_credit()
visualizer = classification_report(
    RandomForestClassifier(n_estimators=10), X, y
)

image.png

Матрица путаницы

Визуализатор ConfusionMatrix — это ScoreVisualizer, который принимает подобранный классификатор scikit-learn и набор тестовых значений X и y и возвращает отчет, показывающий, как спрогнозированный класс каждого тестового значения сравнивается с его фактическим классом.

Специалисты по обработке и анализу данных используют матрицы путаницы, чтобы понять, какие классы являются наиболее запутанными.

from yellowbrick.datasets import load_game
from sklearn.preprocessing import OneHotEncoder
from sklearn.linear_model import RidgeClassifier
from yellowbrick.classifier import confusion_matrix


X, y = load_game()
X = OneHotEncoder().fit_transform(X)
visualizer = confusion_matrix(RidgeClassifier(), X, y, cmap="Greens")

image.png

Кривая точности/отзыва (Precision/Recall)

PrecisionRecallCurve показывает компромисс между точностью классификатора (показатель релевантности результата) и отзывом (показатель полноты).

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

from sklearn.naive_bayes import GaussianNB
from yellowbrick.datasets import load_occupancy
from yellowbrick.classifier import precision_recall_curve


X, y = load_occupancy()
visualizer = precision_recall_curve(GaussianNB(), X, y)

image.png

ROC/AUC

График ROC/AUC представляет собой компромисс между чувствительностью и специфичностью визуализируемого пользователем классификатора.

ROC — это мера качества предсказаний классификатора, которая сравнивает компромисс между чувствительностью и специфичностью модели визуализации. При построении кривая ROC показывает истинную положительную частоту по оси y и частоту ложноположительных результатов для каждой категории по оси x. Следовательно, идеальной точкой является верхний левый угол графика: ноль ложных срабатываний и одно истинное срабатывание.

Другая мера, площадь под кривой (AUC), представляет собой расчет отношения между ложными срабатываниями и истинными срабатываниями. Чем выше AUC, тем в целом лучше модель. Однако также важно изучить «крутизну» кривой, поскольку она описывает максимизацию истинно положительного уровня и, в то же время, минимизацию ложноположительного уровня.

from yellowbrick.classifier import roc_auc
from yellowbrick.datasets import load_spam
from sklearn.linear_model import LogisticRegression


X, y = load_spam()
visualizer = roc_auc(LogisticRegression(), X, y)

image.png

Порог дискриминации

Такие метрики, как точность, полнота, f1-оценка и т. д., представляют собой визуализацию порога различения бинарного классификатора.

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

from yellowbrick.classifier import discrimination_threshold
from sklearn.linear_model import LogisticRegression
from yellowbrick.datasets import load_spam

X, y = load_spam()
visualizer = discrimination_threshold(
    LogisticRegression(multi_class="auto", solver="liblinear"), X, y
)

image.png

Визуализация регрессионной модели

График остатков

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

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

from sklearn.linear_model import Ridge
from yellowbrick.datasets import load_concrete
from yellowbrick.regressor import residuals_plot


X, y = load_concrete()
visualizer = residuals_plot(
    Ridge(), X, y, train_color="maroon", test_color="gold"
)

image.png

График ошибки прогноза

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

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

from sklearn.linear_model import Lasso
from yellowbrick.datasets import load_bikeshare
from yellowbrick.regressor import prediction_error

X, y = load_bikeshare()
visualizer = prediction_error(Lasso(), X, y)

image.png

Расстояние повара

Расстояние Кука - это обычное расстояние в статистическом анализе, используемое для диагностики наличия аномальных данных в различных регрессионных анализах.

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

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

from sklearn.datasets import load_diabetes
from yellowbrick.regressor import cooks_distance


X, y = load_diabetes(return_X_y=True)
visualizer = cooks_distance(X, y)

image.png

Визуализация кластерной модели

Оценки Силуэта

Когда правда о наборе данных неизвестна, используется коэффициент силуэта и рассчитывается оценка плотности кластера модели. Оценка рассчитывается путем усреднения коэффициентов силуэта для каждой выборки, рассчитанных как разница между средним расстоянием внутри кластера и средним расстоянием до ближайшего кластера для каждой выборки, нормализованная до максимального значения. Это дает оценку от 1 до -1, где 1 — очень плотный кластер, а —1 — совершенно неправильный кластер.

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

from sklearn.cluster import KMeans
from yellowbrick.datasets import load_nfl
from yellowbrick.cluster import silhouette_visualizer

X, y = load_nfl()
visualizer = silhouette_visualizer(KMeans(5, random_state=42), X)

image.png

Межкластерное расстояние

Карта межкластерных расстояний показывает вложение центров кластеров в 2D и сохраняет расстояния от других центров.

Например, чем ближе они к центру визуализации, тем ближе они к исходному пространству признаков. Размер кластеров определяется в соответствии с оценочной метрикой.

По умолчанию они определяются по членству, т. е. количеству экземпляров, принадлежащих каждому концентратору. Это дает понимание относительной важности кластеров.

Уведомление:

Поскольку два кластера перекрываются в двумерном пространстве, это не означает, что они перекрываются в исходном пространстве признаков.

from yellowbrick.datasets import load_nfl
from sklearn.cluster import MiniBatchKMeans
from yellowbrick.cluster import intercluster_distance


X, y = load_nfl()
visualizer = intercluster_distance(MiniBatchKMeans(5, random_state=777), X)

image.png

анализ целевого значения

Баланс классов (ClassBalance)

Одной из самых больших проблем моделей классификации является дисбаланс классов в обучающих данных. Серьезный дисбаланс классов может быть замаскирован относительно хорошими показателями F1 и точности.

Классификатор просто угадывает класс большинства, не выполняя никакой оценки недопредставленных классов.

Существует несколько методов борьбы с дисбалансом классов, таких как стратифицированная выборка, субдискретизация мажоритарного класса, взвешивание и т. д.

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

Визуализатор ClassBalance узнает о балансе классов, то есть о том, как часто класс представлен в наборе данных, путем создания гистограммы для каждого класса.

from yellowbrick.datasets import load_game
from yellowbrick.target import class_balance

X, y = load_game()
visualizer = class_balance(y, labels=["draw", "loss", "win"])

image.png

Суммировать

Инструментарий Yellowbrick значительно упрощает моделирование машинного обучения. Во-первых, он решает проблемы визуализации в процессе разработки признаков и моделирования, что значительно упрощает работу; во-вторых, с помощью различных визуализаций вы также можете дополнить некоторые свои собственные белые пятна в моделировании. Здесь представлена ​​только верхушка айсберга Yellowbrick, подробности можно найти на официальном сайте.

Справочная статья