From 4a8c59b6980ef6ad78a28e06ad0600bd00d0d27f Mon Sep 17 00:00:00 2001 From: Yuriy Zaletskyy Date: Tue, 17 Jul 2018 20:28:41 +0300 Subject: [PATCH] Implemented closed form of Ridge regression --- .../LinearRegressionTests.cs | 101 +++ .../LinearRegressionTests/bikes_rent.csv | 732 ++++++++++++++++++ src/Numerics.Tests/Numerics.Tests.csproj | 5 + .../StatisticsTests/CorrelationTests.cs | 28 - .../LinearRegression/MultipleRegression.cs | 28 + src/Numerics/Statistics/Correlation.cs | 126 --- src/TestData/TestData.csproj | 12 - 7 files changed, 866 insertions(+), 166 deletions(-) create mode 100644 src/Numerics.Tests/LinearRegressionTests/LinearRegressionTests.cs create mode 100644 src/Numerics.Tests/LinearRegressionTests/bikes_rent.csv diff --git a/src/Numerics.Tests/LinearRegressionTests/LinearRegressionTests.cs b/src/Numerics.Tests/LinearRegressionTests/LinearRegressionTests.cs new file mode 100644 index 000000000..a58dd89a9 --- /dev/null +++ b/src/Numerics.Tests/LinearRegressionTests/LinearRegressionTests.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using MathNet.Numerics.LinearAlgebra; +using MathNet.Numerics.LinearAlgebra.Double; +using NUnit.Framework; + +namespace MathNet.Numerics.Tests.LinearRegressionTests +{ + [TestFixture, Category("Linear Regression Tests")] + public class LinearRegressionTests + { + [Test] + public void LinearRegressionsTest() + { + /* + x1 = 3; + x2 = 8; + x3 = 39; + + Test solving of system of linear equations: + + x1 + x2 + x3 = 50 + x1 - x2 + x3 = 34 + x1 + x2 - x3 = -23 + + */ + + Matrix input = DenseMatrix.OfArray(new double[,] { + {1,1,1}, + {1,-1,1}, + {1,1,-1}}); + + var y = Vector.Build.DenseOfArray(new double[] { 50, 34, -23 }); + var weights = LinearRegression.MultipleRegression.DirectMethod(input, y); + var diff = new double[3]; + diff[0] = 5.499999; + diff[1] = 8.000000; + diff[2] = 36.50000; + Assert.AreEqual(diff[0] - weights[0] < 0.0001, true); + Assert.AreEqual(diff[1] - weights[1] < 0.0001, true); + Assert.AreEqual(diff[2] - weights[2] < 0.0001, true); + } + + private static double[][] GetInputsOutputsAll(out double[] outputs) + { + var fileName = Path.GetDirectoryName(typeof(LinearRegressionTests).GetTypeInfo().Assembly.Location) + @"\LinearRegressionTests\bikes_rent.csv"; + var data = File.ReadAllLines(fileName); + var dataStrings = new List(data.Skip(1)); + + var dataFragmentedStrigns = dataStrings.Select(a => a.Split(',')).ToList(); + double[][] inputs = new double[dataFragmentedStrigns.Count][]; + outputs = new double[dataFragmentedStrigns.Count]; + + for (int i = 0; i < dataFragmentedStrigns.Count(); i++) + { + inputs[i] = new double[dataFragmentedStrigns[0].Length - 1]; + } + + for (int i = 0; i < dataFragmentedStrigns.Count; i++) + { + int j; + for (j = 0; j < dataFragmentedStrigns[0].Length - 1; j++) + { + inputs[i][j] = double.Parse(dataFragmentedStrigns[i][j]); + } + + outputs[i] = double.Parse(dataFragmentedStrigns[i][j]); + } + + return inputs; + } + + [Test] + public void LinearRegressionsTestRidge() + { + + var inputs = GetInputsOutputsAll(out var outputs); + var result0 = LinearRegression.MultipleRegression.RidgeRegression(inputs, outputs, 0); + var result1 = LinearRegression.MultipleRegression.RidgeRegression(inputs, outputs); + var result2 = LinearRegression.MultipleRegression.RidgeRegression(inputs, outputs, 10); + + Assert.AreEqual(result0.Length, 13); + Assert.AreEqual(result1.Length, 13); + Assert.AreEqual(result2.Length, 13); + + var avg0 = result0.Select(a => Math.Abs(a)).Average(); + var avg1 = result1.Select(a => Math.Abs(a)).Average(); + var avg2 = result2.Select(a => Math.Abs(a)).Average(); + + Assert.Greater(avg1, avg2); // The greater is the value of lambda, the smaller weights should be + Assert.Greater(avg0, avg1); // The greater is the value of lambda, the smaller weights should be + + } + + } +} diff --git a/src/Numerics.Tests/LinearRegressionTests/bikes_rent.csv b/src/Numerics.Tests/LinearRegressionTests/bikes_rent.csv new file mode 100644 index 000000000..85dd1c54f --- /dev/null +++ b/src/Numerics.Tests/LinearRegressionTests/bikes_rent.csv @@ -0,0 +1,732 @@ +season,yr,mnth,holiday,weekday,workingday,weathersit,temp,atemp,hum,windspeed(mph),windspeed(ms),cnt +1,0,1,0,6,0,2,14.110847,18.18125,80.5833,10.749882,4.80549038891,985 +1,0,1,0,0,0,2,14.902598,17.68695,69.6087,16.652113,7.44394859186,801 +1,0,1,0,1,1,1,8.050924,9.47025,43.7273,16.636703,7.43705990165,1349 +1,0,1,0,2,1,1,8.2,10.6061,59.0435,10.739832,4.80099776486,1562 +1,0,1,0,3,1,1,9.305237,11.4635,43.6957,12.5223,5.59780956638,1600 +1,0,1,0,4,1,1,8.378268,11.66045,51.8261,6.0008684,2.68255181046,1606 +1,0,1,0,5,1,2,8.057402,10.44195,49.8696,11.304642,5.05348323648,1510 +1,0,1,0,6,0,2,6.765,8.1127,53.5833,17.875868,7.99100044703,959 +1,0,1,0,0,0,1,5.671653,5.80875,43.4167,24.25065,10.8407018328,822 +1,0,1,0,1,1,1,6.184153,7.5444,48.2917,14.958889,6.68703129191,1321 +1,0,1,0,2,1,2,6.932731,9.5732,68.6364,8.182844,3.65795440322,1263 +1,0,1,0,3,1,1,7.081807,8.02365,59.9545,20.410009,9.12383057667,1162 +1,0,1,0,4,1,1,6.765,7.54415,47.0417,20.167,9.01519892713,1406 +1,0,1,0,5,1,1,6.59567,9.42065,53.7826,8.478716,3.79021725525,1421 +1,0,1,0,6,0,2,9.566653,12.4056,49.875,10.583521,4.73112248547,1248 +1,0,1,0,0,0,1,9.498347,11.71085,48.375,12.625011,5.64372418418,1204 +1,0,1,1,1,0,2,7.209153,8.83855,53.75,12.999139,5.81096960215,1000 +1,0,1,0,2,1,2,8.883347,11.61665,86.1667,9.833925,4.39603263299,683 +1,0,1,0,3,1,2,11.979134,14.9211,74.1739,13.957239,6.23926642825,1650 +1,0,1,0,4,1,2,10.728347,12.7525,53.8333,13.125568,5.8674868127,1927 +1,0,1,0,5,1,1,7.2775,7.89165,45.7083,23.667214,10.5798900313,1543 +1,0,1,0,6,0,1,2.4243464,3.95348,40.0,11.52199,5.15064371927,981 +1,0,1,0,0,0,1,3.9573897,4.941955,43.6522,16.5222,7.38587393831,986 +1,0,1,0,1,1,1,3.9930433,5.8965,49.1739,10.60811,4.74211443898,1416 +1,0,1,0,2,1,2,9.162598,11.7263,61.6957,8.696332,3.88749754135,1985 +1,0,1,0,3,1,3,8.9175,10.18,86.25,19.68795,8.80105051408,506 +1,0,1,0,4,1,1,7.995,10.985,68.75,7.627079,3.40951229325,431 +1,0,1,0,5,1,2,8.342598,11.16585,79.3043,8.2611,3.69293696916,1167 +1,0,1,0,6,0,1,8.057402,10.6063,65.1739,9.739455,4.35380196692,1098 +1,0,1,0,0,0,1,8.877402,12.5161,72.2174,4.9568342,2.21584005364,1096 +1,0,1,0,1,1,2,7.414153,9.3125,60.375,12.541864,5.60655520787,1501 +1,0,2,0,2,1,2,7.879134,11.7265,82.9565,3.565271,1.59377335717,1360 +1,0,2,0,3,1,2,10.66,12.72085,77.5417,17.708636,7.91624318283,1526 +1,0,2,0,4,1,1,7.665237,8.8939,43.7826,18.609384,8.31890210103,1550 +1,0,2,0,5,1,2,8.663464,11.42935,58.5217,8.565213,3.82888377291,1708 +1,0,2,0,6,0,2,9.566653,12.1529,92.9167,10.792293,4.82444926241,1005 +1,0,2,0,0,0,1,11.719153,14.58355,56.8333,9.5006,4.24702726866,1623 +1,0,2,0,1,1,1,11.138347,15.1829,73.8333,3.0423561,1.36001613768,1712 +1,0,2,0,2,1,1,9.054153,9.9123,53.7917,24.25065,10.8407018328,1530 +1,0,2,0,3,1,2,5.526103,7.21415,49.4783,12.652213,5.65588421994,1605 +1,0,2,0,4,1,1,5.918268,7.4774,43.7391,14.869645,6.64713679034,1538 +1,0,2,0,5,1,1,7.752731,10.67545,50.6364,7.27285,3.2511622709,1746 +1,0,2,0,6,0,1,9.1225,11.6477,54.4167,13.625589,6.0910098346,1472 +1,0,2,0,0,0,1,12.977402,16.20565,45.7391,17.479161,7.81366160036,1589 +1,0,2,0,1,1,1,17.015,19.9175,37.5833,27.999836,12.5166902101,1913 +1,0,2,0,2,1,1,10.909567,12.7137,31.4348,19.522058,8.72689226643,1815 +1,0,2,0,3,1,1,13.048701,15.81,42.3478,16.869997,7.54134868127,2115 +1,0,2,0,4,1,1,17.869153,21.4329,50.5,15.416968,6.89180509611,2475 +1,0,2,0,5,1,1,21.388347,25.59915,51.6667,17.749975,7.93472284309,2927 +1,0,2,0,6,0,1,16.365847,19.5702,18.7917,34.000021,15.1989365221,1635 +1,0,2,0,0,0,1,11.693897,13.8665,40.7826,14.956745,6.68607286544,1812 +1,0,2,1,1,0,2,12.436653,14.20375,60.5,20.625682,9.22024228878,1107 +1,0,2,0,2,1,1,7.471102,9.30165,57.7778,13.110761,5.86086767993,1450 +1,0,2,0,3,1,1,9.091299,12.28585,42.3043,6.305571,2.81876218149,1917 +1,0,2,0,4,1,2,12.121732,14.45955,69.7391,16.783232,7.5025623603,1807 +1,0,2,0,5,1,2,14.938268,17.52305,71.2174,23.218113,10.3791296379,1461 +1,0,2,0,6,0,1,11.5825,14.1096,53.7917,12.500257,5.5879557443,1969 +1,0,2,0,0,0,1,14.082598,17.55545,68.0,8.391616,3.75128118015,2402 +1,0,2,0,1,1,2,16.698193,20.0059,87.6364,19.408962,8.67633527045,1446 +1,0,3,0,2,1,1,10.933347,13.19395,53.5,14.500475,6.48210773357,1851 +1,0,3,0,3,1,1,13.735,16.00355,44.9583,20.624811,9.21985292803,2134 +1,0,3,0,4,1,1,8.131653,10.00665,31.8333,15.125518,6.76151899866,1685 +1,0,3,0,5,1,2,10.728347,12.78395,61.0417,13.624182,6.09038086723,1944 +1,0,3,0,6,0,2,15.750847,18.93895,78.9167,16.875357,7.54374474743,2077 +1,0,3,0,0,0,2,15.437402,18.3126,94.8261,23.000229,10.2817295485,605 +1,0,3,0,1,1,1,10.731299,11.92305,55.1304,22.870584,10.2237746983,1872 +1,0,3,0,2,1,1,11.9925,15.12,42.0833,8.08355,3.6135672776,2133 +1,0,3,0,3,1,2,12.129153,14.3304,77.5417,14.75005,6.59367456415,1891 +1,0,3,0,4,1,3,15.952731,19.2834,0.0,17.545759,7.8434327224,623 +1,0,3,0,5,1,2,12.977402,15.25,64.9565,15.60899,6.97764416629,1977 +1,0,3,0,6,0,1,13.495847,16.2875,59.4583,14.791925,6.61239383102,2132 +1,0,3,0,0,0,1,15.758268,19.00455,52.7391,18.130468,8.10481358963,2417 +1,0,3,0,1,1,1,13.333897,16.6,49.6957,9.174042,4.10104693786,2046 +1,0,3,0,2,1,2,13.013031,15.9089,65.5652,12.348703,5.52020697363,2056 +1,0,3,0,3,1,2,14.973897,18.3465,77.6522,13.608839,6.08352212785,2192 +1,0,3,0,4,1,1,17.015,20.51665,60.2917,14.041793,6.27706437193,2744 +1,0,3,0,5,1,1,22.14,26.35045,52.5217,15.478139,6.91915020116,3239 +1,0,3,0,6,0,1,19.3725,23.32625,37.9167,24.667189,11.0269061243,3117 +1,0,3,0,0,0,1,13.6325,16.2875,47.375,13.917307,6.22141573536,2471 +2,0,3,0,1,1,2,17.647835,20.48675,73.7391,19.348461,8.64928967367,2077 +2,0,3,0,2,1,1,18.108347,22.0321,62.4583,15.12525,6.76139919535,2703 +2,0,3,0,3,1,2,14.225237,16.89695,83.9565,15.695487,7.01631068395,2121 +2,0,3,0,4,1,2,11.685,13.54165,80.5833,16.333729,7.30162226196,1865 +2,0,3,0,5,1,1,10.830847,12.8156,49.5,15.458575,6.91040455968,2210 +2,0,3,0,6,0,1,10.899153,12.87855,39.4167,14.041257,6.27682476531,2496 +2,0,3,0,0,0,2,10.374763,12.51695,49.3913,12.3481,5.51993741618,1693 +2,0,3,0,1,1,1,10.838268,12.8787,30.2174,14.217668,6.3556852928,2028 +2,0,3,0,2,1,1,12.4025,14.6454,31.4167,15.208732,6.79871792579,2425 +2,0,3,0,3,1,2,12.3,14.8675,64.6667,11.583496,5.17813857845,1536 +2,0,3,0,4,1,3,11.001653,12.87875,91.8333,14.582282,6.51867769334,1685 +2,0,4,0,5,1,2,12.3,14.1727,68.625,17.333436,7.74851855163,2227 +2,0,4,0,6,0,2,12.915,15.78185,65.375,13.208782,5.90468573983,2252 +2,0,4,0,0,0,1,15.511653,18.93835,48.0,12.208271,5.45743004023,3249 +2,0,4,0,1,1,1,23.506653,27.14645,42.625,25.833257,11.5481703174,3115 +2,0,4,0,2,1,2,16.980847,19.9175,64.2083,26.000489,11.6229275816,1795 +2,0,4,0,3,1,1,16.024153,19.3804,47.0833,17.625221,7.87895440322,2808 +2,0,4,0,4,1,1,17.9375,21.6848,60.2917,10.874904,4.8613786321,3141 +2,0,4,0,5,1,2,13.769153,16.22395,83.625,15.208464,6.79859812249,1471 +2,0,4,0,6,0,2,14.0425,17.07645,87.75,8.916561,3.9859459097,2455 +2,0,4,0,0,0,2,17.493347,21.33685,85.75,9.833389,4.39579302637,2895 +2,0,4,0,1,1,2,24.421732,28.26085,71.6956,21.739758,9.71826464014,3348 +2,0,4,0,2,1,2,20.6025,24.6527,73.9167,18.416893,8.23285337506,2034 +2,0,4,0,3,1,2,16.9125,20.86415,81.9167,16.791339,7.50618641037,2162 +2,0,4,0,4,1,1,19.1675,23.1371,54.0417,7.4169,3.31555654895,3267 +2,0,4,1,5,0,1,18.313347,22.09565,67.125,15.167125,6.78011846223,3126 +2,0,4,0,6,0,3,17.664153,21.2746,88.8333,22.834136,10.2074814484,795 +2,0,4,0,0,0,1,18.723347,22.2848,47.9583,20.334232,9.08995619133,3744 +2,0,4,0,1,1,1,21.0125,25.1573,54.25,10.958989,4.89896691998,3429 +2,0,4,0,2,1,2,20.739153,24.4629,66.5833,10.584057,4.73136209209,3204 +2,0,4,0,3,1,1,24.395,28.2196,61.4167,16.208975,7.24585382208,3944 +2,0,4,0,4,1,1,18.825847,22.6946,40.7083,21.792286,9.74174608851,4189 +2,0,4,0,5,1,2,13.803347,16.0977,72.9583,14.707907,6.57483549397,1683 +2,0,4,0,6,0,2,18.86,22.50605,88.7917,15.458575,6.91040455968,4036 +2,0,4,0,0,0,2,23.848347,27.58815,81.0833,12.875725,5.75580017881,4191 +2,0,4,0,1,1,1,24.873347,28.725,77.6667,12.417311,5.55087662047,4073 +2,0,4,0,2,1,1,25.898347,29.70415,72.9167,21.8755,9.77894501565,4400 +2,0,4,0,3,1,2,25.42,28.7571,83.5417,20.9174,9.35064818954,3872 +2,0,4,0,4,1,2,25.3175,28.94645,70.0833,21.500836,9.61145999106,4058 +2,0,4,0,5,1,1,20.91,24.87315,45.7083,16.084221,7.19008538221,4595 +2,0,4,0,6,0,1,19.3725,23.20105,50.3333,15.750025,7.04069065713,5312 +2,0,5,0,0,0,2,18.518347,22.4102,76.2083,7.125718,3.18539025481,3351 +2,0,5,0,1,1,2,22.515847,26.64165,73.0,12.291418,5.49459901654,4401 +2,0,5,0,2,1,2,25.283347,29.10395,69.7083,22.958689,10.2631600358,4451 +2,0,5,0,3,1,2,16.980847,20.2325,73.7083,22.042732,9.85370227984,2633 +2,0,5,0,4,1,1,18.825847,22.09585,44.4167,19.791264,8.84723468932,4433 +2,0,5,0,5,1,1,19.645847,23.70585,59.0,15.292482,6.83615645954,4608 +2,0,5,0,6,0,1,21.32,25.63105,54.125,10.75015,4.80561019222,4714 +2,0,5,0,0,0,1,21.661653,25.94665,63.1667,5.0007125,2.23545485025,4333 +2,0,5,0,1,1,1,21.8325,26.2623,58.875,11.792,5.27134555208,4362 +2,0,5,0,2,1,1,21.8325,26.13605,48.9167,7.749957,3.46444210997,4803 +2,0,5,0,3,1,1,22.2425,26.42,63.2917,8.083014,3.61332767099,4182 +2,0,5,0,4,1,1,21.935,26.16815,74.75,12.707689,5.68068350469,4864 +2,0,5,0,5,1,2,21.0125,24.715,86.3333,12.041575,5.38291238266,4105 +2,0,5,0,6,0,2,21.354153,25.03145,92.25,9.04165,4.04186410371,3409 +2,0,5,0,0,0,2,23.0625,26.8,86.7083,10.249593,4.5818475637,4553 +2,0,5,0,1,1,1,23.6775,27.5256,78.7917,8.500357,3.79989137237,3958 +2,0,5,0,2,1,2,23.028347,26.92645,83.7917,18.582718,8.30698167188,4123 +2,0,5,0,3,1,2,22.55,26.3579,87.0,13.499964,6.03485203397,3855 +2,0,5,0,4,1,2,21.764153,25.5371,82.9583,7.250271,3.2410688422,4575 +2,0,5,0,5,1,1,22.003347,26.4521,71.9583,8.375871,3.74424273581,4917 +2,0,5,0,6,0,1,24.7025,28.59875,62.6667,8.08355,3.6135672776,5805 +2,0,5,0,0,0,1,24.770847,28.725,74.9583,9.916536,4.43296200268,4660 +2,0,5,0,1,1,2,25.898347,29.5148,81.0,15.667414,7.00376128744,4274 +2,0,5,0,2,1,2,27.06,30.24065,74.0833,13.875164,6.20257666518,4492 +2,0,5,0,3,1,1,27.094153,30.7771,69.625,10.333611,4.61940590076,4978 +2,0,5,0,4,1,1,29.041653,32.7344,67.75,13.376014,5.97944300402,4677 +2,0,5,0,5,1,1,27.948347,31.8504,65.375,16.125493,7.20853509164,4679 +2,0,5,0,6,0,1,26.889153,30.61895,72.9583,15.416164,6.89144568619,4758 +2,0,5,0,0,0,1,27.3675,30.7775,81.875,14.333846,6.40762002682,4788 +2,0,5,1,1,0,1,30.066653,33.5546,68.5,8.792075,3.93029727313,4098 +2,0,5,0,2,1,1,31.775,36.26915,63.6667,7.459043,3.33439561913,3982 +2,0,6,0,3,1,2,31.330847,36.04835,67.7083,13.875164,6.20257666518,3974 +2,0,6,0,4,1,1,29.315,32.1971,30.5,19.583229,8.75423737148,4968 +2,0,6,0,5,1,1,25.42,29.35665,35.4167,16.959107,7.58118328118,5312 +2,0,6,0,6,0,1,26.035,29.7348,45.625,8.250514,3.68820473849,5342 +2,0,6,0,0,0,2,26.581653,30.8402,65.25,9.292364,4.15394009835,4906 +2,0,6,0,1,1,1,27.811653,31.0929,60.0,8.167032,3.65088600805,4548 +2,0,6,0,2,1,1,29.0075,32.7975,59.7917,12.583136,5.6250049173,4833 +2,0,6,0,3,1,1,31.809153,36.36395,62.2083,9.166739,4.09778229772,4401 +2,0,6,0,4,1,2,33.141653,37.87895,56.8333,10.042161,4.48911980331,3915 +2,0,6,0,5,1,1,30.955,35.1646,60.5,9.417118,4.20970853822,4586 +2,0,6,0,6,0,1,29.725,33.9019,65.4583,10.37495,4.63788556102,4966 +2,0,6,0,0,0,1,28.3925,32.16625,74.7917,10.958989,4.89896691998,4460 +2,0,6,0,1,1,1,26.035,30.0827,49.4583,20.45845,9.14548502459,5020 +2,0,6,0,2,1,1,24.770847,29.5773,50.7083,18.041961,8.06524854716,4891 +2,0,6,0,3,1,1,25.693347,29.3877,47.1667,11.250104,5.0291032633,5180 +2,0,6,0,4,1,2,25.761653,29.7673,68.8333,13.833557,6.18397720161,3767 +2,0,6,0,5,1,1,26.615847,30.01915,73.5833,9.582943,4.28383683505,4844 +2,0,6,0,6,0,1,28.563347,32.1977,67.0417,8.000336,3.57636835047,5119 +2,0,6,0,0,0,2,28.665847,32.2923,66.6667,6.834,3.05498435405,4744 +2,0,6,0,1,1,2,26.035,29.7673,74.625,10.416825,4.65660482789,4010 +3,0,6,0,2,1,2,27.914153,31.8823,77.0417,11.458675,5.12234018775,4835 +3,0,6,0,3,1,1,30.066653,34.69145,70.75,11.541554,5.15938936075,4507 +3,0,6,0,4,1,2,29.861653,34.69165,70.3333,15.999868,7.15237729101,4790 +3,0,6,0,5,1,1,29.690847,32.82915,57.3333,14.875675,6.64983236477,4991 +3,0,6,0,6,0,1,28.495,32.16565,48.3333,14.041257,6.27682476531,5202 +3,0,6,0,0,0,1,27.88,31.88145,51.3333,6.3337311,2.83135051408,5305 +3,0,6,0,1,1,2,27.9825,31.8502,65.8333,7.208396,3.22234957532,4708 +3,0,6,0,2,1,1,30.510847,34.6279,63.4167,9.666961,4.32139517211,4648 +3,0,6,0,3,1,1,29.861653,32.7344,49.7917,17.542007,7.84175547608,5225 +3,0,6,0,4,1,1,28.563347,31.8504,43.4167,12.415904,5.55024765311,5515 +3,0,7,0,5,1,1,29.6225,32.6081,39.625,6.874736,3.07319445686,5362 +3,0,7,0,6,0,1,30.271653,33.3654,44.4583,7.709154,3.44620205633,5119 +3,0,7,0,0,0,2,29.383347,33.42875,68.25,15.333486,6.85448636567,4649 +3,0,7,1,1,0,2,29.793347,33.27085,63.7917,5.4591064,2.44036942333,6043 +3,0,7,0,2,1,1,30.613347,34.8169,59.0417,8.459286,3.78153151542,4665 +3,0,7,0,3,1,1,29.52,34.28165,74.3333,10.042161,4.48911980331,4629 +3,0,7,0,4,1,1,30.75,34.34355,65.125,10.6664,4.76817165847,4592 +3,0,7,0,5,1,2,29.075847,33.52415,75.7917,15.083643,6.74279973178,4040 +3,0,7,0,6,0,1,30.066653,33.2079,60.9167,11.250104,5.0291032633,5336 +3,0,7,0,0,0,1,30.6475,34.50125,57.8333,12.292557,5.4951081806,4881 +3,0,7,0,1,1,1,31.2625,36.4902,63.5833,18.916579,8.45622664283,4086 +3,0,7,0,2,1,1,32.560847,36.96375,55.9167,13.417018,5.99777291015,4258 +3,0,7,0,3,1,1,30.613347,34.4702,63.1667,9.790911,4.37680420206,4342 +3,0,7,0,4,1,1,27.914153,31.7552,47.625,16.124689,7.20817568172,5084 +3,0,7,0,5,1,1,27.196653,31.21855,59.125,12.249811,5.47599955297,5538 +3,0,7,0,6,0,1,28.153347,31.91315,58.5,13.958914,6.24001519893,5923 +3,0,7,0,0,0,1,29.485847,33.49165,60.4167,16.417211,7.3389409924,5302 +3,0,7,0,1,1,1,30.613347,35.19625,65.125,14.458868,6.46350827,4458 +3,0,7,0,2,1,1,31.843347,37.37395,65.0417,8.7502,3.91157800626,4541 +3,0,7,0,3,1,1,31.501653,37.3425,70.7083,7.625739,3.40891327671,4332 +3,0,7,0,4,1,2,33.415,41.31855,69.125,14.875407,6.64971256147,3784 +3,0,7,0,5,1,1,34.781653,42.0448,58.0417,8.9177,3.98645507376,3387 +3,0,7,0,6,0,1,34.815847,40.21435,50.0,8.791807,3.93017746983,3285 +3,0,7,0,0,0,1,34.03,39.74145,55.0833,11.334457,5.06681135449,3606 +3,0,7,0,1,1,1,30.476653,36.0479,75.7083,6.0841561,2.7197836835,3840 +3,0,7,0,2,1,1,31.638347,34.84895,54.0833,13.417286,5.99789271346,4590 +3,0,7,0,3,1,1,31.775,34.53335,40.2917,12.292021,5.49486857398,4656 +3,0,7,0,4,1,1,31.945847,36.995,58.3333,11.958093,5.34559365221,4390 +3,0,7,0,5,1,1,34.371653,39.29835,54.25,11.667246,5.2155771122,3846 +3,0,7,0,6,0,1,32.970847,36.42685,46.5833,11.291979,5.04782253017,4475 +3,0,7,0,0,0,1,33.039153,36.4898,48.0833,11.042471,4.93628565042,4302 +3,0,8,0,1,1,1,31.638347,35.1646,55.0833,10.500039,4.69380375503,4266 +3,0,8,0,2,1,1,32.116653,35.35355,49.125,13.79195,6.16537773804,4845 +3,0,8,0,3,1,2,29.998347,33.99685,65.75,9.084061,4.0608229772,3574 +3,0,8,0,4,1,2,29.11,33.2394,75.75,13.20905,5.90480554314,4576 +3,0,8,0,5,1,1,29.144153,32.82835,63.0833,12.374632,5.53179794367,4866 +3,0,8,0,6,0,2,29.383347,33.8077,75.5,15.29275,6.83627626285,4294 +3,0,8,0,0,0,1,30.4425,35.7646,75.2917,13.499629,6.03470227984,3785 +3,0,8,0,1,1,1,31.365,35.16415,59.2083,12.875725,5.75580017881,4326 +3,0,8,0,2,1,1,31.775,36.20605,57.0417,10.125107,4.52619892713,4602 +3,0,8,0,3,1,1,31.433347,34.24915,42.4167,13.417286,5.99789271346,4780 +3,0,8,0,4,1,1,29.4175,32.57605,42.375,11.041332,4.93577648637,4792 +3,0,8,0,5,1,1,29.041653,32.7021,41.5,8.416607,3.76245283862,4905 +3,0,8,0,6,0,2,28.119153,32.2929,72.9583,14.167418,6.33322217255,4150 +3,0,8,0,0,0,2,27.743347,31.2194,81.75,14.916411,6.66804246759,3820 +3,0,8,0,1,1,1,27.299153,30.80835,71.2083,13.999918,6.25834510505,4338 +3,0,8,0,2,1,1,28.734153,32.29185,57.8333,15.834043,7.07824899419,4725 +3,0,8,0,3,1,1,29.656653,33.33355,57.5417,9.625689,4.30294546267,4694 +3,0,8,0,4,1,1,29.178347,33.1129,65.4583,15.624936,6.98477246312,3805 +3,0,8,0,5,1,2,28.085,31.66105,72.2917,9.333636,4.17238980778,4153 +3,0,8,0,6,0,1,28.5975,32.4498,67.4167,6.999289,3.12887304426,5191 +3,0,8,0,0,0,1,29.144153,33.77625,77.0,16.666518,7.45038801967,3873 +3,0,8,0,1,1,1,28.358347,31.9127,47.0,18.54225,8.28889137237,4758 +3,0,8,0,2,1,1,26.274153,30.30335,45.5417,9.833121,4.39567322307,5895 +3,0,8,0,3,1,1,27.606653,31.5346,60.5,16.958236,7.58079392043,5130 +3,0,8,0,4,1,2,28.050847,32.2927,77.1667,14.125811,6.31462270899,3542 +3,0,8,0,5,1,1,28.7,32.98665,76.125,5.6254875,2.51474631203,4661 +3,0,8,0,6,0,2,27.88,31.7778,85.0,25.166339,11.2500397854,1115 +3,0,8,0,0,0,1,28.989419,32.39795,56.1765,20.412153,9.12478900313,4334 +3,0,8,0,1,1,1,26.103347,30.3979,55.4583,10.708275,4.78689092535,4634 +3,0,8,0,2,1,1,26.205847,29.7352,54.8333,8.375536,3.74409298167,5204 +3,0,8,0,3,1,1,26.923347,30.55605,59.7917,5.5833311,2.49590125168,5058 +3,0,9,0,4,1,1,26.855,30.74605,63.9167,9.500332,4.24690746536,5115 +3,0,9,0,5,1,2,26.376653,30.2404,72.7083,9.375243,4.19098927135,4727 +3,0,9,0,6,0,1,27.435847,31.66065,71.6667,12.416775,5.55063701386,4484 +3,0,9,0,0,0,1,29.075847,33.27145,74.2083,13.833289,6.1838573983,4940 +3,0,9,1,1,0,2,27.606653,31.2823,79.0417,14.250632,6.37042109969,3351 +3,0,9,0,2,1,3,22.14,25.76,88.6957,23.044181,10.301377291,2710 +3,0,9,0,3,1,3,24.565847,27.21145,91.7083,6.5003936,2.90585319624,1996 +3,0,9,0,4,1,3,25.990433,27.76805,93.9565,12.914116,5.77296200268,1842 +3,0,9,0,5,1,2,26.65,28.9473,89.7917,8.333393,3.72525391149,3544 +3,0,9,0,6,0,1,27.06,30.3981,75.375,10.291736,4.60068663388,5345 +3,0,9,0,0,0,1,26.786653,30.46145,71.375,7.708618,3.44596244971,5046 +3,0,9,0,1,1,1,26.418268,30.1065,69.2174,5.957171,2.66301788109,4713 +3,0,9,0,2,1,1,26.684153,30.1777,71.25,9.500868,4.24714707197,4763 +3,0,9,0,3,1,1,27.606653,31.345,69.7083,11.2091,5.01077335717,4785 +3,0,9,0,4,1,2,23.6775,27.68355,70.9167,18.166782,8.12104693786,3659 +3,0,9,0,5,1,2,19.235847,23.07375,59.0417,11.000261,4.91741662941,4760 +3,0,9,0,6,0,2,20.158347,23.9256,71.8333,12.708225,5.68092311131,4511 +3,0,9,0,0,0,1,20.8075,24.52685,69.5,11.958361,5.34571345552,4274 +3,0,9,0,1,1,2,22.515847,26.48375,69.0,10.166714,4.5447983907,4539 +3,0,9,0,2,1,2,23.028347,26.61085,88.125,9.041918,4.04198390702,3641 +3,0,9,0,3,1,2,24.395,27.52665,90.0,6.4590814,2.88738551632,4352 +3,0,9,0,4,1,2,25.761653,27.74815,90.2083,8.584375,3.83744970943,4795 +4,0,9,0,5,1,2,24.975847,26.10625,97.25,5.2505689,2.3471474743,2395 +4,0,9,0,6,0,2,24.873347,28.2206,86.25,5.2516811,2.34764465802,5423 +4,0,9,0,0,0,2,26.000847,28.63185,84.5,3.3754064,1.50889870362,5010 +4,0,9,0,1,1,2,26.615847,29.4521,84.8333,7.4169,3.31555654895,4630 +4,0,9,0,2,1,2,26.103347,28.72625,88.5417,7.917457,3.53931917747,4120 +4,0,9,0,3,1,2,26.035,28.7579,84.875,9.958143,4.45156146625,3907 +4,0,9,0,4,1,1,25.283347,28.7256,69.9167,11.583161,5.17798882432,4839 +4,0,9,0,5,1,1,23.130847,27.24145,64.75,13.833825,6.18409700492,5202 +4,0,10,0,6,0,2,16.81,20.64315,75.375,19.583832,8.75450692892,2429 +4,0,10,0,0,0,2,14.623347,17.26585,79.1667,14.874871,6.64947295485,2918 +4,0,10,0,1,1,2,15.750847,19.6023,76.0833,5.5841686,2.49627563701,3570 +4,0,10,0,2,1,1,19.850847,23.6429,71.0,13.792218,6.16549754135,4456 +4,0,10,0,3,1,1,22.071653,26.3569,64.7917,11.87575,5.30878408583,4826 +4,0,10,0,4,1,1,20.260847,24.02125,62.0833,9.041918,4.04198390702,4765 +4,0,10,0,5,1,1,20.944153,25.2202,68.4167,1.5002439,0.670649932946,4985 +4,0,10,0,6,0,1,21.388347,25.6621,70.125,3.0420814,1.35989333929,5409 +4,0,10,0,0,0,1,22.174153,26.19915,72.75,4.25115,1.90037997318,5511 +4,0,10,1,1,0,1,23.404153,27.14625,73.375,2.8343814,1.26704577559,5117 +4,0,10,0,2,1,2,23.233347,27.3048,80.875,9.583814,4.2842261958,4563 +4,0,10,0,3,1,3,22.276653,25.88585,90.625,16.62605,7.43229772016,2416 +4,0,10,0,4,1,2,24.155847,27.5902,89.6667,9.499729,4.24663790791,2913 +4,0,10,0,5,1,2,22.584153,26.48375,71.625,15.000161,6.70548100134,3644 +4,0,10,0,6,0,1,20.773347,24.93625,48.3333,17.291561,7.72979928476,5217 +4,0,10,0,0,0,1,20.978347,25.1577,48.6667,18.875039,8.43765713008,5041 +4,0,10,0,1,1,1,21.900847,25.53625,57.9583,11.750393,5.25274608851,4570 +4,0,10,0,2,1,2,21.8325,26.13605,70.1667,7.375829,3.297196692,4748 +4,0,10,0,3,1,3,22.211299,25.6924,89.5217,16.303713,7.28820429146,2424 +4,0,10,0,4,1,1,19.509153,23.32625,63.625,28.292425,12.6474854716,4195 +4,0,10,0,5,1,1,17.5275,21.1798,57.4167,14.833532,6.63099329459,4304 +4,0,10,0,6,0,1,17.3225,21.2746,62.9167,6.2086689,2.7754443004,4308 +4,0,10,0,0,0,1,17.288347,21.11665,74.125,6.6673375,2.98048167188,4381 +4,0,10,0,1,1,1,18.996653,22.85335,77.2083,7.959064,3.55791864104,4187 +4,0,10,0,2,1,1,19.338347,23.16875,62.2917,11.166086,4.99154492624,4687 +4,0,10,0,3,1,2,19.850847,23.6423,72.0417,9.959014,4.451950827,3894 +4,0,10,0,4,1,2,19.27,22.8523,81.2917,13.250121,5.92316540009,2659 +4,0,10,0,5,1,2,13.564153,15.9406,58.5833,15.375093,6.87308582924,3747 +4,0,10,0,6,0,3,10.420847,11.39565,88.25,23.541857,10.523852034,627 +4,0,10,0,0,0,1,13.085847,16.06645,62.375,11.833339,5.28982521234,3331 +4,0,10,0,1,1,1,13.94,17.80315,70.3333,7.12545,3.1852704515,3669 +4,0,11,0,2,1,1,16.434153,19.8544,68.375,9.083257,4.06046356728,4068 +4,0,11,0,3,1,1,15.4775,19.50665,71.875,5.5001439,2.45871430487,4186 +4,0,11,0,4,1,1,16.741653,20.29605,70.2083,9.166739,4.09778229772,3974 +4,0,11,0,5,1,2,16.536653,20.1696,62.25,18.209193,8.14000581135,4046 +4,0,11,0,6,0,1,13.393347,16.1927,51.9167,12.667154,5.66256325436,3926 +4,0,11,0,0,0,1,14.281653,18.1179,73.4583,6.1676314,2.75709941886,3649 +4,0,11,0,1,1,1,16.195,20.04355,75.875,3.834075,1.7139360751,4035 +4,0,11,0,2,1,1,16.741653,20.6123,72.1667,4.6255125,2.06773021904,4205 +4,0,11,0,3,1,1,16.4,20.45395,75.8333,4.1671186,1.86281564595,4109 +4,0,11,0,4,1,2,15.58,18.68605,81.3333,12.667489,5.66271300849,2933 +4,0,11,1,5,0,1,13.290847,15.34085,44.625,21.083225,9.42477648637,3368 +4,0,11,0,6,0,1,14.623347,17.8971,55.2917,14.208154,6.35143227537,4067 +4,0,11,0,0,0,1,18.074153,21.5275,45.8333,18.875307,8.43777693339,3717 +4,0,11,0,1,1,1,21.73,26.2306,58.7083,20.541932,9.18280375503,4486 +4,0,11,0,2,1,2,21.73,25.37895,68.875,13.375411,5.97917344658,4195 +4,0,11,0,3,1,3,18.723347,22.5994,93.0,9.167543,4.09814170764,1817 +4,0,11,0,4,1,2,14.008347,16.16105,57.5833,20.459254,9.14584443451,3053 +4,0,11,0,5,1,1,11.240847,13.63605,41.0,11.291711,5.04770272687,3392 +4,0,11,0,6,0,1,13.495847,16.22415,50.2083,15.041232,6.72384085829,3663 +4,0,11,0,0,0,2,18.996653,22.8529,68.4583,12.45865,5.56935628073,3520 +4,0,11,0,1,1,3,18.3475,22.2531,91.0,9.249618,4.13483147072,2765 +4,0,11,0,2,1,3,17.083347,21.0848,96.25,7.959064,3.55791864104,1607 +4,0,11,0,3,1,2,18.074153,21.52685,75.7917,22.500275,10.0582364774,2566 +4,0,11,1,4,0,1,15.306653,18.62355,54.9167,11.209368,5.01089316048,1495 +4,0,11,0,5,1,1,15.375,19.03355,64.375,6.6260186,2.96201099687,2792 +4,0,11,0,6,0,1,15.409153,19.25435,68.1667,4.5841936,2.04925954403,3068 +4,0,11,0,0,0,1,18.825847,22.79,69.8333,13.999918,6.25834510505,3071 +4,0,11,0,1,1,1,20.642598,24.5061,74.3043,9.522174,4.25667143496,3867 +4,0,11,0,2,1,2,18.791653,22.56875,83.0833,17.292164,7.7300688422,2914 +4,0,11,0,3,1,1,13.325,15.56105,61.3333,18.167586,8.12140634779,3613 +4,0,12,0,4,1,1,12.8125,15.2777,52.4583,14.750586,6.59391417076,3727 +4,0,12,0,5,1,1,12.880847,16.57165,62.5833,6.750518,3.0176656236,3940 +4,0,12,0,6,0,1,12.265847,15.5302,61.2917,6.4174811,2.86878904783,3614 +4,0,12,0,0,0,1,13.564153,17.455,77.5833,5.6252061,2.51462051855,3485 +4,0,12,0,1,1,2,15.819153,19.69625,82.7083,4.1679561,1.86319003129,3811 +4,0,12,0,2,1,3,18.9625,22.82,94.9583,15.583061,6.96605319624,2594 +4,0,12,0,3,1,3,16.81,20.0123,97.0417,17.833725,7.97216137684,705 +4,0,12,0,4,1,1,10.899153,12.8469,58.0,16.083886,7.18993562807,3322 +4,0,12,0,5,1,1,11.924153,15.8771,69.5833,5.5420189,2.47743357175,3620 +4,0,12,0,6,0,1,11.275,13.3206,50.75,15.625807,6.98516182387,3190 +4,0,12,0,0,0,1,9.054153,12.6577,49.0,4.4582939,1.99297894502,2743 +4,0,12,0,1,1,1,9.771653,13.5098,67.0833,4.25115,1.90037997318,3310 +4,0,12,0,2,1,1,11.5825,15.0569,59.0,9.41685,4.20958873491,3523 +4,0,12,0,3,1,2,13.0175,16.9181,66.375,4.0842061,1.82575149754,3740 +4,0,12,0,4,1,2,17.3225,20.61185,63.4167,17.958814,8.02807957085,3709 +4,0,12,0,5,1,2,15.375,17.99125,50.0417,17.458525,7.80443674564,3577 +4,0,12,0,6,0,2,10.591653,12.46855,56.0833,16.292189,7.28305274922,2739 +4,0,12,0,0,0,1,9.771653,12.27895,58.625,11.375193,5.08502145731,2431 +4,0,12,0,1,1,1,11.343347,14.04665,63.75,11.584032,5.17837818507,3403 +4,0,12,0,2,1,2,15.819153,19.8227,59.5417,4.1252436,1.84409637908,3750 +1,0,12,0,3,1,2,17.561653,21.40085,85.8333,14.8338,6.6311130979,2660 +1,0,12,0,4,1,2,17.356653,21.30605,75.75,3.167425,1.41592534645,3068 +1,0,12,0,5,1,1,15.306653,18.87565,68.625,18.374482,8.21389450156,2209 +1,0,12,0,6,0,1,12.4025,14.9621,54.25,12.750368,5.69976218149,1011 +1,0,12,0,0,0,1,11.266103,13.99805,68.1304,10.391097,4.64510371033,754 +1,0,12,1,1,0,1,13.191299,15.77675,50.6957,16.044155,7.17217478766,1317 +1,0,12,0,2,1,2,13.325,16.38165,76.25,12.62615,5.64423334823,1162 +1,0,12,0,3,1,1,12.26433,13.9987,50.3913,19.695387,8.80437505588,2302 +1,0,12,0,4,1,1,10.181653,13.1946,57.4167,8.000604,3.57648815378,2423 +1,0,12,0,5,1,1,12.778347,15.9406,63.6667,9.000579,4.02350424676,2999 +1,0,12,0,6,0,1,16.81,20.70605,61.5833,14.750318,6.59379436746,2485 +1,1,1,0,0,0,1,15.17,18.78105,69.25,12.875189,5.75556057219,2294 +1,1,1,1,1,0,1,11.194763,12.6152,38.1304,22.087555,9.8737393831,1951 +1,1,1,0,2,1,1,6.15,6.31375,44.125,24.499957,10.9521488601,2236 +1,1,1,0,3,1,2,4.4075,5.96685,41.4583,12.3749,5.53191774698,2368 +1,1,1,0,4,1,1,10.899153,13.9206,52.4167,8.709129,3.89321814931,3272 +1,1,1,0,5,1,1,13.700847,17.01335,54.2083,11.249836,5.02898345999,4098 +1,1,1,0,6,0,1,16.126653,19.53895,53.1667,11.708786,5.23414662494,4521 +1,1,1,0,0,0,1,13.8375,17.0129,46.5,12.833314,5.73684130532,3425 +1,1,1,0,1,1,2,9.190847,12.37395,70.1667,6.6263,2.96213679034,2376 +1,1,1,0,2,1,1,12.656536,15.9413,64.6522,12.565984,5.61733750559,3598 +1,1,1,0,3,1,2,11.240847,14.14105,84.75,8.791807,3.93017746983,2177 +1,1,1,0,4,1,2,15.6825,19.0969,80.2917,12.124789,5.42011130979,4097 +1,1,1,0,5,1,1,11.240847,12.4681,50.75,25.333236,11.3246472955,3214 +1,1,1,0,6,0,1,7.38,9.15435,45.75,12.541261,5.60628565042,2493 +1,1,1,0,0,0,1,6.833347,8.08125,41.9167,16.834286,7.52538489048,2311 +1,1,1,1,1,0,1,7.79,9.53315,52.25,15.500986,6.92936343317,2298 +1,1,1,0,2,1,2,15.294763,18.2139,71.6087,23.39171,10.4567322307,2935 +1,1,1,0,3,1,1,12.436653,13.7627,44.3333,27.833743,12.44244211,3376 +1,1,1,0,4,1,1,7.79,9.5019,49.75,14.750586,6.59391417076,3292 +1,1,1,0,5,1,2,8.9175,11.0479,45.0,13.58425,6.07253017434,3163 +1,1,1,0,6,0,2,7.106653,8.74375,83.125,14.917014,6.66831202503,1301 +1,1,1,0,0,0,2,6.6625,8.1125,79.625,13.375746,5.97932320072,1977 +1,1,1,0,1,1,2,8.951653,12.1529,91.125,7.417436,3.31579615557,2432 +1,1,1,0,2,1,1,14.0425,17.4554,83.5833,8.292389,3.70692400536,4339 +1,1,1,0,3,1,1,12.060847,14.74105,64.375,10.791757,4.82420965579,4270 +1,1,1,0,4,1,2,14.008347,17.8025,76.9583,4.9175186,2.19826490836,4075 +1,1,1,0,5,1,2,17.425,20.76915,74.125,22.958689,10.2631600358,3456 +1,1,1,0,6,0,1,12.949153,16.31895,54.3333,14.125543,6.31450290568,4023 +1,1,1,0,0,0,1,11.5825,13.63605,31.125,16.08335,7.18969602146,3243 +1,1,1,0,1,1,1,11.035847,13.13125,40.0833,14.458064,6.46314886008,3624 +1,1,1,0,2,1,1,15.99,19.06585,41.6667,17.541739,7.84163567278,4509 +1,1,2,0,3,1,1,19.235847,23.3269,50.7917,12.667489,5.66271300849,4579 +1,1,2,0,4,1,2,16.365847,19.94855,67.2917,12.541529,5.60640545373,3761 +1,1,2,0,5,1,1,12.846653,15.4673,52.6667,11.959232,5.34610281627,4151 +1,1,2,0,6,0,2,10.830847,13.63625,77.9583,8.167032,3.65088600805,2832 +1,1,2,0,0,0,2,10.899153,13.22605,68.7917,11.791732,5.27122574877,2947 +1,1,2,0,1,1,1,11.586969,14.8213,62.2174,10.3046,4.60643719267,3784 +1,1,2,0,2,1,1,14.520847,18.0552,49.625,9.874393,4.4141229325,4375 +1,1,2,0,3,1,2,10.523347,13.32105,72.2917,8.959307,4.00505453733,2802 +1,1,2,0,4,1,1,10.865,13.0994,56.2083,13.000479,5.81156861869,3830 +1,1,2,0,5,1,2,11.514153,14.6779,54.0,7.834243,3.50212025034,3831 +1,1,2,0,6,0,3,9.190847,10.54335,73.125,19.416332,8.67962986142,2169 +1,1,2,0,0,0,1,5.2275,5.0829,46.4583,27.417204,12.2562378185,1529 +1,1,2,0,1,1,1,9.1225,11.39565,41.125,11.207961,5.01026419312,3422 +1,1,2,0,2,1,2,13.085847,16.6973,50.875,9.458993,4.2284278051,3922 +1,1,2,0,3,1,1,14.281653,17.58145,53.125,12.1672,5.43907018328,4169 +1,1,2,0,4,1,2,12.983347,16.5081,75.2917,6.125475,2.73825435852,3005 +1,1,2,0,5,1,1,14.076653,17.58145,63.4583,13.791682,6.16525793473,4154 +1,1,2,0,6,0,1,14.213347,17.77125,53.4583,12.792243,5.71848144837,4318 +1,1,2,0,0,0,2,11.48,13.2894,51.5833,16.958504,7.58091372374,2689 +1,1,2,1,1,0,1,11.48,13.66955,50.7826,15.348561,6.86122530174,3129 +1,1,2,0,2,1,1,11.800866,14.75565,59.4348,13.783039,6.16139427805,3777 +1,1,2,0,3,1,1,16.229153,19.63335,56.7917,15.709557,7.02260035762,4773 +1,1,2,0,4,1,1,18.620847,22.2223,55.4583,12.791171,5.71800223514,5062 +1,1,2,0,5,1,2,16.7075,20.54855,73.75,15.916989,7.11532811802,3487 +1,1,2,0,6,0,1,11.924153,12.78375,39.5833,28.250014,12.6285265981,2732 +1,1,2,0,0,0,1,11.445847,13.4154,41.0,13.750343,6.14677827447,3389 +1,1,2,0,1,1,1,15.033347,17.8977,49.0833,17.958211,8.02781001341,4322 +1,1,2,0,2,1,1,14.725847,17.67625,39.5833,12.958939,5.79299910595,4363 +1,1,2,0,3,1,2,14.118268,17.4235,80.4783,12.000839,5.36470227984,1834 +1,1,3,0,4,1,1,19.919153,23.76855,61.5417,15.208129,6.79844836835,4990 +1,1,3,0,5,1,2,14.486653,17.9921,65.7083,9.708568,4.33999463567,3194 +1,1,3,0,6,0,2,16.980847,20.6746,62.125,10.792293,4.82444926241,4066 +1,1,3,0,0,0,1,13.359153,15.15105,40.3333,22.416257,10.0206781404,3423 +1,1,3,0,1,1,1,9.976653,12.05855,50.625,15.333486,6.85448636567,3333 +1,1,3,0,2,1,1,10.591653,12.7521,45.6667,13.458625,6.01637237371,3956 +1,1,3,0,3,1,1,16.570847,19.255,51.3333,23.167193,10.3563670094,4916 +1,1,3,0,4,1,1,21.6275,26.2302,56.75,29.584721,13.2251770228,5382 +1,1,3,0,5,1,2,16.844153,19.85415,40.7083,27.7916,12.4236030398,4569 +1,1,3,0,6,0,1,11.7875,13.88835,35.0417,15.12525,6.76139919535,4118 +1,1,3,0,0,0,1,14.831299,17.9835,47.6957,14.913329,6.66666472955,4911 +1,1,3,0,1,1,1,19.133347,22.9796,48.9167,13.916771,6.22117612874,5298 +1,1,3,0,2,1,1,23.165,27.14645,61.75,15.87565,7.09684845776,5847 +1,1,3,0,3,1,1,23.4725,27.43085,50.7083,7.709154,3.44620205633,6312 +1,1,3,0,4,1,1,22.8575,26.64125,57.9583,10.042161,4.48911980331,6192 +1,1,3,0,5,1,2,17.869153,21.81145,84.2083,7.583864,3.39019400983,4378 +1,1,3,0,6,0,2,21.080847,25.2523,75.5833,7.417168,3.31567635226,7836 +1,1,3,0,0,0,2,19.3725,23.2,81.0,8.501161,3.8002507823,5892 +1,1,3,0,1,1,1,22.345,26.64105,72.875,10.875239,4.86152838623,6153 +1,1,3,0,2,1,1,22.994153,26.92665,80.7917,8.125157,3.63216674117,6093 +2,1,3,0,3,1,2,21.798347,25.6629,82.125,6.0004061,2.68234514975,6230 +2,1,3,0,4,1,1,22.720847,26.57835,83.125,7.876654,3.52107912383,6871 +2,1,3,0,5,1,2,24.668347,28.50335,69.4167,7.7921,3.48328118015,8362 +2,1,3,0,6,0,2,20.6025,24.33665,88.5417,12.916461,5.77401028163,3372 +2,1,3,0,0,0,2,17.9375,21.8744,88.0833,14.791925,6.61239383102,4996 +2,1,3,0,1,1,1,18.279153,21.9375,47.7917,25.917007,11.5856088511,5558 +2,1,3,0,2,1,1,13.256653,15.7827,29.0,12.541864,5.60655520787,5102 +2,1,3,0,3,1,1,19.850847,23.5475,48.125,19.541957,8.73578766205,5698 +2,1,3,0,4,1,1,20.260847,24.1152,43.9167,21.41655,9.57378185069,6133 +2,1,3,0,5,1,2,15.17,18.78105,58.0833,9.250489,4.13522083147,5459 +2,1,3,0,6,0,2,17.390847,21.0854,73.8333,16.791339,7.50618641037,6235 +2,1,4,0,0,0,2,17.459153,20.86435,67.625,11.541889,5.15953911489,6041 +2,1,4,0,1,1,1,17.790433,21.37565,50.4348,20.913313,9.34882118909,5936 +2,1,4,0,2,1,1,19.133347,23.07415,39.6667,6.708911,2.99906616004,6772 +2,1,4,0,3,1,1,22.208347,26.6725,46.9583,12.125325,5.42035091641,6436 +2,1,4,0,4,1,1,17.835,21.55815,37.4167,14.708443,6.57507510058,6457 +2,1,4,0,5,1,1,16.536653,19.53835,37.7083,20.125996,8.99686902101,6460 +2,1,4,0,6,0,1,17.9375,21.30645,25.4167,18.416357,8.23261376844,6857 +2,1,4,0,0,0,1,20.5,24.62125,27.5833,15.583932,6.966442557,5169 +2,1,4,0,1,1,1,20.055847,23.8319,31.75,23.999132,10.7282664283,5585 +2,1,4,0,2,1,1,18.313347,21.81165,43.5,16.708125,7.46898748324,5918 +2,1,4,0,3,1,1,14.296536,16.8637,46.9565,19.783358,8.84370049173,4862 +2,1,4,0,4,1,1,16.2975,19.3802,46.625,19.458743,8.69858873491,5409 +2,1,4,0,5,1,1,18.1425,21.5904,40.8333,10.416557,4.65648502459,6398 +2,1,4,0,6,0,1,20.295,24.3998,50.2917,12.791439,5.71812203844,7460 +2,1,4,0,0,0,1,24.873347,28.69375,50.7917,15.083643,6.74279973178,7132 +2,1,4,1,1,0,1,27.230847,30.74625,56.1667,19.083543,8.53086410371,6370 +2,1,4,0,2,1,1,24.941653,29.92435,39.0417,18.333143,8.19541484131,6691 +2,1,4,0,3,1,2,18.996653,22.8519,56.9167,11.250104,5.0291032633,4367 +2,1,4,0,4,1,1,20.431653,24.6523,61.25,4.4172564,1.97463406348,6565 +2,1,4,0,5,1,1,21.593347,25.78875,69.4583,10.041357,4.48876039338,7290 +2,1,4,0,6,0,1,23.37,27.14605,68.2917,19.000329,8.49366517658,6624 +2,1,4,0,0,0,3,16.263347,19.4752,83.5417,23.084582,10.3194376397,1027 +2,1,4,0,1,1,2,13.188347,15.05625,76.6667,20.334232,9.08995619133,3214 +2,1,4,0,2,1,1,16.946653,20.26415,45.4167,16.708661,7.46922708985,5633 +2,1,4,0,3,1,1,19.543347,23.51585,42.7917,7.959064,3.55791864104,6196 +2,1,4,0,4,1,2,20.431653,24.17915,75.6667,11.833875,5.29006481895,5026 +2,1,4,0,5,1,1,18.7575,22.63185,40.0833,23.291411,10.4118958426,6233 +2,1,4,0,6,0,2,15.443347,18.8752,48.9583,8.708325,3.89285873938,4220 +2,1,4,0,0,0,1,18.791653,22.50605,58.7083,7.832836,3.50149128297,6304 +2,1,4,0,1,1,2,19.030847,22.8848,57.0,11.499746,5.1407000447,5572 +2,1,5,0,2,1,2,25.146653,28.85105,65.9583,10.458432,4.67520429146,5740 +2,1,5,0,3,1,1,23.130847,26.8948,79.7083,9.249886,4.13495127403,6169 +2,1,5,0,4,1,2,22.96,26.8621,76.8333,8.957632,4.00430576665,6421 +2,1,5,0,5,1,1,25.7275,29.54585,73.5417,10.916846,4.8801278498,6296 +2,1,5,0,6,0,2,25.488347,29.2304,75.6667,10.250464,4.58223692445,6883 +2,1,5,0,0,0,2,23.0625,27.33685,74.0,10.041893,4.489,6359 +2,1,5,0,1,1,2,22.0375,26.3571,66.4167,15.458307,6.91028475637,6273 +2,1,5,0,2,1,2,23.848347,27.87355,68.5833,19.833943,8.86631336612,5728 +2,1,5,0,3,1,2,23.575,27.65125,74.4167,14.499604,6.48171837282,4717 +2,1,5,0,4,1,1,20.739153,24.58915,55.2083,21.042221,9.40644658024,6572 +2,1,5,0,5,1,1,21.866653,26.04165,36.0417,15.874779,7.096459097,7030 +2,1,5,0,6,0,1,23.130847,27.24085,48.0417,8.249911,3.68793518105,7429 +2,1,5,0,0,0,1,25.1125,29.2619,57.625,15.082839,6.74244032186,6118 +2,1,5,0,1,1,2,23.506653,27.495,78.9583,14.250364,6.37030129638,2843 +2,1,5,0,2,1,2,25.078347,28.8202,79.4583,9.875264,4.41451229325,5115 +2,1,5,0,3,1,1,26.103347,29.79875,69.7917,8.208304,3.66933571748,7424 +2,1,5,0,4,1,1,24.326653,28.63065,52.0,15.374825,6.87296602593,7384 +2,1,5,0,5,1,1,23.130847,27.55605,52.3333,9.166739,4.09778229772,7639 +2,1,5,0,6,0,1,24.6,28.3454,45.625,5.626325,2.51512069736,8294 +2,1,5,0,0,0,1,25.454153,29.19835,53.0417,17.042589,7.61850201162,7129 +2,1,5,0,1,1,2,24.531653,28.28335,81.125,15.624668,6.98465265981,4359 +2,1,5,0,2,1,2,25.215,29.04125,76.5833,7.917189,3.53919937416,6073 +2,1,5,0,3,1,2,25.488347,29.2306,77.4583,6.834,3.05498435405,5260 +2,1,5,0,4,1,1,26.855,30.335,71.6667,11.584032,5.17837818507,6770 +2,1,5,0,5,1,1,27.88,31.37645,74.7083,9.41685,4.20958873491,6734 +2,1,5,0,6,0,1,28.3925,32.1348,73.25,13.332464,5.95997496647,6536 +2,1,5,0,0,0,1,28.29,32.07125,69.7083,14.416457,6.44454939651,6591 +2,1,5,1,1,0,1,29.2125,33.965,67.625,13.166907,5.88596647295,6043 +2,1,5,0,2,1,1,29.6225,33.6496,68.4583,19.7918,8.84747429593,5743 +2,1,5,0,3,1,2,26.923347,30.55645,67.0,9.000043,4.02326464014,6855 +2,1,5,0,4,1,1,27.88,31.56645,49.2917,13.083693,5.84876754582,7338 +2,1,6,0,5,1,2,26.820847,30.3981,75.5417,15.916721,7.11520831471,4127 +2,1,6,0,6,0,1,23.916653,28.3144,54.9167,12.499654,5.58768618686,8120 +2,1,6,0,0,0,1,24.7025,28.75665,49.3333,12.333829,5.51355789003,7641 +2,1,6,0,1,1,1,24.4975,28.91415,48.7083,19.083811,8.53098390702,6998 +2,1,6,0,2,1,2,22.174153,26.2946,61.3333,14.041525,6.27694456862,7001 +2,1,6,0,3,1,1,22.720847,27.1146,61.125,5.167375,2.30995753241,7055 +2,1,6,0,4,1,1,24.7025,28.4721,56.7083,10.54245,4.71276262852,7494 +2,1,6,0,5,1,1,26.615847,29.8931,46.7917,11.750661,5.25286589182,7736 +2,1,6,0,6,0,1,29.144153,32.41835,43.7083,9.667229,4.32151497541,7498 +2,1,6,0,0,0,1,29.793347,33.17585,53.8333,8.959307,4.00505453733,6598 +2,1,6,0,1,1,2,29.554153,32.98605,58.7917,13.916771,6.22117612874,6664 +2,1,6,0,2,1,2,26.786653,29.89375,83.3333,14.374582,6.42583012964,4972 +2,1,6,0,3,1,1,26.889153,30.55585,58.2083,22.999693,10.2814899419,7421 +2,1,6,0,4,1,1,26.581653,31.21915,56.9583,17.000111,7.5995131873,7363 +2,1,6,0,5,1,1,26.205847,29.9877,58.9583,11.833339,5.28982521234,7665 +2,1,6,0,6,0,1,25.898347,29.7354,50.4167,11.166689,4.99181448368,7702 +2,1,6,0,0,0,1,24.2925,28.59875,59.875,9.708568,4.33999463567,6978 +2,1,6,0,1,1,2,23.301653,27.2421,77.7917,11.707982,5.23378721502,5099 +2,1,6,0,2,1,1,28.221653,32.7346,69.0,9.917139,4.43323156013,6825 +2,1,6,0,3,1,1,32.0825,36.04875,59.2083,7.625404,3.40876352257,6211 +3,1,6,0,4,1,1,33.039153,37.6271,56.7917,7.958729,3.5577688869,5905 +3,1,6,0,5,1,1,31.8775,36.20605,57.375,12.250414,5.47626911042,5823 +3,1,6,0,6,0,1,29.998347,32.6396,53.4583,12.041307,5.38279257935,7458 +3,1,6,0,0,0,1,30.476653,33.7127,47.9167,9.750175,4.35859409924,6891 +3,1,6,0,1,1,1,29.349153,32.7021,50.4167,20.125661,8.99671926688,6779 +3,1,6,0,2,1,1,25.864153,29.7352,37.3333,23.292014,10.4121654001,7442 +3,1,6,0,3,1,1,28.5975,32.0396,36.0,18.208925,8.13988600805,7335 +3,1,6,0,4,1,1,30.715847,33.7756,42.25,11.50055,5.14105945463,6879 +3,1,6,0,5,1,1,34.200847,39.33065,48.875,11.082939,4.95437594993,5463 +3,1,6,0,6,0,1,31.365,34.3754,60.125,10.791757,4.82420965579,5687 +3,1,7,0,0,0,1,33.449153,37.53145,51.875,11.291443,5.04758292356,5531 +3,1,7,0,1,1,1,32.048347,35.1019,44.7083,13.082889,5.8484081359,6227 +3,1,7,0,2,1,1,32.014153,35.1325,49.2083,8.457879,3.78090254806,6660 +3,1,7,1,3,0,1,32.355847,36.61685,53.875,9.04165,4.04186410371,7403 +3,1,7,0,4,1,1,33.9275,38.06835,45.7917,12.999943,5.81132901207,6241 +3,1,7,0,5,1,1,33.961653,37.62665,45.0833,9.791514,4.3770737595,6207 +3,1,7,0,6,0,1,35.328347,40.24565,49.2083,10.958118,4.89857755923,4840 +3,1,7,0,0,0,1,33.7225,39.5198,57.375,8.417143,3.76269244524,4672 +3,1,7,0,1,1,2,29.144153,32.7027,68.3333,12.125325,5.42035091641,6569 +3,1,7,0,2,1,2,29.554153,33.2398,66.75,10.166379,4.54464863657,6290 +3,1,7,0,3,1,1,29.383347,32.51355,63.3333,10.166111,4.54452883326,7264 +3,1,7,0,4,1,1,29.349153,32.73415,52.9583,9.833925,4.39603263299,7446 +3,1,7,0,5,1,2,29.998347,33.39665,48.5833,5.41695,2.42152436299,7499 +3,1,7,0,6,0,2,28.836653,33.3021,69.9167,9.626493,4.3033048726,6969 +3,1,7,0,0,0,1,30.579153,35.2598,71.7917,11.166689,4.99181448368,6031 +3,1,7,0,1,1,1,31.296653,36.20625,64.5,11.000529,4.91753643272,6830 +3,1,7,0,2,1,1,33.551653,37.78415,50.5833,7.666743,3.42724318283,6786 +3,1,7,0,3,1,1,32.526653,37.27915,57.7083,9.208614,4.1165015646,5713 +3,1,7,0,4,1,1,31.57,35.7321,60.0417,11.083743,4.95473535986,6591 +3,1,7,0,5,1,2,27.299153,30.65125,84.4167,14.000789,6.2587344658,5870 +3,1,7,0,6,0,3,24.429153,27.4956,86.5417,14.2911,6.3885113992,4459 +3,1,7,0,0,0,2,27.3675,31.15625,76.25,6.2926936,2.81300563254,7410 +3,1,7,0,1,1,1,30.408347,34.50085,69.4167,9.291761,4.1536705409,6966 +3,1,7,0,2,1,1,30.784153,35.3225,65.5,14.167418,6.33322217255,7592 +3,1,7,0,3,1,1,29.690847,32.7027,45.0,11.0416,4.93589628967,8173 +3,1,7,0,4,1,1,31.843347,36.96315,59.6667,19.082471,8.53038489048,6861 +3,1,7,0,5,1,1,32.048347,36.71085,59.4583,10.250464,4.58223692445,6904 +3,1,7,0,6,0,1,30.989153,34.8802,61.3333,10.54245,4.71276262852,6685 +3,1,7,0,0,0,1,29.588347,33.39665,62.375,11.416532,5.10350111757,6597 +3,1,7,0,1,1,1,29.964153,34.24935,66.875,10.292339,4.60095619133,7105 +3,1,7,0,2,1,1,29.246653,33.1448,70.4167,11.083475,4.95461555655,7216 +3,1,8,0,3,1,1,29.4175,33.3654,67.75,9.458993,4.2284278051,7580 +3,1,8,0,4,1,1,30.8525,35.3544,65.9583,8.666718,3.87425927582,7261 +3,1,8,0,5,1,2,31.399153,36.14335,64.25,14.458064,6.46314886008,7175 +3,1,8,0,6,0,1,32.526653,37.56335,61.3333,17.249686,7.71108001788,6824 +3,1,8,0,0,0,1,31.535847,36.55395,65.25,19.458207,8.6983491283,5464 +3,1,8,0,1,1,2,30.8525,35.5123,65.4167,8.666718,3.87425927582,7013 +3,1,8,0,2,1,2,30.169153,34.88105,70.375,7.832836,3.50149128297,7273 +3,1,8,0,3,1,2,30.75,35.38585,67.2917,7.4169,3.31555654895,7534 +3,1,8,0,4,1,1,30.989153,34.9754,62.0417,10.4587,4.67532409477,7286 +3,1,8,0,5,1,2,29.349153,33.3971,71.5833,16.000471,7.15264684846,5786 +3,1,8,0,6,0,2,28.3925,31.91335,73.2917,13.834093,6.18421680823,6299 +3,1,8,0,0,0,1,28.734153,32.22895,53.0417,8.208304,3.66933571748,6544 +3,1,8,0,1,1,1,29.554153,33.1127,54.5417,9.126204,4.07966204738,6883 +3,1,8,0,2,1,1,29.793347,33.83895,68.6667,11.333586,5.06642199374,6784 +3,1,8,0,3,1,1,28.973347,32.70185,61.9583,11.374657,5.08478185069,7347 +3,1,8,0,4,1,1,29.485847,32.7344,51.9167,9.500332,4.24690746536,7605 +3,1,8,0,5,1,1,29.656653,12.12,57.0833,15.500718,6.92924362986,7148 +3,1,8,0,6,0,1,27.811653,30.90355,60.3333,11.917089,5.32726374609,7865 +3,1,8,0,0,0,2,26.069153,30.1777,71.1667,5.79215,2.58924899419,4549 +3,1,8,0,1,1,2,26.069153,29.79835,73.4167,8.708593,3.89297854269,6530 +3,1,8,0,2,1,1,26.615847,30.05125,67.375,4.8756436,2.17954564148,7006 +3,1,8,0,3,1,1,27.3675,31.0927,67.7083,4.7089811,2.10504295932,7375 +3,1,8,0,4,1,1,28.529153,31.8504,63.5833,5.6679186,2.53371417076,7765 +3,1,8,0,5,1,2,28.8025,32.355,61.5,4.8337686,2.16082637461,7582 +3,1,8,0,6,0,2,27.128347,30.9348,71.2917,16.375336,7.32022172553,6053 +3,1,8,0,0,0,2,26.786653,29.7998,84.5833,15.333486,6.85448636567,5255 +3,1,8,0,1,1,1,28.836653,32.7344,73.0417,8.625111,3.85565981225,6917 +3,1,8,0,2,1,1,29.861653,33.3025,62.0,12.791975,5.71836164506,7040 +3,1,8,0,3,1,1,28.085,31.78665,55.2083,7.541654,3.37132498882,7697 +3,1,8,0,4,1,1,28.973347,32.63895,59.0417,5.1668189,2.30970894055,7713 +3,1,8,0,5,1,1,31.330847,34.47,58.75,11.291711,5.04770272687,7350 +3,1,9,0,6,0,2,30.886653,35.1327,63.8333,7.583529,3.3900442557,6140 +3,1,9,0,0,0,2,28.563347,32.45,81.5,4.2927436,1.91897344658,5810 +3,1,9,1,1,0,1,29.0075,33.08145,79.0833,10.125107,4.52619892713,6034 +3,1,9,0,2,1,1,29.759153,34.3444,75.5,15.833507,7.07800938757,6864 +3,1,9,0,3,1,1,30.203347,35.44915,74.125,12.583136,5.6250049173,7112 +3,1,9,0,4,1,2,28.563347,32.76645,81.0417,9.542207,4.26562673223,6203 +3,1,9,0,5,1,1,28.836653,32.8602,73.625,11.500282,5.14093965132,7504 +3,1,9,0,6,0,2,27.025847,30.55605,79.9167,18.833968,8.41929727313,5976 +3,1,9,0,0,0,1,25.01,28.94625,54.75,15.041232,6.72384085829,8227 +3,1,9,0,1,1,1,23.916653,28.2827,50.375,17.333771,7.74866830577,7525 +3,1,9,0,2,1,1,23.6775,27.7146,52.0,6.1676314,2.75709941886,7767 +3,1,9,0,3,1,1,24.565847,28.50375,57.7083,8.833682,3.9488967367,7870 +3,1,9,0,4,1,1,25.1125,28.9779,63.7083,5.5422936,2.47755637014,7804 +3,1,9,0,5,1,1,25.966653,29.70415,67.25,6.958821,3.11078274475,8009 +3,1,9,0,6,0,1,24.941653,29.29335,50.1667,16.583907,7.41345864998,8714 +3,1,9,0,0,0,1,23.78,28.15625,57.0,6.0422811,2.70106441663,7333 +3,1,9,0,1,1,2,23.814153,27.6525,73.4583,10.166714,4.5447983907,6869 +3,1,9,0,2,1,2,25.556653,28.25335,87.25,23.958329,10.7100263746,4073 +3,1,9,0,3,1,1,22.6525,27.0202,53.6667,14.416725,6.44466919982,7591 +3,1,9,0,4,1,1,22.413347,26.6096,61.8333,7.917189,3.53919937416,7720 +3,1,9,0,5,1,1,24.565847,28.59855,66.875,10.333343,4.61928609745,8167 +3,1,9,0,6,0,1,26.65,30.5244,64.6667,19.000061,8.49354537327,8395 +4,1,9,0,0,0,1,21.695847,25.94665,46.7083,14.958286,6.68676173447,7907 +4,1,9,0,1,1,1,21.080847,25.12565,49.2917,9.541068,4.26511756817,7436 +4,1,9,0,2,1,1,22.55,27.20895,57.0,15.833507,7.07800938757,7538 +4,1,9,0,3,1,1,26.035,29.83065,63.0833,16.3748,7.31998211891,7733 +4,1,9,0,4,1,2,26.65,30.39875,69.0833,9.000914,4.02365400089,7393 +4,1,9,0,5,1,2,25.385847,29.29315,69.0,10.999993,4.91729682611,7415 +4,1,9,0,6,0,1,22.2425,26.5148,54.2917,15.249468,6.81692802861,8555 +4,1,9,0,0,0,1,21.593347,25.88315,58.3333,9.042186,4.04210371033,6889 +4,1,10,0,1,1,2,21.354153,25.6,64.9167,6.0838814,2.71966088511,6778 +4,1,10,0,2,1,3,24.224153,27.11665,87.1667,6.999825,3.12911265087,4639 +4,1,10,0,3,1,2,26.9575,29.95665,79.375,4.4585686,1.99310174341,7572 +4,1,10,0,4,1,2,26.9575,30.39875,72.2917,7.875582,3.52059991059,7328 +4,1,10,0,5,1,1,25.215,29.00935,62.75,7.12545,3.1852704515,8156 +4,1,10,0,6,0,1,22.720847,26.92605,66.4167,17.957675,8.02757040679,7965 +4,1,10,0,0,0,2,17.049153,20.99065,70.8333,9.457854,4.22791864104,3510 +4,1,10,1,1,0,2,15.716653,19.3804,70.9583,12.708493,5.68104291462,5478 +4,1,10,0,2,1,2,18.313347,21.9056,76.1667,12.7501,5.69964237819,6392 +4,1,10,0,3,1,1,21.080847,25.1571,63.0833,12.584007,5.62539427805,7691 +4,1,10,0,4,1,1,17.835,21.55835,46.3333,12.166932,5.43895037997,7570 +4,1,10,0,5,1,1,17.9375,21.65355,53.9167,15.751164,7.04119982119,7282 +4,1,10,0,6,0,1,16.126653,19.5698,49.4583,9.791514,4.3770737595,7109 +4,1,10,0,0,0,1,21.388347,25.4102,64.0417,18.667004,8.34465981225,6639 +4,1,10,0,1,1,2,23.028347,26.9575,70.75,19.834479,8.86655297273,5875 +4,1,10,0,2,1,1,19.201653,23.0423,55.8333,12.208807,5.45766964685,7534 +4,1,10,0,3,1,1,18.689153,22.5054,69.2917,6.791857,3.03614528386,7461 +4,1,10,0,4,1,2,21.4225,25.63125,72.8333,15.874779,7.096459097,7509 +4,1,10,0,5,1,2,23.096653,26.8948,81.5,9.041918,4.04198390702,5424 +4,1,10,0,6,0,1,19.850847,23.6421,57.2917,7.874979,3.52033035315,8090 +4,1,10,0,0,0,1,19.030847,22.82145,51.0,11.125618,4.97345462673,6824 +4,1,10,0,1,1,1,19.9875,24.1471,56.8333,5.4593811,2.44049222173,7058 +4,1,10,0,2,1,1,22.310847,26.5152,64.1667,6.3345686,2.83172489942,7466 +4,1,10,0,3,1,1,24.0875,27.93605,63.625,4.8762064,2.17979722843,7693 +4,1,10,0,4,1,2,22.55,26.4844,80.0417,8.333125,3.72513410818,7359 +4,1,10,0,5,1,2,22.379153,26.1375,80.7083,8.875289,3.96749620027,7444 +4,1,10,0,6,0,2,21.73,25.75665,72.0,15.791364,7.05917031739,7852 +4,1,10,0,0,0,2,19.5775,23.38855,69.4583,26.666536,11.9206687528,4459 +4,1,10,0,1,1,3,18.04,21.97,88.0,23.9994,10.7283862316,22 +4,1,10,0,2,1,2,13.045462,15.49545,82.5455,14.271603,6.37979570854,1096 +4,1,10,0,3,1,2,14.6575,18.055,66.6667,11.166689,4.99181448368,5566 +4,1,11,0,4,1,2,14.999153,18.4971,58.1667,10.542182,4.71264282521,5986 +4,1,11,0,5,1,1,14.555,17.8021,52.2083,17.833725,7.97216137684,5847 +4,1,11,0,6,0,2,14.076653,16.1923,49.125,18.125443,8.1025672776,5138 +4,1,11,0,0,0,1,13.359153,16.4769,53.2917,12.000236,5.3644327224,5107 +4,1,11,0,1,1,1,13.085847,15.40375,49.4167,15.833775,7.07812919088,5259 +4,1,11,0,2,1,1,11.514153,14.07835,56.7083,11.625371,5.19685784533,5686 +4,1,11,0,3,1,2,12.129153,13.73105,54.75,20.375236,9.10828609745,5035 +4,1,11,0,4,1,1,14.439134,17.09455,33.3478,23.304945,10.4179459097,5315 +4,1,11,0,5,1,1,14.828347,17.77065,54.0833,14.375386,6.42618953956,5992 +4,1,11,0,6,0,1,15.955847,19.69685,64.5417,3.8756686,1.7325295485,6536 +4,1,11,0,0,0,1,17.254153,21.08565,65.9167,8.5425,3.81873044256,6852 +4,1,11,1,1,0,1,19.885,23.76915,74.1667,11.625639,5.19697764864,6269 +4,1,11,0,2,1,2,14.076653,16.16125,66.2917,22.917082,10.2445605722,4094 +4,1,11,0,3,1,1,11.855847,14.07815,55.2083,13.374875,5.97893383996,5495 +4,1,11,0,4,1,2,13.188347,16.2246,62.0417,10.250129,4.58208717032,5445 +4,1,11,0,5,1,1,14.145,17.3602,52.4583,11.458675,5.12234018775,5698 +4,1,11,0,6,0,1,13.325,16.31915,54.5417,12.041843,5.38303218596,5629 +4,1,11,0,0,0,1,14.0425,16.8873,69.2917,15.250004,6.81716763523,4669 +4,1,11,0,1,1,2,15.614153,18.78105,62.3333,15.749489,7.04045105051,5499 +4,1,11,0,2,1,2,15.340847,19.03335,68.5,5.542575,2.47768216361,5634 +4,1,11,0,3,1,1,14.486653,18.2446,61.375,6.917482,3.09230308449,5146 +4,1,11,1,4,0,1,13.94,17.51855,58.0417,3.5423436,1.58352418418,2425 +4,1,11,0,5,1,1,15.101653,18.93895,56.875,9.917407,4.43335136343,3910 +4,1,11,0,6,0,1,11.411653,12.4371,40.4583,25.250357,11.2875981225,2277 +4,1,11,0,0,0,1,10.079153,12.87915,46.8333,10.0835,4.50759946357,2424 +4,1,11,0,1,1,1,12.846653,16.9502,53.5417,3.12555,1.39720607957,5087 +4,1,11,0,2,1,2,11.958347,14.0779,78.6667,15.916654,7.11517836388,3959 +4,1,11,0,3,1,1,12.163347,14.4881,50.625,14.125007,6.31426329906,5260 +4,1,11,0,4,1,1,11.51567,14.9211,55.5652,7.739974,3.45997943675,5323 +4,1,11,0,5,1,1,12.231653,16.19335,64.9583,3.9175436,1.75124881538,5668 +4,1,12,0,6,0,2,12.231653,15.8452,80.6667,4.0001814,1.7881901654,5191 +4,1,12,0,0,0,2,14.2475,17.9604,82.3333,8.333393,3.72525391149,4649 +4,1,12,0,1,1,1,18.5525,22.7898,76.75,5.5422936,2.47755637014,6234 +4,1,12,0,2,1,1,19.509153,23.4527,73.375,11.666643,5.21530755476,6606 +4,1,12,0,3,1,1,17.971653,21.4006,48.5,21.709407,9.70469691551,5729 +4,1,12,0,4,1,1,10.489153,12.9102,50.875,11.708518,5.23402682164,5375 +4,1,12,0,5,1,2,13.154153,16.0979,76.4167,8.7502,3.91157800626,5008 +4,1,12,0,6,0,2,15.648347,19.4754,91.125,6.792393,3.03638489048,5582 +4,1,12,0,0,0,2,15.750847,19.5073,90.5417,10.584325,4.7314818954,3228 +4,1,12,0,1,1,2,17.869153,21.77875,92.5,12.750636,5.6998819848,5170 +4,1,12,0,2,1,2,14.486653,16.91815,59.6667,19.834479,8.86655297273,5501 +4,1,12,0,3,1,2,12.1975,14.8669,53.8333,10.916779,4.88009789897,5319 +4,1,12,0,4,1,1,12.129153,14.7094,48.5833,11.666643,5.21530755476,5532 +4,1,12,0,5,1,1,11.548347,14.7096,64.2917,8.792343,3.93041707644,5611 +4,1,12,0,6,0,1,13.290847,16.91915,65.0417,7.12545,3.1852704515,5047 +4,1,12,0,0,0,2,14.8625,18.4969,83.875,6.749714,3.01730621368,3786 +4,1,12,0,1,1,2,16.126653,20.075,90.7083,6.5833061,2.94291734466,4585 +4,1,12,0,2,1,1,16.844153,20.4854,66.625,14.834068,6.63123290121,5557 +4,1,12,0,3,1,1,13.6325,17.1081,62.5417,12.334164,5.51370764417,5267 +4,1,12,0,4,1,2,13.53,16.76085,66.7917,8.875021,3.96737639696,4128 +1,1,12,0,5,1,2,13.393347,15.08835,55.6667,25.083661,11.2130804649,3623 +1,1,12,0,6,0,1,10.899153,11.80565,44.125,27.292182,12.2003495753,1749 +1,1,12,0,0,0,1,10.079153,12.97355,51.5417,8.916561,3.9859459097,1787 +1,1,12,0,1,1,2,9.483464,12.945,79.1304,5.1744368,2.31311434958,920 +1,1,12,1,2,0,2,11.943464,14.72325,73.4783,11.304642,5.05348323648,1013 +1,1,12,0,3,1,3,9.976653,11.01665,82.3333,21.208582,9.48081448368,441 +1,1,12,0,4,1,2,10.420847,11.3321,65.2917,23.458911,10.4867729101,2114 +1,1,12,0,5,1,2,10.386653,12.7523,59.0,10.416557,4.65648502459,3095 +1,1,12,0,6,0,2,10.386653,12.12,75.2917,8.333661,3.7253737148,1341 +1,1,12,0,0,0,1,10.489153,11.585,48.3333,23.500518,10.5053723737,1796 +1,1,12,0,1,1,2,8.849153,11.17435,57.75,10.374682,4.63776575771,2729 diff --git a/src/Numerics.Tests/Numerics.Tests.csproj b/src/Numerics.Tests/Numerics.Tests.csproj index 3cfa17d8d..a310c12c8 100644 --- a/src/Numerics.Tests/Numerics.Tests.csproj +++ b/src/Numerics.Tests/Numerics.Tests.csproj @@ -27,5 +27,10 @@ + + + Always + + diff --git a/src/Numerics.Tests/StatisticsTests/CorrelationTests.cs b/src/Numerics.Tests/StatisticsTests/CorrelationTests.cs index 406acc8b3..833496279 100644 --- a/src/Numerics.Tests/StatisticsTests/CorrelationTests.cs +++ b/src/Numerics.Tests/StatisticsTests/CorrelationTests.cs @@ -32,10 +32,6 @@ using System.Linq; using NUnit.Framework; using MathNet.Numerics.Statistics; -using MathNet.Numerics.LinearAlgebra.Double; -using System.IO; -using MathNet.Numerics.TestData; -using System.Globalization; namespace MathNet.Numerics.UnitTests.StatisticsTests { @@ -63,30 +59,6 @@ public CorrelationTests() _data.Add("lew", lew); } - [TestCase("numpy.CorrNumpyData_sqr.csv", 0.005)] - [TestCase("numpy.CorrNumpyData_pwm.csv", 0.005)] - [TestCase("numpy.CorrNumpyData_sin.csv", 0.005)] - [TestCase("numpy.CorrNumpyData_rnd.csv", 0.005)] - public void TestAutocorrelation(string fName, double tol) - { - - var data = Data.ReadAllLines(fName) - .Select(line => - { - var vals = line.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - return new Tuple(vals[0], vals[1]); - }).ToArray(); - - var series = data.Select(tuple => Double.Parse(tuple.Item1, CultureInfo.InvariantCulture)).ToArray(); - var resNumpy = data.Select(tuple => Double.Parse(tuple.Item2, CultureInfo.InvariantCulture)).ToArray(); - - - var resMathNet = Statistics.Correlation.AutoCorrelation(series); - - for (int i = 0; i < resMathNet.Length; i++) - Assert.AreEqual(resNumpy[i], resMathNet[i], tol); - } - /// /// Pearson correlation test. /// diff --git a/src/Numerics/LinearRegression/MultipleRegression.cs b/src/Numerics/LinearRegression/MultipleRegression.cs index 0c77c5c13..197a8b802 100644 --- a/src/Numerics/LinearRegression/MultipleRegression.cs +++ b/src/Numerics/LinearRegression/MultipleRegression.cs @@ -148,6 +148,34 @@ public static Vector NormalEquations(Matrix x, Vector y) where T : s return x.TransposeThisAndMultiply(x).Cholesky().Solve(x.TransposeThisAndMultiply(y)); } + /// + /// Returns closed form solution for ridge regression calculation according to the following formula: + /// weights = (X' * X + lambda * I ) * X' * Y . Where X' stands for X' transposed + /// + /// Training inputs + /// Training outputs + /// Learning parameter. Will be used for decreasing weithgs. Default is set to 1 + /// + public static double[] RidgeRegression(double[][] xTrain, double[] yTrain, double lambda = 1) + { + var M = Matrix.Build; + var x = M.DenseOfRowArrays(xTrain); + + var ones = Vector.Build.Dense(x.RowCount, 1); + x = x.InsertColumn(0, ones); + var y = Vector.Build.DenseOfArray(yTrain); + + var xt = x.Transpose(); + + var lambdaIdentity = lambda * M.DenseIdentity(x.ColumnCount); + var sumDot = xt.Multiply(x) + lambdaIdentity; + var theInverse = sumDot.Inverse(); + var inverseXt = theInverse * xt; + var w = inverseXt * y; + + return w.ToArray(); + } + /// /// Find the model parameters β such that X*β with predictor X becomes as close to response Y as possible, with least squares residuals. /// Uses the cholesky decomposition of the normal equations. diff --git a/src/Numerics/Statistics/Correlation.cs b/src/Numerics/Statistics/Correlation.cs index 013a9f385..fb096fa77 100644 --- a/src/Numerics/Statistics/Correlation.cs +++ b/src/Numerics/Statistics/Correlation.cs @@ -30,8 +30,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Numerics; -using MathNet.Numerics.IntegralTransforms; using MathNet.Numerics.LinearAlgebra; using MathNet.Numerics.Properties; @@ -42,130 +40,6 @@ namespace MathNet.Numerics.Statistics /// public static class Correlation { - - /// - /// autocorrelation function (ACF) based on fft (usually faster then direct brute force implementation) for all possible lags k - /// First element is hidden since ACF(k = 0) = 1 - /// data array to calculate auto correlation for - /// an array with the ACF as a function of the lags k - public static double[] AutoCorrelation(IEnumerable x) - { - return autoCorrelationFft(x, 0, x.Count() - 1); - } - - /// - /// autocorrelation function (ACF) based on fft (usually faster then direct brute force implementation) for lags - /// between kMin and kMax - /// First element is hidden since ACF(k = 0) = 1 - /// the data array to calculate auto correlation for - /// max lag to calculate ACF for must be positive and smaller than x.Length-1 - /// min lag to calculate ACF for (0 = no shift with acf=1) must be zero or positive and smaller than x.Length-1 - /// an array with the ACF as a function of the lags k - public static double[] AutoCorrelation(IEnumerable x, int kMax, int kMin = 0) - { - // assert max and min in proper order - var kMax2 = Math.Max(kMax, kMin); - var kMin2 = Math.Min(kMax, kMin); - - return (autoCorrelationFft(x, kMin2, kMax2)); - } - - - /// - /// autocorrelation function based on fft for lags k (faster than brute force calculation for big sample sizes). - /// First element is skipped since ACF(k = 0) = 1 - /// the data array to calculate auto correlation for - /// array with lags to calculate ACF for - /// an array with the ACF as a function of the lags k - public static double[] AutoCorrelation(IEnumerable x, int[] k) - { - if (k == null) - throw new ArgumentNullException("k"); - - if (k.Length < 1) - throw new ArgumentException("k"); - - // get acf between full range - var acf = autoCorrelationFft(x, k.Min(), k.Max()); - - // map output by indexing - var acfReturn = new double[k.Length]; - for (int i = 0; i < acfReturn.Length; i++) - acfReturn[i] = acf[k[i]]; - - return acfReturn; - } - - /// - /// this is the internal core method for calculating the autocorrelation - /// - /// the data array to calculate auto correlation for - /// min lag to calculate ACF for (0 = no shift with acf=1) must be zero or positive and smaller than x.Length-1 - /// max lag to calculate ACF for must be positive and smaller than x.Length-1 - /// an array with the ACF as a function of the lags k - private static double[] autoCorrelationFft(IEnumerable x, int k_low, int k_high) - { - if (x == null) - throw new ArgumentNullException("x"); - - if (k_low < 0 || k_low >= x.Count()) - throw new ArgumentOutOfRangeException("kMin must be zero or positive and smaller than x.Length"); - if (k_high < 0 || k_high >= x.Count()) - throw new ArgumentOutOfRangeException("kMax must be positive and smaller than x.Length"); - - if (x.Count() < 1) - return new double[0]; - - int N = x.Count(); // Sample size - int nFFT = Euclid.CeilingToPowerOfTwo(N) * 2; - - Complex[] x_fft = new Complex[nFFT]; - Complex[] x_fft2 = new Complex[nFFT]; - - double x_dash = Statistics.Mean(x); - double xArrNow = 0.0d; - - using (IEnumerator iex = x.GetEnumerator()) - { - for (int ii = 0; ii < nFFT; ii++) - { - - if (ii < N) - { - if (!iex.MoveNext()) - throw new ArgumentOutOfRangeException("x"); - xArrNow = iex.Current; - x_fft[ii] = new Complex(xArrNow - x_dash, 0.0); // copy values in range and substract mean - } - else - x_fft[ii] = new Complex(0.0, 0.0); // pad all remaining points - } - - } - - Fourier.Forward(x_fft, FourierOptions.Matlab); - - // maybe a Vector implementation here would be faster - for (int ii = 0; ii < x_fft.Length; ii++) - { - x_fft2[ii] = Complex.Multiply(x_fft[ii], Complex.Conjugate(x_fft[ii])); - } - - Fourier.Inverse(x_fft2, FourierOptions.Matlab); - double acf_Val1 = x_fft2[0].Real; - - double[] acf_Vec = new double[k_high - k_low]; - double[] acf_Val = new double[k_high + 1]; - - // normalize such that acf[0] would be 1.0 and drop the first element - for (int ii = 0; ii < (k_high - k_low); ii++) - { - acf_Vec[ii] = x_fft2[k_low + ii + 1].Real / acf_Val1; - } - - return (acf_Vec); - } - /// /// Computes the Pearson Product-Moment Correlation coefficient. /// diff --git a/src/TestData/TestData.csproj b/src/TestData/TestData.csproj index ebbec8f2b..62c4774cd 100644 --- a/src/TestData/TestData.csproj +++ b/src/TestData/TestData.csproj @@ -16,18 +16,6 @@ - - Data\numpy\CorrNumpyData_pwm.csv - - - Data\numpy\CorrNumpyData_sin.csv - - - Data\numpy\CorrNumpyData_sqr.csv - - - Data\numpy\CorrNumpyData_rnd.csv - Data\Codeplex-5667.csv