2015-04-18 47 views
9

我們將sklearn從舊的0.13-git升級到了0.14.1,並發現邏輯迴歸分類器的性能發生了很大變化。用相同數據訓練的兩個分類器具有不同的係數,因此經常給出不同的分類結果。不同版本的sklearn給出了完全不同的訓練結果

作爲一個實驗我用5個數據點(高的尺寸)來訓練分類器LR,結果是:

0.13 GIT中:

clf.fit(data_test.data, y) 
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True, 
intercept_scaling=1, penalty='l2', tol=0.0001) 
np.sort(clf.coef_) 
array([[-0.12442518, -0.11137502, -0.11137502, ..., 0.05428562, 
0.07329358, 0.08178794]]) 

0.14.1:

clf1.fit(data_test.data, y) 
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True, 
intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001) 
np.sort(clf1.coef_) 
array([[-0.11702073, -0.10505662, -0.10505662, ..., 0.05630517, 
0.07651478, 0.08534311]]) 

我想說的差別是相當大的,在10 ^( - 2)的範圍內。很明顯,我在這裏使用的數據並不理想,因爲要素的維度比條目數量要大得多。然而,在實踐中往往也是如此。 它與功能選擇有關嗎?我怎樣才能使結果與以前一樣?我知道新的結果不一定比以前更糟,但現在的重點是儘可能使它們保持一致。 謝謝。

+1

在你的0.13.1中你沒有'random_state = None',這是一個錯字嗎? – EdChum

+0

0.13版本沒有該參數。在0.14.1中,我也嘗試設置random_state = 0,結果與random_state = None相同。 – ymeng

+0

這是值得檢查的文檔,因爲有時在不同版本的錯誤修正 – EdChum

回答

2

下面是關於從what's new頁釋放0.13評論:

Fixed class_weight support in svm.LinearSVC and linear_model.LogisticRegression 
by Andreas Müller. The meaning of class_weight was reversed as erroneously 
higher weight meant less positives of a given class in earlier releases. 

但是,更新的描述是版本0.13,而不是更高的版本。您提到您使用的版本爲0.13-git,也許您在未編輯該功能的情況下使用了版本0.13的預發行版:這樣,更新可能對您的問題有意義。

通過查看你的係數,它們在新版本中較低,這使得更新的描述有點意義,說明權重最初被降低了。

您可能想要更改新的LogisticRegression(...)的參數並嘗試調整一些內容。

相關問題