具有多维和线性可分性的数据可视化

数据挖掘 数据集 可视化 matlab 绘图
2021-09-19 00:48:10

我有两个具有多个特征的类的数据集,如何使用 Matlab 可视化这些数据以确定它是否是线性可分的?

2个回答

您基本上需要一个 t-SNE 图,t-SNE 会将高维特征向量(在您的情况下为几个特征)转换为 2d 点,然后您可以使用 matplotlib 进行绘图,而绘图时您需要发送类对应的特征来为不同类别的数据点获得不同的颜色。一旦这样做,您将能够判断它们是否线性可分。

代码如下

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, random_state=0)
transformed_data = tsne.fit_transform(features)
k = np.array(transformed_data)
plt.scatter(k[:, 0], k[:, 1], c=class_labels, zorder=10, s=0.4)

并且上面的代码应该产生如下所示的图像

在此处输入图像描述

由于您正在寻找 MATLAB 代码,您可以使用函数tsne(x)获取 t-SNE,单击它获取文档。matplotlib 散点图在 Matlab 上也很容易实现,文档很丰富!

如果我能提供帮助,请投票给我;)

当类标签已知时,您可以使用线性判别分析(LDA) 进行可视化,以查看类是否是线性可分的。LDA 类似于 PCA,但有监督。它尝试以最大化类之间距离的方式投影数据(这是Matlab、R、Python的操作指南。这是 Matlab 的多类 LDA)。

此外,我们可以在没有任何可视化的情况下获得线性感。为此,我们可以在 [sample of] 数据上训练/测试线性 SVM,如果测试准确度(假设类数是平衡的)为 90%、95%、99%,则越来越好的迹象表明类几乎线性可分。

请注意,我们不能使用非线性降维方法,例如IsoMapt-SNE,因为即使对于在原始空间中不能线性分离的类,它们也能够显示线性分离的可视化,因此命名为non-linear这是著名的瑞士卷示例: