机器学习算法——使用Adaboost进行分类性能提升

本文详细介绍了AdaBoost的工作机制,属Boosting策略的集成算法。通过对比和实验展示了如何选择元分类器(如决策树、SVM),确定元分类器数量和学习率对性能的影响。并使用鸢尾花数据集验证了AdaBoost相较于单一分类器的优越性。
摘要由CSDN通过智能技术生成

AdaBoost原理

Ensemble Learning(集成学习)

集成学习是指集合多个弱分类器以形成一个集成的强分类器。集成学习的框架可以通过下图来反映
在这里插入图片描述
也就是说,集成学习是一种集合了多个机器学习模型的“意见”,已完成最后决策的机制。
常见的集成学习策略有三种:

  • Bagging
  • Boosting
  • Stacking

Bagging和Boosting的不同可以通过下面这张图来理解
在这里插入图片描述
Bagging对数据集进行随机采样,构成 N N N 组,然后每组使用模型单独训练,最后进行表决,是一种类似于串联的结构。而Boosting则是不改变训练集的情况下,不断调整样本权重来调优弱分类器性能,实际上是一种串行的思路。
而我们接下来要探讨的AdaBoost是属于Boosting策略型集成算法的一种。

AdaBoost工作机制

在这里插入图片描述

分类器实现

准备工作

以下是我们需要用的工具

import numpy as np
import pandas as pd
from random import seed
from random import randrange
from math import sqrt
from math import exp
from math import pi
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score, RepeatedStratifiedKFold
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
import operator
import plotly.express as px
from plotly.offline import init_notebook_mode
init_notebook_mode(connected=True)
import plotly.graph_objects as go
from plotly.subplots import make_subplots

基本接口调用

从最简单的开始,我们调用sklearn的AdaBoost分类器接口,完成最基本的实现。

# 随机创建一个预测问题
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=6)
# 调用AdaBoost分类策略
model = AdaBoostClassifier()
# 交叉检验
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# 计算准确率
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('准确率: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

该问题的输出结果类似以下:

准确率: 0.806 (0.041)

更换元分类器

最常见的AdaBoost元分类器是决策树,这也是sklearn中默认的元分类器,如果我们不传入任何参数进入AdaBoostClassifier,那么它就会默认使用一层的决策树来作为它的元分类器。但是实际上,AdaBoost接受所有能够样本赋权的分类器作为其的元分类器,而我们最常见的赋权分类器有两种,即决策树和支持向量机(SVM)。在这个部分我们尝试在一个分类问题中找到一个较优的元分类器。
首先,我们先尝试以不同层数的决策树作为元分类器来看看AdaBoost的效果

def get_dataset(iris=True):
    """
    获取研究的数据集
    @是否用鸢尾花数据集进行测试
    """
    if iris == True:
        data = load_iris()
        X = data.data
        y = data.target
    else:
        X, y = make_classification(n_samples=1000, n_features
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值