gpt4 book ai didi

python - 使用 t-SNE 降维

转载 作者:太空狗 更新时间:2023-10-29 21:56:44 25 4
gpt4 key购买 nike

我有两组数据训练和测试。两个数据集分别有30213条和30235条,每条66维。

我正在尝试应用 scikit learn 的 t-SNE 将维度减少到 2。由于数据集很大,如果我尝试一次性处理整个数据,我会得到 MemoryError,我尝试将它们分成 block 像这样一次转换一个 block :

tsne = manifold.TSNE(n_components=2, perplexity=30, init='pca', random_state=0)

X_tsne_train = np.array( [ [ 0.0 for j in range( 2 ) ] for i in range( X_train.shape[0] ) ] )

X_tsne_test = np.array( [ [ 0.0 for j in range( 2 ) ] for i in range( X_test.shape[0] ) ] )

d = ( ( X_train, X_tsne_train ), ( X_test, X_tsne_test ) )

chunk = 5000

for Z in d:

x, x_tsne = Z[0], Z[1]
pstart, pend = 0, 0
while pend < x.shape[0]:
if pend + chunk < x.shape[0]:
pend = pstart + chunk
else:
pend = x.shape[0]
print 'pstart = ', pstart, 'pend = ', pend
x_part = x[pstart:pend]
x_tsne[pstart:pend] += tsne.fit_transform(x_part)
pstart = pend

它在没有 MemoryError 的情况下运行,但我发现脚本的不同运行会为相同的数据项产生不同的输出。这可能是由于对每个数据 block 同时进行了拟合和转换操作。但是,如果我尝试使用 tsne.fit(X_train) 拟合训练数据,我会得到 MemoryError。如何正确地将训练集和测试集中所有数据项的维度降为 2 且 block 之间没有任何不一致?

最佳答案

我不完全确定“具有相同数据项的不同输出”是什么意思,但这里有一些可能对您有所帮助的评论。

首先,t-SNE 并不是与 PCA 或其他方法相同意义上的“降维”技术。没有办法采用固定的、学习过的 t-SNE 模型并将其应用于新数据。 (请注意,该类没有 transform() 方法,只有 fit()fit_transform()。)因此,您将无法使用“训练”和“测试”集。

其次,每次调用 fit_transform() 时,您都会得到一个完全不同的模型。因此,缩小维度的含义在 block 与 block 之间并不一致。每个 block 都有自己的小低维空间。模型每次都不同,因此数据不会被投影到同一个空间。

第三,您没有包含将“训练”与“测试”分开的代码。可能是因为当您小心设置 t-SNE 的随机种子时,您没有设置训练/测试部门的随机种子,导致不同的数据部门,从而在后续运行中产生不同的结果。

最后,如果您想使用 t-SNE 可视化您的数据,您可以考虑遵循文档页面上的建议,并应用 PCA 将输入的维数从 66 减少到,比如说,15。这将显着减少 t-SNE 的内存占用。

TSNE in SKLearn Docs

关于python - 使用 t-SNE 降维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32105302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com