2016-08-31 122 views
0

我試圖用Scikit來訓練2個叫做x1和x2的特徵。這兩個陣列的形狀是(490,1)。爲了將一個X自變量傳入clf.fit(X,y),我使用了np.concatenate來產生陣列形狀(490,2)。標籤數組由1和0組成,形狀爲(490,)。代碼如下所示:顯示Scikit SVM錯誤:X.shape [1] = 1應該等於2

x1 = int_x # previously defined array shape (490,1) 
x2 = int_x2 # previously defined array shape (490,1) 
y=np.ravel(close) # where close is composed of 1's and 0's shape (490,1) 
X,y = np.concatenate((x1[:-1],x2[:-1]),axis=1), y[:-1] #train on all datapoints except last 
clf = SVC() 
clf.fit(X,y) 

以下錯誤:

X.shape[1] = 1 should be equal to 2, the number of features at training time 

我不明白的是爲什麼會出現這種消息,即使當我檢查X的形狀,它確實是2而不是1.我原本只有一個功能,clf.fit(X,y)運行良好,所以我傾向於認爲np.concatenate產生了一些不適合的東西。任何建議都會很棒。

回答

0

很難說沒有int_x,int_x2close的具體值。事實上,如果我嘗試用int_xint_x2close隨機構造

import numpy as np 
from sklearn.svm import SVC 

int_x = np.random.normal(size=(490,1)) 
int_x2 = np.random.normal(size=(490,1)) 
close = np.random.randint(2, size=(490,)) 

這符合您的規格,那麼你的代碼工作。因此,錯誤可能與您構造int_x,int_x2和close時的方式相同。

如果您認爲問題不存在,請您分享一個最小可重現的例子,具體值爲int_xint_x2close

+0

我剛剛嘗試過使用與上面相同的方法,但收到相同的錯誤。你能提供你的代碼的其餘部分,從上面產生一個成功的結果嗎? – ColeS

0

我想我明白我的代碼出了什麼問題。

首先,我已創建的另一個變量,說x該定義的int_xint_x2級聯和形狀是:(490,2),其是相同的形狀close。這在稍後派上用場。

接下來,clf.fit(X,y)本身沒有錯誤。但是,我沒有正確制定我的預測代碼。例如,我說:clf.predict([close[-1]])希望捕獲二進制目標輸出(0或1)。傳入此方法的參數不正確。它應該是clf.predict([x[-1]]),因爲該算法預測特徵位置處的標籤而不是其他方式。由於變量x現在與close形狀相同,因此clf.predict([x[-1]])的結果應產生close[-1]的預測結果。