机器学习之Adaboost (自适应增强)算法

注:本篇博文是根据其他优秀博文编写的,我只是对其改变了知识的排序,另外代码是《机器学习实战》中的。转载请标明出处及参考资料。

1 Adaboost 算法实现过程

1.1 什么是 Adaboost 算法

Adaboost是英文"Adaptive Boosting"(自适应增强)的缩写,它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。通俗地讲就是,将若干带有权值的弱分类器累加得到强分类器的过程。

1.2 Adaboost 算法的步骤

Adaboost算法可以简述为三个步骤:
(1)首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值:w1=1/N。
(2)然后,训练弱分类器hi。具体训练过程中是:如果某个训练样本点,被弱分类器hi准确地分类,那么在构造下一个训练集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
(3)最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换而言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

1.3 Adaboost 算法流程

给定一个训练数据集T={(x1,y1), (x2,y2)…(xN,yN)},其中实例 x 属于 Rn,y属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。

Adaboost 算法流程如下:

步骤1. 首先,初始化训练数据的权值分布。每一个训练样本最开始时都被赋予相同的权值:1/N。

 

步骤2. 进行多轮迭代,用m = 1,2, ..., M表示迭代的第多少轮。

  a. 使用具有权值分布Dm的训练数据集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器):

  b. 计算Gm(x)在训练数据集上的分类误差率:

由上述式子可知,Gm(x)在训练数据集上的误差率em就是被Gm(x)误分类样本的权值之和。
  c. 计算Gm(x)的系数,αm表示Gm(x)在最终分类器中的重要程度(目的:得到基本分类器在最终分类器中所占的权重):

由上述式子可知,em <= 1/2 时,αm >= 0,且α随着e的减小而增大,意味着分类误差率越小的基本分类器在最终分类器中的作用越大。
 d. 更新训练数据集的权值分布(目的:得到样本的新的权值分布),用于下一轮迭代

使得被基本分类器Gm(x)误分类样本的权值增大,而被正确分类样本的权值减小。就这样,通过这样的方式,AdaBoost方法能“重点关注”或“聚焦于”那些较难分的样本上。
其中,Zm是规范化因子,使得Dm+1成为一个概率分布:

步骤3. 组合各个弱分类器

 

从而得到最终分类器,如下:

 

其中,sign()是符号函数,取值为 {-1,0,1}。

 2 Adaboost 算法的原理说明

2.1 加法模型和前向分布算法

如下图所示的便是一个加法模型


其中,称为 b(x; γm) 基函数,γm 称为基函数的参数,βm 称为基函数的系数。
在给定训练数据及损失函数 L(y; f(x) ) 的条件下,学习加法模型 f (x) 成为经验风险极小化问题,即损失函数极小化问题:

随后,该问题可以作如此简化:从前向后,每一步只学习一个基函数及其系数,逐步逼近上式,即:每步只优化如下损失函数:


这个优化方法便就是所谓的前向分步算法。下面,咱们来具体看下前向分步算法的算法流程:

输入:训练数据集 
损失函数:
基函数集:
输出:加法模型 
算法步骤:

  • 1. 初始化
  • 2. 对于m=1,2,..M
    • a)极小化损失函数

    得到参数

    • b)更新

  • 3. 最终得到加法模型
  •     就这样,前向分步算法将同时求解从m=1到M的所有参数()的优化问题简化为逐次求解各个(1≤m≤M)的优化问题。

 2.2 前向分布算法与 Adaboost 算法的关系

在上文第2.1节最后,我们说Adaboost 还有另外一种理解,即可以认为其模型是加法模型、损失函数为指数函数、学习算法为前向分步算法的二类分类学习方法。其实,Adaboost算法就是前向分步算法的一个特例,Adaboost 中,各个基本分类器就相当于加法模型中的基函数,且其损失函数为指数函数。
换句话说,当前向分步算法中的基函数为Adaboost中的基本分类器时,加法模型等价于Adaboost的最终分类器

你甚至可以说,这个最终分类器其实就是一个加法模型。只是这个加法模型由基本分类器及其系数组成,m = 1, 2, ..., M。前向分步算法逐一学习基函数的过程,与Adaboost算法逐一学习各个基本分类器的过程一致。

下面,咱们便来证明:当前向分步算法的损失函数是指数损失函数

    时,其学习的具体操作等价于Adaboost算法的学习过程。

 假设经过m-1轮迭代,前向分步算法已经得到

而后在第m轮迭代得到。其中,为:

未知。所以,现在咱们的目标便是根据前向分步算法训练,使得最终在训练数据集T上的指数损失最小,即

  针对这种需要求解多个参数的情况,可以先固定其它参数,求解其中一两个参数,然后逐一求解剩下的参数。例如我们可以固定,只针对做优化。

换言之,在面对 这2m个参数都未知的情况下,可以:

  1. 先假定已知,求解出
  2. 然后再逐一求解其它未知参数。

且考虑到上式中的既不依赖也不依赖G,所以是个与最小化无关的固定值,记为,即,则上式可以表示为(后面要多次用到这个式子,简记为):

值得一提的是,虽然与最小化无关,但依赖于,随着每一轮迭代而发生变化。

    接下来,便是要证使得上式达到最小的就是Adaboost算法所求解得到的

    为求解上式,咱们先求再求

 首先求。对于任意,使上式最小的G(x)由下式得到:

别忘了,

跟1.3节所述的误差率的计算公式对比下:

可知,上面得到的便是Adaboost算法的基本分类器,因为它是在第m轮加权训练数据时,使分类误差率最小的基本分类器。换言之,这个便是Adaboost算法所要求的,别忘了,在Adaboost算法的每一轮迭代中,都是选取让误差率最低的阈值来设计基本分类器。

然后求。还是回到之前的这个式子上:

 这个式子的后半部分可以进一步化简,得:

 接着将上面求得的

代入上式中,且对求导,令其求导结果为0,即得到使得一式最小的,即为:

这里的跟上文1.3节中的计算公式完全一致。

    此外,毫无疑问,上式中的便是误差率:

 即就是被Gm(x)误分类样本的权值之和。

就这样,结合模型,跟,可以推出

从而有:

与上文1.3节介绍的权值更新公式

 相比,只相差一个规范化因子,即后者多了一个 Zm

所以,整个过程下来,我们可以看到,前向分步算法逐一学习基函数的过程,确实是与Adaboost算法逐一学习各个基本分类器的过程一致,两者完全等价。

2.3 Adaboost 算法的误差界

Adaboost在学习的过程中不断减少训练误差e,直到各个弱分类器组合成最终分类器,那这个最终分类器的误差界到底是多少呢?事实上,Adaboost 最终分类器的训练误差的上界为:

下面,咱们来通过推导来证明下上述式子。

当G(xi)≠yi时,yi*f(xi)<0,因而exp(-yi*f(xi))≥1,因此前半部分得证。

关于后半部分,别忘了:

整个的推导过程如下:

这个结果说明,可以在每一轮选取适当的Gm使得Zm最小,从而使训练误差下降最快。接着,咱们来继续求上述结果的上界。

对于二分类而言,有如下结果:

  其中,

继续证明下这个结论。

    由之前Zm的定义式跟本节最开始得到的结论可知:

而这个不等式可先由e^x和1-x的开根号,在点x的泰勒展开式推出。值得一提的是,如果取γ1, γ2… 的最小值,记做γ(显然,γ≥γi>0,i=1,2,...m),则对于所有m,有:

这个结论表明,AdaBoost的训练误差是以指数速率下降的。另外,AdaBoost算法不需要事先知道下界γ,AdaBoost具有自适应性,它能适应弱分类器各自的训练误差率 。

3 Adaboost 算法用 Python 实现

3.1 数据集

这里的数据是《机器学习实战》的马疝病数据,包括:训练集的名称 'horseColicTraining2.txt',测试集的名称 'horseColicTest2.txt'。具体数据如下:

  1 2.000000    1.000000    38.500000    66.000000    28.000000    3.000000    3.000000    0.000000    2.000000    5.000000    4.000000    4.000000    0.000000    0.000000    0.000000    3.000000    5.000000    45.000000    8.400000    0.000000    0.000000    -1.000000
  2 1.000000    1.000000    39.200000    88.000000    20.000000    0.000000    0.000000    4.000000    1.000000    3.000000    4.000000    2.000000    0.000000    0.000000    0.000000    4.000000    2.000000    50.000000    85.000000    2.000000    2.000000    -1.000000
  3 2.000000    1.000000    38.300000    40.000000    24.000000    1.000000    1.000000    3.000000    1.000000    3.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    1.000000    33.000000    6.700000    0.000000    0.000000    1.000000
  4 1.000000    9.000000    39.100000    164.000000    84.000000    4.000000    1.000000    6.000000    2.000000    2.000000    4.000000    4.000000    1.000000    2.000000    5.000000    3.000000    0.000000    48.000000    7.200000    3.000000    5.300000    -1.000000
  5 2.000000    1.000000    37.300000    104.000000    35.000000    0.000000    0.000000    6.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    74.000000    7.400000    0.000000    0.000000    -1.000000
  6 2.000000    1.000000    0.000000    0.000000    0.000000    2.000000    1.000000    3.000000    1.000000    2.000000    3.000000    2.000000    2.000000    1.000000    0.000000    3.000000    3.000000    0.000000    0.000000    0.000000    0.000000    1.000000
  7 1.000000    1.000000    37.900000    48.000000    16.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    1.000000    1.000000    0.000000    3.000000    5.000000    37.000000    7.000000    0.000000    0.000000    1.000000
  8 1.000000    1.000000    0.000000    60.000000    0.000000    3.000000    0.000000    0.000000    1.000000    0.000000    4.000000    2.000000    2.000000    1.000000    0.000000    3.000000    4.000000    44.000000    8.300000    0.000000    0.000000    -1.000000
  9 2.000000    1.000000    0.000000    80.000000    36.000000    3.000000    4.000000    3.000000    1.000000    4.000000    4.000000    4.000000    2.000000    1.000000    0.000000    3.000000    5.000000    38.000000    6.200000    0.000000    0.000000    -1.000000
 10 2.000000    9.000000    38.300000    90.000000    0.000000    1.000000    0.000000    1.000000    1.000000    5.000000    3.000000    1.000000    2.000000    1.000000    0.000000    3.000000    0.000000    40.000000    6.200000    1.000000    2.200000    1.000000
 11 1.000000    1.000000    38.100000    66.000000    12.000000    3.000000    3.000000    5.000000    1.000000    3.000000    3.000000    1.000000    2.000000    1.000000    3.000000    2.000000    5.000000    44.000000    6.000000    2.000000    3.600000    1.000000
 12 2.000000    1.000000    39.100000    72.000000    52.000000    2.000000    0.000000    2.000000    1.000000    2.000000    1.000000    2.000000    1.000000    1.000000    0.000000    4.000000    4.000000    50.000000    7.800000    0.000000    0.000000    1.000000
 13 1.000000    1.000000    37.200000    42.000000    12.000000    2.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    3.000000    1.000000    0.000000    4.000000    5.000000    0.000000    7.000000    0.000000    0.000000    1.000000
 14 2.000000    9.000000    38.000000    92.000000    28.000000    1.000000    1.000000    2.000000    1.000000    1.000000    3.000000    2.000000    3.000000    0.000000    7.200000    1.000000    1.000000    37.000000    6.100000    1.000000    0.000000    -1.000000
 15 1.000000    1.000000    38.200000    76.000000    28.000000    3.000000    1.000000    1.000000    1.000000    3.000000    4.000000    1.000000    2.000000    2.000000    0.000000    4.000000    4.000000    46.000000    81.000000    1.000000    2.000000    1.000000
 16 1.000000    1.000000    37.600000    96.000000    48.000000    3.000000    1.000000    4.000000    1.000000    5.000000    3.000000    3.000000    2.000000    3.000000    4.500000    4.000000    0.000000    45.000000    6.800000    0.000000    0.000000    -1.000000
 17 1.000000    9.000000    0.000000    128.000000    36.000000    3.000000    3.000000    4.000000    2.000000    4.000000    4.000000    3.000000    3.000000    0.000000    0.000000    4.000000    5.000000    53.000000    7.800000    3.000000    4.700000    -1.000000
 18 2.000000    1.000000    37.500000    48.000000    24.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
 19 1.000000    1.000000    37.600000    64.000000    21.000000    1.000000    1.000000    2.000000    1.000000    2.000000    3.000000    1.000000    1.000000    1.000000    0.000000    2.000000    5.000000    40.000000    7.000000    1.000000    0.000000    1.000000
 20 2.000000    1.000000    39.400000    110.000000    35.000000    4.000000    3.000000    6.000000    0.000000    0.000000    3.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    55.000000    8.700000    0.000000    0.000000    1.000000
 21 1.000000    1.000000    39.900000    72.000000    60.000000    1.000000    1.000000    5.000000    2.000000    5.000000    4.000000    4.000000    3.000000    1.000000    0.000000    4.000000    4.000000    46.000000    6.100000    2.000000    0.000000    1.000000
 22 2.000000    1.000000    38.400000    48.000000    16.000000    1.000000    0.000000    1.000000    1.000000    1.000000    3.000000    1.000000    2.000000    3.000000    5.500000    4.000000    3.000000    49.000000    6.800000    0.000000    0.000000    1.000000
 23 1.000000    1.000000    38.600000    42.000000    34.000000    2.000000    1.000000    4.000000    0.000000    2.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    0.000000    48.000000    7.200000    0.000000    0.000000    1.000000
 24 1.000000    9.000000    38.300000    130.000000    60.000000    0.000000    3.000000    0.000000    1.000000    2.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    50.000000    70.000000    0.000000    0.000000    1.000000
 25 1.000000    1.000000    38.100000    60.000000    12.000000    3.000000    3.000000    3.000000    1.000000    0.000000    4.000000    3.000000    3.000000    2.000000    2.000000    0.000000    0.000000    51.000000    65.000000    0.000000    0.000000    1.000000
 26 2.000000    1.000000    37.800000    60.000000    42.000000    0.000000    0.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
 27 1.000000    1.000000    38.300000    72.000000    30.000000    4.000000    3.000000    3.000000    2.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    43.000000    7.000000    2.000000    3.900000    1.000000
 28 1.000000    1.000000    37.800000    48.000000    12.000000    3.000000    1.000000    1.000000    1.000000    0.000000    3.000000    2.000000    1.000000    1.000000    0.000000    1.000000    3.000000    37.000000    5.500000    2.000000    1.300000    1.000000
 29 1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
 30 2.000000    1.000000    37.700000    48.000000    0.000000    2.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    45.000000    76.000000    0.000000    0.000000    1.000000
 31 2.000000    1.000000    37.700000    96.000000    30.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    3.000000    2.000000    4.000000    4.000000    5.000000    66.000000    7.500000    0.000000    0.000000    -1.000000
 32 2.000000    1.000000    37.200000    108.000000    12.000000    3.000000    3.000000    4.000000    2.000000    2.000000    4.000000    2.000000    0.000000    3.000000    6.000000    3.000000    3.000000    52.000000    8.200000    3.000000    7.400000    -1.000000
 33 1.000000    1.000000    37.200000    60.000000    0.000000    2.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    4.000000    5.000000    43.000000    6.600000    0.000000    0.000000    1.000000
 34 1.000000    1.000000    38.200000    64.000000    28.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    0.000000    0.000000    0.000000    0.000000    4.000000    4.000000    49.000000    8.600000    2.000000    6.600000    1.000000
 35 1.000000    1.000000    0.000000    100.000000    30.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    3.000000    3.000000    0.000000    4.000000    4.000000    52.000000    6.600000    0.000000    0.000000    1.000000
 36 2.000000    1.000000    0.000000    104.000000    24.000000    4.000000    3.000000    3.000000    2.000000    4.000000    4.000000    3.000000    0.000000    3.000000    0.000000    0.000000    2.000000    73.000000    8.400000    0.000000    0.000000    -1.000000
 37 2.000000    1.000000    38.300000    112.000000    16.000000    0.000000    3.000000    5.000000    2.000000    0.000000    0.000000    1.000000    1.000000    2.000000    0.000000    0.000000    5.000000    51.000000    6.000000    2.000000    1.000000    -1.000000
 38 1.000000    1.000000    37.800000    72.000000    0.000000    0.000000    3.000000    0.000000    1.000000    5.000000    3.000000    1.000000    0.000000    1.000000    0.000000    1.000000    1.000000    56.000000    80.000000    1.000000    2.000000    1.000000
 39 2.000000    1.000000    38.600000    52.000000    0.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    1.000000    1.000000    0.000000    1.000000    3.000000    32.000000    6.600000    1.000000    5.000000    1.000000
 40 1.000000    9.000000    39.200000    146.000000    96.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
 41 1.000000    1.000000    0.000000    88.000000    0.000000    3.000000    3.000000    6.000000    2.000000    5.000000    3.000000    3.000000    1.000000    3.000000    0.000000    4.000000    5.000000    63.000000    6.500000    3.000000    0.000000    -1.000000
 42 2.000000    9.000000    39.000000    150.000000    72.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    47.000000    8.500000    0.000000    0.100000    1.000000
 43 2.000000    1.000000    38.000000    60.000000    12.000000    3.000000    1.000000    3.000000    1.000000    3.000000    3.000000    1.000000    1.000000    1.000000    0.000000    2.000000    2.000000    47.000000    7.000000    0.000000    0.000000    1.000000
 44 1.000000    1.000000    0.000000    120.000000    0.000000    3.000000    4.000000    4.000000    1.000000    4.000000    4.000000    4.000000    1.000000    1.000000    0.000000    0.000000    5.000000    52.000000    67.000000    2.000000    2.000000    -1.000000
 45 1.000000    1.000000    35.400000    140.000000    24.000000    3.000000    3.000000    4.000000    2.000000    4.000000    4.000000    0.000000    2.000000    1.000000    0.000000    0.000000    5.000000    57.000000    69.000000    3.000000    2.000000    -1.000000
 46 2.000000    1.000000    0.000000    120.000000    0.000000    4.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    1.000000    1.000000    0.000000    4.000000    5.000000    60.000000    6.500000    3.000000    0.000000    -1.000000
 47 1.000000    1.000000    37.900000    60.000000    15.000000    3.000000    0.000000    4.000000    2.000000    5.000000    4.000000    4.000000    2.000000    2.000000    0.000000    4.000000    5.000000    65.000000    7.500000    0.000000    0.000000    1.000000
 48 2.000000    1.000000    37.500000    48.000000    16.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    1.000000    0.000000    37.000000    6.500000    0.000000    0.000000    1.000000
 49 1.000000    1.000000    38.900000    80.000000    44.000000    3.000000    3.000000    3.000000    2.000000    2.000000    3.000000    3.000000    2.000000    2.000000    7.000000    3.000000    1.000000    54.000000    6.500000    3.000000    0.000000    -1.000000
 50 2.000000    1.000000    37.200000    84.000000    48.000000    3.000000    3.000000    5.000000    2.000000    4.000000    1.000000    2.000000    1.000000    2.000000    0.000000    2.000000    1.000000    73.000000    5.500000    2.000000    4.100000    -1.000000
 51 2.000000    1.000000    38.600000    46.000000    0.000000    1.000000    1.000000    2.000000    1.000000    1.000000    3.000000    2.000000    1.000000    1.000000    0.000000    0.000000    2.000000    49.000000    9.100000    1.000000    1.600000    1.000000
 52 1.000000    1.000000    37.400000    84.000000    36.000000    1.000000    0.000000    3.000000    2.000000    3.000000    3.000000    2.000000    0.000000    0.000000    0.000000    4.000000    5.000000    0.000000    0.000000    3.000000    0.000000    -1.000000
 53 2.000000    1.000000    0.000000    0.000000    0.000000    1.000000    1.000000    3.000000    1.000000    1.000000    3.000000    1.000000    0.000000    0.000000    0.000000    2.000000    2.000000    43.000000    7.700000    0.000000    0.000000    1.000000
 54 2.000000    1.000000    38.600000    40.000000    20.000000    0.000000    0.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    41.000000    6.400000    0.000000    0.000000    1.000000
 55 2.000000    1.000000    40.300000    114.000000    36.000000    3.000000    3.000000    1.000000    2.000000    2.000000    3.000000    3.000000    2.000000    1.000000    7.000000    1.000000    5.000000    57.000000    8.100000    3.000000    4.500000    -1.000000
 56 1.000000    9.000000    38.600000    160.000000    20.000000    3.000000    0.000000    5.000000    1.000000    3.000000    3.000000    4.000000    3.000000    0.000000    0.000000    4.000000    0.000000    38.000000    0.000000    2.000000    0.000000    -1.000000
 57 1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    24.000000    6.700000    0.000000    0.000000    1.000000
 58 1.000000    1.000000    0.000000    64.000000    36.000000    2.000000    0.000000    2.000000    1.000000    5.000000    3.000000    3.000000    2.000000    2.000000    0.000000    0.000000    0.000000    42.000000    7.700000    0.000000    0.000000    -1.000000
 59 1.000000    1.000000    0.000000    0.000000    20.000000    4.000000    3.000000    3.000000    0.000000    5.000000    4.000000    3.000000    2.000000    0.000000    0.000000    4.000000    4.000000    53.000000    5.900000    3.000000    0.000000    -1.000000
 60 2.000000    1.000000    0.000000    96.000000    0.000000    3.000000    3.000000    3.000000    2.000000    5.000000    4.000000    4.000000    1.000000    2.000000    0.000000    4.000000    5.000000    60.000000    0.000000    0.000000    0.000000    -1.000000
 61 2.000000    1.000000    37.800000    48.000000    32.000000    1.000000    1.000000    3.000000    1.000000    2.000000    1.000000    0.000000    1.000000    1.000000    0.000000    4.000000    5.000000    37.000000    6.700000    0.000000    0.000000    1.000000
 62 2.000000    1.000000    38.500000    60.000000    0.000000    2.000000    2.000000    1.000000    1.000000    1.000000    2.000000    2.000000    2.000000    1.000000    0.000000    1.000000    1.000000    44.000000    7.700000    0.000000    0.000000    1.000000
 63 1.000000    1.000000    37.800000    88.000000    22.000000    2.000000    1.000000    2.000000    1.000000    3.000000    0.000000    0.000000    2.000000    0.000000    0.000000    4.000000    0.000000    64.000000    8.000000    1.000000    6.000000    -1.000000
 64 2.000000    1.000000    38.200000    130.000000    16.000000    4.000000    3.000000    4.000000    2.000000    2.000000    4.000000    4.000000    1.000000    1.000000    0.000000    0.000000    0.000000    65.000000    82.000000    2.000000    2.000000    -1.000000
 65 1.000000    1.000000    39.000000    64.000000    36.000000    3.000000    1.000000    4.000000    2.000000    3.000000    3.000000    2.000000    1.000000    2.000000    7.000000    4.000000    5.000000    44.000000    7.500000    3.000000    5.000000    1.000000
 66 1.000000    1.000000    0.000000    60.000000    36.000000    3.000000    1.000000    3.000000    1.000000    3.000000    3.000000    2.000000    1.000000    1.000000    0.000000    3.000000    4.000000    26.000000    72.000000    2.000000    1.000000    1.000000
 67 2.000000    1.000000    37.900000    72.000000    0.000000    1.000000    1.000000    5.000000    2.000000    3.000000    3.000000    1.000000    1.000000    3.000000    2.000000    3.000000    4.000000    58.000000    74.000000    1.000000    2.000000    1.000000
 68 2.000000    1.000000    38.400000    54.000000    24.000000    1.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    2.000000    1.000000    0.000000    3.000000    2.000000    49.000000    7.200000    1.000000    0.000000    1.000000
 69 2.000000    1.000000    0.000000    52.000000    16.000000    1.000000    0.000000    3.000000    1.000000    0.000000    0.000000    0.000000    2.000000    3.000000    5.500000    0.000000    0.000000    55.000000    7.200000    0.000000    0.000000    1.000000
 70 2.000000    1.000000    38.000000    48.000000    12.000000    1.000000    1.000000    1.000000    1.000000    1.000000    3.000000    0.000000    1.000000    1.000000    0.000000    3.000000    2.000000    42.000000    6.300000    2.000000    4.100000    1.000000
 71 2.000000    1.000000    37.000000    60.000000    20.000000    3.000000    0.000000    0.000000    1.000000    3.000000    0.000000    3.000000    2.000000    2.000000    4.500000    4.000000    4.000000    43.000000    7.600000    0.000000    0.000000    -1.000000
 72 1.000000    1.000000    37.800000    48.000000    28.000000    1.000000    1.000000    1.000000    1.000000    1.000000    2.000000    1.000000    2.000000    0.000000    0.000000    1.000000    1.000000    46.000000    5.900000    2.000000    7.000000    1.000000
 73 1.000000    1.000000    37.700000    56.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
 74 1.000000    1.000000    38.100000    52.000000    24.000000    1.000000    1.000000    5.000000    1.000000    4.000000    3.000000    1.000000    2.000000    3.000000    7.000000    1.000000    0.000000    54.000000    7.500000    2.000000    2.600000    -1.000000
 75 1.000000    9.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    37.000000    4.900000    0.000000    0.000000    -1.000000
 76 1.000000    9.000000    39.700000    100.000000    0.000000    3.000000    3.000000    5.000000    2.000000    2.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    48.000000    57.000000    2.000000    2.000000    -1.000000
 77 1.000000    1.000000    37.600000    38.000000    20.000000    3.000000    3.000000    1.000000    1.000000    3.000000    3.000000    2.000000    0.000000    0.000000    0.000000    3.000000    0.000000    37.000000    68.000000    0.000000    0.000000    1.000000
 78 2.000000    1.000000    38.700000    52.000000    20.000000    2.000000    0.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    1.000000    1.000000    33.000000    77.000000    0.000000    0.000000    1.000000
 79 1.000000    1.000000    0.000000    0.000000    0.000000    3.000000    3.000000    3.000000    3.000000    5.000000    3.000000    3.000000    3.000000    2.000000    0.000000    4.000000    5.000000    46.000000    5.900000    0.000000    0.000000    -1.000000
 80 1.000000    1.000000    37.500000    96.000000    18.000000    1.000000    3.000000    6.000000    2.000000    3.000000    4.000000    2.000000    2.000000    3.000000    5.000000    0.000000    4.000000    69.000000    8.900000    3.000000    0.000000    1.000000
 81 1.000000    1.000000    36.400000    98.000000    35.000000    3.000000    3.000000    4.000000    1.000000    4.000000    3.000000    2.000000    0.000000    0.000000    0.000000    4.000000    4.000000    47.000000    6.400000    3.000000    3.600000    -1.000000
 82 1.000000    1.000000    37.300000    40.000000    0.000000    0.000000    3.000000    1.000000    1.000000    2.000000    3.000000    2.000000    3.000000    1.000000    0.000000    3.000000    5.000000    36.000000    0.000000    3.000000    2.000000    1.000000
 83 1.000000    9.000000    38.100000    100.000000    80.000000    3.000000    1.000000    2.000000    1.000000    3.000000    4.000000    1.000000    0.000000    0.000000    0.000000    1.000000    0.000000    36.000000    5.700000    0.000000    0.000000    1.000000
 84 1.000000    1.000000    38.000000    0.000000    24.000000    3.000000    3.000000    6.000000    2.000000    5.000000    0.000000    4.000000    1.000000    1.000000    0.000000    0.000000    0.000000    68.000000    7.800000    0.000000    0.000000    -1.000000
 85 1.000000    1.000000    37.800000    60.000000    80.000000    1.000000    3.000000    2.000000    2.000000    2.000000    3.000000    3.000000    0.000000    2.000000    5.500000    4.000000    0.000000    40.000000    4.500000    2.000000    0.000000    1.000000
 86 2.000000    1.000000    38.000000    54.000000    30.000000    2.000000    3.000000    3.000000    3.000000    3.000000    1.000000    2.000000    2.000000    2.000000    0.000000    0.000000    4.000000    45.000000    6.200000    0.000000    0.000000    1.000000
 87 1.000000    1.000000    0.000000    88.000000    40.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    3.000000    3.000000    0.000000    0.000000    4.000000    5.000000    50.000000    7.700000    3.000000    1.400000    -1.000000
 88 2.000000    1.000000    0.000000    40.000000    16.000000    0.000000    0.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    50.000000    7.000000    2.000000    3.900000    -1.000000
 89 2.000000    1.000000    39.000000    64.000000    40.000000    1.000000    1.000000    5.000000    1.000000    3.000000    3.000000    2.000000    2.000000    1.000000    0.000000    3.000000    3.000000    42.000000    7.500000    2.000000    2.300000    1.000000
 90 2.000000    1.000000    38.300000    42.000000    10.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    38.000000    61.000000    0.000000    0.000000    1.000000
 91 2.000000    1.000000    38.000000    52.000000    16.000000    0.000000    0.000000    0.000000    0.000000    2.000000    0.000000    0.000000    0.000000    3.000000    1.000000    1.000000    1.000000    53.000000    86.000000    0.000000    0.000000    1.000000
 92 2.000000    1.000000    40.300000    114.000000    36.000000    3.000000    3.000000    1.000000    2.000000    2.000000    3.000000    3.000000    2.000000    1.000000    7.000000    1.000000    5.000000    57.000000    8.100000    3.000000    4.500000    -1.000000
 93 2.000000    1.000000    38.800000    50.000000    20.000000    3.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    2.000000    1.000000    0.000000    3.000000    1.000000    42.000000    6.200000    0.000000    0.000000    1.000000
 94 2.000000    1.000000    0.000000    0.000000    0.000000    3.000000    3.000000    1.000000    1.000000    5.000000    3.000000    3.000000    1.000000    1.000000    0.000000    4.000000    5.000000    38.000000    6.500000    0.000000    0.000000    -1.000000
 95 2.000000    1.000000    37.500000    48.000000    30.000000    4.000000    1.000000    3.000000    1.000000    0.000000    2.000000    1.000000    1.000000    1.000000    0.000000    1.000000    1.000000    48.000000    8.600000    0.000000    0.000000    1.000000
 96 1.000000    1.000000    37.300000    48.000000    20.000000    0.000000    1.000000    2.000000    1.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    41.000000    69.000000    0.000000    0.000000    1.000000
 97 2.000000    1.000000    0.000000    84.000000    36.000000    0.000000    0.000000    3.000000    1.000000    0.000000    3.000000    1.000000    2.000000    1.000000    0.000000    3.000000    2.000000    44.000000    8.500000    0.000000    0.000000    1.000000
 98 1.000000    1.000000    38.100000    88.000000    32.000000    3.000000    3.000000    4.000000    1.000000    2.000000    3.000000    3.000000    0.000000    3.000000    1.000000    4.000000    5.000000    55.000000    60.000000    0.000000    0.000000    -1.000000
 99 2.000000    1.000000    37.700000    44.000000    40.000000    2.000000    1.000000    3.000000    1.000000    1.000000    3.000000    2.000000    1.000000    1.000000    0.000000    1.000000    5.000000    41.000000    60.000000    0.000000    0.000000    1.000000
100 2.000000    1.000000    39.600000    108.000000    51.000000    3.000000    3.000000    6.000000    2.000000    2.000000    4.000000    3.000000    1.000000    2.000000    0.000000    3.000000    5.000000    59.000000    8.000000    2.000000    2.600000    1.000000
101 1.000000    1.000000    38.200000    40.000000    16.000000    3.000000    3.000000    1.000000    1.000000    1.000000    3.000000    0.000000    0.000000    0.000000    0.000000    1.000000    1.000000    34.000000    66.000000    0.000000    0.000000    1.000000
102 1.000000    1.000000    0.000000    60.000000    20.000000    4.000000    3.000000    4.000000    2.000000    5.000000    4.000000    0.000000    0.000000    1.000000    0.000000    4.000000    5.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
103 2.000000    1.000000    38.300000    40.000000    16.000000    3.000000    0.000000    1.000000    1.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    37.000000    57.000000    0.000000    0.000000    1.000000
104 1.000000    9.000000    38.000000    140.000000    68.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    0.000000    0.000000    0.000000    2.000000    1.000000    39.000000    5.300000    0.000000    0.000000    1.000000
105 1.000000    1.000000    37.800000    52.000000    24.000000    1.000000    3.000000    3.000000    1.000000    4.000000    4.000000    1.000000    2.000000    3.000000    5.700000    2.000000    5.000000    48.000000    6.600000    1.000000    3.700000    -1.000000
106 1.000000    1.000000    0.000000    70.000000    36.000000    1.000000    0.000000    3.000000    2.000000    2.000000    3.000000    2.000000    2.000000    0.000000    0.000000    4.000000    5.000000    36.000000    7.300000    0.000000    0.000000    1.000000
107 1.000000    1.000000    38.300000    52.000000    96.000000    0.000000    3.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    1.000000    0.000000    1.000000    0.000000    43.000000    6.100000    0.000000    0.000000    1.000000
108 2.000000    1.000000    37.300000    50.000000    32.000000    1.000000    1.000000    3.000000    1.000000    1.000000    3.000000    2.000000    0.000000    0.000000    0.000000    1.000000    0.000000    44.000000    7.000000    0.000000    0.000000    1.000000
109 1.000000    1.000000    38.700000    60.000000    32.000000    4.000000    3.000000    2.000000    2.000000    4.000000    4.000000    4.000000    0.000000    0.000000    0.000000    4.000000    5.000000    53.000000    64.000000    3.000000    2.000000    -1.000000
110 1.000000    9.000000    38.400000    84.000000    40.000000    3.000000    3.000000    2.000000    1.000000    3.000000    3.000000    3.000000    1.000000    1.000000    0.000000    0.000000    0.000000    36.000000    6.600000    2.000000    2.800000    -1.000000
111 1.000000    1.000000    0.000000    70.000000    16.000000    3.000000    4.000000    5.000000    2.000000    2.000000    3.000000    2.000000    2.000000    1.000000    0.000000    4.000000    5.000000    60.000000    7.500000    0.000000    0.000000    -1.000000
112 1.000000    1.000000    38.300000    40.000000    16.000000    3.000000    0.000000    0.000000    1.000000    1.000000    3.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    38.000000    58.000000    1.000000    2.000000    1.000000
113 1.000000    1.000000    0.000000    40.000000    0.000000    2.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    1.000000    1.000000    0.000000    0.000000    5.000000    39.000000    56.000000    0.000000    0.000000    1.000000
114 1.000000    1.000000    36.800000    60.000000    28.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    10.000000    -1.000000
115 1.000000    1.000000    38.400000    44.000000    24.000000    3.000000    0.000000    4.000000    0.000000    5.000000    4.000000    3.000000    2.000000    1.000000    0.000000    4.000000    5.000000    50.000000    77.000000    0.000000    0.000000    1.000000
116 2.000000    1.000000    0.000000    0.000000    40.000000    3.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    45.000000    70.000000    0.000000    0.000000    1.000000
117 1.000000    1.000000    38.000000    44.000000    12.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    4.000000    5.000000    42.000000    65.000000    0.000000    0.000000    1.000000
118 2.000000    1.000000    39.500000    0.000000    0.000000    3.000000    3.000000    4.000000    2.000000    3.000000    4.000000    3.000000    0.000000    3.000000    5.500000    4.000000    5.000000    0.000000    6.700000    1.000000    0.000000    -1.000000
119 1.000000    1.000000    36.500000    78.000000    30.000000    1.000000    0.000000    1.000000    1.000000    5.000000    3.000000    1.000000    0.000000    1.000000    0.000000    0.000000    0.000000    34.000000    75.000000    2.000000    1.000000    1.000000
120 2.000000    1.000000    38.100000    56.000000    20.000000    2.000000    1.000000    2.000000    1.000000    1.000000    3.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    46.000000    70.000000    0.000000    0.000000    1.000000
121 1.000000    1.000000    39.400000    54.000000    66.000000    1.000000    1.000000    2.000000    1.000000    2.000000    3.000000    2.000000    1.000000    1.000000    0.000000    3.000000    4.000000    39.000000    6.000000    2.000000    0.000000    1.000000
122 1.000000    1.000000    38.300000    80.000000    40.000000    0.000000    0.000000    6.000000    2.000000    4.000000    3.000000    1.000000    0.000000    2.000000    0.000000    1.000000    4.000000    67.000000    10.200000    2.000000    1.000000    -1.000000
123 2.000000    1.000000    38.700000    40.000000    28.000000    2.000000    1.000000    1.000000    1.000000    3.000000    1.000000    1.000000    0.000000    0.000000    0.000000    1.000000    0.000000    39.000000    62.000000    1.000000    1.000000    1.000000
124 1.000000    1.000000    38.200000    64.000000    24.000000    1.000000    1.000000    3.000000    1.000000    4.000000    4.000000    3.000000    2.000000    1.000000    0.000000    4.000000    4.000000    45.000000    7.500000    1.000000    2.000000    -1.000000
125 2.000000    1.000000    37.600000    48.000000    20.000000    3.000000    1.000000    4.000000    1.000000    1.000000    1.000000    3.000000    2.000000    1.000000    0.000000    1.000000    1.000000    37.000000    5.500000    0.000000    0.000000    -1.000000
126 1.000000    1.000000    38.000000    42.000000    68.000000    4.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    2.000000    2.000000    0.000000    4.000000    4.000000    41.000000    7.600000    0.000000    0.000000    1.000000
127 1.000000    1.000000    38.700000    0.000000    0.000000    3.000000    1.000000    3.000000    1.000000    5.000000    4.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    33.000000    6.500000    2.000000    0.000000    1.000000
128 1.000000    1.000000    37.400000    50.000000    32.000000    3.000000    3.000000    0.000000    1.000000    4.000000    4.000000    1.000000    2.000000    1.000000    0.000000    1.000000    0.000000    45.000000    7.900000    2.000000    1.000000    1.000000
129 1.000000    1.000000    37.400000    84.000000    20.000000    0.000000    0.000000    3.000000    1.000000    2.000000    3.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    31.000000    61.000000    0.000000    1.000000    -1.000000
130 1.000000    1.000000    38.400000    49.000000    0.000000    0.000000    0.000000    1.000000    1.000000    0.000000    0.000000    1.000000    2.000000    1.000000    0.000000    0.000000    0.000000    44.000000    7.600000    0.000000    0.000000    1.000000
131 1.000000    1.000000    37.800000    30.000000    12.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
132 2.000000    1.000000    37.600000    88.000000    36.000000    3.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    1.000000    3.000000    1.500000    0.000000    0.000000    44.000000    6.000000    0.000000    0.000000    -1.000000
133 2.000000    1.000000    37.900000    40.000000    24.000000    1.000000    1.000000    1.000000    1.000000    2.000000    3.000000    1.000000    0.000000    0.000000    0.000000    0.000000    3.000000    40.000000    5.700000    0.000000    0.000000    1.000000
134 1.000000    1.000000    0.000000    100.000000    0.000000    3.000000    0.000000    4.000000    2.000000    5.000000    4.000000    0.000000    2.000000    0.000000    0.000000    2.000000    0.000000    59.000000    6.300000    0.000000    0.000000    -1.000000
135 1.000000    9.000000    38.100000    136.000000    48.000000    3.000000    3.000000    3.000000    1.000000    5.000000    1.000000    3.000000    2.000000    2.000000    4.400000    2.000000    0.000000    33.000000    4.900000    2.000000    2.900000    -1.000000
136 1.000000    1.000000    0.000000    0.000000    0.000000    3.000000    3.000000    3.000000    2.000000    5.000000    3.000000    3.000000    3.000000    2.000000    0.000000    4.000000    5.000000    46.000000    5.900000    0.000000    0.000000    -1.000000
137 1.000000    1.000000    38.000000    48.000000    0.000000    1.000000    1.000000    1.000000    1.000000    1.000000    2.000000    4.000000    2.000000    2.000000    0.000000    4.000000    5.000000    0.000000    0.000000    0.000000    0.000000    1.000000
138 2.000000    1.000000    38.000000    56.000000    0.000000    1.000000    2.000000    3.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    1.000000    1.000000    42.000000    71.000000    0.000000    0.000000    1.000000
139 2.000000    1.000000    38.000000    60.000000    32.000000    1.000000    1.000000    0.000000    1.000000    3.000000    3.000000    0.000000    1.000000    1.000000    0.000000    0.000000    0.000000    50.000000    7.000000    1.000000    1.000000    1.000000
140 1.000000    1.000000    38.100000    44.000000    9.000000    3.000000    1.000000    1.000000    1.000000    2.000000    2.000000    1.000000    1.000000    1.000000    0.000000    4.000000    5.000000    31.000000    7.300000    0.000000    0.000000    1.000000
141 2.000000    1.000000    36.000000    42.000000    30.000000    0.000000    0.000000    5.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    64.000000    6.800000    0.000000    0.000000    -1.000000
142 1.000000    1.000000    0.000000    120.000000    0.000000    4.000000    3.000000    6.000000    2.000000    5.000000    4.000000    4.000000    0.000000    0.000000    0.000000    4.000000    5.000000    57.000000    4.500000    3.000000    3.900000    -1.000000
143 1.000000    1.000000    37.800000    48.000000    28.000000    1.000000    1.000000    1.000000    2.000000    1.000000    2.000000    1.000000    2.000000    0.000000    0.000000    1.000000    1.000000    46.000000    5.900000    2.000000    7.000000    1.000000
144 1.000000    1.000000    37.100000    84.000000    40.000000    3.000000    3.000000    6.000000    1.000000    2.000000    4.000000    4.000000    3.000000    2.000000    2.000000    4.000000    5.000000    75.000000    81.000000    0.000000    0.000000    -1.000000
145 2.000000    1.000000    0.000000    80.000000    32.000000    3.000000    3.000000    2.000000    1.000000    2.000000    3.000000    3.000000    2.000000    1.000000    0.000000    3.000000    0.000000    50.000000    80.000000    0.000000    0.000000    1.000000
146 1.000000    1.000000    38.200000    48.000000    0.000000    1.000000    3.000000    3.000000    1.000000    3.000000    4.000000    4.000000    1.000000    3.000000    2.000000    4.000000    5.000000    42.000000    71.000000    0.000000    0.000000    1.000000
147 2.000000    1.000000    38.000000    44.000000    12.000000    2.000000    1.000000    3.000000    1.000000    3.000000    4.000000    3.000000    1.000000    2.000000    6.500000    1.000000    4.000000    33.000000    6.500000    0.000000    0.000000    -1.000000
148 1.000000    1.000000    38.300000    132.000000    0.000000    0.000000    3.000000    6.000000    2.000000    2.000000    4.000000    2.000000    2.000000    3.000000    6.200000    4.000000    4.000000    57.000000    8.000000    0.000000    5.200000    1.000000
149 2.000000    1.000000    38.700000    48.000000    24.000000    0.000000    0.000000    0.000000    0.000000    1.000000    1.000000    0.000000    1.000000    1.000000    0.000000    1.000000    0.000000    34.000000    63.000000    0.000000    0.000000    1.000000
150 2.000000    1.000000    38.900000    44.000000    14.000000    3.000000    1.000000    1.000000    1.000000    2.000000    3.000000    2.000000    0.000000    0.000000    0.000000    0.000000    2.000000    33.000000    64.000000    0.000000    0.000000    1.000000
151 1.000000    1.000000    39.300000    0.000000    0.000000    4.000000    3.000000    6.000000    2.000000    4.000000    4.000000    2.000000    1.000000    3.000000    4.000000    4.000000    4.000000    75.000000    0.000000    3.000000    4.300000    -1.000000
152 1.000000    1.000000    0.000000    100.000000    0.000000    3.000000    3.000000    4.000000    2.000000    0.000000    4.000000    4.000000    2.000000    1.000000    2.000000    0.000000    0.000000    68.000000    64.000000    3.000000    2.000000    1.000000
153 2.000000    1.000000    38.600000    48.000000    20.000000    3.000000    1.000000    1.000000    1.000000    1.000000    3.000000    2.000000    2.000000    1.000000    0.000000    3.000000    2.000000    50.000000    7.300000    1.000000    0.000000    1.000000
154 2.000000    1.000000    38.800000    48.000000    40.000000    1.000000    1.000000    3.000000    1.000000    3.000000    3.000000    4.000000    2.000000    0.000000    0.000000    0.000000    5.000000    41.000000    65.000000    0.000000    0.000000    1.000000
155 2.000000    1.000000    38.000000    48.000000    20.000000    3.000000    3.000000    4.000000    1.000000    1.000000    4.000000    2.000000    2.000000    0.000000    5.000000    0.000000    2.000000    49.000000    8.300000    1.000000    0.000000    1.000000
156 2.000000    1.000000    38.600000    52.000000    20.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    1.000000    1.000000    0.000000    1.000000    3.000000    36.000000    6.600000    1.000000    5.000000    1.000000
157 1.000000    1.000000    37.800000    60.000000    24.000000    1.000000    0.000000    3.000000    2.000000    0.000000    4.000000    4.000000    2.000000    3.000000    2.000000    0.000000    5.000000    52.000000    75.000000    0.000000    0.000000    -1.000000
158 2.000000    1.000000    38.000000    42.000000    40.000000    3.000000    1.000000    1.000000    1.000000    3.000000    3.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
159 2.000000    1.000000    0.000000    0.000000    12.000000    1.000000    1.000000    2.000000    1.000000    2.000000    1.000000    2.000000    3.000000    1.000000    0.000000    1.000000    3.000000    44.000000    7.500000    2.000000    0.000000    1.000000
160 1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    4.000000    0.000000    0.000000    1.000000    1.000000    0.000000    0.000000    5.000000    35.000000    58.000000    2.000000    1.000000    1.000000
161 1.000000    1.000000    38.300000    42.000000    24.000000    0.000000    0.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    40.000000    8.500000    0.000000    0.000000    -1.000000
162 2.000000    1.000000    39.500000    60.000000    10.000000    3.000000    0.000000    0.000000    2.000000    3.000000    3.000000    2.000000    2.000000    1.000000    0.000000    3.000000    0.000000    38.000000    56.000000    1.000000    0.000000    1.000000
163 1.000000    1.000000    38.000000    66.000000    20.000000    1.000000    3.000000    3.000000    1.000000    5.000000    3.000000    1.000000    1.000000    1.000000    0.000000    3.000000    0.000000    46.000000    46.000000    3.000000    2.000000    -1.000000
164 1.000000    1.000000    38.700000    76.000000    0.000000    1.000000    1.000000    5.000000    2.000000    3.000000    3.000000    2.000000    2.000000    2.000000    0.000000    4.000000    4.000000    50.000000    8.000000    0.000000    0.000000    1.000000
165 1.000000    1.000000    39.400000    120.000000    48.000000    0.000000    0.000000    5.000000    1.000000    0.000000    3.000000    3.000000    1.000000    0.000000    0.000000    4.000000    0.000000    56.000000    64.000000    1.000000    2.000000    -1.000000
166 1.000000    1.000000    38.300000    40.000000    18.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    1.000000    0.000000    0.000000    0.000000    2.000000    1.000000    43.000000    5.900000    1.000000    0.000000    1.000000
167 2.000000    1.000000    0.000000    44.000000    24.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    1.000000    2.000000    1.000000    0.000000    0.000000    1.000000    0.000000    6.300000    0.000000    0.000000    1.000000
168 1.000000    1.000000    38.400000    104.000000    40.000000    1.000000    1.000000    3.000000    1.000000    2.000000    4.000000    2.000000    2.000000    3.000000    6.500000    0.000000    4.000000    55.000000    8.500000    0.000000    0.000000    1.000000
169 1.000000    1.000000    0.000000    65.000000    24.000000    0.000000    0.000000    0.000000    2.000000    5.000000    0.000000    4.000000    3.000000    1.000000    0.000000    0.000000    5.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
170 2.000000    1.000000    37.500000    44.000000    20.000000    1.000000    1.000000    3.000000    1.000000    0.000000    1.000000    1.000000    0.000000    0.000000    0.000000    1.000000    0.000000    35.000000    7.200000    0.000000    0.000000    1.000000
171 2.000000    1.000000    39.000000    86.000000    16.000000    3.000000    3.000000    5.000000    0.000000    3.000000    3.000000    3.000000    0.000000    2.000000    0.000000    0.000000    0.000000    68.000000    5.800000    3.000000    6.000000    -1.000000
172 1.000000    1.000000    38.500000    129.000000    48.000000    3.000000    3.000000    3.000000    1.000000    2.000000    4.000000    3.000000    1.000000    3.000000    2.000000    0.000000    0.000000    57.000000    66.000000    3.000000    2.000000    1.000000
173 1.000000    1.000000    0.000000    104.000000    0.000000    3.000000    3.000000    5.000000    2.000000    2.000000    4.000000    3.000000    0.000000    3.000000    0.000000    4.000000    4.000000    69.000000    8.600000    2.000000    3.400000    -1.000000
174 2.000000    1.000000    0.000000    0.000000    0.000000    3.000000    4.000000    6.000000    0.000000    4.000000    0.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
175 1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
176 1.000000    1.000000    38.200000    60.000000    30.000000    1.000000    1.000000    3.000000    1.000000    3.000000    3.000000    1.000000    2.000000    1.000000    0.000000    3.000000    2.000000    48.000000    66.000000    0.000000    0.000000    1.000000
177 1.000000    1.000000    0.000000    68.000000    14.000000    0.000000    0.000000    4.000000    1.000000    4.000000    0.000000    0.000000    0.000000    1.000000    4.300000    0.000000    0.000000    0.000000    0.000000    2.000000    2.800000    -1.000000
178 1.000000    1.000000    0.000000    60.000000    30.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    1.000000    1.000000    0.000000    4.000000    0.000000    45.000000    70.000000    3.000000    2.000000    1.000000
179 2.000000    1.000000    38.500000    100.000000    0.000000    3.000000    3.000000    5.000000    2.000000    4.000000    3.000000    4.000000    2.000000    1.000000    0.000000    4.000000    5.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
180 1.000000    1.000000    38.400000    84.000000    30.000000    3.000000    1.000000    5.000000    2.000000    4.000000    3.000000    3.000000    2.000000    3.000000    6.500000    4.000000    4.000000    47.000000    7.500000    3.000000    0.000000    -1.000000
181 2.000000    1.000000    37.800000    48.000000    14.000000    0.000000    0.000000    1.000000    1.000000    3.000000    0.000000    2.000000    1.000000    3.000000    5.300000    1.000000    0.000000    35.000000    7.500000    0.000000    0.000000    1.000000
182 1.000000    1.000000    38.000000    0.000000    24.000000    3.000000    3.000000    6.000000    2.000000    5.000000    0.000000    4.000000    1.000000    1.000000    0.000000    0.000000    0.000000    68.000000    7.800000    0.000000    0.000000    -1.000000
183 2.000000    1.000000    37.800000    56.000000    16.000000    1.000000    1.000000    2.000000    1.000000    2.000000    1.000000    1.000000    2.000000    1.000000    0.000000    1.000000    0.000000    44.000000    68.000000    1.000000    1.000000    1.000000
184 2.000000    1.000000    38.200000    68.000000    32.000000    2.000000    2.000000    2.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    0.000000    1.000000    1.000000    43.000000    65.000000    0.000000    0.000000    1.000000
185 1.000000    1.000000    38.500000    120.000000    60.000000    4.000000    3.000000    6.000000    2.000000    0.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    54.000000    0.000000    0.000000    0.000000    1.000000
186 1.000000    1.000000    39.300000    64.000000    90.000000    2.000000    3.000000    1.000000    1.000000    0.000000    3.000000    1.000000    1.000000    2.000000    0.000000    0.000000    0.000000    39.000000    6.700000    0.000000    0.000000    1.000000
187 1.000000    1.000000    38.400000    80.000000    30.000000    4.000000    3.000000    1.000000    1.000000    3.000000    3.000000    3.000000    3.000000    3.000000    0.000000    4.000000    5.000000    32.000000    6.100000    3.000000    4.300000    1.000000
188 1.000000    1.000000    38.500000    60.000000    0.000000    1.000000    1.000000    0.000000    1.000000    0.000000    1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    33.000000    53.000000    1.000000    0.000000    1.000000
189 1.000000    1.000000    38.300000    60.000000    16.000000    3.000000    1.000000    1.000000    1.000000    2.000000    1.000000    1.000000    2.000000    2.000000    3.000000    1.000000    4.000000    30.000000    6.000000    1.000000    3.000000    1.000000
190 1.000000    1.000000    37.100000    40.000000    8.000000    0.000000    1.000000    4.000000    1.000000    3.000000    3.000000    1.000000    1.000000    1.000000    0.000000    3.000000    3.000000    23.000000    6.700000    3.000000    0.000000    1.000000
191 2.000000    9.000000    0.000000    100.000000    44.000000    2.000000    1.000000    1.000000    1.000000    4.000000    1.000000    1.000000    0.000000    0.000000    0.000000    1.000000    0.000000    37.000000    4.700000    0.000000    0.000000    1.000000
192 1.000000    1.000000    38.200000    48.000000    18.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    1.000000    2.000000    0.000000    4.000000    0.000000    48.000000    74.000000    1.000000    2.000000    1.000000
193 1.000000    1.000000    0.000000    60.000000    48.000000    3.000000    3.000000    4.000000    2.000000    4.000000    3.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    58.000000    7.600000    0.000000    0.000000    -1.000000
194 2.000000    1.000000    37.900000    88.000000    24.000000    1.000000    1.000000    2.000000    1.000000    2.000000    2.000000    1.000000    0.000000    0.000000    0.000000    4.000000    1.000000    37.000000    56.000000    0.000000    0.000000    1.000000
195 2.000000    1.000000    38.000000    44.000000    12.000000    3.000000    1.000000    1.000000    0.000000    0.000000    1.000000    2.000000    0.000000    0.000000    0.000000    1.000000    0.000000    42.000000    64.000000    0.000000    0.000000    1.000000
196 2.000000    1.000000    38.500000    60.000000    20.000000    1.000000    1.000000    5.000000    2.000000    2.000000    2.000000    1.000000    2.000000    1.000000    0.000000    2.000000    3.000000    63.000000    7.500000    2.000000    2.300000    -1.000000
197 2.000000    1.000000    38.500000    96.000000    36.000000    3.000000    3.000000    0.000000    2.000000    2.000000    4.000000    2.000000    1.000000    2.000000    0.000000    4.000000    5.000000    70.000000    8.500000    0.000000    0.000000    -1.000000
198 2.000000    1.000000    38.300000    60.000000    20.000000    1.000000    1.000000    1.000000    2.000000    1.000000    3.000000    1.000000    0.000000    0.000000    0.000000    3.000000    0.000000    34.000000    66.000000    0.000000    0.000000    1.000000
199 2.000000    1.000000    38.500000    60.000000    40.000000    3.000000    1.000000    2.000000    1.000000    2.000000    1.000000    2.000000    0.000000    0.000000    0.000000    3.000000    2.000000    49.000000    59.000000    0.000000    0.000000    1.000000
200 1.000000    1.000000    37.300000    48.000000    12.000000    1.000000    0.000000    3.000000    1.000000    3.000000    1.000000    3.000000    2.000000    1.000000    0.000000    3.000000    3.000000    40.000000    6.600000    2.000000    0.000000    1.000000
201 1.000000    1.000000    38.500000    86.000000    0.000000    1.000000    1.000000    3.000000    1.000000    4.000000    4.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    45.000000    7.400000    1.000000    3.400000    -1.000000
202 1.000000    1.000000    37.500000    48.000000    40.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000    1.000000    0.000000    0.000000    5.000000    41.000000    55.000000    3.000000    2.000000    -1.000000
203 2.000000    1.000000    37.200000    36.000000    9.000000    1.000000    1.000000    1.000000    1.000000    2.000000    3.000000    1.000000    2.000000    1.000000    0.000000    4.000000    1.000000    35.000000    5.700000    0.000000    0.000000    1.000000
204 1.000000    1.000000    39.200000    0.000000    23.000000    3.000000    1.000000    3.000000    1.000000    4.000000    4.000000    2.000000    2.000000    0.000000    0.000000    0.000000    0.000000    36.000000    6.600000    1.000000    3.000000    1.000000
205 2.000000    1.000000    38.500000    100.000000    0.000000    3.000000    3.000000    5.000000    2.000000    4.000000    3.000000    4.000000    2.000000    1.000000    0.000000    4.000000    5.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
206 1.000000    1.000000    38.500000    96.000000    30.000000    2.000000    3.000000    4.000000    2.000000    4.000000    4.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    50.000000    65.000000    0.000000    0.000000    1.000000
207 1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    45.000000    8.700000    0.000000    0.000000    -1.000000
208 1.000000    1.000000    37.800000    88.000000    80.000000    3.000000    3.000000    5.000000    2.000000    0.000000    3.000000    3.000000    2.000000    3.000000    0.000000    4.000000    5.000000    64.000000    89.000000    0.000000    0.000000    -1.000000
209 2.000000    1.000000    37.500000    44.000000    10.000000    3.000000    1.000000    1.000000    1.000000    3.000000    1.000000    2.000000    2.000000    0.000000    0.000000    3.000000    3.000000    43.000000    51.000000    1.000000    1.000000    1.000000
210 1.000000    1.000000    37.900000    68.000000    20.000000    0.000000    1.000000    2.000000    1.000000    2.000000    4.000000    2.000000    0.000000    0.000000    0.000000    1.000000    5.000000    45.000000    4.000000    3.000000    2.800000    -1.000000
211 1.000000    1.000000    38.000000    86.000000    24.000000    4.000000    3.000000    4.000000    1.000000    2.000000    4.000000    4.000000    1.000000    1.000000    0.000000    4.000000    5.000000    45.000000    5.500000    1.000000    10.100000    -1.000000
212 1.000000    9.000000    38.900000    120.000000    30.000000    1.000000    3.000000    2.000000    2.000000    3.000000    3.000000    3.000000    3.000000    1.000000    3.000000    0.000000    0.000000    47.000000    6.300000    1.000000    0.000000    1.000000
213 1.000000    1.000000    37.600000    45.000000    12.000000    3.000000    1.000000    3.000000    1.000000    0.000000    2.000000    2.000000    2.000000    1.000000    0.000000    1.000000    4.000000    39.000000    7.000000    2.000000    1.500000    1.000000
214 2.000000    1.000000    38.600000    56.000000    32.000000    2.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    2.000000    0.000000    0.000000    2.000000    0.000000    40.000000    7.000000    2.000000    2.100000    1.000000
215 1.000000    1.000000    37.800000    40.000000    12.000000    1.000000    1.000000    1.000000    1.000000    1.000000    2.000000    1.000000    2.000000    1.000000    0.000000    1.000000    2.000000    38.000000    7.000000    0.000000    0.000000    1.000000
216 2.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
217 1.000000    1.000000    38.000000    76.000000    18.000000    0.000000    0.000000    0.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    71.000000    11.000000    0.000000    0.000000    1.000000
218 1.000000    1.000000    38.100000    40.000000    36.000000    1.000000    2.000000    2.000000    1.000000    2.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
219 1.000000    1.000000    0.000000    52.000000    28.000000    3.000000    3.000000    4.000000    1.000000    3.000000    4.000000    3.000000    2.000000    1.000000    0.000000    4.000000    4.000000    37.000000    8.100000    0.000000    0.000000    1.000000
220 1.000000    1.000000    39.200000    88.000000    58.000000    4.000000    4.000000    0.000000    2.000000    5.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    2.000000    2.000000    -1.000000
221 1.000000    1.000000    38.500000    92.000000    40.000000    4.000000    3.000000    0.000000    1.000000    2.000000    4.000000    3.000000    0.000000    0.000000    0.000000    4.000000    0.000000    46.000000    67.000000    2.000000    2.000000    1.000000
222 1.000000    1.000000    0.000000    112.000000    13.000000    4.000000    4.000000    4.000000    1.000000    2.000000    3.000000    1.000000    2.000000    1.000000    4.500000    4.000000    4.000000    60.000000    6.300000    3.000000    0.000000    1.000000
223 1.000000    1.000000    37.700000    66.000000    12.000000    1.000000    1.000000    3.000000    1.000000    3.000000    3.000000    2.000000    2.000000    0.000000    0.000000    4.000000    4.000000    31.500000    6.200000    2.000000    1.600000    1.000000
224 1.000000    1.000000    38.800000    50.000000    14.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    1.000000    1.000000    1.000000    0.000000    3.000000    5.000000    38.000000    58.000000    0.000000    0.000000    1.000000
225 2.000000    1.000000    38.400000    54.000000    24.000000    1.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    2.000000    1.000000    0.000000    3.000000    2.000000    49.000000    7.200000    1.000000    8.000000    1.000000
226 1.000000    1.000000    39.200000    120.000000    20.000000    4.000000    3.000000    5.000000    2.000000    2.000000    3.000000    3.000000    1.000000    3.000000    0.000000    0.000000    4.000000    60.000000    8.800000    3.000000    0.000000    -1.000000
227 1.000000    9.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    45.000000    6.500000    2.000000    0.000000    1.000000
228 1.000000    1.000000    37.300000    90.000000    40.000000    3.000000    0.000000    6.000000    2.000000    5.000000    4.000000    3.000000    2.000000    2.000000    0.000000    1.000000    5.000000    65.000000    50.000000    3.000000    2.000000    -1.000000
229 1.000000    9.000000    38.500000    120.000000    70.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000    0.000000    2.000000    0.000000    0.000000    1.000000    0.000000    35.000000    54.000000    1.000000    1.000000    1.000000
230 1.000000    1.000000    38.500000    104.000000    40.000000    3.000000    3.000000    0.000000    1.000000    4.000000    3.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
231 2.000000    1.000000    39.500000    92.000000    28.000000    3.000000    3.000000    6.000000    1.000000    5.000000    4.000000    1.000000    0.000000    3.000000    0.000000    4.000000    0.000000    72.000000    6.400000    0.000000    3.600000    -1.000000
232 1.000000    1.000000    38.500000    30.000000    18.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    40.000000    7.700000    0.000000    0.000000    1.000000
233 1.000000    1.000000    38.300000    72.000000    30.000000    4.000000    3.000000    3.000000    2.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    43.000000    7.000000    2.000000    3.900000    1.000000
234 2.000000    1.000000    37.500000    48.000000    30.000000    4.000000    1.000000    3.000000    1.000000    0.000000    2.000000    1.000000    1.000000    1.000000    0.000000    1.000000    1.000000    48.000000    8.600000    0.000000    0.000000    1.000000
235 1.000000    1.000000    38.100000    52.000000    24.000000    1.000000    1.000000    5.000000    1.000000    4.000000    3.000000    1.000000    2.000000    3.000000    7.000000    1.000000    0.000000    54.000000    7.500000    2.000000    2.600000    -1.000000
236 2.000000    1.000000    38.200000    42.000000    26.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    2.000000    0.000000    0.000000    0.000000    1.000000    0.000000    36.000000    6.900000    0.000000    0.000000    1.000000
237 2.000000    1.000000    37.900000    54.000000    42.000000    2.000000    1.000000    5.000000    1.000000    3.000000    1.000000    1.000000    0.000000    1.000000    0.000000    0.000000    2.000000    47.000000    54.000000    3.000000    1.000000    1.000000
238 2.000000    1.000000    36.100000    88.000000    0.000000    3.000000    3.000000    3.000000    1.000000    3.000000    3.000000    2.000000    2.000000    3.000000    0.000000    0.000000    4.000000    45.000000    7.000000    3.000000    4.800000    -1.000000
239 1.000000    1.000000    38.100000    70.000000    22.000000    0.000000    1.000000    0.000000    1.000000    5.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    5.000000    36.000000    65.000000    0.000000    0.000000    -1.000000
240 1.000000    1.000000    38.000000    90.000000    30.000000    4.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    0.000000    0.000000    0.000000    4.000000    5.000000    55.000000    6.100000    0.000000    0.000000    -1.000000
241 1.000000    1.000000    38.200000    52.000000    16.000000    1.000000    1.000000    2.000000    1.000000    1.000000    2.000000    1.000000    1.000000    1.000000    0.000000    1.000000    0.000000    43.000000    8.100000    0.000000    0.000000    1.000000
242 1.000000    1.000000    0.000000    36.000000    32.000000    1.000000    1.000000    4.000000    1.000000    5.000000    3.000000    3.000000    2.000000    3.000000    4.000000    0.000000    4.000000    41.000000    5.900000    0.000000    0.000000    -1.000000
243 1.000000    1.000000    38.400000    92.000000    20.000000    1.000000    0.000000    0.000000    2.000000    0.000000    3.000000    3.000000    0.000000    0.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
244 1.000000    9.000000    38.200000    124.000000    88.000000    1.000000    3.000000    2.000000    1.000000    2.000000    3.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    47.000000    8.000000    1.000000    0.000000    1.000000
245 2.000000    1.000000    0.000000    96.000000    0.000000    3.000000    3.000000    3.000000    2.000000    5.000000    4.000000    4.000000    0.000000    1.000000    0.000000    4.000000    5.000000    60.000000    0.000000    0.000000    0.000000    -1.000000
246 1.000000    1.000000    37.600000    68.000000    32.000000    3.000000    0.000000    3.000000    1.000000    4.000000    2.000000    4.000000    2.000000    2.000000    6.500000    1.000000    5.000000    47.000000    7.200000    1.000000    0.000000    1.000000
247 1.000000    1.000000    38.100000    88.000000    24.000000    3.000000    3.000000    4.000000    1.000000    5.000000    4.000000    3.000000    2.000000    1.000000    0.000000    3.000000    4.000000    41.000000    4.600000    0.000000    0.000000    -1.000000
248 1.000000    1.000000    38.000000    108.000000    60.000000    2.000000    3.000000    4.000000    1.000000    4.000000    3.000000    3.000000    2.000000    0.000000    0.000000    3.000000    4.000000    0.000000    0.000000    3.000000    0.000000    1.000000
249 2.000000    1.000000    38.200000    48.000000    0.000000    2.000000    0.000000    1.000000    2.000000    3.000000    3.000000    1.000000    2.000000    1.000000    0.000000    0.000000    2.000000    34.000000    6.600000    0.000000    0.000000    1.000000
250 1.000000    1.000000    39.300000    100.000000    51.000000    4.000000    4.000000    6.000000    1.000000    2.000000    4.000000    1.000000    1.000000    3.000000    2.000000    0.000000    4.000000    66.000000    13.000000    3.000000    2.000000    -1.000000
251 2.000000    1.000000    36.600000    42.000000    18.000000    3.000000    3.000000    2.000000    1.000000    1.000000    4.000000    1.000000    1.000000    1.000000    0.000000    0.000000    5.000000    52.000000    7.100000    0.000000    0.000000    -1.000000
252 1.000000    9.000000    38.800000    124.000000    36.000000    3.000000    1.000000    2.000000    1.000000    2.000000    3.000000    4.000000    1.000000    1.000000    0.000000    4.000000    4.000000    50.000000    7.600000    3.000000    0.000000    -1.000000
253 2.000000    1.000000    0.000000    112.000000    24.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    2.000000    0.000000    0.000000    0.000000    4.000000    0.000000    40.000000    5.300000    3.000000    2.600000    1.000000
254 1.000000    1.000000    0.000000    80.000000    0.000000    3.000000    3.000000    3.000000    1.000000    4.000000    4.000000    4.000000    0.000000    0.000000    0.000000    4.000000    5.000000    43.000000    70.000000    0.000000    0.000000    1.000000
255 1.000000    9.000000    38.800000    184.000000    84.000000    1.000000    0.000000    1.000000    1.000000    4.000000    1.000000    3.000000    0.000000    0.000000    0.000000    2.000000    0.000000    33.000000    3.300000    0.000000    0.000000    -1.000000
256 1.000000    1.000000    37.500000    72.000000    0.000000    2.000000    1.000000    1.000000    1.000000    2.000000    1.000000    1.000000    1.000000    1.000000    0.000000    1.000000    0.000000    35.000000    65.000000    2.000000    2.000000    -1.000000
257 1.000000    1.000000    38.700000    96.000000    28.000000    3.000000    3.000000    4.000000    1.000000    0.000000    4.000000    0.000000    0.000000    3.000000    7.500000    0.000000    0.000000    64.000000    9.000000    0.000000    0.000000    -1.000000
258 2.000000    1.000000    37.500000    52.000000    12.000000    1.000000    1.000000    1.000000    1.000000    2.000000    3.000000    2.000000    2.000000    1.000000    0.000000    3.000000    5.000000    36.000000    61.000000    1.000000    1.000000    1.000000
259 1.000000    1.000000    40.800000    72.000000    42.000000    3.000000    3.000000    1.000000    1.000000    2.000000    3.000000    1.000000    2.000000    1.000000    0.000000    0.000000    0.000000    54.000000    7.400000    3.000000    0.000000    -1.000000
260 2.000000    1.000000    38.000000    40.000000    25.000000    0.000000    1.000000    1.000000    1.000000    4.000000    3.000000    2.000000    1.000000    1.000000    0.000000    4.000000    0.000000    37.000000    69.000000    0.000000    0.000000    1.000000
261 2.000000    1.000000    38.400000    48.000000    16.000000    2.000000    1.000000    1.000000    1.000000    1.000000    0.000000    2.000000    2.000000    1.000000    0.000000    0.000000    2.000000    39.000000    6.500000    0.000000    0.000000    1.000000
262 2.000000    9.000000    38.600000    88.000000    28.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    35.000000    5.900000    0.000000    0.000000    1.000000
263 1.000000    1.000000    37.100000    75.000000    36.000000    0.000000    0.000000    3.000000    2.000000    4.000000    4.000000    2.000000    2.000000    3.000000    5.000000    4.000000    4.000000    48.000000    7.400000    3.000000    3.200000    -1.000000
264 1.000000    1.000000    38.300000    44.000000    21.000000    3.000000    1.000000    2.000000    1.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    1.000000    5.000000    44.000000    6.500000    2.000000    4.400000    1.000000
265 2.000000    1.000000    0.000000    56.000000    68.000000    3.000000    1.000000    1.000000    1.000000    3.000000    3.000000    1.000000    2.000000    1.000000    0.000000    1.000000    0.000000    40.000000    6.000000    0.000000    0.000000    -1.000000
266 2.000000    1.000000    38.600000    68.000000    20.000000    2.000000    1.000000    3.000000    1.000000    3.000000    3.000000    2.000000    1.000000    1.000000    0.000000    1.000000    5.000000    38.000000    6.500000    1.000000    0.000000    1.000000
267 2.000000    1.000000    38.300000    54.000000    18.000000    3.000000    1.000000    2.000000    1.000000    2.000000    3.000000    2.000000    0.000000    3.000000    5.400000    0.000000    4.000000    44.000000    7.200000    3.000000    0.000000    1.000000
268 1.000000    1.000000    38.200000    42.000000    20.000000    0.000000    0.000000    1.000000    1.000000    0.000000    3.000000    0.000000    0.000000    0.000000    0.000000    3.000000    0.000000    47.000000    60.000000    0.000000    0.000000    1.000000
269 1.000000    1.000000    39.300000    64.000000    90.000000    2.000000    3.000000    1.000000    1.000000    0.000000    3.000000    1.000000    1.000000    2.000000    6.500000    1.000000    5.000000    39.000000    6.700000    0.000000    0.000000    1.000000
270 1.000000    1.000000    37.500000    60.000000    50.000000    3.000000    3.000000    1.000000    1.000000    3.000000    3.000000    2.000000    2.000000    2.000000    3.500000    3.000000    4.000000    35.000000    6.500000    0.000000    0.000000    -1.000000
271 1.000000    1.000000    37.700000    80.000000    0.000000    3.000000    3.000000    6.000000    1.000000    5.000000    4.000000    1.000000    2.000000    3.000000    0.000000    3.000000    1.000000    50.000000    55.000000    3.000000    2.000000    1.000000
272 1.000000    1.000000    0.000000    100.000000    30.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    3.000000    3.000000    0.000000    4.000000    4.000000    52.000000    6.600000    0.000000    0.000000    1.000000
273 1.000000    1.000000    37.700000    120.000000    28.000000    3.000000    3.000000    3.000000    1.000000    5.000000    3.000000    3.000000    1.000000    1.000000    0.000000    0.000000    0.000000    65.000000    7.000000    3.000000    0.000000    -1.000000
274 1.000000    1.000000    0.000000    76.000000    0.000000    0.000000    3.000000    0.000000    0.000000    0.000000    4.000000    4.000000    0.000000    0.000000    0.000000    0.000000    5.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
275 1.000000    9.000000    38.800000    150.000000    50.000000    1.000000    3.000000    6.000000    2.000000    5.000000    3.000000    2.000000    1.000000    1.000000    0.000000    0.000000    0.000000    50.000000    6.200000    0.000000    0.000000    -1.000000
276 1.000000    1.000000    38.000000    36.000000    16.000000    3.000000    1.000000    1.000000    1.000000    4.000000    2.000000    2.000000    3.000000    3.000000    2.000000    3.000000    0.000000    37.000000    75.000000    2.000000    1.000000    -1.000000
277 2.000000    1.000000    36.900000    50.000000    40.000000    2.000000    3.000000    3.000000    1.000000    1.000000    3.000000    2.000000    3.000000    1.000000    7.000000    0.000000    0.000000    37.500000    6.500000    0.000000    0.000000    1.000000
278 2.000000    1.000000    37.800000    40.000000    16.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    1.000000    1.000000    37.000000    6.800000    0.000000    0.000000    1.000000
279 2.000000    1.000000    38.200000    56.000000    40.000000    4.000000    3.000000    1.000000    1.000000    2.000000    4.000000    3.000000    2.000000    2.000000    7.500000    0.000000    0.000000    47.000000    7.200000    1.000000    2.500000    1.000000
280 1.000000    1.000000    38.600000    48.000000    12.000000    0.000000    0.000000    1.000000    0.000000    1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    36.000000    67.000000    0.000000    0.000000    1.000000
281 2.000000    1.000000    40.000000    78.000000    0.000000    3.000000    3.000000    5.000000    1.000000    2.000000    3.000000    1.000000    1.000000    1.000000    0.000000    4.000000    1.000000    66.000000    6.500000    0.000000    0.000000    -1.000000
282 1.000000    1.000000    0.000000    70.000000    16.000000    3.000000    4.000000    5.000000    2.000000    2.000000    3.000000    2.000000    2.000000    1.000000    0.000000    4.000000    5.000000    60.000000    7.500000    0.000000    0.000000    -1.000000
283 1.000000    1.000000    38.200000    72.000000    18.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    35.000000    6.400000    0.000000    0.000000    1.000000
284 2.000000    1.000000    38.500000    54.000000    0.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    1.000000    2.000000    1.000000    0.000000    1.000000    0.000000    40.000000    6.800000    2.000000    7.000000    1.000000
285 1.000000    1.000000    38.500000    66.000000    24.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    1.000000    2.000000    1.000000    0.000000    4.000000    5.000000    40.000000    6.700000    1.000000    0.000000    1.000000
286 2.000000    1.000000    37.800000    82.000000    12.000000    3.000000    1.000000    1.000000    2.000000    4.000000    0.000000    3.000000    1.000000    3.000000    0.000000    0.000000    0.000000    50.000000    7.000000    0.000000    0.000000    -1.000000
287 2.000000    9.000000    39.500000    84.000000    30.000000    0.000000    0.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    28.000000    5.000000    0.000000    0.000000    1.000000
288 1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
289 1.000000    1.000000    38.000000    50.000000    36.000000    0.000000    1.000000    1.000000    1.000000    3.000000    2.000000    2.000000    0.000000    0.000000    0.000000    3.000000    0.000000    39.000000    6.600000    1.000000    5.300000    1.000000
290 2.000000    1.000000    38.600000    45.000000    16.000000    2.000000    1.000000    2.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    1.000000    1.000000    43.000000    58.000000    0.000000    0.000000    1.000000
291 1.000000    1.000000    38.900000    80.000000    44.000000    3.000000    3.000000    3.000000    1.000000    2.000000    3.000000    3.000000    2.000000    2.000000    7.000000    3.000000    1.000000    54.000000    6.500000    3.000000    0.000000    -1.000000
292 1.000000    1.000000    37.000000    66.000000    20.000000    1.000000    3.000000    2.000000    1.000000    4.000000    3.000000    3.000000    1.000000    0.000000    0.000000    1.000000    5.000000    35.000000    6.900000    2.000000    0.000000    -1.000000
293 1.000000    1.000000    0.000000    78.000000    24.000000    3.000000    3.000000    3.000000    1.000000    0.000000    3.000000    0.000000    2.000000    1.000000    0.000000    0.000000    4.000000    43.000000    62.000000    0.000000    2.000000    -1.000000
294 2.000000    1.000000    38.500000    40.000000    16.000000    1.000000    1.000000    1.000000    1.000000    2.000000    1.000000    1.000000    0.000000    0.000000    0.000000    3.000000    2.000000    37.000000    67.000000    0.000000    0.000000    1.000000
295 1.000000    1.000000    0.000000    120.000000    70.000000    4.000000    0.000000    4.000000    2.000000    2.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    5.000000    55.000000    65.000000    0.000000    0.000000    -1.000000
296 2.000000    1.000000    37.200000    72.000000    24.000000    3.000000    2.000000    4.000000    2.000000    4.000000    3.000000    3.000000    3.000000    1.000000    0.000000    4.000000    4.000000    44.000000    0.000000    3.000000    3.300000    -1.000000
297 1.000000    1.000000    37.500000    72.000000    30.000000    4.000000    3.000000    4.000000    1.000000    4.000000    4.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    60.000000    6.800000    0.000000    0.000000    -1.000000
298 1.000000    1.000000    36.500000    100.000000    24.000000    3.000000    3.000000    3.000000    1.000000    3.000000    3.000000    3.000000    3.000000    1.000000    0.000000    4.000000    4.000000    50.000000    6.000000    3.000000    3.400000    1.000000
299 1.000000    1.000000    37.200000    40.000000    20.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    4.000000    1.000000    36.000000    62.000000    1.000000    1.000000    -1.000000
horseColic Training2.txt
 1 2.000000    1.000000    38.500000    54.000000    20.000000    0.000000    1.000000    2.000000    2.000000    3.000000    4.000000    1.000000    2.000000    2.000000    5.900000    0.000000    2.000000    42.000000    6.300000    0.000000    0.000000    1.000000
 2 2.000000    1.000000    37.600000    48.000000    36.000000    0.000000    0.000000    1.000000    1.000000    0.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    44.000000    6.300000    1.000000    5.000000    1.000000
 3 1.000000    1.000000    37.700000    44.000000    28.000000    0.000000    4.000000    3.000000    2.000000    5.000000    4.000000    4.000000    1.000000    1.000000    0.000000    3.000000    5.000000    45.000000    70.000000    3.000000    2.000000    1.000000
 4 1.000000    1.000000    37.000000    56.000000    24.000000    3.000000    1.000000    4.000000    2.000000    4.000000    4.000000    3.000000    1.000000    1.000000    0.000000    0.000000    0.000000    35.000000    61.000000    3.000000    2.000000    -1.000000
 5 2.000000    1.000000    38.000000    42.000000    12.000000    3.000000    0.000000    3.000000    1.000000    1.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    2.000000    37.000000    5.800000    0.000000    0.000000    1.000000
 6 1.000000    1.000000    0.000000    60.000000    40.000000    3.000000    0.000000    1.000000    1.000000    0.000000    4.000000    0.000000    3.000000    2.000000    0.000000    0.000000    5.000000    42.000000    72.000000    0.000000    0.000000    1.000000
 7 2.000000    1.000000    38.400000    80.000000    60.000000    3.000000    2.000000    2.000000    1.000000    3.000000    2.000000    1.000000    2.000000    2.000000    0.000000    1.000000    1.000000    54.000000    6.900000    0.000000    0.000000    1.000000
 8 2.000000    1.000000    37.800000    48.000000    12.000000    2.000000    1.000000    2.000000    1.000000    3.000000    0.000000    1.000000    2.000000    0.000000    0.000000    2.000000    0.000000    48.000000    7.300000    1.000000    0.000000    1.000000
 9 2.000000    1.000000    37.900000    45.000000    36.000000    3.000000    3.000000    3.000000    2.000000    2.000000    3.000000    1.000000    2.000000    1.000000    0.000000    3.000000    0.000000    33.000000    5.700000    3.000000    0.000000    1.000000
10 2.000000    1.000000    39.000000    84.000000    12.000000    3.000000    1.000000    5.000000    1.000000    2.000000    4.000000    2.000000    1.000000    2.000000    7.000000    0.000000    4.000000    62.000000    5.900000    2.000000    2.200000    -1.000000
11 2.000000    1.000000    38.200000    60.000000    24.000000    3.000000    1.000000    3.000000    2.000000    3.000000    3.000000    2.000000    3.000000    3.000000    0.000000    4.000000    4.000000    53.000000    7.500000    2.000000    1.400000    1.000000
12 1.000000    1.000000    0.000000    140.000000    0.000000    0.000000    0.000000    4.000000    2.000000    5.000000    4.000000    4.000000    1.000000    1.000000    0.000000    0.000000    5.000000    30.000000    69.000000    0.000000    0.000000    -1.000000
13 1.000000    1.000000    37.900000    120.000000    60.000000    3.000000    3.000000    3.000000    1.000000    5.000000    4.000000    4.000000    2.000000    2.000000    7.500000    4.000000    5.000000    52.000000    6.600000    3.000000    1.800000    -1.000000
14 2.000000    1.000000    38.000000    72.000000    36.000000    1.000000    1.000000    3.000000    1.000000    3.000000    0.000000    2.000000    2.000000    1.000000    0.000000    3.000000    5.000000    38.000000    6.800000    2.000000    2.000000    1.000000
15 2.000000    9.000000    38.000000    92.000000    28.000000    1.000000    1.000000    2.000000    1.000000    1.000000    3.000000    2.000000    3.000000    0.000000    7.200000    0.000000    0.000000    37.000000    6.100000    1.000000    1.100000    1.000000
16 1.000000    1.000000    38.300000    66.000000    30.000000    2.000000    3.000000    1.000000    1.000000    2.000000    4.000000    3.000000    3.000000    2.000000    8.500000    4.000000    5.000000    37.000000    6.000000    0.000000    0.000000    1.000000
17 2.000000    1.000000    37.500000    48.000000    24.000000    3.000000    1.000000    1.000000    1.000000    2.000000    1.000000    0.000000    1.000000    1.000000    0.000000    3.000000    2.000000    43.000000    6.000000    1.000000    2.800000    1.000000
18 1.000000    1.000000    37.500000    88.000000    20.000000    2.000000    3.000000    3.000000    1.000000    4.000000    3.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    35.000000    6.400000    1.000000    0.000000    -1.000000
19 2.000000    9.000000    0.000000    150.000000    60.000000    4.000000    4.000000    4.000000    2.000000    5.000000    4.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
20 1.000000    1.000000    39.700000    100.000000    30.000000    0.000000    0.000000    6.000000    2.000000    4.000000    4.000000    3.000000    1.000000    0.000000    0.000000    4.000000    5.000000    65.000000    75.000000    0.000000    0.000000    -1.000000
21 1.000000    1.000000    38.300000    80.000000    0.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    3.000000    2.000000    1.000000    0.000000    4.000000    4.000000    45.000000    7.500000    2.000000    4.600000    1.000000
22 2.000000    1.000000    37.500000    40.000000    32.000000    3.000000    1.000000    3.000000    1.000000    3.000000    2.000000    3.000000    2.000000    1.000000    0.000000    0.000000    5.000000    32.000000    6.400000    1.000000    1.100000    1.000000
23 1.000000    1.000000    38.400000    84.000000    30.000000    3.000000    1.000000    5.000000    2.000000    4.000000    3.000000    3.000000    2.000000    3.000000    6.500000    4.000000    4.000000    47.000000    7.500000    3.000000    0.000000    -1.000000
24 1.000000    1.000000    38.100000    84.000000    44.000000    4.000000    0.000000    4.000000    2.000000    5.000000    3.000000    1.000000    1.000000    3.000000    5.000000    0.000000    4.000000    60.000000    6.800000    0.000000    5.700000    -1.000000
25 2.000000    1.000000    38.700000    52.000000    0.000000    1.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    3.000000    4.000000    74.000000    0.000000    0.000000    1.000000
26 2.000000    1.000000    38.100000    44.000000    40.000000    2.000000    1.000000    3.000000    1.000000    3.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    3.000000    35.000000    6.800000    0.000000    0.000000    1.000000
27 2.000000    1.000000    38.400000    52.000000    20.000000    2.000000    1.000000    3.000000    1.000000    1.000000    3.000000    2.000000    2.000000    1.000000    0.000000    3.000000    5.000000    41.000000    63.000000    1.000000    1.000000    1.000000
28 1.000000    1.000000    38.200000    60.000000    0.000000    1.000000    0.000000    3.000000    1.000000    2.000000    1.000000    1.000000    1.000000    1.000000    0.000000    4.000000    4.000000    43.000000    6.200000    2.000000    3.900000    1.000000
29 2.000000    1.000000    37.700000    40.000000    18.000000    1.000000    1.000000    1.000000    0.000000    3.000000    2.000000    1.000000    1.000000    1.000000    0.000000    3.000000    3.000000    36.000000    3.500000    0.000000    0.000000    1.000000
30 1.000000    1.000000    39.100000    60.000000    10.000000    0.000000    1.000000    1.000000    0.000000    2.000000    3.000000    0.000000    0.000000    0.000000    0.000000    4.000000    4.000000    0.000000    0.000000    0.000000    0.000000    1.000000
31 2.000000    1.000000    37.800000    48.000000    16.000000    1.000000    1.000000    1.000000    1.000000    0.000000    1.000000    1.000000    2.000000    1.000000    0.000000    4.000000    3.000000    43.000000    7.500000    0.000000    0.000000    1.000000
32 1.000000    1.000000    39.000000    120.000000    0.000000    4.000000    3.000000    5.000000    2.000000    2.000000    4.000000    3.000000    2.000000    3.000000    8.000000    0.000000    0.000000    65.000000    8.200000    3.000000    4.600000    1.000000
33 1.000000    1.000000    38.200000    76.000000    0.000000    2.000000    3.000000    2.000000    1.000000    5.000000    3.000000    3.000000    1.000000    2.000000    6.000000    1.000000    5.000000    35.000000    6.500000    2.000000    0.900000    1.000000
34 2.000000    1.000000    38.300000    88.000000    0.000000    0.000000    0.000000    6.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
35 1.000000    1.000000    38.000000    80.000000    30.000000    3.000000    3.000000    3.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    6.000000    0.000000    0.000000    48.000000    8.300000    0.000000    4.300000    1.000000
36 1.000000    1.000000    0.000000    0.000000    0.000000    3.000000    1.000000    1.000000    1.000000    2.000000    3.000000    3.000000    1.000000    3.000000    6.000000    4.000000    4.000000    0.000000    0.000000    2.000000    0.000000    -1.000000
37 1.000000    1.000000    37.600000    40.000000    0.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    1.000000    1.000000    0.000000    0.000000    2.000000    2.100000    1.000000
38 2.000000    1.000000    37.500000    44.000000    0.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    45.000000    5.800000    2.000000    1.400000    1.000000
39 2.000000    1.000000    38.200000    42.000000    16.000000    1.000000    1.000000    3.000000    1.000000    1.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    0.000000    35.000000    60.000000    1.000000    1.000000    1.000000
40 2.000000    1.000000    38.000000    56.000000    44.000000    3.000000    3.000000    3.000000    0.000000    0.000000    1.000000    1.000000    2.000000    1.000000    0.000000    4.000000    0.000000    47.000000    70.000000    2.000000    1.000000    1.000000
41 2.000000    1.000000    38.300000    45.000000    20.000000    3.000000    3.000000    2.000000    2.000000    2.000000    4.000000    1.000000    2.000000    0.000000    0.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
42 1.000000    1.000000    0.000000    48.000000    96.000000    1.000000    1.000000    3.000000    1.000000    0.000000    4.000000    1.000000    2.000000    1.000000    0.000000    1.000000    4.000000    42.000000    8.000000    1.000000    0.000000    1.000000
43 1.000000    1.000000    37.700000    55.000000    28.000000    2.000000    1.000000    2.000000    1.000000    2.000000    3.000000    3.000000    0.000000    3.000000    5.000000    4.000000    5.000000    0.000000    0.000000    0.000000    0.000000    1.000000
44 2.000000    1.000000    36.000000    100.000000    20.000000    4.000000    3.000000    6.000000    2.000000    2.000000    4.000000    3.000000    1.000000    1.000000    0.000000    4.000000    5.000000    74.000000    5.700000    2.000000    2.500000    -1.000000
45 1.000000    1.000000    37.100000    60.000000    20.000000    2.000000    0.000000    4.000000    1.000000    3.000000    0.000000    3.000000    0.000000    2.000000    5.000000    3.000000    4.000000    64.000000    8.500000    2.000000    0.000000    1.000000
46 2.000000    1.000000    37.100000    114.000000    40.000000    3.000000    0.000000    3.000000    2.000000    2.000000    2.000000    1.000000    0.000000    0.000000    0.000000    0.000000    3.000000    32.000000    0.000000    3.000000    6.500000    1.000000
47 1.000000    1.000000    38.100000    72.000000    30.000000    3.000000    3.000000    3.000000    1.000000    4.000000    4.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    37.000000    56.000000    3.000000    1.000000    1.000000
48 1.000000    1.000000    37.000000    44.000000    12.000000    3.000000    1.000000    1.000000    2.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    4.000000    2.000000    40.000000    6.700000    3.000000    8.000000    1.000000
49 1.000000    1.000000    38.600000    48.000000    20.000000    3.000000    1.000000    1.000000    1.000000    4.000000    3.000000    1.000000    0.000000    0.000000    0.000000    3.000000    0.000000    37.000000    75.000000    0.000000    0.000000    1.000000
50 1.000000    1.000000    0.000000    82.000000    72.000000    3.000000    1.000000    4.000000    1.000000    2.000000    3.000000    3.000000    0.000000    3.000000    0.000000    4.000000    4.000000    53.000000    65.000000    3.000000    2.000000    -1.000000
51 1.000000    9.000000    38.200000    78.000000    60.000000    4.000000    4.000000    6.000000    0.000000    3.000000    3.000000    3.000000    0.000000    0.000000    0.000000    1.000000    0.000000    59.000000    5.800000    3.000000    3.100000    -1.000000
52 2.000000    1.000000    37.800000    60.000000    16.000000    1.000000    1.000000    3.000000    1.000000    2.000000    3.000000    2.000000    1.000000    2.000000    0.000000    3.000000    0.000000    41.000000    73.000000    0.000000    0.000000    -1.000000
53 1.000000    1.000000    38.700000    34.000000    30.000000    2.000000    0.000000    3.000000    1.000000    2.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    33.000000    69.000000    0.000000    2.000000    -1.000000
54 1.000000    1.000000    0.000000    36.000000    12.000000    1.000000    1.000000    1.000000    1.000000    1.000000    2.000000    1.000000    1.000000    1.000000    0.000000    1.000000    5.000000    44.000000    0.000000    0.000000    0.000000    1.000000
55 2.000000    1.000000    38.300000    44.000000    60.000000    0.000000    0.000000    1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    6.400000    36.000000    0.000000    0.000000    1.000000
56 2.000000    1.000000    37.400000    54.000000    18.000000    3.000000    0.000000    1.000000    1.000000    3.000000    4.000000    3.000000    2.000000    2.000000    0.000000    4.000000    5.000000    30.000000    7.100000    2.000000    0.000000    1.000000
57 1.000000    1.000000    0.000000    0.000000    0.000000    4.000000    3.000000    0.000000    2.000000    2.000000    4.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    54.000000    76.000000    3.000000    2.000000    1.000000
58 1.000000    1.000000    36.600000    48.000000    16.000000    3.000000    1.000000    3.000000    1.000000    4.000000    1.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    27.000000    56.000000    0.000000    0.000000    -1.000000
59 1.000000    1.000000    38.500000    90.000000    0.000000    1.000000    1.000000    3.000000    1.000000    3.000000    3.000000    3.000000    2.000000    3.000000    2.000000    4.000000    5.000000    47.000000    79.000000    0.000000    0.000000    1.000000
60 1.000000    1.000000    0.000000    75.000000    12.000000    1.000000    1.000000    4.000000    1.000000    5.000000    3.000000    3.000000    0.000000    3.000000    5.800000    0.000000    0.000000    58.000000    8.500000    1.000000    0.000000    1.000000
61 2.000000    1.000000    38.200000    42.000000    0.000000    3.000000    1.000000    1.000000    1.000000    1.000000    1.000000    2.000000    2.000000    1.000000    0.000000    3.000000    2.000000    35.000000    5.900000    2.000000    0.000000    1.000000
62 1.000000    9.000000    38.200000    78.000000    60.000000    4.000000    4.000000    6.000000    0.000000    3.000000    3.000000    3.000000    0.000000    0.000000    0.000000    1.000000    0.000000    59.000000    5.800000    3.000000    3.100000    -1.000000
63 2.000000    1.000000    38.600000    60.000000    30.000000    1.000000    1.000000    3.000000    1.000000    4.000000    2.000000    2.000000    1.000000    1.000000    0.000000    0.000000    0.000000    40.000000    6.000000    1.000000    0.000000    1.000000
64 2.000000    1.000000    37.800000    42.000000    40.000000    1.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    0.000000    0.000000    0.000000    3.000000    3.000000    36.000000    6.200000    0.000000    0.000000    1.000000
65 1.000000    1.000000    38.000000    60.000000    12.000000    1.000000    1.000000    2.000000    1.000000    2.000000    1.000000    1.000000    1.000000    1.000000    0.000000    1.000000    4.000000    44.000000    65.000000    3.000000    2.000000    -1.000000
66 2.000000    1.000000    38.000000    42.000000    12.000000    3.000000    0.000000    3.000000    1.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    1.000000    37.000000    5.800000    0.000000    0.000000    1.000000
67 2.000000    1.000000    37.600000    88.000000    36.000000    3.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    1.000000    3.000000    1.500000    0.000000    0.000000    44.000000    6.000000    0.000000    0.000000    -1.000000
horseColicTest2.txt

3.2 数据的加载函数

 1 # 简单例子的数据
 2 def loadSimpData():
 3     datMat = matrix([[ 1. ,  2.1],
 4         [ 2. ,  1.1],
 5         [ 1.3,  1. ],
 6         [ 1. ,  1. ],
 7         [ 2. ,  1. ]])
 8     classLabels = [1.0, 1.0, -1.0, -1.0, 1.0]
 9     return datMat,classLabels
10 
11 # 实例中的数据加载,训练集的名称 'horseColicTraining2.txt',测试集的名称 'horseColicTest2.txt'
12 def loadDataSet(fileName):
13     numFeat = len(open(fileName).readline().split('\t')) # 文件的行数
14     dataMat = []; labelMat = []
15     fr = open(fileName)
16     for line in fr.readlines(): # 按行读取文件的数据
17         lineArr =[]
18         curLine = line.strip().split('\t') # 以换行符作为行的结束
19         for i in range(numFeat-1): #
20             lineArr.append(float(curLine[i]))
21         dataMat.append(lineArr)
22         labelMat.append(float(curLine[-1])) # 行的最后一个元素为该对象的类标号
23     return dataMat,labelMat

3.3 弱分类器——单层决策树

 1 # 弱分类器是构建二叉树函数,通过循环比较得到最佳特征值和它的阈值。D是初始矩阵的权重
 2 def buildStump(dataArr, classLabels, D):
 3     dataMatrix = mat(dataArr); labelMat = mat(classLabels).T
 4     m, n = shape(dataMatrix)
 5     numSteps = 10.0 # 总步长
 6     bestStump = {} # 用来记录最佳的单层决策树的信息:最佳特征的列数、阈值、阈值的最值
 7     bestClasEst = mat(zeros((m, 1))) # 最佳预测类别号
 8     minError = inf # 对错误率初始化为无穷大
 9     for i in range(n): # 对数据的特征属性的遍历,即对矩阵的列遍历
10         rangeMin = dataMatrix[:,i].min() # 第 i 列的最小值
11         rangeMax = dataMatrix[:,i].max() # 第 i 列的最大值
12         stepSize = (rangeMax - rangeMin)/numSteps # 根据第 i 列的最值计算步长的值,即阈值每次的改变量
13         for j in range(-1, int(numSteps) + 1): # 这里遍历的步长数是 12 次,是为了覆盖整个取值范围,而不仅仅取值在最小值与最大值之间
14             for inequal in ['lt', 'gt']: # 对阈值的最值的遍历
15                 threshVal = (rangeMin + float(j) * stepSize) # 阈值根据步长的改变值
16                 predictedVals = stumpClassify(dataMatrix, i, threshVal, inequal) # 根据现有的阈值对数据的预测
17                 errArr = mat(ones((m,1)))
18                 errArr[predictedVals == labelMat] = 0 # 对预测结果与真实值的对比,正确则为 0 ,否则不变(1)
19                 weightedError = D.T * errArr # 计算错误率,即错误的对象的权值相加
20                 if weightedError < minError: # 选择最小的错误率,并把记录更小的错误率的信息
21                     minError = weightedError
22                     bestClasEst = predictedVals.copy()
23                     bestStump['dim'] = i
24                     bestStump['thresh'] = threshVal
25                     bestStump['ineq'] = inequal
26     return bestStump, minError, bestClasEst

3.4 弱分类器对类标号的划分

是对buildStump() 函数中第16行代码调用实现。

1 # 树的分类函数,其作用:就是比对每一列的特征值和目标函数,返回比对的结果
2 # 函数参数:dataMatrix 数据矩阵,dimen 矩阵第几列,threshVal 阈值(分割线),threshIneq  是指'lt' 或 'gt'(最小值或最大值)
3 def stumpClassify(dataMatrix, dimen, threshVal, threshIneq):
4     retArray = ones((shape(dataMatrix)[0], 1))
5     if threshIneq == 'lt':
6         retArray[dataMatrix[:,dimen] <= threshVal] = -1.0
7     else :
8         retArray[dataMatrix[:,dimen] > threshVal] = -1.0
9     return retArray

3.5 Adaboost 算法的实现

 1 # adaboost 算法的实现,参数 dataArr 是数据样本,classLabels 是数据的类别号列表,numIt 是迭代的次数(弱分类器使用的次数)
 2 def adaBoostTrainDS(dataArr, classLabels, numIt = 100):
 3     weakClassArr = [] # 记录每次弱分类器的信息
 4     m = shape(dataArr)[0]
 5     D = mat(ones((m,1))/m) # 初始化权重为 1/m
 6     aggClassEst = mat(zeros((m,1)))
 7     for i in range(numIt): # 算法中错误率不为 0 的情况下,最大循环次数,即迭代次数
 8         bestStump, error, classEst = buildStump(dataArr, classLabels, D) # 在权重为 D 的情况下的最佳单层决策树的信息
 9         #print "D: ", D.T
10         alpha = float(0.5 * log((1.0 - error) / max(error, 1e-16))) # 弱分类器的权重
11         bestStump ['alpha'] = alpha
12         weakClassArr.append(bestStump)
13         #print 'classEst: ', classEst.T
14         # 公式求解
15         expon = multiply(-1 * alpha * mat(classLabels).T, classEst)
16         D = multiply(D, exp(expon))
17         D = D/D.sum()
18         aggClassEst += alpha * classEst # 由各个弱分类器根据其权重 alpha 组合成强分类器
19         #print 'aggClassEst: ', aggClassEst.T
20         aggErrors = multiply(sign(aggClassEst) != mat(classLabels).T, ones((m, 1))) # 根据强分类器预测的类别号与真实值对比,其错误对象为 1
21         errorRate = aggErrors.sum()/m # 计算错误率
22         print 'total error: ', errorRate,'\n'
23         if errorRate == 0.0 :break # 错误率为 0 ,则跳出迭代循环
24     return weakClassArr

3.6 调用Adaboost 算法对预测样本的预测

 1 # adaboost 算法的预测函数,参数 datToClass 是预测数据集,classifierArr 是训练样本集之后的弱分类器集合
 2 def adaClassify(datToClass, classifierArr):
 3     dataMatrix = mat(datToClass)
 4     m = shape(dataMatrix)[0]
 5     aggClassEst = mat(zeros((m, 1)))
 6     for i in range(len(classifierArr)): # 遍历弱分类器
 7         classEst = stumpClassify(dataMatrix, classifierArr[i]['dim'], classifierArr[i]['thresh'], classifierArr[i]['ineq']) # 调用弱分类器函数,得到其预测的类别号
 8         aggClassEst += classifierArr[i]['alpha'] * classEst # 由弱分类器组合的强分类器,预测的类别号的值
 9         #print aggClassEst
10     return sign(aggClassEst) # 返回最终预测的类别号

3.7 运行结果

total error:  0.284280936455 

total error:  0.284280936455 

total error:  0.247491638796 

total error:  0.247491638796 

total error:  0.254180602007 

total error:  0.240802675585 

total error:  0.240802675585 

total error:  0.220735785953 

total error:  0.247491638796 

total error:  0.230769230769 

total error:  0.240802675585 

total error:  0.214046822742 

total error:  0.227424749164 

total error:  0.217391304348 

total error:  0.220735785953 

total error:  0.217391304348 

total error:  0.224080267559 

total error:  0.224080267559 

total error:  0.230769230769 

total error:  0.224080267559 

total error:  0.214046822742 

total error:  0.207357859532 

total error:  0.224080267559 

total error:  0.224080267559 

total error:  0.214046822742 

total error:  0.220735785953 

total error:  0.204013377926 

total error:  0.207357859532 

total error:  0.210702341137 

total error:  0.217391304348 

total error:  0.210702341137 

total error:  0.217391304348 

total error:  0.207357859532 

total error:  0.210702341137 

total error:  0.207357859532 

total error:  0.207357859532 

total error:  0.197324414716 

total error:  0.190635451505 

total error:  0.200668896321 

total error:  0.197324414716 

total error:  0.200668896321 

total error:  0.19397993311 

total error:  0.19397993311 

total error:  0.190635451505 

total error:  0.1872909699 

total error:  0.190635451505 

total error:  0.190635451505 

total error:  0.1872909699 

total error:  0.19397993311 

total error:  0.1872909699 

total error:  0.19397993311 

total error:  0.183946488294 

total error:  0.19397993311 

total error:  0.183946488294 

total error:  0.19397993311 

total error:  0.190635451505 

total error:  0.197324414716 

total error:  0.19397993311 

total error:  0.1872909699 

total error:  0.1872909699 

total error:  0.19397993311 

total error:  0.19397993311 

total error:  0.19397993311 

total error:  0.19397993311 

total error:  0.19397993311 

total error:  0.190635451505 

total error:  0.1872909699 

total error:  0.190635451505 

total error:  0.190635451505 

total error:  0.19397993311 

total error:  0.190635451505 

total error:  0.190635451505 

total error:  0.183946488294 

total error:  0.1872909699 

total error:  0.1872909699 

total error:  0.190635451505 

total error:  0.1872909699 

total error:  0.190635451505 

total error:  0.180602006689 

total error:  0.19397993311 

total error:  0.183946488294 

total error:  0.1872909699 

total error:  0.183946488294 

total error:  0.1872909699 

total error:  0.183946488294 

total error:  0.190635451505 

total error:  0.1872909699 

total error:  0.19397993311 

total error:  0.1872909699 

total error:  0.190635451505 

total error:  0.183946488294 

total error:  0.183946488294 

total error:  0.183946488294 

total error:  0.190635451505 

total error:  0.1872909699 

total error:  0.197324414716 

total error:  0.190635451505 

total error:  0.19397993311 

total error:  0.190635451505 

total error:  0.190635451505 

test preject :-------
[[ 1.]
 [ 1.]
 [ 1.]
 [-1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [ 1.]
 [-1.]
 [ 1.]
 [ 1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [ 1.]
 [-1.]
 [-1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [-1.]
 [-1.]
 [-1.]
 [ 1.]
 [-1.]
 [ 1.]
 [ 1.]
 [-1.]
 [-1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [-1.]
 [ 1.]
 [-1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]]

Process finished with exit code 0
结果显示

我们从结果得知,误差率在19%左右,这里要比 Logistic 的效果要好,Logistic 的误差率为35% 左右。说明通过弱分类器的叠加可以实现较强的分类效果。

4 AdaBoost的优点和缺点

优点:

(1)Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象。

(2)Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。

(3)Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。

(4)Adaboost对同一个训练样本集训练不同的弱分类器,按照一定的方法把这些弱分类器集合起来,构造一个分类能力很强的强分类器,即“三个臭皮匠赛过一个诸葛亮”。

缺点:

在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。

附 完整代码

  1 # -*- coding:utf-8 -*-
  2 
  3 from numpy import *
  4 
  5 # 简单例子的数据
  6 def loadSimpData():
  7     datMat = matrix([[ 1. ,  2.1],
  8         [ 2. ,  1.1],
  9         [ 1.3,  1. ],
 10         [ 1. ,  1. ],
 11         [ 2. ,  1. ]])
 12     classLabels = [1.0, 1.0, -1.0, -1.0, 1.0]
 13     return datMat,classLabels
 14 
 15 # 实例中的数据加载,训练集的名称 'horseColicTraining2.txt',测试集的名称 'horseColicTest2.txt'
 16 def loadDataSet(fileName):
 17     numFeat = len(open(fileName).readline().split('\t')) # 文件的行数
 18     dataMat = []; labelMat = []
 19     fr = open(fileName)
 20     for line in fr.readlines(): # 按行读取文件的数据
 21         lineArr =[]
 22         curLine = line.strip().split('\t') # 以换行符作为行的结束
 23         for i in range(numFeat-1): #
 24             lineArr.append(float(curLine[i]))
 25         dataMat.append(lineArr)
 26         labelMat.append(float(curLine[-1])) # 行的最后一个元素为该对象的类标号
 27     return dataMat,labelMat
 28 
 29 # 树的分类函数,其作用:就是比对每一列的特征值和目标函数,返回比对的结果
 30 # 函数参数:dataMatrix 数据矩阵,dimen 矩阵第几列,threshVal 阈值(分割线),threshIneq  是指'lt' 或 'gt'(最小值或最大值)
 31 def stumpClassify(dataMatrix, dimen, threshVal, threshIneq):
 32     retArray = ones((shape(dataMatrix)[0], 1))
 33     if threshIneq == 'lt':
 34         retArray[dataMatrix[:,dimen] <= threshVal] = -1.0
 35     else :
 36         retArray[dataMatrix[:,dimen] > threshVal] = -1.0
 37     return retArray
 38 
 39 # 弱分类器是构建二叉树函数,通过循环比较得到最佳特征值和它的阈值。D是初始矩阵的权重
 40 def buildStump(dataArr, classLabels, D):
 41     dataMatrix = mat(dataArr); labelMat = mat(classLabels).T
 42     m, n = shape(dataMatrix)
 43     numSteps = 10.0 # 总步长
 44     bestStump = {} # 用来记录最佳的单层决策树的信息:最佳特征的列数、阈值、阈值的最值
 45     bestClasEst = mat(zeros((m, 1))) # 最佳预测类别号
 46     minError = inf # 对错误率初始化为无穷大
 47     for i in range(n): # 对数据的特征属性的遍历,即对矩阵的列遍历
 48         rangeMin = dataMatrix[:,i].min() # 第 i 列的最小值
 49         rangeMax = dataMatrix[:,i].max() # 第 i 列的最大值
 50         stepSize = (rangeMax - rangeMin)/numSteps # 根据第 i 列的最值计算步长的值,即阈值每次的改变量
 51         for j in range(-1, int(numSteps) + 1): # 这里遍历的步长数是 12 次,是为了覆盖整个取值范围,而不仅仅取值在最小值与最大值之间
 52             for inequal in ['lt', 'gt']: # 对阈值的最值的遍历
 53                 threshVal = (rangeMin + float(j) * stepSize) # 阈值根据步长的改变值
 54                 predictedVals = stumpClassify(dataMatrix, i, threshVal, inequal) # 根据现有的阈值对数据的预测
 55                 errArr = mat(ones((m,1)))
 56                 errArr[predictedVals == labelMat] = 0 # 对预测结果与真实值的对比,正确则为 0 ,否则不变(1)
 57                 weightedError = D.T * errArr # 计算错误率,即错误的对象的权值相加
 58                 if weightedError < minError: # 选择最小的错误率,并把记录更小的错误率的信息
 59                     minError = weightedError
 60                     bestClasEst = predictedVals.copy()
 61                     bestStump['dim'] = i
 62                     bestStump['thresh'] = threshVal
 63                     bestStump['ineq'] = inequal
 64     return bestStump, minError, bestClasEst
 65 
 66 # adaboost 算法的实现,参数 dataArr 是数据样本,classLabels 是数据的类别号列表,numIt 是迭代的次数(弱分类器使用的次数)
 67 def adaBoostTrainDS(dataArr, classLabels, numIt = 100):
 68     weakClassArr = [] # 记录每次弱分类器的信息
 69     m = shape(dataArr)[0]
 70     D = mat(ones((m,1))/m) # 初始化权重为 1/m
 71     aggClassEst = mat(zeros((m,1)))
 72     for i in range(numIt): # 算法中错误率不为 0 的情况下,最大循环次数,即迭代次数
 73         bestStump, error, classEst = buildStump(dataArr, classLabels, D) # 在权重为 D 的情况下的最佳单层决策树的信息
 74         #print "D: ", D.T
 75         alpha = float(0.5 * log((1.0 - error) / max(error, 1e-16))) # 弱分类器的权重
 76         bestStump ['alpha'] = alpha
 77         weakClassArr.append(bestStump)
 78         #print 'classEst: ', classEst.T
 79         # 公式求解
 80         expon = multiply(-1 * alpha * mat(classLabels).T, classEst)
 81         D = multiply(D, exp(expon))
 82         D = D/D.sum()
 83         aggClassEst += alpha * classEst # 由各个弱分类器根据其权重 alpha 组合成强分类器
 84         #print 'aggClassEst: ', aggClassEst.T
 85         aggErrors = multiply(sign(aggClassEst) != mat(classLabels).T, ones((m, 1))) # 根据强分类器预测的类别号与真实值对比,其错误对象为 1
 86         errorRate = aggErrors.sum()/m # 计算错误率
 87         print 'total error: ', errorRate,'\n'
 88         if errorRate == 0.0 :break # 错误率为 0 ,则跳出迭代循环
 89     return weakClassArr
 90 
 91 # adaboost 算法的预测函数,参数 datToClass 是预测数据集,classifierArr 是训练样本集之后的弱分类器集合
 92 def adaClassify(datToClass, classifierArr):
 93     dataMatrix = mat(datToClass)
 94     m = shape(dataMatrix)[0]
 95     aggClassEst = mat(zeros((m, 1)))
 96     for i in range(len(classifierArr)): # 遍历弱分类器
 97         classEst = stumpClassify(dataMatrix, classifierArr[i]['dim'], classifierArr[i]['thresh'], classifierArr[i]['ineq']) # 调用弱分类器函数,得到其预测的类别号
 98         aggClassEst += classifierArr[i]['alpha'] * classEst # 由弱分类器组合的强分类器,预测的类别号的值
 99         #print aggClassEst
100     return sign(aggClassEst) # 返回最终预测的类别号
101 
102 if __name__ == '__main__':
103     '''
104     # 简单例子的预测结果
105     D = mat(ones((5,1))/5)
106     datMat, classLabels = loadSimpData()
107     print  buildStump(datMat, classLabels, D)
108     print  adaBoostTrainDS(datMat, classLabels)
109     classifierArr =adaBoostTrainDS(datMat, classLabels)
110     adaClassify([0,0], classifierArr)
111     '''
112     # 实例的预测结果
113     dataMat, labels = loadDataSet('horseColicTraining2.txt')
114     weakClassArr = adaBoostTrainDS(dataMat, labels)
115     testdata,datalabels = loadDataSet('horseColicTest2.txt')
116     print 'test preject :-------'
117     last_sum = adaClassify(testdata, weakClassArr)
118     print last_sum
完整代码

参考资料

 1 Adaboost算法原理分析和实例+代码(简明易懂) :http://blog.csdn.net/guyuealian/article/details/70995333

Adaboost 算法的原理与推导 : http://blog.csdn.net/v_july_v/article/details/40718799

3 《机器学习实战》

4 《统计学习方法》李航等著

posted @ 2017-11-28 20:24  追寻的鹿  阅读(1636)  评论(0编辑  收藏  举报