[飞桨机器学习]Bagging算法

[飞桨机器学习]Bagging算法

Bagging算法 (英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法。最初由Leo Breiman于1996年提出。Bagging算法可与其他分类、回归算法结合,提高其准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生。

一、简介

Bagging [Breiman, 1996a] 是井行式集成学习方法最著名的代表.从名字即可看出,它直接基于自助采样法(bootstrap sampling).给定包含m 个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机采样操作,我们得到含m 个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现,初始训练集中约有63.2%的样本出现在来样集中.

照这样,我们可采样出T 个含m 个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合.这就是Bagging 的基本流程.在对预测输出进行结合时, Bagging 通常对分类任务使用简单投票法,对回归任务使用简单平均法.若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者.

Bagging是通过结合几个模型降低泛化误差的技术。主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。 这是机器学习中常规策略的一个例子,被称为模型平均(modelaveraging)。采用这种策略的技术被称为集成方法。模型平均(model averaging)奏效的原因是不同的模型通常不会在测试集上产生完全相同的误差。模型平均是一个减少泛化误差的非常强大可靠的方法。

二、基本思想

1.给定一个弱学习算法,和一个训练集;
2.单个弱学习算法准确率不高;
3.将该学习算法使用多次,得出预测函数序列,进行投票;
4.最后结果准确率将得到提高.

三、算法流程

[飞桨机器学习]Bagging算法_第1张图片

四、实例

数据集pima简介

该数据集最初来自国家糖尿病/消化/肾脏疾病研究所。数据集的目标是基于数据集中包含的某些诊断测量来诊断性的预测 患者是否患有糖尿病。
从较大的数据库中选择这些实例有几个约束条件。尤其是,这里的所有患者都是Pima印第安至少21岁的女性。
数据集由多个医学预测变量和一个目标变量组成Outcome。预测变量包括患者的怀孕次数、BMI、胰岛素水平、年龄等

【1】Pregnancies:怀孕次数
【2】Glucose:葡萄糖
【3】BloodPressure:血压 (mm Hg)
【4】SkinThickness:皮层厚度 (mm)
【5】Insulin:胰岛素 2小时血清胰岛素(mu U / ml
【6】BMI:体重指数 (体重/身高)^2
【7】DiabetesPedigreeFunction:糖尿病谱系功能
【8】Age:年龄 (岁)
【9】Outcome:类标变量 (0或1)

import pandas
from sklearn import model_selection
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
/opt/conda/envs/python35-paddle120-env/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216, got 192
  return f(*args, **kwds)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216, got 192
  return f(*args, **kwds)
names=['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv("data/data32176/Pima(去头).csv", names=names)
print(data)
     preg  plas  pres  skin  test  mass   pedi  age  class
0       6   148    72    35     0  33.6  0.627   50      1
1       1    85    66    29     0  26.6  0.351   31      0
2       8   183    64     0     0  23.3  0.672   32      1
3       1    89    66    23    94  28.1  0.167   21      0
4       0   137    40    35   168  43.1  2.288   33      1
5       5   116    74     0     0  25.6  0.201   30      0
6       3    78    50    32    88  31.0  0.248   26      1
7      10   115     0     0     0  35.3  0.134   29      0
8       2   197    70    45   543  30.5  0.158   53      1
9       8   125    96     0     0   0.0  0.232   54      1
10      4   110    92     0     0  37.6  0.191   30      0
11     10   168    74     0     0  38.0  0.537   34      1
12     10   139    80     0     0  27.1  1.441   57      0
13      1   189    60    23   846  30.1  0.398   59      1
14      5   166    72    19   175  25.8  0.587   51      1
15      7   100     0     0     0  30.0  0.484   32      1
16      0   118    84    47   230  45.8  0.551   31      1
17      7   107    74     0     0  29.6  0.254   31      1
18      1   103    30    38    83  43.3  0.183   33      0
19      1   115    70    30    96  34.6  0.529   32      1
20      3   126    88    41   235  39.3  0.704   27      0
21      8    99    84     0     0  35.4  0.388   50      0
22      7   196    90     0     0  39.8  0.451   41      1
23      9   119    80    35     0  29.0  0.263   29      1
24     11   143    94    33   146  36.6  0.254   51      1
25     10   125    70    26   115  31.1  0.205   41      1
26      7   147    76     0     0  39.4  0.257   43      1
27      1    97    66    15   140  23.2  0.487   22      0
28     13   145    82    19   110  22.2  0.245   57      0
29      5   117    92     0     0  34.1  0.337   38      0
..    ...   ...   ...   ...   ...   ...    ...  ...    ...
738     2    99    60    17   160  36.6  0.453   21      0
739     1   102    74     0     0  39.5  0.293   42      1
740    11   120    80    37   150  42.3  0.785   48      1
741     3   102    44    20    94  30.8  0.400   26      0
742     1   109    58    18   116  28.5  0.219   22      0
743     9   140    94     0     0  32.7  0.734   45      1
744    13   153    88    37   140  40.6  1.174   39      0
745    12   100    84    33   105  30.0  0.488   46      0
746     1   147    94    41     0  49.3  0.358   27      1
747     1    81    74    41    57  46.3  1.096   32      0
748     3   187    70    22   200  36.4  0.408   36      1
749     6   162    62     0     0  24.3  0.178   50      1
750     4   136    70     0     0  31.2  1.182   22      1
751     1   121    78    39    74  39.0  0.261   28      0
752     3   108    62    24     0  26.0  0.223   25      0
753     0   181    88    44   510  43.3  0.222   26      1
754     8   154    78    32     0  32.4  0.443   45      1
755     1   128    88    39   110  36.5  1.057   37      1
756     7   137    90    41     0  32.0  0.391   39      0
757     0   123    72     0     0  36.3  0.258   52      1
758     1   106    76     0     0  37.5  0.197   26      0
759     6   190    92     0     0  35.5  0.278   66      1
760     2    88    58    26    16  28.4  0.766   22      0
761     9   170    74    31     0  44.0  0.403   43      1
762     9    89    62     0     0  22.5  0.142   33      0
763    10   101    76    48   180  32.9  0.171   63      0
764     2   122    70    27     0  36.8  0.340   27      0
765     5   121    72    23   112  26.2  0.245   30      0
766     1   126    60     0     0  30.1  0.349   47      1
767     1    93    70    31     0  30.4  0.315   23      0

[768 rows x 9 columns]
darray = data.values
x = darray[:, 0:8]
y = darray[:, -1]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()
num_trees = 100
model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)
result = model_selection.cross_val_score(model, x, y, cv=kfold)
print(result)
print(result.mean())
[0.67532468 0.81818182 0.75324675 0.63636364 0.81818182 0.81818182
 0.85714286 0.85714286 0.69736842 0.77631579]
0.770745044429255

运行代码请点击:https://aistudio.baidu.com/aistudio/projectdetail/615087?shared=1

欢迎三连

你可能感兴趣的:(算法,python,机器学习,人工智能)