10.4 投票分类(Voting Classifier)
10.4.1 理论
模型 :A - 99%、B - 1%,表示模型 认为该样本是 A 类型的概率为 99%,为 B 类型的概率为 1%。
硬投票
Hard Voting |
|||
模型 |
A得分 |
B得分 |
获胜者 |
1 |
99% |
1% |
A |
2 |
49% |
51% |
B |
3 |
40% |
60% |
B |
4 |
90% |
10% |
A |
5 |
30% |
70% |
B |
A:两票、B三票,B获胜 |
软投票
Soft Voting |
||
模型 |
A得分 |
B得分 |
1 |
99% |
1% |
2 |
49% |
51% |
3 |
40% |
60% |
4 |
90% |
10% |
5 |
30% |
70% |
A:(99%+49%+40%+90%+30%)/5=61.6% B:(1%+51%+60%+10%+70%)/5=38.4% A获胜 |
10.4.2投票分类(Voting Classifier)
类参数、属性和方法
类
class sklearn.ensemble.VotingClassifier(estimators, *, voting='hard', weights=None, n_jobs=None, flatten_transform=True, verbose=False)
参数
属性 |
类型 |
解释 |
voting |
{'hard', 'soft'}, default='hard' |
如果'hard',则使用预测的类别标签进行多数规则投票。否则,如果为'soft',则根据预测概率之和的最大值预测类别标签,这是一组校准良好的分类器所推荐的。 |
属性
属性 |
类型 |
解释 |
estimators_ |
list of classifiers |
非“下降”估计量中定义的拟合子估计量的集合。 |
named_estimators_ |
Bunch |
属性按名称访问任何合适的子估计量。 |
classes_ |
array-like of shape (n_predictions,) |
类别标签。 |
方法
fit(X, y[, sample_weight]) |
拟合估计值。 |
fit_transform(X[, y]) |
返回每个估计量的类别标签或概率。 |
get_params([deep]) |
从集合中获取估计量的参数。 |
predict(X) |
预测X的类标签。 |
score(X, y[, sample_weight]) |
返回给定测试数据和标签的平均准确度。 |
set_params(**params) |
从集合中设置估计器的参数。 |
transform(X) |
返回每个估计量的类标签或X的概率。 |
投票分类(Voting Classifier)分析
def My_VotingClassifier(mydata,title): warnings.filterwarnings("ignore") myutil = util() if title=="两个月亮数据": X, y = mydata else: X,y = mydata.data,mydata.target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) votings=['hard','soft'] for voting in votings: voting_clf = VotingClassifier(estimators=[('log_clf', LogisticRegression()),('svm_clf', SVC(probability=True)),('dt_clf', DecisionTreeClassifier(random_state=666))], voting=voting) voting_clf.fit(X_train, y_train) mytitle = title+" "+voting+"Voting训练" myutil.print_scores(voting_clf,X_train,y_train,X_test,y_test,mytitle) myutil.plot_learning_curve(VotingClassifier(estimators=[('log_clf', LogisticRegression()),('svm_clf', SVC(probability=True)),('dt_clf', DecisionTreeClassifier(random_state=666))], voting='hard'),X,y,mytitle) myutil.show_pic(mytitle) def call_VotingClassifier(): mydatas = [datasets.make_moons(n_samples=500, noise=0.3, random_state=42), datasets.load_iris(), datasets.load_wine(), datasets.load_breast_cancer()] titles = ["两个月亮数据","鸢尾花数据","红酒数据","乳腺癌数据"] for (mydata,title) in zip(mydatas, titles): My_VotingClassifier(mydata,title)
分别用到:LogisticRegression、SVC和DecisionTreeClassifier
probability必须为true
输出
两个月亮数据 hardVoting训练: 93.60% 两个月亮数据 hardVoting训练: 90.40% 两个月亮数据 softVoting训练: 96.27% 两个月亮数据 softVoting训练: 90.40% 鸢尾花数据 hardVoting训练: 96.43% 鸢尾花数据 hardVoting训练: 100.00% 鸢尾花数据 softVoting训练: 100.00% 鸢尾花数据 softVoting训练: 100.00% 红酒数据 hardVoting训练: 98.50% 红酒数据 hardVoting训练: 95.56% 红酒数据 softVoting训练: 100.00% 红酒数据 softVoting训练: 95.56% 乳腺癌数据 hardVoting训练: 96.48% 乳腺癌数据 hardVoting训练: 96.50% 乳腺癌数据 softVoting训练: 97.89% 乳腺癌数据 softVoting训练: 95.80%
数据 |
Hard |
Soft |
两个月亮数据 |
93.60% |
96.27% |
90.40% |
90.40% |
|
鸢尾花数据 |
96.43% |
100.00% |
100.00% |
100.00% |
|
红酒数据 |
98.50% |
100.00% |
95.56% |
95.56% |
|
乳腺癌数据 |
96.48% |
97.89% |
96.50% |
95.80% |