Ho due serie di dati treno e test. I due set di dati hanno rispettivamente articoli 30213 e 30235 con 66 dimensioni ciascuno.Riduzione dimensionale con t-SNE
Sto provando ad applicare t-SNE di scikit imparare a ridurre la dimensione a 2. Poiché i set di dati sono grandi e ottengo MemoryError se provo a elaborare tutti i dati in una volta, cerco di suddividerli in pezzi e trasformano un pezzo in un momento come questo:
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
funziona senza MemoryError ma trovo che diverse esecuzioni di script producono uscite diverse per gli stessi elementi di dati. Ciò potrebbe essere dovuto alle operazioni di adattamento e trasformazione che avvengono insieme su ogni blocco di dati. Ma se provo ad adattarmi ai dati del treno con tsne.fit(X_train)
, ottengo MemoryError
. Come ridurre correttamente la dimensione di tutti gli elementi di dati in treno e set di test a 2 senza alcuna incongruenza tra i blocchi?
Come la risposta corrente fa notare, non è possibile applicare t-END a blocchi più piccoli e unire i risultati in modo significativo. Tuttavia, mi interessa la domanda più semplice "** Ho dei piccoli dati (articoli 5k in Dim 66) e t-SNE produce un MemoryError, perché è così? **" (Personalmente ho 24k righe in Dim 50 e lo stesso problema). –