为什么 t-SNE 不分离线性可分的类?

机器算法验证 分类 特纳
2022-03-15 19:14:59

我有用于分类 EEG 模式(2 类问题)的小型卷积神经网络,具有几个卷积层和一个密集层。这个网表现不错。出于教育目的,我使用了这个预训练网络的卷积部分(除密集层外的所有网络)来从训练样本中提取特征。所以这个新的数据表示是线性可分离的(因为密集层可以正确分类它们)但是当我在这个训练集表示上使用 TSNE 时,只得到一个混合的不同类的 blob 和点。在此处输入图像描述

这种情况独立于 TSNE 参数重复。对于线性可分数据集,是否有可能只获得一个具有混合类的集群?

1个回答

是的。

您可以使用以下代码来说服自己。

N <- 1000
P <- 3

# Generates some random data
data <- matrix(data = rnorm(N*P), nrow = N, ncol = P)

# Assignate linearly separable classes
labels <- (data[,1]+data[,2]>0)+1.

# Make sure that the data can be separated
plot(data[,1],data[,2], col = labels, xlab = 'x1', ylab = 'x2')

require(Rtsne)
model <- Rtsne::Rtsne(data)

# Observe this result while varying P
plot(model$Y, col = labels, type = 'p', pch = 21, xlab = 'tSNE x_1', ylab = 'tSNE x_2')

这就是当 P 为 3 时您会观察到的(只有一个与线性分离无关的属性,我们接近再现线性分离)。

在此处输入图像描述

对于 P 为 15,tSNE 无法再现线性分离。

在此处输入图像描述

发生了什么 ?

这很简单。tSNE 方法依赖于点之间的成对距离来产生聚类,因此完全不知道数据的任何可能的线性可分性。

如果您的点彼此“靠近”,在“边界”的不同侧,tSNE 将认为它们属于同一个集群。

这正是上述模拟的重点。当维数很大时,无论它们属于边界的哪一侧,点看起来都彼此靠近。这是 tSNE 未能在此处捕获的内容。

另一方面,当不相关维度的数量较少时,关闭点“别无选择”,只能在边界的同一侧。

边注。

即使你的神经网络性能不错,但这可能并不意味着你的数据是线性可分的(除非你的神经网络中只有一个单元)。事实上,神经网络可以识别非线性边界。如果您想测试数据集的“线性可分”程度,您应该使用线性支持向量机或回归。