我有一个由200个独立SVM分类器组成的VotingClassifier。默认情况下,该分类器使用多数规则投票。我希望设置一个自定义阈值——只有当60%或更多的SVM分类器结果相同的情况下,才进行分类。
如果59%的SVM分类器具有相同的分类结果,我不希望集成模型进行分类。
我没有看到VotingClassifier
对象有这样的参数,但我认为在scikit-learn中应该有这样的功能。我应该使用不同的集成类吗?
回答:
根据页面底部的介绍,最简单的解决方案是使用转换方法:
def transform(self, X): """返回每个估计器对X的类标签或概率。
参数
----------
X : {array-like, sparse matrix}, shape = [n_samples, n_features]
训练向量,其中n_samples是样本数量,n_features是特征数量。
返回
-------
如果`voting='soft'`且`flatten_transform=True`:
array-like = (n_classifiers, n_samples * n_classes)
否则 array-like = (n_classifiers, n_samples, n_classes)
每个分类器计算的类概率。
如果`voting='hard'`:
array-like = [n_samples, n_classifiers]
每个分类器预测的类标签。
"""
只需编写一个简单的函数,计算每行的总和除以SVM的数量,然后应用您的阈值:
if(ratio>threshold): return 1elif(ratio<(1-threshold)): return 0else: #我们不进行预测 return -1