在scikit-learn中结合两个不同分类器的结果
我有一些数据集,像下面这样:
patient id-1
心率模式-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.47的准确率。而对于其他数据集,我使用RandomForestClassifier(verbose=2)得到了0.9的准确率。
现在我需要把这两个结果合成一个单一的预测结果。由于心率是一个时间序列,我不能直接把这两个结果结合在一起。有什么好的方法可以把这两个结果连接起来呢?
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
如果你有两个分类器,它们可以输出每个类别的概率(通过 predict_proba
方法),你可以把这两个分类器的概率进行平均(可以加一些权重),然后对平均后的概率使用 argmax
方法来得到最终的预测结果。
注意:predict_proba
输出的列的顺序是根据分类器的 classes_
属性来决定的。