[机器学习]adaboost(分类实战)

267 阅读2分钟

0/前言

adaboost, 集成学习算法。
自适应增强型算法。

如果adaboost框架中的弱学习器weak learner 选择的是cart决策树,
那么原则上是既可以解决分类问题,也可以解决回归问题。

在分类问题上,原则上是既可以二分类,也可以多分类。
如果选择的是cart决策树,因为它是一棵二叉树,所以适合用来解决二分类问题。

如果我们选择的是可以进行多分类的弱学习器,那么就可以来解决多分类。 
因为adaboost是一个框架,是一种思想。
具体的实现方式可以有很多种。

二分类

# 集成学习
from sklearn.ensemble import AdaBoostClassifier  
# 生成模拟数据
from sklearn.datasets import make_classification  
from sklearn.model_selection import GridSearchCV, StratifiedKFold  

# 评估指标-准确率
from sklearn.metrics import accuracy_score  
  
# 生成模拟的二分类数据集  
X, y = make_classification(n_samples=1000, 
                           n_features=20, 
                           n_informative=15, 
                           n_redundant=5,
                           random_state=42)  
  
# 设置AdaBoost的参数网格  
param_grid = {  
    'n_estimators': [50, 100, 200],  # 弱学习器的数量  
    'learning_rate': [0.1, 0.5, 1.0],  # 学习率  
    'algorithm': ['SAMME.R', 'SAMME']  # 算法类型  
}  
  
# 创建AdaBoost模型  
# 这里是最原始的adaboost模型,还没有进行训练
ada_boost = AdaBoostClassifier(random_state=42)  
  
# 使用StratifiedKFold进行交叉验证  
cv = StratifiedKFold(n_splits=5, 
                     shuffle=True, 
                     random_state=42)  
  
# 网格搜索  
grid_search = GridSearchCV(estimator=ada_boost, 
                           param_grid=param_grid,
                           cv=cv, 
                           scoring='accuracy', 
                           verbose=1, 
                           n_jobs=-1)  
  
# 训练模型  
grid_search.fit(X, y)  
  
# 输出最佳参数  
print("Best parameters:", grid_search.best_params_)  
  
# 使用最佳参数重新训练模型(可选)  
best_model = grid_search.best_estimator_  
  
# 评估模型(可选,这里使用训练集进行评估仅作示例)  
# 实际应用中,应使用独立的测试集进行评估  
predictions = best_model.predict(X)  
print("Accuracy:", accuracy_score(y, predictions))

# 代码解释

1.  **数据集生成**:使用`make_classification`生成一个具有1000个样本、20个特征和15个信息特征的二分类数据集。
1.  **参数网格**:定义了AdaBoostClassifier的参数网格,包括弱学习器的数量(`n_estimators`)、学习率(`learning_rate`)和算法类型(`algorithm`)。
1.  **交叉验证**:使用`StratifiedKFold`进行分层交叉验证,确保每个折中的数据分布与整个数据集相似。
1.  **网格搜索**:通过`GridSearchCV`进行参数调优,使用交叉验证来评估不同参数组合的性能,并找到最佳参数组合。
1.  **模型训练和评估**:使用最佳参数组合重新训练模型,并在训练集上评估其性能(注意:实际应用中应使用独立的测试集进行评估)。

这个示例展示了如何在Python中使用`scikit-learn`库进行AdaBoost的二分类问题建模、参数调优和评估。