由documentation我讀了一個虛擬分類器可以用來對照分類算法進行測試。scikit-learn dummy classifier的理論基礎是什麼?
此分類器可用作與其他 (實數)分類器進行比較的簡單基線。不要用它來解決實際問題。
虛擬分類器在使用分層方法時會做什麼?我知道該文檔說:
通過尊重訓練集的類 分佈產生預測。
有人能給我一個更爲理論性的解釋,爲什麼這是對分類器性能的證明嗎?
由documentation我讀了一個虛擬分類器可以用來對照分類算法進行測試。scikit-learn dummy classifier的理論基礎是什麼?
此分類器可用作與其他 (實數)分類器進行比較的簡單基線。不要用它來解決實際問題。
虛擬分類器在使用分層方法時會做什麼?我知道該文檔說:
通過尊重訓練集的類 分佈產生預測。
有人能給我一個更爲理論性的解釋,爲什麼這是對分類器性能的證明嗎?
虛擬分類器爲您提供了一種「基準」性能測量 - 即,即使只是猜測,也應該達到預期的成功率。
假設您想確定某個給定的對象是擁有還是不具有某種屬性。如果您已經分析了大量這些對象並且發現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]))
假人分類的主要動機是F-得分,當正類是少數(即不平衡類)。該分類器用於實際分類器的完整性測試。實際上,虛擬分類器完全忽略了輸入數據。在「最常用」方法的情況下,它檢查最頻繁標籤的發生。
感謝您的解釋。那麼分層的問題呢?這個問題的基礎是什麼?任何參考? – 2015-04-04 18:28:55
我已經闡述並添加了一些代碼來說明。我希望這有幫助! – duhaime 2015-04-04 21:33:32
令人驚歎。感謝您的解釋! – 2015-04-04 23:36:36