2016-03-19 16 views
0
bir ikili metin sınıflandırma görev üzerinde çalışıyorum

birleştirilmiş edilemez ve aşağıdaki gibi benim verilere vectorizer uyguladığınız iki 2D diziler birleştirirken:Hata Sıfır boyutlu diziler

count_vect = CountVectorizer(tokenizer=tokens) 
X_train_counts = count_vect.fit_transform(docs_train.data) 
print X_train_counts.shape 
(150, 370) 

ve ben istediğim için '0' sınıfından sadece rastgele numune alır (bizim örneğimizde a) ve sınıf ile sınıflandırmak '1', şu did:

x = X_train_counts 
y = docs_train.target 

a_x,a_y=x[y==0,:],y[y==0] 
b_x,b_y=x[y==1,:],y[y==1] 

inds=np.random.choice(range(a_x.shape[0]),50) 
random_x=a_x[inds,:] 
random_y=a_y[inds] 

x_merged=np.concatenate((random_x,b_x)) 
y_merged=np.concatenate((random_y,b_y)) 
X_train,y_train=shuffle(x_merged, y_merged, random_state=0) 

ama her zaman aşağıdaki hatayı alıyorum:

x_merged=np.concatenate((random_x,b_x)) 
ValueError: zero-dimensional arrays cannot be concatenated 

Ben şekil baskı yaparken beni gaves rağmen:

print random_x.shape 
print b_x.shape 
(50, 370) 
(50, 370) 

bir fikrin nasıl düzeltilir? Tabii ki etiketlere link olarak dizinleri koruyarak.

Güncelleme: Aşağıdaki komutlar çalıştırıldığında Bu, her Dizilerin içeriği/türde bir baskı geçerli:

print random_x[:5,:].toarray() 
print b_x[:5,:].toarray() 
print (type(random_x)) 
print (type(b_x)) 

[[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[4 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0]] 
[[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0]] 
<class 'scipy.sparse.csr.csr_matrix'> 
<class 'scipy.sparse.csr.csr_matrix'> 
+0

Baskı içeride. Tam baskıyı gönderin lütfen. Onun şekli hakkında değil, tür veya boyutlarla ilgili olduğunu düşünüyorum. – armatita

+0

Soruyu, her dizinin içeriği/türü ile güncelleştirdim ... teşekkürler – Ophilia

+0

Bu birleşik işlevle uyumsuz olduğu tür. Sorunu çözmek için resmi bir cevap verdim (iyi .., sanırım). – armatita

cevap

0

DÜZENLEME: Anlaşılan Scipy o başa hstack ve vstack dahil kendi concatenate yöntemleri var sahiptir seyrek matrisler.

Sorun gerçekten de tiptedir. sadece, bir diziye içine csr_matrix dönüştürmek bitiştirmek ve daha csr_matrix için yeniden dönüştürmek çözmek için:

 import numpy as np 
    import scipy.sparse as m 
    a = np.zeros((50, 370)) 
    b = np.zeros((50, 370)) 

    am = m.csr_matrix(a).toarray() 
    bm = m.csr_matrix(b).toarray() 
    cm = m.csr_matrix(np.concatenate((am,bm))) 
    print(am.shape,bm.shape,cm.shape) 

sonucudur: Her iki dizide biraz ne görüyoruz böylece

 (50, 370) (50, 370) (100, 370) 
+0

Üzgünüm, aslında işe yaramadı .. sonunda aynı şekil vermez ... Programınız belki işe yarar çünkü a ve b her ikisi de numpy dizileridir .. Ancak, aşağıdaki kodun bitiştirilmesine ne dersiniz? iki dizi: 'x_merged = sp.vstack ((random_x, b_x), format = 'csr')' .. bekleneni veriyor mu? .. Matris ve etiket dizisi arasındaki bağlantıyı korumak anlamında 'random_y & b_y' – Ophilia

+0

Tamam, cevabımı güncelledim. Dönüşümde bilgi kaybı olmayı beklemiyordum. Bunun için üzgünüm. Hstack ve vstack Scipy uygulanması için bağlantıları (cevapta) kontrol edin. – armatita