我使用SGDClassifier與部分擬合方法結合訓練大量數據。我希望監控何時達到了可接受的收斂水平,這意味着我想知道某些數據每n次迭代都會有損失(可能需要進行培訓,可能還需要兩次)。計算SGDClassifier數據損失函數值的方法?
我知道這個信息是可用的,如果我在分類器的構造函數中傳遞verbose = 1,但我想以編程方式而不是以可視方式查詢它。我也知道我可以使用分數方法來獲得準確性,但我希望通過我選擇的損失函數來衡量實際損失。
有誰知道如何做到這一點?
我使用SGDClassifier與部分擬合方法結合訓練大量數據。我希望監控何時達到了可接受的收斂水平,這意味着我想知道某些數據每n次迭代都會有損失(可能需要進行培訓,可能還需要兩次)。計算SGDClassifier數據損失函數值的方法?
我知道這個信息是可用的,如果我在分類器的構造函數中傳遞verbose = 1,但我想以編程方式而不是以可視方式查詢它。我也知道我可以使用分數方法來獲得準確性,但我希望通過我選擇的損失函數來衡量實際損失。
有誰知道如何做到這一點?
您必須使用score
方法或明確調用sklearn.metrics
中的某個損失函數。並非所有的SGDC的損失都在sklearn.metrics
,但log loss和hinge loss是。
上述答案太短,過時並可能導致誤導。
使用分數法只能給出準確性(它在BaseEstimator
)。如果您需要丟失功能,您可以撥打專用功能_get_loss_function
(在BaseSGDClassifier
中定義)。或訪問BaseSGDClassifier.loss_functions
類的屬性,它會給你一個字典和其條目可調用的損失函數(默認設置)
而且使用sklearn.metrics
可能無法獲得用於最小化準確的損失(由於正規化什麼,以儘量減少,但無論如何您都可以手動計算)。 Loss函數的確切代碼在cython代碼中定義(sgd_fast.pyx,你可以在scikit-learn github回購中查找代碼)
我正在尋找繪製最小化進度的好方法。可能會重定向stdout並解析輸出。
順便說一句,我正在使用0.17.1。因此,答案的更新。
感謝您提供的有用信息---在我對學習者非一致地加權示例的情況下,是否有一種非手動方式將相同的權重應用於損失? – 2014-10-13 08:32:46
@BenAllison目前,沒有。 – 2014-10-13 09:52:20