【问题标题】:Ensamble methods with scikit-learn使用 scikit-learn 集成方法
【发布时间】:2013-03-06 11:13:25
【问题描述】:

有没有办法在 sklearn 中将不同的分类器组合成一个?我找到sklearn.ensamble 包。它包含不同的模型,如 AdaBoost 和 RandofForest,但它们在底层使用决策树,我想使用不同的方法,如 SVM 和逻辑回归。 sklearn可以吗?

【问题讨论】:

  • 您可以将 AdaBoost 与不同的分类器一起使用,只要它们支持“sample_weight”即可。你想如何组合分类器?您可以平均“predict_proba”或“decision_function”。
  • 我想训练几个分类器,然后使用某种投票方案使用所有这些分类器来预测类。
  • 您只想进行多数投票吗?这没有实现afaik。但正如我所说,您可以平均 predict_proba 分数。或者您可以使用预测的 LabelBinarizer 并对它们进行平均。这将实施投票方案。
  • 我不预测概率,我试图预测类别。我可以使用多数投票。我在想必须有类似 Pipeline 或 FeatureUnion 的东西,但对于分类器/回归器但找不到任何东西。您可以发表您的评论作为答案,我会接受。

标签: python machine-learning scikit-learn


【解决方案1】:

您只想进行多数投票吗?这没有实现afaik。但正如我所说,您可以平均 predict_proba 分数。或者您可以使用预测的 LabelBinarizer 并对它们进行平均。这将实施投票方案。

即使您对概率不感兴趣,平均预测概率也可能比进行简单投票更可靠。不过,如果不尝试,这很难说。

【讨论】:

    【解决方案2】:

    是的,你可以train同一数据集上的不同模型&让每个模型做出预测

    # Import functions to compute accuracy and split data
    from sklearn.metrics import accuracy_score
    from sklearn.model_selection import train_test_split
    
    # Import models, including VotingClassifier meta-model
    from sklearn.linear_model import LogisticRegression
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.neighbors import KNeighborsClassifier as KNN
    from sklearn.ensemble import VotingClassifier
    
    # Set seed for reproducibility
    SEED = 1
    
    

    现在实例化这些模型

    # Instantiate lr
    lr = LogisticRegression(random_state = SEED)
    
    # Instantiate knn
    knn = KNN(n_neighbors = 27)
    
    # Instantiate dt
    dt = DecisionTreeClassifier(min_samples_leaf = 0.13, random_state = SEED)
    
    

    然后将它们定义为list 的分类器,并将这些不同的分类器组合成一个元模型

    classifiers = [('Logistic Regression', lr), 
                   ('K Nearest Neighbours', knn), 
                   ('Classification Tree', dt)]
    
    

    现在使用for 循环遍历这个预定义的分类器列表

    for clf_name, clf in classifiers:    
    
        # Fit clf to the training set
        clf.fit(X_train, y_train)    
    
        # Predict y_pred
        y_pred = clf.predict(X_test)
    
        # Calculate accuracy
        accuracy = accuracy_score(y_pred, y_test) 
    
        # Evaluate clf's accuracy on the test set
        print('{:s} : {:.3f}'.format(clf_name, accuracy))
    
    

    最后,我们将评估投票分类器的性能,该分类器采用列表分类器中定义的模型的输出并通过多数投票分配标签。

    # Voting Classifier
    # Instantiate a VotingClassifier vc
    vc = VotingClassifier(estimators = classifiers)     
    
    # Fit vc to the training set
    vc.fit(X_train, y_train)   
    
    # Evaluate the test set predictions
    y_pred = vc.predict(X_test)
    
    # Calculate accuracy score
    accuracy = accuracy_score(y_pred, y_test)
    print('Voting Classifier: {:.3f}'.format(accuracy))
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2015-05-22
      • 2016-07-13
      • 2015-08-23
      • 2020-01-05
      • 2017-01-09
      • 2013-04-22
      • 2020-09-02
      • 2019-05-23
      相关资源
      最近更新 更多