Sí.
Puedes usar el siguiente código para convencerte.
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')
Esto es lo que se observaría cuando P es 3 (sólo un atributo irrelevante con respecto a la separación lineal, estamos cerca de reproducir la separación lineal).
Y para P es 15, el tSNE no puede reproducir la separación lineal.
¿Qué ha pasado?
Esto es simple. El método tSNE se basa en distancias de pares entre puntos para producir cúmulos y, por lo tanto, es totalmente inconsciente de cualquier posible separabilidad lineal de sus datos.
Si sus puntos están "cerca" uno del otro, a diferentes lados de una "frontera", un tSNE considerará que pertenecen a un mismo cúmulo.
Este fue exactamente el punto de las simulaciones anteriores. Cuando el número de dimensiones es grande, los puntos se ven cercanos entre sí, sin importar el lado del borde al que pertenecen. Esto es lo que el TSNE no logra capturar aquí.
Por otro lado, cuando el número de dimensiones irrelevantes es bajo, los puntos cercanos no tenían "otra opción" que estar del mismo lado de la frontera.
Nota al margen.
Aunque tenga un buen rendimiento con una red neuronal, puede que no signifique que sus datos sean linealmente separables (a menos que sólo haya una unidad en su red neuronal, zumbido). De hecho, las redes neuronales pueden reconocer los límites no lineales. Si quiere probar cuán "linealmente separable" es un conjunto de datos, debe usar máquinas de vector de apoyo lineal o regresiones.