機器學習之Adaboost (自適應加強)算法

注:本篇博文是根據其餘優秀博文編寫的,我只是對其改變了知識的排序,另外代碼是《機器學習實戰》中的。轉載請標明出處及參考資料。算法

1 Adaboost 算法實現過程

1.1 什麼是 Adaboost 算法

Adaboost是英文"Adaptive Boosting"(自適應加強)的縮寫,它的自適應在於:前一個基本分類器被錯誤分類的樣本的權值會增大,而正確分類的樣本的權值會減少,並再次用來訓練下一個基本分類器。同時,在每一輪迭代中,加入一個新的弱分類器,直到達到某個預約的足夠小的錯誤率或達到預先指定的最大迭代次數才肯定最終的強分類器。通俗地講就是,將若干帶有權值的弱分類器累加獲得強分類器的過程。app

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 算法流程以下:ide

步驟1. 首先,初始化訓練數據的權值分佈。每個訓練樣本最開始時都被賦予相同的權值:1/N。函數

 

步驟2. 進行多輪迭代,用m = 1,2, ..., M表示迭代的第多少輪。學習

  a. 使用具備權值分佈Dm的訓練數據集學習,獲得基本分類器(選取讓偏差率最低的閾值來設計基本分類器):測試

  b. 計算Gm(x)在訓練數據集上的分類偏差率:優化

由上述式子可知,Gm(x)在訓練數據集上的偏差率em就是被Gm(x)誤分類樣本的權值之和。
  c. 計算Gm(x)的係數,αm表示Gm(x)在最終分類器中的重要程度(目的:獲得基本分類器在最終分類器中所佔的權重):ui

由上述式子可知,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 《統計學習方法》李航等著

相關文章
相關標籤/搜索