首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python tsne.transform不存在吗?

python tsne.transform不存在吗?
EN

Stack Overflow用户
提问于 2019-12-06 13:36:00
回答 2查看 8.3K关注 0票数 15

我正在尝试转换两个数据集: 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上得到同样的错误吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 15:11:46

雪橇的文档来看,TSNE根本没有任何转换方法。

此外,TSNE是一种无监督的降阶/可视化方法,因此它并不真正适用于训练和测试。您只需获取所有数据并使用fit_transform进行转换并绘制它。

编辑-实际上不可能学习一个转换并在不同的数据上重用它(例如,训练和测试),因为Test不学习低维空间上的映射函数,而是在子空间上运行一个迭代过程,以找到一个均衡,以最小化对某些数据的损失/距离。

因此,如果您想对一个列车和测试数据集进行预处理和降维,那么方法是PCA/SVD或自动编码器。tasks只会帮助您完成无监督的任务:)

票数 20
EN

Stack Overflow用户

发布于 2020-10-07 14:15:57

正如公认的答案所述,没有单独的转换方法,而且它可能不会在火车/测试环境中工作。

但是,您仍然可以使用TSNE而不泄漏信息。

训练时间计算训练集上每个记录的TSNE,并将其作为分类算法中的一个特征。

测试时间附加了您的培训和测试数据,并fit_transform了TSNE。现在继续处理您的测试集,使用TSNE作为这些记录的一个特性。

这会导致信息泄露吗?不是的。

推断时间新记录到达,例如图像或表行。

将新行添加到培训表中,计算TSNE (即新样本相对于培训样本的位置)。执行任何其他处理,并对该行运行预测。

效果很好。有时,由于Kaggle等原因,我们过于担心火车/测试的分裂。但最主要的是,您的方法能否在推理时被复制,并具有与实际使用相同的预期精度。在这种情况下,它可以!

唯一的缺点是你需要你的训练数据库在推理的时候可用,并且根据大小,预处理可能是昂贵的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59214232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档