Python 如何在模型中实现t-SNE?

Python 如何在模型中实现t-SNE?,python,machine-learning,scikit-learn,classification,Python,Machine Learning,Scikit Learn,Classification,我将数据拆分为训练/测试。 当我使用PCA时,它是直接的 from sklearn.decomposition import PCA pca = PCA() X_train_pca = pca.fit_transform(X_train) X_test_pca = pca.transform(X_test) 从这里,我可以在下一步中使用X_训练pca和X_测试pca,以此类推 但是当我使用t-SNE时 from sklearn.manifold import TSNE X_train_tsne

我将数据拆分为训练/测试。 当我使用PCA时,它是直接的

from sklearn.decomposition import PCA
pca = PCA()
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
从这里,我可以在下一步中使用X_训练pca和X_测试pca,以此类推

但是当我使用t-SNE时

from sklearn.manifold import TSNE
X_train_tsne = TSNE(n_components=2, random_state=0).fit_transform(X_train)
我似乎无法转换测试集,以便在下一步使用t-SNE数据,例如SVM


有什么帮助吗?

我相信你想做的是不可能的

t-SNE做了一个投影,试图在适合的样本之间保持成对距离。因此,如果不进行重新调整,就无法使用t-SNE模型预测新数据的投影

另一方面,我不会将t-SNE的输出作为分类器的输入。主要是因为t-SNE是高度非线性的,有点随机,根据不同的运行和不同的困惑值,可以得到非常不同的输出

见t-SNE的解释

然而,如果你真的想为此目的使用t-SNE,你必须在整个数据上拟合你的t-SNE模型,一旦拟合好,你就可以进行训练和测试分离

from sklearn.manifold import TSNE

size_train = X_train.shape[0]
X = np.vstack((X_train,X_test))

X_tsne = TSNE(n_components=2, random_state=0).fit_transform( X ) 
X_train_tsne = X_tsne[0:size_train,:]
X_test_tsne  = X_tsne[size_train:,:]

根据文档,这是一种可视化高维数据的工具。在描述中我们可以发现:强烈建议使用另一种降维方法(例如,PCA用于密集数据或截断SVD用于稀疏数据)来减少维数


我的建议是将TSNE用于可视化和PCA,或将截断SVD作为机器学习模型的一部分。

非常感谢您的评论。我认为建议是在列车/测试分离后使用降维,这就是为什么我不知道如何做的原因!理论上,我认为以这种方式使用t-SNE是可能的。无论如何,再次谢谢你,我会努力的!非常感谢。我已经使用了PCA,但认为t-SNE可能会给我一个不同的答案,因为它使用的是概率分布。t-SNE是非参数的,没有从训练集中学习的参数,因此没有变换方法。