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

时间:2018-10-17 07:55:19

标签: 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_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)

我似乎无法转换测试集,因此我可以将t-SNE数据用于下一步,例如支持向量机。

有帮助吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我相信您要尝试做的事是不可能的。

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

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

请参阅this对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:,:]