scikit-learn 虚拟分类器的理论基础是什么?

根据文档的描述,我了解到虚拟分类器可以用来测试与其他分类算法的对比。

此分类器作为一个简单的基准,用于与其他(真实)分类器进行比较。请勿将其用于实际问题。

当虚拟分类器使用分层方法时,它会做什么?我知道文档中提到:

通过尊重训练集的类分布来生成预测。

能否有人提供一个更理论化的解释,说明为什么这可以作为分类器性能的证明?


回答:

虚拟分类器为您提供了一种“基线”性能的衡量标准——即即使只是猜测,您也应该期望达到的成功率。

假设您想确定某个对象是否具有某种特性。如果您分析了大量这样的对象,并发现其中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]) )

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注