【问题标题】:How to get the coefficients of the model using sklearn's AdaBoostClassifier (with Logistic regression as the base estimator)如何使用 sklearn 的 AdaBoostClassifier 获取模型的系数(以 Logistic 回归为基础估计器)
【发布时间】:2020-06-07 09:38:15
【问题描述】:

我使用 scikit-learn 的 AdaBoostClassifier 构建了一个模型,Logistic regression 作为基础估计器。

model = AdaBoostClassifier(base_estimator=linear_model.LogisticRegression()).fit(X_train, Y_train)

如何获得模型的系数?我想看看每个特征在数字上对目标变量log(p/(1-p)) 有多少贡献。

非常感谢。

【问题讨论】:

    标签: python scikit-learn logistic-regression adaboost


    【解决方案1】:

    Adaboost 有一个 estimators_ 属性,允许您迭代所有拟合的基础学习器。并且,您可以使用每个基础学习器的coef_ 参数来获取分配给每个特征的系数。然后,您可以平均系数。请注意,您必须考虑到 Adaboost 的基础学习者被分配了单独的权重这一事实。

    coefs = []
    for clf,w in zip(model.estimators_,model.estimator_weights_):
        coefs.append(clf.coef_*w)
    coefs = np.array(coefs).mean(axis=0)
    print(coefs)
    

    如果您有二进制分类,您可能希望将循环内的行更改为:

    coefs.append(clf.coef_.reshape(-1)*w)
    

    【讨论】:

    • 非常感谢!问题:由于 AdaBoostClassifier 是一种提升技术,它会连续提升先前的基础学习器,最终模型不应该是后续基础学习器链中的最后一个模型,因此我们应该采用最终基础学习器的 coef_ 而不是取所有基础学习者的coef_ 的平均值?
    • 我不确定您所说的“成功提升以前的基础学习者”是什么意思,但在每一步 Adaboost 都会找到一组所有当前估计器组合 分类失败。最终分类器是所有基础学习器的加权和,而不仅仅是最后一个
    • 谢谢希哈德。抱歉,我把我的 AdaBoost 算法弄混了。但我现在很清楚。此外,由于涉及权重,不应该将平均值计算为加权平均值,即。 coefs = average(coefs, axis=0, weights=w)
    • 您是否要替换此行:coefs = np.array(coefs).mean(axis=0)?如果是这样,我们已经在上一行中实现了加权平均值coefs.append(clf.coef_*w)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2021-12-24
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多