10.3 装袋算法(Bagging)
10.3.1 原理
Bagging算法 (英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法。最初由Leo Breiman于1994年提出。Bagging算法可与其他分类、回归算法结合,提高其准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生。m个样本原始数据进行n次抽样(n<=m)
- 形成一个构成n个样本的新的训练数据集的训练模型
- 重复T次,得到T个模型
- 有新样本进行预测,采用投票方式(分类问题)或求平均值方式(回归问题)得到新样本的预测结果
Sklearn中BaggingClassifier和BaggingRegressor分类和回归树算法。
特点
- 平行合奏:每个模型独立构建
- 旨在减少方差,而不是偏差
- 适用于高方差低偏差模型(复杂模型)
- 基于树的方法的示例是随机森林,其开发完全生长的树(注意,RF修改生长的过程以减少树之间的相关性)
10.3.1 Bagging Classifier
类参数、属性和方法
类
class sklearn.ensemble.BaggingClassifier(base_estimator=None, n_estimators=10, *, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0)
属性
属性 |
类型 |
解释 |
base_estimator_ |
estimator |
从中生成集合的基估计量。 |
n_features_ |
int |
执行拟合时的特征数。 |
estimators_ |
list of estimators |
拟合基估计量的集合。 |
estimators_samples_ |
list of arrays |
每个基估计量的抽样子集。 |
estimators_features_ |
list of arrays |
每个基估计量的特征子集。 |
classes_ |
ndarray of shape (n_classes,) |
类标签。 |
n_classes_ |
int or list |
类的数量。 |
oob_score_ |
float |
使用现成的估计值获得的训练数据集的得分。只有当oob_score为True时,此属性才存在。 |
oob_decision_function_ |
ndarray of shape (n_samples, n_classes) |
利用训练集上的包外估计计算决策函数。如果nèu估计量很小,则可能在引导过程中从未遗漏数据点。在这种情况下,oob_decision_function_可能包含NaN。只有当oob_score为True时,此属性才存在。 |
方法
decision_function(X) |
基本分类器的决策函数的平均值。 |
fit(X, y[, sample_weight]) |
从训练中建立一个估计量的Bagging集合 |
get_params([deep]) |
获取此估计器的参数。 |
predict(X) |
预测X的类。 |
predict_log_proba(X) |
预测X的类对数概率。 |
predict_proba(X) |
预测X的类概率。 |
score(X, y[, sample_weight]) |
返回给定测试数据和标签的平均精度。 |
set_params(**params) |
设置此估计器的参数。 |
装袋分类算法算法分析鸢尾花数据
def iris_of_BaggingClassifier(): myutil = util() X,y = datasets.load_iris().data,datasets.load_iris().target X1 = datasets.load_iris().data[:,:2] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) title = "BaggingClassifier鸢尾花数据" clf = AdaBoostClassifier(n_estimators=50,random_state=11) clf.fit(X_train, y_train) myutil.print_scores(clf,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(AdaBoostClassifier(n_estimators=50,random_state=11),X,y,title) myutil.show_pic(title) clf = AdaBoostClassifier(n_estimators=50,random_state=11).fit(X1,y) myutil.draw_scatter_for_clf(X1,y,clf,title)
输出
BaggingClassifier鸢尾花数据: 95.83% BaggingClassifier鸢尾花数据: 96.67%
装袋分类算法算法分析红酒数据
def wine_of_BaggingClassifier(): myutil = util() X,y = datasets.load_wine().data,datasets.load_wine().target X1 = datasets.load_wine().data[:,:2] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) title = "BaggingClassifier红酒数据" clf = AdaBoostClassifier(n_estimators=50,random_state=11) clf.fit(X_train, y_train) myutil.print_scores(clf,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(AdaBoostClassifier(n_estimators=50,random_state=11),X,y,title) myutil.show_pic(title) clf = AdaBoostClassifier(n_estimators=50,random_state=11).fit(X1,y) myutil.draw_scatter_for_clf(X1,y,clf,title)
输出
BaggingClassifier红酒数据: 95.77% BaggingClassifier红酒数据: 100.00%
装袋分类算法分析乳腺癌数据
def breast_cancer_of_BaggingClassifier(): myutil = util() X,y = datasets.load_breast_cancer().data,datasets.load_breast_cancer().target X1 = datasets.load_breast_cancer().data[:,:2] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) title = "BaggingClassifier乳腺癌数据" clf = BaggingClassifier(base_estimator=SVC(),n_estimators=10, random_state=4) clf.fit(X_train, y_train) myutil.print_scores(clf,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(AdaBoostClassifier(n_estimators=50,random_state=11),X,y,title) myutil.show_pic(title) clf = AdaBoostClassifier(n_estimators=50,random_state=11).fit(X1,y) myutil.draw_scatter_for_clf(X1,y,clf,title)
输出
BaggingClassifier乳腺癌数据: 91.87% BaggingClassifier乳腺癌数据: 91.23%