2013-12-16 41 views
3

我正在使用scikit進行機器學習。雖然我完全按照官方文件中提到的步驟進行,但我遇到了兩個問題。這裏是代碼的主要部分:python scikit中更快的數據擬合(或學習)功能

1)trdata是使用sklearn.train_test_split創建的訓練數據。 2)p試驗和NTEST是分別陽性的測試數據和底片

## Preprocessing 

scaler = StandardScaler(); scaler.fit(trdata); 

trdata = scaler.transform(trdata) 
ptest = scaler.transform(ptest); ntest = scaler.transform(ntest) 



## Building Classifier 

# setting gamma and C for grid search optimization, RBF Kernel and SVM classifier 

crange = 10.0**np.arange(-2,9); grange = 10.0**np.arange(-5,4) 
pgrid = dict(gamma = grange, C = crange) 
cv = StratifiedKFold(y = tg, n_folds = 3) 

## Threshold Ranging 

clf = GridSearchCV(SVC(),param_grid = pgrid, cv = cv, n_jobs = 8) 


## Training Classifier: Semi Supervised Algorithm 

clf.fit(trdata,tg,n_jobs=8) 

問題1)當我使用n_jobs = 8在GridSearchCV,代碼運行直到GridSearchCV但掛起或說需要非常長的時間,而不結果在執行'clf.fit',即使是非常小的數據集。當我刪除它,然後執行,但clf.fit花費很長時間來收斂大數據集。我的數據大小爲600 x 12矩陣的正面和負面。你能告訴我什麼n_jobs會做什麼以及如何使用它?還有什麼更快的擬合技術或代碼修改,可以用來使其更快?

問題2)StandardScaler也應該結合使用正數據還是負數據?我想它必須結合使用,因爲只有我們可以在測試集上使用定標器參數。

+0

您problem2,使用定標器上的P/N數據完全 – lennon310

+0

好的,謝謝你。 .. 你能不能更新我的一個更多的信息。尺寸爲 m樣本x n特徵的數據是沿行還是沿着列進行歸一化的?我想它是沿着列完成的,但是建議在用分類器對它進行分類或預測之前對用戶輸入進行規範化。那麼考慮到輸入將具有1個樣本x n個特徵的事實,單個輸入是如何歸一化的呢?顯然,規範化不能沿着按行排列的功能進行。 – Ashutosh

+0

還有一件事...用戶輸入規範化與訓練數據的規模相同。 – Ashutosh

回答

3

SVC似乎是不是歸一化數據非常敏感,你可以嘗試通過數據標準化的:

from sklearn import preprocessing 
trdata = preprocessing.scale(trdata) 
+1

非常重要的細節,我看到很少有人提到這一點。 – dividebyzero