2014-10-03 42 views
0

我使用SGDClassifier與部分擬合方法結合訓練大量數據。我希望監控何時達到了可接受的收斂水平,這意味着我想知道某些數據每n次迭代都會有損失(可能需要進行培訓,可能還需要兩次)。計算SGDClassifier數據損失函數值的方法?

我知道這個信息是可用的,如果我在分類器的構造函數中傳遞verbose = 1,但我想以編程方式而不是以可視方式查詢它。我也知道我可以使用分數方法來獲得準確性,但我希望通過我選擇的損失函數來衡量實際損失。

有誰知道如何做到這一點?

回答

1

您必須使用score方法或明確調用sklearn.metrics中的某個損失函數。並非所有的SGDC的損失都在sklearn.metrics,但log losshinge loss是。

+0

感謝您提供的有用信息---在我對學習者非一致地加權示例的情況下,是否有一種非手動方式將相同的權重應用於損失? – 2014-10-13 08:32:46

+0

@BenAllison目前,沒有。 – 2014-10-13 09:52:20

0

上述答案太短,過時並可能導致誤導。

使用分數法只能給出準確性(它在BaseEstimator)。如果您需要丟失功能,您可以撥打專用功能_get_loss_function(在BaseSGDClassifier中定義)。或訪問BaseSGDClassifier.loss_functions類的屬性,它會給你一個字典和其條目可調用的損失函數(默認設置)

而且使用sklearn.metrics可能無法獲得用於最小化準確的損失(由於正規化什麼,以儘量減少,但無論如何您都可以手動計算)。 Loss函數的確切代碼在cython代碼中定義(sgd_fast.pyx,你可以在scikit-learn github回購中查找代碼)

我正在尋找繪製最小化進度的好方法。可能會重定向stdout並解析輸出。

順便說一句,我正在使用0.17.1。因此,答案的更新。