【问题标题】:Sklearn: How to make an ensemble for two binary classifiers?Sklearn:如何为两个二元分类器制作一个集成?
【发布时间】:2015-09-04 08:00:23
【问题描述】:

我有两个用于多媒体数据集的分类器。一种用于视觉材料,一种用于文本材料。我想结合这些分类器的预测来做出最终的预测。我一直在阅读有关 bagging、boosting 和 stacking ensemble 的信息,所有这些看起来都很有用,我想尝试一下。但是,我似乎只能为我的具体问题找到相当理论的例子,没有足够具体的例子让我理解如何实际实现它(在带有 scikit-learn 的 python 中)。我的两个分类器都使用 10 KFold CV 和 SVM 分类。两者都输出带有预测的n_samples = 1000 列表(1 或0)。另外,我让它们都生成了预测所基于的概率列表,如下所示:

 [[ 0.96761819  0.03238181]
 [ 0.96761819  0.03238181]
  ....
 [ 0.96761819  0.03238181]
 [ 0.96761819  0.03238181]]

我将如何将这些组合成一个整体。我应该使用什么作为输入?我试过水平连接标签预测并将它们作为特征输入,但没有运气(概率相同)。

【问题讨论】:

    标签: python scikit-learn classification


    【解决方案1】:

    这完全取决于您要实现的集成方法。你看过sklearn-ensemble 文档吗?

    http://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble

    【讨论】:

    • 是的,我有,但它需要我提供分类器作为输入,对吗?我已经有了预测,分类器的结果。所以我一直在寻找一种方法来构建一个合奏。我知道这取决于我想要实现的集成,但现在我什至无法构建一个。
    • 是的,这就是元分类器的本质:使用各种分类器来改进预测。如果您想将预测作为输入提供,则必须使用简单的学习算法(例如分类器),而不是集成方法,因为您不是集成算法。
    • 啊,好吧,这很有道理。你会推荐使用 ensembling 而不是我正在尝试的方法吗?
    • 还有一个问题,如果可以的话:将我的两个预测标签列表水平连接是否有意义?例如'[[1 0][1 1]...[0 1][0 1]]' 然后把它扔进分类器?还是我不正确地处理这个问题。感谢您迄今为止的帮助!
    • 嗯,这又取决于实现和结构。但请记住,分类器获取输入数据并尝试将它们分配给一个类。什么类是包含所有预测的行?如果不进行测试,就无法确定哪个分类器效果最好。我建议您使用 Weka 或 RapidMiner 之类的图形工具来概览您的数据并测试各种分类器。
    【解决方案2】:

    如果您正在寻找严格的组合,我建议使用brew,因为它是建立在 sklearn 之上的(意味着您可以使用您的 sklearn 分类器),并且,上次我检查时,sklearn 非常适合创建集成(Bagging、AdaBoost、RandomForest ...),但为您自己的自定义集成(例如混合集成)提供的组合规则并不多。

    https://github.com/viisar/brew

    from brew.base import Ensemble
    from brew.base import EnsembleClassifier
    from brew.combination.combiner import Combiner
    
    # create your Ensemble
    clfs = your_list_of_classifiers # [clf1, clf2]
    ens = Ensemble(classifiers = clfs)
    
    # create your Combiner
    # the rules can be 'majority_vote', 'max', 'min', 'mean' or 'median'
    comb = Combiner(rule='mean')
    
    # now create your ensemble classifier
    ensemble_clf = EnsembleClassifier(ensemble=ens, combiner=comb)
    ensemble_clf.predict(X)
    

    【讨论】:

    • 你能告诉我如何在 python 中做到这一点,我会向你澄清,我有六个特征子集,我为每个特征子集尝试多个分类器,为每个分类器找到最合适的算法。 .. 我现在的问题是如何使用集成分类器(如 bagging、adaboost、voting 等)将它们组合起来
    【解决方案3】:

    在 sklearn.ensemble 中有一个名为“VotingClassifier”的分类器,可用于对多个分类器进行分类,预测标签将基于入伍分类器的投票。示例如下:

    【讨论】:

    • 是例子吗?你回答了一个 2 年前的问题,提问者可能不再需要答案,所以它应该足够清楚,以帮助任何有类似问题的人
    猜你喜欢
    • 2016-06-27
    • 2019-08-05
    • 2018-07-09
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2023-03-17
    相关资源
    最近更新 更多