简介
adaboost 是一种通过多个弱分类器相互协作,从而得出强分类器的一种方式。简单的说就是三个臭皮匠敌得过一个诸葛亮。
优势
- 可以通过各种弱分类器组合强分类器
- 多种分类器权重的不断调整,不会有过拟合现象
- 通过权重自动更改不需做特征筛选,同时这个性质也能选出特征值,能够应用与特征选择
应用
- 分类
- 特征选择
公式推导
注:相关公式推导,请看李航《统计学习方法》提升树,本文以实用性向大家介绍。
类库介绍
sklearn 有AdaBoostClassifier和AdaBoostRegressor两种提升树方式
- base_estimator 弱分类器选择器,可以选择机会所有的分类器,但一般为决策树CART和神经网络(MLP)
- n_estimators 分类器数量,默认50,太大会过拟合,太小会欠拟合
- lerning_rate 学习率,一般为
注:可以利用GridSearchCV 方式进行n_estimators和learning_rate的超参选择
案例代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles
from sklearn.model_selection import GridSearchCV
def get_data():
# 生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征,协方差系数为2
X1, y1 = make_gaussian_quantiles(cov=2.0,n_samples=500, n_features=2,n_classes=2, random_state=1)
# 生成2维正态分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3,协方差系数为2
X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5,n_samples=400, n_features=2, n_classes=2, random_state=1)
#讲两组数据合成一组数据
X = np.concatenate((X1, X2))
y = np.concatenate((y1, - y2 + 1))
return X ,y
def print_best_score(gsearch,param_test):
# 输出best score
print("Best score: %0.3f" % gsearch.best_score_)
print("Best parameters set:")
# 输出最佳的分类器到底使用了怎样的参数
best_parameters = gsearch.best_estimator_.get_params()
for param_name in sorted(param_test.keys()):
print("\t%s: %r" % (param_name, best_parameters[param_name]))
def model(X,Y):
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),
algorithm="SAMME",
)
param_test ={
'n_estimators': range(200,300,100),
'learning_rate': [0.5,0.6]
}
gsearch = GridSearchCV( bdt , param_grid = param_test, scoring='roc_auc', cv=5 )
gsearch.fit(X,Y)
print_best_score(gsearch,param_test)
# x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
# y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
# xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
# np.arange(y_min, y_max, 0.02))
# Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])
# Z = Z.reshape(xx.shape)
# cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
# plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)
# plt.show()
if __name__ == "__main__":
x,y = get_data()
model(x,y)
Adaboost是一种结合多个弱分类器形成强分类器的算法,它通过不断调整分类器权重避免过拟合,并能自动进行特征选择。适用于分类和特征选择任务。在sklearn库中, AdaBoostClassifier和AdaBoostRegressor提供了实现,可通过调整n_estimators和learning_rate等参数进行优化。
405

被折叠的 条评论
为什么被折叠?



