2013-05-21 69 views
0

我想對SVC分類器的概率輸出運行網格搜索交叉驗證。特別是我想盡量減少負對數的可能性。從文檔看來,GridSearchCV稱爲predict()方法的估計器通過,而SVC的方法返回類別預測而不是概率(predict_proba()返回類別概率)。sci-kit學習SVC概率輸出的網格搜索交叉驗證

1)我是否需要繼承SVC的子類並給它返回概率而不是類來實現我的對數似然交叉驗證的方法?我想我需要寫我自己的score_funcloss_func

2)交叉驗證這個負對數似然啞嗎?我正在做這件事b/c數據集是:a)不平衡的5:1和b)根本不可分開,即使「最差」的觀察者也有50%的機會進入「好」類。 (可能還張貼在統計q &一本第二個問題)

回答

2
  1. 是的,你會的,這兩個帳戶。

    class ProbSVC(SVC): 
        def predict(self, X): 
         return super(ProbSVC, self).predict_proba(X) 
    
  2. 我不知道這是否會工作,因爲大多數類可能仍佔據着相似度分數和最終的估計可能仍然產生> .5,積極爲少數類的樣本。不過,我不確定,所以請發佈到統計。

+0

1)謝謝,2)它是好的,如果最終的估計仍然是少數類的樣本產生> 0.5。事實上,我很確定它會,我只是希望這些概率儘可能「好」。 – user1507844

+0

似乎它需要'超級(ProbSVC,self)'(即參數順序相反),但我對Python很陌生,所以如果有人確認這個 – user1507844

+0

@ user1507844會更喜歡:你說得對,對不起那。 –

2

使用sklearn開發版本中的新記錄器接口,您不需要子類化。你只需要定義一個描述得分對象in the docs 基本上你需要做 log_loss_score = Scorer(neg_log_loss, needs_threshold=True) 雖然這可能會回退到「decision_function」。

您也可以定義一個新的記分員類,在估計器上調用predict_proba以確保它獲得歸一化的概率。

另外,對於對數損失拉入請求會受到歡迎:)

+0

我們有一個關於log-loss站點的pull請求: https://github.com/scikit-learn/scikit-learn/pull/1125。我一直想合併,但沒有得到它。 –