用iris数据集实现adaboost算法的python代码
时间: 2023-11-25 16:07:23 浏览: 250
以下是使用iris数据集实现adaboost算法的Python代码:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import numpy as np
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 初始化权重
w = np.ones(len(X_train)) / len(X_train)
# 构建弱分类器
clf = DecisionTreeClassifier(max_depth=1)
# 训练adaboost模型
n_estimators = 10 # 弱分类器的数量
clf_list = []
alpha_list = []
for i in range(n_estimators):
clf.fit(X_train, y_train, sample_weight=w)
y_pred = clf.predict(X_train)
error_rate = 1 - accuracy_score(y_train, y_pred, sample_weight=w)
alpha = 0.5 * np.log((1 - error_rate) / error_rate)
clf_list.append(clf)
alpha_list.append(alpha)
w *= np.exp(-alpha * y_train * y_pred)
w /= np.sum(w)
# 预测测试集
y_pred = np.zeros(len(X_test))
for i in range(n_estimators):
y_pred += alpha_list[i] * clf_list[i].predict(X_test)
y_pred = np.sign(y_pred)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
在这个代码中,我们使用了sklearn库中的`load_iris`函数加载了iris数据集。然后,我们使用`train_test_split`函数将数据集划分为训练集和测试集。接下来,我们初始化权重,构建弱分类器,并使用`DecisionTreeClassifier`函数创建一个最大深度为1的决策树。在训练adaboost模型的过程中,我们迭代地训练弱分类器,并根据弱分类器的误差率计算alpha值。然后,我们更新权重,以便下一个弱分类器更好地预测被错误分类的样本。最后,我们将所有弱分类器的预测结果组合起来,并使用`accuracy_score`函数计算准确率。
阅读全文