根据文档的描述,我了解到虚拟分类器可以用来测试与其他分类算法的对比。
此分类器作为一个简单的基准,用于与其他(真实)分类器进行比较。请勿将其用于实际问题。
当虚拟分类器使用分层方法时,它会做什么?我知道文档中提到:
通过尊重训练集的类分布来生成预测。
能否有人提供一个更理论化的解释,说明为什么这可以作为分类器性能的证明?
回答:
虚拟分类器为您提供了一种“基线”性能的衡量标准——即即使只是猜测,您也应该期望达到的成功率。
假设您想确定某个对象是否具有某种特性。如果您分析了大量这样的对象,并发现其中90%具有目标特性,那么猜测每个未来的对象都具有目标特性,您就有90%的可能性猜对。按照这种方式构建您的猜测,相当于使用您所引用的文档中的most_frequent
方法。
由于许多机器学习任务试图提高(例如)分类任务的成功率,评估基线成功率可以为您的分类器应超过的最小值提供一个底线值。在上述假设中,您希望您的分类器的准确率超过90%,因为90%是连“虚拟”分类器都能达到的成功率。
如果使用上述数据训练一个带有stratified
参数的虚拟分类器,该分类器将预测每个它遇到的对象有90%的概率具有目标特性。这与使用most_frequent
参数训练虚拟分类器不同,后者会猜测所有未来的对象都具有目标特性。下面是一些代码来说明这一点:
from sklearn.dummy import DummyClassifierimport numpy as nptwo_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)#现在90%的训练数据包含目标特性X = np.array( two_dimensional_values )y = np.array( class_labels )#训练一个基于最常见类值进行预测的虚拟分类器dummy_classifier = DummyClassifier(strategy="most_frequent")dummy_classifier.fit( X,y )#这会产生100个预测结果,全部为“1”for i in two_dimensional_values: print( dummy_classifier.predict( [i]) )#训练一个基于类值进行预测的虚拟分类器new_dummy_classifier = DummyClassifier(strategy="stratified")new_dummy_classifier.fit( X,y )#这会产生大约90个预测结果为“1”和大约10个预测结果为“0”for i in two_dimensional_values: print( new_dummy_classifier.predict( [i]) )