我正在尝试转换两个数据集: x_train和x_test。我认为这样做的方法是将tsne与x_train相匹配,然后转换x_test和x_train。但是,我无法转换任何数据集。
tsne = TSNE(random_state = 420, n_components=2, verbose=1, perplexity=5, n_iter=350).fit(x_train)
我想tsne已经安装在x_train上了。
但是,当我这么做的时候
x_train_tse = tsne.transform(x_subset)
我得到:
AttributeError: 'TSNE' object has no attribute 'transform'
任何帮助都将不胜感激。(我知道我可以做fit_transform,但我不会在x_test上得到同样的错误吗?)
发布于 2019-12-06 15:11:46
从雪橇的文档来看,TSNE根本没有任何转换方法。

此外,TSNE是一种无监督的降阶/可视化方法,因此它并不真正适用于训练和测试。您只需获取所有数据并使用fit_transform进行转换并绘制它。
编辑-实际上不可能学习一个转换并在不同的数据上重用它(例如,训练和测试),因为Test不学习低维空间上的映射函数,而是在子空间上运行一个迭代过程,以找到一个均衡,以最小化对某些数据的损失/距离。
因此,如果您想对一个列车和测试数据集进行预处理和降维,那么方法是PCA/SVD或自动编码器。tasks只会帮助您完成无监督的任务:)
发布于 2020-10-07 14:15:57
正如公认的答案所述,没有单独的转换方法,而且它可能不会在火车/测试环境中工作。
但是,您仍然可以使用TSNE而不泄漏信息。
训练时间计算训练集上每个记录的TSNE,并将其作为分类算法中的一个特征。
测试时间附加了您的培训和测试数据,并fit_transform了TSNE。现在继续处理您的测试集,使用TSNE作为这些记录的一个特性。
这会导致信息泄露吗?不是的。
推断时间新记录到达,例如图像或表行。
将新行添加到培训表中,计算TSNE (即新样本相对于培训样本的位置)。执行任何其他处理,并对该行运行预测。
效果很好。有时,由于Kaggle等原因,我们过于担心火车/测试的分裂。但最主要的是,您的方法能否在推理时被复制,并具有与实际使用相同的预期精度。在这种情况下,它可以!
唯一的缺点是你需要你的训练数据库在推理的时候可用,并且根据大小,预处理可能是昂贵的。
https://stackoverflow.com/questions/59214232
复制相似问题