机器学习——集成学习

引言

集成学习:让机器学习效果更好,单个不行,群殴走起。

分类

1. Bagging:训练多个分类器取平均(m代表树的个数)。

2.Boosting(提升算法):从弱学习器开始加,通过加权来进行训练。(它与上面的不同在于它不是随机几颗树取平均,而是加入一棵树要比原来强)

 3.Stacking:聚合多个分类或回归模型(可以分阶段来做)

介绍

Bagging全称(bootstrap aggregation)在其算法中训练每一棵树之间是没有影响的,说白了就是并行训练一堆分类器。

典型代表随机森林:随机代表数据采样随机,特征选择随机,为了避免重复,但算法已经固定为了增加多样性则就是数据的采样要随机。森林代表很多个决策树并行放在一起。

随机森林中分类和回归的做法:

 在做分类任务的时候两个类别被分为A一个被分为B,那么则选择少数服从多数最后类别为A。

在做回归任务的时候分别为100、200、300,则最终结果为(100+200+300)/3

随机森林的优点:

1.可解释性强,便于分析。(对于神经网络、深度学习都是黑盒子,我们只能得到输入和输出内部很复杂看不到。)

2.在训练结束,它能够给出特征重要型排序,如下图:

 3.并行化方法,速度快

软投票和硬投票

一、硬投票:直接用类别值,少数服从多数

(1)准备数据并且可视化

%matplotlib inline
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
X,y=make_moons(n_samples=500,noise=0.30,random_state=42)
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42)
plt.plot(X[:,0][y==0],X[:,1][y==0],'yo',alpha=0.6)#alpha 代表透明程度
plt.plot(X[:,0][y==0],X[:,1][y==1],'bs',alpha=0.6)

结果如图所示:

(2)硬投票

from sklearn.ensemble import RandomForestClassifier,VotingClassifier #随机森林和投票器
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
#进行实例化
log_clf=LogisticRegression()
rnd_clf=RandomForestClassifier()
svm_clf=SVC()
voting_clf=VotingClassifier(estimators=[('lr',log_clf),('rf',rnd_clf),('svc',svm_clf)],voting='hard')
voting_clf.fit(X_train,y_train)

(3)模型评价

from sklearn.metrics import accuracy_score
for clf in (log_clf,rnd_clf,svm_clf,voting_clf):
    clf.fit(X_train,y_train)
    y_pred=clf.predict(X_test)
    print(clf.__class__.__name__,accuracy_score(y_test,y_pred))

结果如下:

 二、软投票:各自分类器的概率值进行加权平均

数据不变,只需要将上面代码进行修改。代码如下:

from sklearn.ensemble import RandomForestClassifier,VotingClassifier #随机森林和投票器
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
#进行实例化
log_clf=LogisticRegression()
rnd_clf=RandomForestClassifier()
svm_clf=SVC(probability=True)
voting_clf=VotingClassifier(estimators=[('lr',log_clf),('rf',rnd_clf),('svc',svm_clf)],voting='soft')
voting_clf.fit(X_train,y_train)
from sklearn.metrics import accuracy_score
for clf in (log_clf,rnd_clf,svm_clf,voting_clf):
    clf.fit(X_train,y_train)
    y_pred=clf.predict(X_test)
    print(clf.__class__.__name__,accuracy_score(y_test,y_pred))

模型评价结果如图:

 明显比上一个效果好。

猜你喜欢

转载自blog.csdn.net/m0_72662900/article/details/129239409