8

documentation我讀了一個虛擬分類器可以用來對照分類算法進行測試。scikit-learn dummy classifier的理論基礎是什麼?

此分類器可用作與其他 (實數)分類器進行比較的簡單基線。不要用它來解決實際問題。

虛擬分類器在使用分層方法時會做什麼?我知道該文檔說:

通過尊重訓練集的類 分佈產生預測。

有人能給我一個更爲理論性的解釋,爲什麼這是對分類器性能的證明嗎?

回答

14

虛擬分類器爲您提供了一種「基準」性能測量 - 即,即使只是猜測,也應該達到預期的成功率。

假設您想確定某個給定的對象是擁有還是不具有某種屬性。如果您已經分析了大量這些對象並且發現90%包含目標屬性,那麼猜測該對象的每個未來實例都擁有目標屬性,這使您有90%的正確猜測的可能性。以這種方式構建您的猜測等同於您在引用的文檔中使用most_frequent方法。由於許多機器學習任務試圖增加(例如)分類任務的成功率,所以評估基線成功率可以爲分類器應該超出的最小值提供底限值。在上面討論的假設中,您會希望分類器的準確率達到90%以上,因爲即使是「虛擬」分類器,成功率也可達到90%。

如果使用上面討論的數據訓練帶有stratified參數的虛擬分類器,則該分類器將預測其遇到的每個對象都有90%的概率擁有目標屬性。這與訓練具有most_frequent參數的虛擬分類器不同,因爲後者會猜測未來對象具有目標屬性。下面是一些代碼來說明:

from sklearn.dummy import DummyClassifier 
import numpy as np 

two_dimensional_values = [] 
class_labels   = [] 

for i in xrange(90): 
    two_dimensional_values.append([1,1]) 
    class_labels.append(1) 

for i in xrange(10): 
    two_dimensional_values.append([0,0]) 
    class_labels.append(0) 

#now 90% of the training data contains the target property 
X = np.array(two_dimensional_values) 
y = np.array(class_labels) 

#train a dummy classifier to make predictions based on the most_frequent class value 
dummy_classifier = DummyClassifier(strategy="most_frequent") 
dummy_classifier.fit(X,y) 

#this produces 100 predictions that say "1" 
for i in two_dimensional_values: 
    print(dummy_classifier.predict([i])) 

#train a dummy classifier to make predictions based on the class values 
new_dummy_classifier = DummyClassifier(strategy="stratified") 
new_dummy_classifier.fit(X,y) 

#this produces roughly 90 guesses that say "1" and roughly 10 guesses that say "0" 
for i in two_dimensional_values: 
    print(new_dummy_classifier.predict([i])) 
+0

感謝您的解釋。那麼分層的問題呢?這個問題的基礎是什麼?任何參考? – 2015-04-04 18:28:55

+1

我已經闡述並添加了一些代碼來說明。我希望這有幫助! – duhaime 2015-04-04 21:33:32

+1

令人驚歎。感謝您的解釋! – 2015-04-04 23:36:36

0

假人分類的主要動機是F-得分,當正類是少數(即不平衡類)。該分類器用於實際分類器的完整性測試。實際上,虛擬分類器完全忽略了輸入數據。在「最常用」方法的情況下,它檢查最頻繁標籤的發生。