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

tsu*_*ina 2 python classification machine-learning scikit-learn

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

from sklearn.decomposition import PCA
pca = PCA()
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
Run Code Online (Sandbox Code Playgroud)

从这里我可以在下一步中使用 X_train_pca 和 X_test_pca 等等..

但是当我使用 t-SNE

from sklearn.manifold import TSNE
X_train_tsne = TSNE(n_components=2, random_state=0).fit_transform(X_train)
Run Code Online (Sandbox Code Playgroud)

我似乎无法转换测试集,以便我可以将 t-SNE 数据用于下一步,例如 SVM。

有什么帮助吗?

Gab*_*l M 5

我相信你想要做的事情是不可能的。

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:,:]
Run Code Online (Sandbox Code Playgroud)


Dan*_*bak 5

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

我的建议是使用TSNE进行可视化,并将PCATruncatedSVD作为机器学习模型的一部分。