真实值与预测值的降维可视化

4
我有一个类似这样的数据框:
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标签和我的df中约40个特征的集合。

这个想法是将这40个特征转换为2个维度,并将它们可视化为真实值与预测值。我们有9种情况适用于所有三个标签majorminorpatch与它们的预测。

使用PCA,无法捕获太多方差,只有2个组件,我不确定如何将PCA值与原始df中的标签和预测映射为整体。实现这一点的方法是将所有情况分成9个数据框并实现结果,但这不是我要寻找的。

是否有其他方法可以减少和可视化给定的数据?任何建议都将不胜感激。


你所说的“可视化真实值与预测值”是什么意思?目标是什么?我以为维度分析是用来减少回归/分类模型特征数量的。你确定不想展示每个案例(9个)之间特征的相关性吗? - Corralien
没有相关性部分需要完成,对于我的分析,我们运行了一个GaussianNB模型,在数据集上训练了所有的40个特征,以查看模型预测标签与手动标签的比较结果。现在我们想看看每个9个案例中的聚类是如何形成的,这意味着它们是否更倾向于一个主成分分析用于一个案例,而另一个主成分分析用于另一个案例。这在某种程度上就是目标。 - Brie MerryWeather
我已经做过类似于这个的事情:https://www.reneshbedre.com/blog/principal-component-analysis.html,对所有特征名称的负载进行分析,但这并没有那么有用,因为有很多特征重叠,这意味着需要为重要特征绘制单独的图表,从而失去了其他特征(不太重要的特征)的模式。 - Brie MerryWeather
1个回答

2

你可能想考虑使用小型多图,每个混淆矩阵单元格中都有一个散点图。

如果主成分分析(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');

small multiples plot


1
谢谢你这么好地解释了它!这真的帮了我很多,结果发现t-sne给出了最好的聚类结果,我也尝试了在pca和umap上进行,但聚类形成并不那么明显。 - Brie MerryWeather

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接