通过组合多个学习器来完成学习任务,颇有点“三个臭皮匠顶个诸葛亮”的意味。
基分类器一般采用的是弱可学习(weakly learnable)分类器,通过集成方法,组合成一个强可学习(strongly learnable)分类器。
所谓弱可学习,是指学习的正确率仅略优于随机猜测的多项式学习算法;
强可学习指正确率较高的多项式学习算法。
集成学习的泛化能力一般比单一的基分类器要好,这是因为大部分基分类器的分类错误的概率远低于单一基分类器的。
集成方法主要包括Bagging和Boosting
Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法,把弱分类器组装成强分类器的方法。
全程自举汇聚法(bootstrap aggregating),称为bagging方法。Bagging对训练数据采用自举采样(boostrap sampling),即有放回地采样数据。
主要思想:
代表算法是随机森林
用UCI上的红酒数据集举例:
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC
import time
from sklearn.model_selection import train_test_split
# 加载数据
data = np.loadtxt('wine.data', delimiter=',')
X = data[:, 1:]
Y = data[:, :1].ravel()
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
clf =RandomForestClassifier()
print('随机森林:')
print('5折交叉验证平均值:', cross_val_score(clf, X, Y).mean())
strat = time.time()
clf.fit(X_train, y_train)
end = time.time()
print('训练时间:', end - start)
Boosting是一种与Bagging很类似的技术。Boosting的思路则是采用重赋权(re-weighting)法迭代地训练基分类器,
主要思想
代表算法由Adaboost,GBDT,XGBoost算法
贴一个Adaboost的代码
###########Adaboost##################
def adjust_Adaboost():
best = 0
for depth in range(1, 11):
for n in [50, 60, 70, 80, 90]:
ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=depth),
n_estimators=n,
learning_rate=1.)
temp = cross_val_score(ada, X, Y).mean()
if temp > best:
best = temp
d = depth
e = n
print(best, d, e)
print('Adaboost:')
ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=3),
n_estimators=60
)
print('5折交叉验证平均值:', cross_val_score(ada, X, Y).mean())
start = time.time()
ada.fit(X_train, y_train)
end = time.time()
print('运行时间:', end - start)
采样区别
权重
预测函数