首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科学学习虚拟分类器的理论基础是什么?

科学学习虚拟分类器的理论基础是什么?
EN

Stack Overflow用户
提问于 2015-04-04 02:00:27
回答 3查看 10.4K关注 0票数 17

通过文档,我看到可以使用虚拟分类器来根据分类算法对其进行测试。

该分类器作为一个简单的基线与其他(真实)分类器进行比较是非常有用的。不要用它来解决真正的问题。

虚拟分类器在使用分层分类器时会做什么。我知道文件里写着:

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

有谁能给我一个更理论性的解释,解释为何这是分类器性能的证明?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-04 03:25:41

虚拟分类器给出了“基线”性能的度量--即一个人应该期望达到的成功率,即使只是猜测。

假设您希望确定给定对象是否拥有某一属性。如果您分析了大量这些对象,并发现90%包含目标属性,那么猜测该对象的每个未来实例都拥有目标属性的可能性为90%。以这种方式构造您的猜测就相当于在您引用的文档中使用most_frequent方法。

因为许多机器学习任务试图提高(例如)的成功率。分类任务,评估基线成功率可以提供一个下限值,为一个人的分类器应该表现出来的最小值。在上面讨论的假设中,您将希望您的分类器获得超过90%的准确率,因为90%是即使是“虚拟”分类器都可以使用的成功率。

如果使用上述数据训练具有stratified参数的虚拟分类器,则该分类器将预测它遇到的每个对象都具有目标属性的概率为90%。这与使用most_frequent参数训练虚拟分类器不同,因为后者会猜测未来的所有对象都具有目标属性。下面是一些代码来说明:

代码语言:javascript
复制
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]) )
票数 27
EN

Stack Overflow用户

发布于 2017-11-05 17:04:59

虚拟分类器的一个主要动机是F-分数,当阳性类是少数(即不平衡的类)时。该分类器用于实际分类器的可靠性测试。实际上,虚拟分类器完全忽略输入数据。在“最频繁”方法的情况下,它检查最频繁标签的出现。

票数 2
EN

Stack Overflow用户

发布于 2018-10-08 17:30:25

使用文档来说明DummyClassifier,首先让我们创建一个不平衡的数据集:

代码语言:javascript
复制
>>>
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> y[y != 1] = -1
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

接下来,让我们比较一下SVC和most_frequent的准确性:

代码语言:javascript
复制
>>>
>>> from sklearn.dummy import DummyClassifier
>>> from sklearn.svm import SVC
>>> clf = SVC(kernel='linear', C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test) 
0.63...

>>> clf = DummyClassifier(strategy='most_frequent',random_state=0)
>>> clf.fit(X_train, y_train)
DummyClassifier(constant=None, random_state=0, strategy='most_frequent')
>>> clf.score(X_test, y_test)  
0.57...

我们看到,SVC没有比虚拟分类器做得更好。现在,让我们修改内核:

代码语言:javascript
复制
>>>
>>> clf = SVC(gamma='scale', kernel='rbf', C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test)  
0.97...

我们看到,准确度几乎提高到100%。所以这样更好。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29441943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档