2017-02-21 30 views
0

我試圖將我的數據文件,以LIBSVM文件格式,並得到這個錯誤:numpy的陣列錯誤「錯誤('X.shape [0]和y.shape [0]應該是相同的」

ValueError('X.shape[0] and y.shape[0] should be the same got 1L and 3997L instead.',), <traceback object at 0x000000000DC9E608> 

我有一個維度的文件特徵和標籤文件,特徵文件(列車數據)發生了錯誤。我使用相同的代碼來處理不同類型的特徵,因爲它是2D的,所以沒有錯誤。幫我

user_train=np.loadtxt(user_train) 
train_label=np.loadtxt(train_label) 
print('imputing training data ...') 

imp=Imputer(missing_values='NaN',strategy='mean',axis=1) 
imp.fit(user_train) 
user_train=imp.transform(user_train) 
print(user_train.shape,train_label.shape) 
print('normalizing training data ...') 
print(user,i) 

normalizer=preprocessing.Normalizer().fit(user_train) 
user_train_nor=normalizer.transform(user_train) 
print('writing trainiing data') 

output=(save_fea+'%s_tag_train_nor.txt'%(user)) 

svm_rank_format=dump_svmlight_file(user_train_nor,train_label,output,zero_based=False) 

數組作爲打印的形狀:((1L,3997L):user_train(地物1D),(3997L):標籤還1D)

+1

看起來你只需要將你的數組從(1,3997)改爲(3997,) – Julien

回答

0

X.shape[0] and y.shape[0] should be the same got 1L and 3997L instead.

這意味着user_train.shape[0]train_label.shape[0]應該是相同的值,但在你的情況下,它是1和3997

在一般情況下,如果你有N數量的訓練實例和M多項功能(在你的情況下,它是train_label)。那麼尺寸X(在你的情況下,它是user_train)應該是N X M和尺寸y應該是N X 1

您可以在訓練模型之前驗證它們的維度以避免出現此類錯誤。

Solution

在這種情況下,你可以使用reshape()transpose()轉換爲所需要的尺寸。

我想在你的例子中,尺寸user_train1 X 3997和尺寸train_label(3997,)。因此,要匹配維度,您可以重塑或轉置n維數組user_train來解決問題。

+0

謝謝@Wasi Ahmad。它完美的作品。 – Samah

+0

@Samah最好的答謝方式就是接受答案。 –