機器學習之logistic迴歸算法與代碼實現原理

                                       Logistic迴歸算法原理與代碼實現

                                        本文系作者原創,轉載請註明出處:https://www.cnblogs.com/further-further-further/p/10033567.html 

主要思想

           根據現有數據對分類邊界線建立迴歸公式,以此進行分類,其核心是通過最優化算法尋找最佳迴歸係數(權重係數),主要應用於二分類。

算法原理

            二分類的特點是非此即彼,其數學特性符合單位階躍函數,在某一點會發生突變。這也符合我們現實當中的一些應用場景(比如分數從0 到 60會很容易,越往上你所花的時間精力就越大,也就越難)。

          Sigmoid函數的計算公式如下

       

算法步驟

           1. 初始化迴歸係數(權重係數),以Sigmoid作爲分類函數;

           2. 構造代價函數(損失函數),用以表示目標結果與預測結果的差值;

           3. 重複迭代,找到最小代價函數,獲取最佳迴歸係數(權重係數);

           4. 預測測試數據結果,計算平均差錯率;

代碼理解

           在機器學習實戰關於logistic實現的代碼中,我個人認爲代碼可讀性不怎麼好,沒有很好的區分list,array,matrix,

甚至有些字段命名容易造成誤解。

           list,array,matrix區別:

           1. list是不能直接進行數學運算,必須轉化爲array或者matrix;

           2. matrix比array多一維,取值方式[ , ]  例如[0,0];

           3. 含有matrix類型的運算,數組會強制轉化爲矩陣,按照矩陣運算法則進行運算,所得結果類型是矩陣;

           4. 數組乘法下標必須完全一樣,矩陣乘法必須符合 m * n  n* k;

          我將代碼進行了一些修改,後綴可以很清楚數據類型(_list :list    _arr:array   _mat:matrix)      

 

代碼實現(Spyder Python3.6)

           我已將每個方法添加註釋,並將字段名做了修改,因爲數組和矩陣運算規則完全不一樣,字段名如果很清晰的看出數據類型,對於理解代碼背後的思想,

應該會有一些幫助。   

           testSet.txt      

     
  1 -0.017612    14.053064    0
  2 -1.395634    4.662541    1
  3 -0.752157    6.538620    0
  4 -1.322371    7.152853    0
  5 0.423363    11.054677    0
  6 0.406704    7.067335    1
  7 0.667394    12.741452    0
  8 -2.460150    6.866805    1
  9 0.569411    9.548755    0
 10 -0.026632    10.427743    0
 11 0.850433    6.920334    1
 12 1.347183    13.175500    0
 13 1.176813    3.167020    1
 14 -1.781871    9.097953    0
 15 -0.566606    5.749003    1
 16 0.931635    1.589505    1
 17 -0.024205    6.151823    1
 18 -0.036453    2.690988    1
 19 -0.196949    0.444165    1
 20 1.014459    5.754399    1
 21 1.985298    3.230619    1
 22 -1.693453    -0.557540    1
 23 -0.576525    11.778922    0
 24 -0.346811    -1.678730    1
 25 -2.124484    2.672471    1
 26 1.217916    9.597015    0
 27 -0.733928    9.098687    0
 28 -3.642001    -1.618087    1
 29 0.315985    3.523953    1
 30 1.416614    9.619232    0
 31 -0.386323    3.989286    1
 32 0.556921    8.294984    1
 33 1.224863    11.587360    0
 34 -1.347803    -2.406051    1
 35 1.196604    4.951851    1
 36 0.275221    9.543647    0
 37 0.470575    9.332488    0
 38 -1.889567    9.542662    0
 39 -1.527893    12.150579    0
 40 -1.185247    11.309318    0
 41 -0.445678    3.297303    1
 42 1.042222    6.105155    1
 43 -0.618787    10.320986    0
 44 1.152083    0.548467    1
 45 0.828534    2.676045    1
 46 -1.237728    10.549033    0
 47 -0.683565    -2.166125    1
 48 0.229456    5.921938    1
 49 -0.959885    11.555336    0
 50 0.492911    10.993324    0
 51 0.184992    8.721488    0
 52 -0.355715    10.325976    0
 53 -0.397822    8.058397    0
 54 0.824839    13.730343    0
 55 1.507278    5.027866    1
 56 0.099671    6.835839    1
 57 -0.344008    10.717485    0
 58 1.785928    7.718645    1
 59 -0.918801    11.560217    0
 60 -0.364009    4.747300    1
 61 -0.841722    4.119083    1
 62 0.490426    1.960539    1
 63 -0.007194    9.075792    0
 64 0.356107    12.447863    0
 65 0.342578    12.281162    0
 66 -0.810823    -1.466018    1
 67 2.530777    6.476801    1
 68 1.296683    11.607559    0
 69 0.475487    12.040035    0
 70 -0.783277    11.009725    0
 71 0.074798    11.023650    0
 72 -1.337472    0.468339    1
 73 -0.102781    13.763651    0
 74 -0.147324    2.874846    1
 75 0.518389    9.887035    0
 76 1.015399    7.571882    0
 77 -1.658086    -0.027255    1
 78 1.319944    2.171228    1
 79 2.056216    5.019981    1
 80 -0.851633    4.375691    1
 81 -1.510047    6.061992    0
 82 -1.076637    -3.181888    1
 83 1.821096    10.283990    0
 84 3.010150    8.401766    1
 85 -1.099458    1.688274    1
 86 -0.834872    -1.733869    1
 87 -0.846637    3.849075    1
 88 1.400102    12.628781    0
 89 1.752842    5.468166    1
 90 0.078557    0.059736    1
 91 0.089392    -0.715300    1
 92 1.825662    12.693808    0
 93 0.197445    9.744638    0
 94 0.126117    0.922311    1
 95 -0.679797    1.220530    1
 96 0.677983    2.556666    1
 97 0.761349    10.693862    0
 98 -2.168791    0.143632    1
 99 1.388610    9.341997    0
100 0.317029    14.739025    0
訓練數據

           horseColicTraining2.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.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    0.000000
訓練數據

           horseColicTest2.txt         

     
 1 2    1    38.50    54    20    0    1    2    2    3    4    1    2    2    5.90    0    2    42.00    6.30    0    0    1
 2 2    1    37.60    48    36    0    0    1    1    0    3    0    0    0    0    0    0    44.00    6.30    1    5.00    1
 3 1    1    37.7    44    28    0    4    3    2    5    4    4    1    1    0    3    5    45    70    3    2    1
 4 1    1    37    56    24    3    1    4    2    4    4    3    1    1    0    0    0    35    61    3    2    0
 5 2    1    38.00    42    12    3    0    3    1    1    0    1    0    0    0    0    2    37.00    5.80    0    0    1
 6 1    1    0    60    40    3    0    1    1    0    4    0    3    2    0    0    5    42    72    0    0    1
 7 2    1    38.40    80    60    3    2    2    1    3    2    1    2    2    0    1    1    54.00    6.90    0    0    1
 8 2    1    37.80    48    12    2    1    2    1    3    0    1    2    0    0    2    0    48.00    7.30    1    0    1
 9 2    1    37.90    45    36    3    3    3    2    2    3    1    2    1    0    3    0    33.00    5.70    3    0    1
10 2    1    39.00    84    12    3    1    5    1    2    4    2    1    2    7.00    0    4    62.00    5.90    2    2.20    0
11 2    1    38.20    60    24    3    1    3    2    3    3    2    3    3    0    4    4    53.00    7.50    2    1.40    1
12 1    1    0    140    0    0    0    4    2    5    4    4    1    1    0    0    5    30    69    0    0    0
13 1    1    37.90    120    60    3    3    3    1    5    4    4    2    2    7.50    4    5    52.00    6.60    3    1.80    0
14 2    1    38.00    72    36    1    1    3    1    3    0    2    2    1    0    3    5    38.00    6.80    2    2.00    1
15 2    9    38.00    92    28    1    1    2    1    1    3    2    3    0    7.20    0    0    37.00    6.10    1    1.10    1
16 1    1    38.30    66    30    2    3    1    1    2    4    3    3    2    8.50    4    5    37.00    6.00    0    0    1
17 2    1    37.50    48    24    3    1    1    1    2    1    0    1    1    0    3    2    43.00    6.00    1    2.80    1
18 1    1    37.50    88    20    2    3    3    1    4    3    3    0    0    0    0    0    35.00    6.40    1    0    0
19 2    9    0    150    60    4    4    4    2    5    4    4    0    0    0    0    0    0    0    0    0    0
20 1    1    39.7    100    30    0    0    6    2    4    4    3    1    0    0    4    5    65    75    0    0    0
21 1    1    38.30    80    0    3    3    4    2    5    4    3    2    1    0    4    4    45.00    7.50    2    4.60    1
22 2    1    37.50    40    32    3    1    3    1    3    2    3    2    1    0    0    5    32.00    6.40    1    1.10    1
23 1    1    38.40    84    30    3    1    5    2    4    3    3    2    3    6.50    4    4    47.00    7.50    3    0    0
24 1    1    38.10    84    44    4    0    4    2    5    3    1    1    3    5.00    0    4    60.00    6.80    0    5.70    0
25 2    1    38.70    52    0    1    1    1    1    1    3    1    0    0    0    1    3    4.00    74.00    0    0    1
26 2    1    38.10    44    40    2    1    3    1    3    3    1    0    0    0    1    3    35.00    6.80    0    0    1
27 2    1    38.4    52    20    2    1    3    1    1    3    2    2    1    0    3    5    41    63    1    1    1
28 1    1    38.20    60    0    1    0    3    1    2    1    1    1    1    0    4    4    43.00    6.20    2    3.90    1
29 2    1    37.70    40    18    1    1    1    0    3    2    1    1    1    0    3    3    36.00    3.50    0    0    1
30 1    1    39.1    60    10    0    1    1    0    2    3    0    0    0    0    4    4    0    0    0    0    1
31 2    1    37.80    48    16    1    1    1    1    0    1    1    2    1    0    4    3    43.00    7.50    0    0    1
32 1    1    39.00    120    0    4    3    5    2    2    4    3    2    3    8.00    0    0    65.00    8.20    3    4.60    1
33 1    1    38.20    76    0    2    3    2    1    5    3    3    1    2    6.00    1    5    35.00    6.50    2    0.90    1
34 2    1    38.30    88    0    0    0    6    0    0    0    0    0    0    0    0    0    0    0    0    0    0
35 1    1    38.00    80    30    3    3    3    1    0    0    0    0    0    6.00    0    0    48.00    8.30    0    4.30    1
36 1    1    0    0    0    3    1    1    1    2    3    3    1    3    6.00    4    4    0    0    2    0    0
37 1    1    37.60    40    0    1    1    1    1    1    1    1    0    0    0    1    1    0    0    2    2.10    1
38 2    1    37.50    44    0    1    1    1    1    3    3    2    0    0    0    0    0    45.00    5.80    2    1.40    1
39 2    1    38.2    42    16    1    1    3    1    1    3    1    0    0    0    1    0    35    60    1    1    1
40 2    1    38    56    44    3    3    3    0    0    1    1    2    1    0    4    0    47    70    2    1    1
41 2    1    38.30    45    20    3    3    2    2    2    4    1    2    0    0    4    0    0    0    0    0    1
42 1    1    0    48    96    1    1    3    1    0    4    1    2    1    0    1    4    42.00    8.00    1    0    1
43 1    1    37.70    55    28    2    1    2    1    2    3    3    0    3    5.00    4    5    0    0    0    0    1
44 2    1    36.00    100    20    4    3    6    2    2    4    3    1    1    0    4    5    74.00    5.70    2    2.50    0
45 1    1    37.10    60    20    2    0    4    1    3    0    3    0    2    5.00    3    4    64.00    8.50    2    0    1
46 2    1    37.10    114    40    3    0    3    2    2    2    1    0    0    0    0    3    32.00    0    3    6.50    1
47 1    1    38.1    72    30    3    3    3    1    4    4    3    2    1    0    3    5    37    56    3    1    1
48 1    1    37.00    44    12    3    1    1    2    1    1    1    0    0    0    4    2    40.00    6.70    3    8.00    1
49 1    1    38.6    48    20    3    1    1    1    4    3    1    0    0    0    3    0    37    75    0    0    1
50 1    1    0    82    72    3    1    4    1    2    3    3    0    3    0    4    4    53    65    3    2    0
51 1    9    38.20    78    60    4    4    6    0    3    3    3    0    0    0    1    0    59.00    5.80    3    3.10    0
52 2    1    37.8    60    16    1    1    3    1    2    3    2    1    2    0    3    0    41    73    0    0    0
53 1    1    38.7    34    30    2    0    3    1    2    3    0    0    0    0    0    0    33    69    0    2    0
54 1    1    0    36    12    1    1    1    1    1    2    1    1    1    0    1    5    44.00    0    0    0    1
55 2    1    38.30    44    60    0    0    1    1    0    0    0    0    0    0    0    0    6.40    36.00    0    0    1
56 2    1    37.40    54    18    3    0    1    1    3    4    3    2    2    0    4    5    30.00    7.10    2    0    1
57 1    1    0    0    0    4    3    0    2    2    4    1    0    0    0    0    0    54    76    3    2    1
58 1    1    36.6    48    16    3    1    3    1    4    1    1    1    1    0    0    0    27    56    0    0    0
59 1    1    38.5    90    0    1    1    3    1    3    3    3    2    3    2    4    5    47    79    0    0    1
60 1    1    0    75    12    1    1    4    1    5    3    3    0    3    5.80    0    0    58.00    8.50    1    0    1
61 2    1    38.20    42    0    3    1    1    1    1    1    2    2    1    0    3    2    35.00    5.90    2    0    1
62 1    9    38.20    78    60    4    4    6    0    3    3    3    0    0    0    1    0    59.00    5.80    3    3.10    0
63 2    1    38.60    60    30    1    1    3    1    4    2    2    1    1    0    0    0    40.00    6.00    1    0    1
64 2    1    37.80    42    40    1    1    1    1    1    3    1    0    0    0    3    3    36.00    6.20    0    0    1
65 1    1    38    60    12    1    1    2    1    2    1    1    1    1    0    1    4    44    65    3    2    0
66 2    1    38.00    42    12    3    0    3    1    1    1    1    0    0    0    0    1    37.00    5.80    0    0    1
67 2    1    37.60    88    36    3    1    1    1    3    3    2    1    3    1.50    0    0    44.00    6.00    0    0    0
測試數據

           Logistic迴歸實現文件 myLogRegres.py         

     
  1 # -*- coding: utf-8 -*-
  2 """
  3 Created on Tue Nov 27 14:59:08 2018
  4 
  5 @author: weixw
  6 """
  7 
  8 '''
  9 Created on Oct 27, 2010
 10 Logistic Regression Working Module
 11 用Logistic迴歸進行分類(缺點:需要調試固定訓練次數,不能自動找到最優訓練次數)
 12 對多特徵進行二分類
 13 
 14 梯度算法:
 15 1.採用矩陣乘法(gradAscent)
 16 (優點:準確度高,缺點:運算量大)
 17 原始數據矩陣m*k,初始權重矩陣k*n,那麼矩陣乘法運算次數爲:乘法次數 + 加法次數
 18 乘法次數:m*k*n
 19 加法次數: m*(k-1)*n
 20 例如:原始數據矩陣100*3,初始權重矩陣3*1,那麼矩陣乘法運算次數爲:300 + 200 = 500
 21 乘法次數:100*3*1 = 300
 22 加法次數: 100*(3-1)*1 = 200
 23 
 24 2.採用數組乘法(stocGradAscent1)
 25 優點:準確度高,運算量低,且能在每次獲取新的訓練樣本後加入到訓練算法中,提升正確率
 26 由於可以在新樣本到來時對分類器進行增量式更新,因而隨機梯度上升算法是一個在線學習算法
 27 
 28 list,array,matrix區別
 29 1. list是不能直接進行數學運算,必須轉化爲array或者matrix.
 30 2. matrix比array多一維,取值方式[ , ]  例如[0,0]
 31 3. 含有matrix類型的運算,數組會強制轉化爲矩陣,按照矩陣運算法則進行運算,所得結果類型是矩陣
 32 4. 數組乘法下標必須完全一樣,矩陣乘法必須符合 m * n  n* k
 33 '''
 34 import numpy as np
 35 
 36 #加載數據
 37 def loadDataSet():
 38     dataList = []; labelList = []
 39     fr = open('testSet.txt')
 40     for line in fr.readlines():
 41         #空格分隔
 42         lineList = line.strip().split()
 43         #數據樣本,引入1  Z = W0X0 + W1X1 + W2X2 + ... + WnXn  X0 = 1
 44         dataList.append([1.0, float(lineList[0]), float(lineList[1])])
 45         #標籤
 46         labelList.append(int(lineList[2]))
 47     return dataList,labelList
 48 
 49 #sigmoid公式實現 inX是具體實數
 50 def sigmoid(inX):
 51     return 1.0/(1 + np.exp(-inX))
 52 #    if inX >= 0:
 53 #        return 1.0/(1 + np.exp(-inX))
 54 #    else:
 55 #        return 1.0/(1 + np.exp(inX))
 56 
 57 #sigmoid公式實現 inX是矩陣,但會出現溢出
 58 def sigmoidMat(inX):
 59     return 1.0/(1 + np.exp(-inX))
 60 
 61    
 62 
 63 '''
 64 梯度上升算法
 65 輸入:原始數據,標籤數據 數據類型:list
 66 功能:迭代計算損失函數,從而得到最佳迴歸係數(權重係數)
 67       每次是所有樣本點通過矩陣乘法來更新迴歸係數
 68       運算次數:(100 * 3 * 1 + 100 * (3 -1) * 1 ) * maxCycles
 69 輸出:最佳迴歸係數 數據類型:matrix
 70 '''
 71 def gradAscent(dataList, labelsList):
 72     #list=>matrix
 73     dataMat = np.mat(dataList)             #convert to NumPy matrix 矩陣
 74     labelMat = np.mat(labelsList).transpose() #convert to NumPy matrix
 75     m,n = np.shape(dataMat)
 76     alpha = 0.001
 77     #迭代次數
 78     maxCycles = 500   
 79     #數組
 80     weightsArr = np.ones((n,1))
 81     #矩陣預算次數:(100 * 3 * 1 + 100 * (3 -1) * 1 ) * 500
 82     for k in range(maxCycles):              #heavy on matrix operations
 83         #數組和矩陣乘法,數組會自動轉化爲矩陣,結果類型是矩陣
 84         hMat = sigmoidMat(dataMat*weightsArr)     #matrix mult 矩陣乘法,不同於數組乘法
 85         errorMat = (labelMat - hMat)       #vector subtraction
 86         #含有矩陣類型的運算,數組會強制轉化爲矩陣,結果也是矩陣
 87         weightsArr = weightsArr + alpha * dataMat.transpose()* errorMat #matrix mult
 88     #矩陣類型(Arr後綴是因爲代碼運算,不可更改)
 89     return weightsArr
 90 
 91 '''
 92 繪圖
 93 輸入:最佳迴歸係數(權重係數) 數據類型:matrix
 94 功能:數據樣本點以及分界線繪製
 95 對於輸入是數組類型,下面也有對應的代碼處理
 96 0是兩個分類(類別1和類別0)的分界處,因此,設定
 97 0 = W0X0 + W1X1 + W2X2 =>
 98 X2 = (-W0X0 - W1X1)/W2
 99 '''
100 def plotBestFit(weightsMat):
101     import matplotlib.pyplot as plt
102     
103     dataList,labelList=loadDataSet()    
104     dataMat = np.mat(dataList)
105     n = np.shape(dataMat)[0] 
106     xcord1 = []; ycord1 = []
107     xcord2 = []; ycord2 = []
108     for i in range(n):
109         if int(labelList[i])== 1:
110             xcord1.append(dataMat[i,1]); ycord1.append(dataMat[i,2])
111         else:
112             xcord2.append(dataMat[i,1]); ycord2.append(dataMat[i,2])
113     fig = plt.figure()
114     ax = fig.add_subplot(111)
115     ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
116     ax.scatter(xcord2, ycord2, s=30, c='green')
117     x = np.arange(-3.0, 3.0, 0.1)
118     
119     #數組,矩陣兩種方式都可以
120     #數組運算
121     #getA 將矩陣matrix 轉化爲數組array
122 #    weightsArr = weightsMat.getA()
123 #    y = (-weightsArr[0]-weightsArr[1]*x)/weightsArr[2]
124     #矩陣運算
125     y = (-weightsMat[0,0]-weightsMat[1,0]*x)/weightsMat[2,0]
126    
127     ax.plot(x, y)
128     plt.xlabel('X1'); plt.ylabel('X2');
129     plt.show()
130 
131 '''
132 隨機梯度上升:每次僅用一個樣本點更新迴歸係數
133 輸入:原始數據,標籤數據 數據類型:list
134 功能:計算最佳迴歸係數,數組運算
135       運算次數:(3 + 2) * 100 
136       但是錯誤率較高
137 輸出:最佳迴歸係數 數據類型:array    
138 '''
139 def stocGradAscent0(dataList, labelsList):
140     dataArr = np.array(dataList)
141     m,n = np.shape(dataArr)
142     alpha = 0.01
143     weightsArr = np.ones(n)   #initialize to all ones
144     #數組乘法,運算次數:(3 + 2) * 100 = 500 
145     for i in range(m):        
146         h = sigmoid(sum(dataArr[i]*weightsArr))
147         error = labelsList[i] - h
148         print ("error : %f"% error)
149         weightsArr = weightsArr + alpha * error * dataArr[i]
150     #數組
151     return weightsArr
152 
153 '''
154 隨機梯度上升改進版:每次僅用一個隨機樣本點更新迴歸係數,多次迭代
155 輸入:原始數據,標籤數據 數據類型:list
156 功能:計算最佳迴歸係數,數組運算
157       運算次數:(3 + 2)* 100 * numIter      
158 輸出:最佳迴歸係數 數據類型:array    
159 '''
160 def stocGradAscent1(dataList, labelsList, numIter=150):
161     dataArr = np.array(dataList)
162     m,n = np.shape(dataArr)
163     weightsArr = np.ones(n)   #initialize to all ones
164     #運算次數:(3 + 2)* 100 * 150
165     for j in range(numIter):
166         dataIndex = list(range(m))
167         for i in range(m):
168             alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not 
169             #隨機獲取樣本
170             randIndex = int(np.random.uniform(0,len(dataIndex)))#go to 0 because of the constant
171             #數組乘法,元素對應位置相乘 h,error 數值
172             h = sigmoid(sum(dataArr[randIndex]*weightsArr))
173             error = labelsList[randIndex] - h
174             weightsArr = weightsArr + alpha * error * dataArr[randIndex]
175             del(dataIndex[randIndex])
176     #數組
177     return weightsArr
178 
179 '''
180 分類器
181 輸入:
182 inXArr:測試數據 數據類型:array
183 weightsArr:迴歸係數  數據類型:array
184 selectCalType:算法方式(arr : 選擇隨機梯度上升算法,數組運算;mat:梯度上升算法,矩陣運算)
185 輸出:分類結果
186 '''
187 def classifyVector(inXArr, weightsArr, selectCalType):
188     if selectCalType =='arr':
189          prob = sigmoid(sum(inXArr*weightsArr))
190     else:  prob = sigmoidMat(sum(inXArr*weightsArr))
191     if prob > 0.5: return 1.0
192     else: return 0.0
193 
194 '''
195 樣本測試
196 功能:預測測試數據類型,計算每次差錯率
197 '''
198 def colicTest(selectCalType):
199     frTrain = open('horseColicTraining.txt'); frTest = open('horseColicTest.txt')
200     trainingList = []; trainingLabelsList = []
201     for line in frTrain.readlines():
202         currLine = line.strip().split('\t')
203         lineList =[]
204         for i in range(21):
205             lineList.append(float(currLine[i]))
206         trainingList.append(lineList)
207         trainingLabelsList.append(float(currLine[21]))
208         
209     trainWeights = []
210     trainWerightsList = []
211     #數組運算
212     if selectCalType == 'arr':
213        #訓練樣本 500 和 150次結果沒有區別,說明在150次時數據已經收斂,穩定
214        # trainWeights 類型:數組
215        trainWeights = stocGradAscent1(trainingList, trainingLabelsList)
216        #trainWeights = stocGradAscent1(np.array(trainingSet), trainingLabels)
217     #矩陣運算
218     else:
219        trainWerightsList = gradAscent(trainingList, trainingLabelsList).getA()
220        for m in range(np.shape(trainWerightsList)[0]):
221            for item in trainWerightsList[m]:
222                # trainWeights 類型:list
223                trainWeights.append(item)
224     errorCount = 0; numTestVec = 0.0
225     for line in frTest.readlines():
226         numTestVec += 1.0
227         currLine = line.strip().split('\t')
228         lineArr =[]
229         for i in range(len(currLine) -1):
230             lineArr.append(float(currLine[i]))
231         # 不管 trainWeights 類型是array,還是list np.array(trainWeights) => 類型:array
232         if int(classifyVector(np.array(lineArr), np.array(trainWeights), selectCalType))!= int(currLine[len(currLine) -1]):
233                 errorCount += 1       
234     errorRate = (float(errorCount)/numTestVec)
235     print ("the error rate of this test is: %f" % errorRate)
236     return errorRate
237 '''
238 輸入:selectCalType(選擇算法類型,mat:矩陣算法; arr:數組乘法)
239 功能:預測測試數據類型,計算每次差錯率以及10次重複測試的平均錯誤率
240 '''
241 def multiTest(selectCalType):
242     numTests = 10; errorSum=0.0
243     for k in range(numTests):
244         errorSum += colicTest(selectCalType)
245     print ("after %d iterations the average error rate is: %f" % (numTests, errorSum/float(numTests)))
246         
logistic迴歸算法

           測試文件 testMyLogRegres.py    

     
 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Tue Nov 27 15:09:13 2018
 4 
 5 @author: weixw
 6 """
 7 
 8 
 9 import myLogRegres as lr
10 import numpy as np
11 
12 #樣例1 testSet.txt
13 #dataList,labelList = lr.loadDataSet()
14 #梯度上升算法
15 #weightsMat = lr.gradAscent(dataList,labelList)
16 #print (weightsMat)
17 #lr.plotBestFit(weightsMat)
18 
19 #隨機梯度上升算法(訓練次數太少)
20 #weightsArr = lr.stocGradAscent0(dataList,labelList)
21 #lr.plotBestFit((np.mat(weightsArr)).transpose())
22 #隨機梯度上升算法改進版
23 #weightsArr = lr.stocGradAscent1(dataList,labelList,500)
24 #lr.plotBestFit((np.mat(weightsArr)).transpose())
25 
26 #樣例2 從疝氣病症預測病馬的死亡率
27 # 'mat' 表示矩陣乘積運算,'arr' 表示數組乘積運算
28 lr.multiTest('arr')
29 #lr.multiTest('mat')
測試代碼

 

運行結果

 樣例1    testSet.txt

         1. 梯度上升算法(將樣本向量化,與權重矩陣相乘,然後迭代),迭代次數:500,矩陣乘法,運算次數 :(100 * 3 * 1 + 100 * (3 -1) * 1 ) * 500

              數據樣本點以及分界線繪製

           

             可以看出,分界線能夠很好的將樣本數據進行分類,說明所得迴歸係數(權重係數)比較準確。

           2. 隨機梯度上升算法(按順序取每行樣本數據,與權重數組相乘),運算次數:(3 + 2) * 100 

            

               雖然運算次數比梯度上升算法少,但是分界線分類樣本能力較差,說明所得迴歸係數(權重係數)準確度低。

            3. 隨機梯度上升算法改進版(alpha動態變化,每次隨機獲取樣本數據,與權重數組相乘,迭代)

                迭代次數:150,運算次數:(3 + 2) * 100 * 150

                 

                迭代次數:500,運算次數:(3 + 2) * 100 * 500

                

                   由上可以看出,迭代次數在150與500次的時候,結果圖差別不大,說明迭代次數達到150次後,所得迴歸係數趨於穩定,

                   並且已是最佳。相比於梯度上升算法,隨機梯度上升算法改進版運算量更低,並且迴歸係數準確度沒有下降。

樣例2:從疝氣病症預測病馬的死亡率

                採用的是隨機梯度上升算法改進版,迭代次數:10  運算次數:(3 + 2) * 100 * 150 * 10

                

                 每次錯誤率以及平均錯誤率比較高的原因:樣本數據太少,且數據不全;

                 出現溢出報警原因:樣本數據中有含 0 的數據,導致運算時異常;

 

 參考文獻

               《機器學習實戰》

           

 不要讓懶惰佔據你的大腦,不要讓妥協拖垮了你的人生。青春就是一張票,能不能趕上時代的快車,你的步伐就掌握在你的腳下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章