将两个不同的分类器组合成 scikit-learn python

Posted

技术标签:

【中文标题】将两个不同的分类器组合成 scikit-learn python【英文标题】:combine two different classifier result in scikit-learn python 【发布时间】:2014-04-21 10:26:42 【问题描述】:

我得到如下数据集:-

patient id-1

Heart rate pattern-82 82 87 87 89 90 89 89 89 89

Blood pressure-110 71

Body temperature-37.2

SPO2-94

Sex-0

Age-8

Hereditary-1

Smoking-0

Alcohol Intake-0

Physical Activity-1

Diabetes-0

Blood Cholesterol-0

Obesity BMI-17.5

Status-0

(1=坏(真),0=好(假))

对于心率模式

>>>est = AdaBoostClassifier()
>>>est.fit(X_train,y_train)
>>>predictions = est.predict(X_test)
>>>r2_score(y_test,predictions)
0.46999999999999997

其余数据

>>>est = RandomForestClassifier(verbose=2)
>>>est.fit(X_train,y_train)
>>>predictions = est.predict(X_test)
>>>r2_score(y_test,predictions)
0.9

我只有 264 个用于训练和测试的测试数据。通过在 sklearn 中使用 AdaBoostClassifier() 仅挖掘 心率模式,我获得了 0.46999999999999997 的准确度。对于数据集的其余部分,我使用 RandomForestClassifier(verbose=2) 获得了 0.9 的准确度。

现在我需要将这两个结果组合成一个预测结果。由于心率是一个时间序列,我无法立即将这两个结果结合起来。连接这两个结果的最佳方法是什么?

【问题讨论】:

r2_score 是回归分数,而不是分类分数。要评估分类,请使用 f1_score、accuracy_score(仅适用于平衡类)或 roc_auc_score(仅适用于二元分类)。 @ogrisel r2 和 f1_score 有什么区别?在上述情况下,最准确和正确的是什么?我应该两个都管还是只管一个? 【参考方案1】:

要结合输出类别分配概率的两个分类器的分类(通过predict_proba 方法),您可以对概率进行平均(可能带有一些权重),然后将argmax 与平均预测类别概率相比较以进行最终预测.

注意:predict_proba 输出的其他列的顺序取决于分类器的classes_ 属性。

【讨论】:

你会发布一个示例代码来做到这一点吗? *我只是需要更多的说明,我是 scikit 学习的新手【参考方案2】:

您还可以使用 sklearn VotingClassifier 自动执行此操作,以组合不同的机器学习分类器,并从所有分类器中预测“投票最多”的输出。

在你的例子中:

from sklearn.ensemble import VotingClassifier

est_AB = AdaBoostClassifier()
score_AB=est_AB.fit(X_train,y_train).score(X_test,y_test)

est_RF = RandomForestClassifier()
score_RF=est_RF.fit(X_train,y_train).score(X_test,y_test)

est_Ensemble = VotingClassifier(estimators=[('AB', est_AB), ('RF', est_RF)],
                        voting='soft',
                        weights=[1, 1])

score_Ensemble=est_Ensemble.fit(X_train,y_train).score(X_test,y_test)

voting='soft' 在对所有模型的预测求和后将标签预测为具有最大概率的标签。 voting='hard' 按照多数投票规则预测标签,即模型预测的模式。

在此处查看更多信息http://scikit-learn.org/stable/modules/ensemble.html#voting-classifier 在这里http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html

【讨论】:

虽然您链接的文档可以回答问题,但最好在答案中包含相关代码并将链接作为参考 DaFois - 我编辑并添加了相应的实现

以上是关于将两个不同的分类器组合成 scikit-learn python的主要内容,如果未能解决你的问题,请参考以下文章

我如何从两个已经训练好的分类器中构建一个分类器?

scikit-learn:将数据拟合成块与一次拟合

提升方法与梯度提升决策树

数据挖掘实践(52):adaboost 推导实例

Scikit-Learn 中的分类数据转换

模型融合和提升的算法------算法面试题