西瓜书周志华第十章实验
时间: 2024-12-27 07:12:52 浏览: 1
### 周志华《机器学习》第十章实验:集成方法
#### 集成方法概述
周志华所著的《机器学习》一书中,第十章主要讨论了集成方法。该章节介绍了通过组合多个模型来提高预测性能的方法[^2]。
#### 实验目标
本实验旨在利用Python实现几种常见的集成方法,包括Bagging、Boosting以及Stacking,并应用这些技术解决分类问题。
#### 所需库安装
为了顺利完成此实验,请确保已安装以下Python库:
```bash
pip install numpy pandas scikit-learn matplotlib seaborn
```
#### 数据准备
选取UCI Machine Learning Repository中的数据集作为训练样本,例如著名的鸢尾花(Iris)数据集用于演示目的。可以使用`sklearn.datasets`模块加载内置的数据集。
```python
from sklearn import datasets
import pandas as pd
iris = datasets.load_iris()
X = iris.data # 特征矩阵
y = iris.target # 目标向量
df = pd.DataFrame(data=np.c_[iris['data'], iris['target']], columns=iris['feature_names'] + ['target'])
print(df.head())
```
#### Bagging算法实践
Bagging(Bootstrap Aggregating),即自助聚合法是一种减少方差的有效手段之一。下面展示如何基于决策树构建一个简单的Bagging分类器。
```python
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3)
# 初始化基估计器
base_estimator = DecisionTreeClassifier(max_depth=1)
# 创建并拟合bagging分类器
clf_bagging = BaggingClassifier(base_estimator=base_estimator,
n_estimators=100,
random_state=42).fit(X_train, y_train)
# 输出准确率
acc = accuracy_score(y_true=y_test, y_pred=clf_bagging.predict(X_test))
print(f'Accuracy of bagging classifier on testing set: {acc:.2f}')
```
#### Boosting算法实践
AdaBoost是最早提出的提升方法之一,在每次迭代过程中调整权重使得错误分类实例获得更高关注。这里给出一段简单代码片段说明其工作原理。
```python
from sklearn.ensemble import AdaBoostClassifier
# 构建adaboost分类器
clf_adaboost = AdaBoostClassifier(n_estimators=50,
learning_rate=1.,
algorithm='SAMME.R',
base_estimator=None,
random_state=42)
# 训练模型
clf_adaboost.fit(X_train, y_train)
# 测试模型表现
accuracy_boosted = clf_adaboost.score(X_test, y_test)
print('Adaboost Accuracy:', round(accuracy_boosted * 100, 2), '%')
```
#### Stacking算法实践
堆叠(Stacking)涉及创建元模型(meta-models),它接收初级模型(primary models)输出的概率分布作为输入特征来进行最终预测。此处仅提供概念性指导而非具体编码细节;读者可根据实际需求自行探索更复杂的架构设计思路。
---
阅读全文