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

У меня есть фрейм данных, который выглядит так:

label    predicted     F1  F2   F3 .... F40
major     minor         2   1   4
major     major         1   0   10
minor     patch         4   3   23
major     patch         2   1   11
minor     minor         0   4   8
patch     major         7   3   30
patch     minor         8   0   1
patch     patch         1   7   11

У меня есть label, которая является истинной меткой для id (не показана, поскольку она не имеет значения), и метка predicted, а затем набор из примерно 40 функций в моем df.

Идея состоит в том, чтобы преобразовать эти 40 функций в 2 измерения и визуализировать их истинное и предсказанное. У нас есть 9 случаев для всех трех меток major, minor и patch по сравнению с их прогнозами.

С PCA он не может уловить большую дисперсию с двумя компонентами, и я не уверен, как сопоставить значения PCA с метками и прогнозами в исходном df в целом. Способ добиться этого - разделить все случаи на 9 фреймов данных и добиться результата, но это не то, что я ищу.

Есть ли другой способ уменьшить и визуализировать данные? Любые предложения будут высоко оценены.

Что вы подразумеваете под «визуализировать истинное против предсказанного»? Какова цель? Я думал, что анализ измерений использовался для уменьшения количества функций в модели регрессии/классификации. Вы уверены, что не хотите показывать корреляцию для каждого случая (9) между функциями?

Corralien 10.04.2023 20:54

Нет, часть корреляции еще не была выполнена, для моего анализа мы запустили модель GaussianNB, тренируя все 40 функций в моем наборе данных, чтобы увидеть, как предсказанные метки модели сравниваются с исходными метками, сделанными вручную. Теперь мы хотим увидеть, как формируются кластеры для каждого из 9 случаев, это означает, что они больше коррелируют с одним ПКА для одного случая и, возможно, со вторым ПКА для другого. Это отчасти цель.

Brie MerryWeather 10.04.2023 21:20

Я тоже уже делал что-то подобное: reneshbedre.com/blog/principal-component-analysis.html, анализ загрузок для всех названий моих функций, но это было не так уж полезно, так как есть много функций, и они перекрываются, что означает отдельный график для важных функций, из-за которого я теряю шаблоны для других функций (не столь важных)

Brie MerryWeather 10.04.2023 21:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
3
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

По моему опыту, если PCA не работает хорошо, t-распределенное стохастическое встраивание соседей (TSNE) часто является хорошей альтернативой.

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

import pandas as pd
import seaborn as sns
from sklearn.manifold import TSNE

iris = sns.load_dataset('iris')

# Mock up some predictions.
iris['species_pred'] = (40 * ['setosa'] + 5 * ['versicolor'] + 5 * ['virginica']
                        + 40 * ['versicolor'] + 5 * ['setosa'] + 5 * ['virginica']
                        + 40 * ['virginica'] + 5 * ['versicolor'] + 5 * ['setosa'])

# Show confusion matrix.
pd.crosstab(iris.species, iris.species_pred)
  species_pred  setosa  versicolor  virginica
species             
setosa              40           5          5
versicolor           5          40          5
virginica            5           5         40
# Reduce features to two dimensions.
X = iris.iloc[:, :4].values
X_embedded = TSNE(n_components=2, init='random', learning_rate='auto'
                 ).fit_transform(X)
iris[['tsne_x', 'tsne_y']] = X_embedded

# Plot small multiples, corresponding to confusion matrix.
sns.set()
g = sns.FacetGrid(iris, row='species', col='species_pred', margin_titles=True)
g.map(sns.scatterplot, 'tsne_x', 'tsne_y');

Спасибо, что так хорошо объяснили! Это действительно очень помогло мне, оказалось, что t-sne дал лучшие кластеры, я также пробовал его на pca и umap, но формирование кластера не было таким определенным.

Brie MerryWeather 16.04.2023 00:25

Другие вопросы по теме