我有两套数据训练和测试。这两个数据集分别有30213和30235个项目,每个项目有66个维度。在
我正在尝试应用scikit learn的t-SNE将维数降到2。由于数据集很大,如果我试图一次性处理整个数据,我会遇到内存错误,我会尝试将它们分成块,然后一次转换一个块,如下所示: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
在没有运行相同的内存项的情况下,运行不同的内存项的输出。这可能是由于拟合和转换操作同时发生在每个数据块上。但是如果我试图用tsne.fit(X_train)来拟合列车数据,我得到MemoryError。如何正确地将列车和测试集中的所有数据项的维数降到2,而块之间没有任何不一致?在