Bagging 两种情况:¶
1: 对于分类问题:K个模型采用投票的方式得到分类结果 2: 对于回归问题:计算K个模型的均值作为最后的结果
Bagging集成学习
虽然有很多的机器学习方法,但是从投票的角度看,仍然不够多,如果在有限的几个算法中出了问题,那么整体的学习率将会下降,因此集成学习还有另一种方式:创建最优模型多个相同的副本。
1.创建多个子模型,集成更多的子模型的意见
2.子模型之前不能一致,相同的子模型用来查看不同的样本数据类保证模型的差异性 (500个样本数据,每个子模型只看200个样本数据)
3.每个模型不需要太高的准确率, 但是经过累计可以拥有比较客观的效果
5.Bagging 支持返回取样,总共有500个样本,第一个模型取出200个后,这些样本又重新放回到样本池中 (与交叉验证的区别)
from sklearn import datasets
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
X,y = datasets.make_moons(n_samples=500,shuffle=True,noise=0.5,random_state=42)
# print(X.shape,y.shape,y)
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.show()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
# 与交叉验证的区别,此处K个模型采用的是有回放的抽取
# K个训练模型是彼此独立的。K个训练集得到的是K个模型(基模型)
from sklearn.ensemble import BaggingClassifier
from sklearn.linear_model import LogisticRegression
# X_train = 500 * 0.75 = 375
bagging_clf2 = BaggingClassifier(base_estimator = LogisticRegression(),n_estimators=5000,max_samples=300)
bagging_clf2.fit(X_train,y_train)
print('训练时准确率',bagging_clf2.score(X_train,y_train),'测试集准确率',bagging_clf2.score(X_test,y_test))
print('-'*100)
随机森林¶
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树
# 随机森林本身就是一种特殊的集成学习。
from sklearn.ensemble import RandomForestClassifier
# 并且在继承学习的基础上增加了对特征选择的随机性(max_features),并非总是考虑全部的特征。较大程度上进一步提高了树的差异性。
rfc = RandomForestClassifier(n_estimators=5000,max_depth=5,criterion="entropy",random_state=1,max_samples=300)
rfc.fit(X_train,y_train)
print(f'训练集正确率{rfc.score(X_train,y_train)}测试集正确率{rfc.score(X_test,y_test)}')
阶段总结
1.VotingClassifier 帮我们找到适合数据的最优模型
-
BaggingClassifier 综合多个最优模型的总体表现 (行的随机性)
-
RandomForestClassifier = BaggingClassifier + max_features (列的随机性)
-
RandomForestClassifier + 网格搜索 = 最优模型的最优参数