是否可以为scikit-learn的集成分类器设置“阈值”?

我有一个由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

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中创建了一个多类分类项目。该项目可以对…

发表回复

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