adaboost 代码
时间: 2023-07-23 12:08:48 浏览: 99
下面是一个简单的 Adaboost 代码实现,用于二分类问题:
```python
import numpy as np
class Adaboost:
def __init__(self, n_estimators=50):
self.n_estimators = n_estimators
self.estimators = []
self.alphas = []
def fit(self, X, y):
n_samples, n_features = X.shape
w = np.full(n_samples, (1 / n_samples))
for _ in range(self.n_estimators):
tree = DecisionTreeClassifier(max_depth=1)
idx = np.random.choice(n_samples, size=n_samples, replace=True, p=w)
X_resampled, y_resampled = X[idx], y[idx]
tree.fit(X_resampled, y_resampled)
y_pred = tree.predict(X)
error = w.dot(y_pred != y)
alpha = 0.5 * (np.log(1 - error) - np.log(error))
w = w * np.exp(-alpha * y * y_pred)
w = w / np.sum(w)
self.estimators.append(tree)
self.alphas.append(alpha)
def predict(self, X):
preds = np.zeros(X.shape[0])
for alpha, tree in zip(self.alphas, self.estimators):
preds += alpha * tree.predict(X)
return np.sign(preds)
```
其中,`n_estimators` 表示 Adaboost 中基分类器的数量,我们在这里使用决策树桩作为基分类器,即 `DecisionTreeClassifier(max_depth=1)`。在 `fit` 方法中,我们每轮先从样本中按照权重进行有放回抽样,然后使用决策树桩进行训练,并计算预测错误率,然后计算当前分类器的权重 `alpha`,最后更新样本权重。在 `predict` 方法中,我们将所有基分类器的预测结果加权求和,并使用符号函数将结果转换为二分类结果。
阅读全文