我试图使用t-SNE转换两个数据集:x_train和x_test。我认为方法是先用x_train拟合t-SNE,然后转换x_test和x_train。但是,我无法转换任何数据集。
tsne = TSNE(random_state = 420, n_components=2, verbose=1, perplexity=5, n_iter=350).fit(x_train)
我认为t-SNE已经拟合了x_train。
但是,当我这样做时:
x_train_tse = tsne.transform(x_subset)
我得到的是:
AttributeError: 'TSNE' object has no attribute 'transform'
任何帮助都将不胜感激。(我知道我可以使用fit_transform
,但在x_test上不是也会得到同样的错误吗?)
回答:
根据sklearn的文档,t-SNE根本没有transform
方法。
此外,t-SNE是一种无监督的降维/可视化方法,因此它并不适用于训练集和测试集的划分。你只需使用所有数据并使用fit_transform
来进行转换并绘图。
编辑 – 实际上,无法学习一种转换并在不同的数据(即训练集和测试集)上重用,因为t-SNE不是在低维空间中学习一个映射函数,而是对子空间运行一个迭代过程,以找到在某些数据上最小化损失/距离的平衡状态。
因此,如果你想预处理并降低训练集和测试集的维度,合适的方法是PCA/SVD或自编码器。t-SNE只适用于无监督任务 🙂