zl程序教程

您现在的位置是:首页 >  后端

当前栏目

快速入门Python机器学习(26)

2023-06-13 09:11:03 时间

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%