机器学习之-Adaboost元算法-具体怎么实现及应用

1、AdaBoost的优缺点及适用数据类型:

优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整。

缺点:对离群点敏感。

适用数据类型:数值型和标称型数据。

2、什么是bagging:

基于数据随机重抽样的分类器构建方法。

就是从原始的数据集进行抽样,抽样得到的数据集大小与原数据集大小一样,但是抽样得到的数据集里含有重复的样本,通过这种方法创建S个这样的抽样数据集,然后将某个学习算法用作于这S个抽样数据集,就得到了S个分类器。当有新的数据时,就用这S个分类器对这个新数据进行分类,选择分类器投票结果中最多的类别作为最后的分类结果。

3、什么是boosting:

boosting与bagging很类似,即它们所使用的多个分类器的类型都是一致的(多个分类器使用的算法是一样的),区别在于boosting的多个分类器是通过串行训练而获得的,每个新分类器都根据已训练出的分类器的性能来进行训练,是通过集中关注被已有分类器错分的那些数据来获得新的分类器,并且boosting分类的结果是基于所有分类器的加权求和结果的。

4、什么是AdaBosst:

boosting方法拥有多个版本,其中一个最流行的版本就是AdaBoost。

5、AdaBoost的一般流程

1)收集数据:可以使用任意方法。

2)准备数据:依赖于所使用的的若分类器类型,本章使用的是单层决策树,这种分类器可以处理任何数据类型。也可以使用任意分类器作为若分类器,前面提到的多个分类器都可以充当AdaBoost的弱分类器,然而值得一提的是:简单分分类器的效果更好。

3)分析数据:可以使用任意方法。

4)训练算法:AdaBoost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。

5)测试算法:计算分类的错误率。

6)使用算法:同SVM一样,AdaBoost预测两个类别中的一个,如果想把它应用到多个类别的场合,那么就要像多累SVM中的做法一样对AdaBoost进行修改。

6、啥叫弱分类器:

“弱”意味着分类器的性能比随机猜测要略好,但是也不会好太多。

7、AdaBoost的运行过程:

训练数据中的每个样本都赋予其一个权重,这些权重构成了向量D。一开始这些权重都初始化为相等值。首先在训练数据集上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。在分类器的第二次训练当中,将会重新调整每个样本的权重,其中第一次分对的样本的权重将会降低,而第一次分错的样本的权重将会提高。为了从所有弱分类器中得到最终的分类结果,AdaBoost为每个分类器都分配了一个权重值alpha,这些alpha值是基于每个弱分类器的错误率进行计算的。用alpha值对D进行更新。

终止条件为:训练错误率为0或者弱分类器的数目达到用户的指定值。

8、啥叫单层决策树:

也叫决策树桩,是一种简单的决策树,它仅基于单个特征来做决策,由于这棵树只有一次分裂过程,因此它实际上就是一个树桩。

9、使用单层决策树作为弱分类器的AdaBoost算法的伪代码实现:

对每次迭代:

    在数据集上找到最佳的单层决策树

    将最佳单层决策树加入到单层决策树数组

    计算alpha

    计算新的权重向量

    更新累计类别估计值

    如果错误率等于0.0,则退出循环

10、在一个难数据集上的AdaBoost应用:

a)收集数据:提供的文本文件;

b)准备数据:确保类别标签式+1和-1而非1和0;

c)分析数据:手工检查数据;

d)训练算法:在数据上,利用AdaBoostTrainDS()函数训练出一系列的分类器

e)使用算法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下代码实现不使用机器学习包的Adaboost算法的Python实现: ``` import numpy as np # 生成训练数据 def getData(): X = np.array([ [-1, -1], [-1, 1], [1, -1], [1, 1] ]) y = np.array([1, 1, -1, -1]) return X, y # 实现Adaboost算法 def Adaboost(X, y, T): n_samples, n_features = X.shape w = np.ones(n_samples) / n_samples models = [] for t in range(T): # 训练弱分类器 model = {'feature': None, 'threshold': None, 'alpha': None} min_error = float('inf') for f in range(n_features): feature_vals = np.unique(X[:, f]) for threshold in feature_vals: predicted = np.ones(n_samples) predicted[X[:, f] < threshold] = -1 error = np.sum(w[y != predicted]) if error < min_error: min_error = error model['feature'] = f model['threshold'] = threshold model['alpha'] = 0.5 * np.log((1 - min_error) / min_error) # 更新权重和模型 predicted = np.ones(n_samples) predicted[X[:, model['feature']] < model['threshold']] = -1 w *= np.exp(-model['alpha'] * y * predicted) w /= np.sum(w) models.append(model) return models # 对测试数据进行预测 def predict(X_test, models): n_samples = X_test.shape[0] y_pred = np.zeros(n_samples) for model in models: predicted = np.ones(n_samples) predicted[X_test[:, model['feature']] < model['threshold']] = -1 y_pred += model['alpha'] * predicted y_pred = np.sign(y_pred) return y_pred # 测试 X_train, y_train = getData() models = Adaboost(X_train, y_train, T=3) X_test = np.array([[-1, -1], [-1, 1], [1, -1], [1, 1]]) y_pred = predict(X_test, models) print(y_pred) ``` 注意,这只是一个简单的Adaboost实现,仅供参考。在实际应用中,我们通常会使用机器学习包中已经实现好的Adaboost算法,以获得更好的性能和更广泛的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值