commit 27d810c64decdbb543e742f2d6f56729244162c2 Author: zeek <984294471@qq.com> Date: Sun Feb 23 22:14:06 2020 +0800 迁移仓库 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11e27ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +_book +node_modules +.idea +.ropeproject +__pycache__ +env diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..472ac23 --- /dev/null +++ b/LICENSE @@ -0,0 +1,8 @@ +MIT License +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..00eb88c --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +## 机器学习 + +主要用来记录机器学习中遇到的问题及其解决方案 + +### 环境搭建 +执行下面命令 +```sh +pip install numpy scipy statsmodels matplotlib +pip install -U scikit-learn nltk +apt install python-pandas # pythons使用的是python3-pandas +apt install python-matplotlib +pip install nltk tornado +``` +docker tensorflow环境搭建 +```sh +docker pull dash00/tensorflow-python3-jupyter +# 限制使用内存的大小,防止影响到本机 +docker run -d --name "tensorflow" -m 4000M --cpus=2 -p 8888:8888 dash00/tensorflow-python3-jupyter +``` + +docker资源清理 +```sh +docker container prune # 删除所有退出状态的容器 +docker volume prune # 删除未被使用的数据卷 +docker image prune # 删除 dangling 或所有未被使用的镜像 +``` + +virtualenv使用 +```sh +sudo apt install virtualenv +virtualenv env +source ./env/bin/activate +``` + +### 监督学习 +#### 分类 +- 决策树 +- 临近取样 +- 支持向量机 +- 神经网络算法 +#### 回归 + +### 非监督学习 + + diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 0000000..049edea --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,32 @@ +# 目录 + +* [简介](README.md) +* [基础知识](basic/README.md) + * [模型评估](basic/evaluation.md) + * [深度学习基础](basic/deep_basic.md) + * [深度学习简述](basic/deep_learn.md) + * [数学基础](basic/math_basis.md) + * [图像相关](basic/pic/README.md) + +* [决策树](decisionTree/README.md) + +* [回归问题](regression/README.md) + * [线性模型](regression/线性模型.md) + +* [k-近邻算法](knn/README.md) + +* [支持向量机](svm/README.md) + +* [贝叶斯分类器](bayes/README.md) + +* [神经网络](nn/README.md) + * [RNN详解](nn/rnn.md) + * [CNN详解](nn/cnn.md) + * [多任务学习](nn/multi_task.md) + * [ResNet详解](nn/ResNet.md) + +* [目标检测](targetDetection/README.md) + +* [自然语言理解与交互](nlp/README.md) + +* [强化学习](rl/README.md) diff --git a/basic/README.md b/basic/README.md new file mode 100644 index 0000000..9fef1a0 --- /dev/null +++ b/basic/README.md @@ -0,0 +1,13 @@ +# 基础知识详解 + +## 机器学习数学基础相关的好文章合集 +1. [机器学习500问之数学基础](https://github.com/deel-learn/DeepLearning-500-questions/blob/master/ch1_%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80/%E7%AC%AC%E4%B8%80%E7%AB%A0_%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80.md) +2. [深度学习基础](https://github.com/deel-learn/DeepLearning-500-questions/blob/master/ch3_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/%E7%AC%AC%E4%B8%89%E7%AB%A0_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80.pdf) + + +## 常见概念理解 + +1. [目标函数和损失函数的差别](https://blog.csdn.net/u011500062/article/details/55522609) +2. [目标函数、损失函数、代价函数](https://www.davex.pw/2017/12/16/understand-loss-and-object-function/) + + diff --git a/basic/deep_basic.md b/basic/deep_basic.md new file mode 100644 index 0000000..a2f6c4b --- /dev/null +++ b/basic/deep_basic.md @@ -0,0 +1,34 @@ +# 深度学习基础 + +## 激活函数 + +### 常见的激活函数 + +#### 1. sigmoid函数 +函数的定义$$ f(x) = \frac{1}{1 + e^{-x}} $$,其值域为 $$ (0,1) $$。 函数图像 + +![图像](https://raw.githubusercontent.com/deel-learn/DeepLearning-500-questions/master/ch3_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/img/ch3/3-26.png) + +#### 2. tanh激活函数 +函数的定义为:$$ f(x) = tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$,值域为 $$ (-1,1) $$。函数图像 + +![pic](https://raw.githubusercontent.com/deel-learn/DeepLearning-500-questions/master/ch3_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/img/ch3/3-27.png) + +#### 3. Relu激活函数 +函数的定义为:$$ f(x) = max(0, x) $$ ,值域为 $$ [0,+∞) $$;函数图像 + +![pic](https://raw.githubusercontent.com/deel-learn/DeepLearning-500-questions/master/ch3_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/img/ch3/3-28.png) + +#### 4. Leak Relu激活函数 +函数定义为: $$ f(x) = \left{ \begin{aligned} ax, \quad x<0 \ x, \quad x>0 \end{aligned} \right. $$,值域为 $$ (-∞,+∞) $$。图像如下($$ a = 0.5 $$): + +![pic](https://raw.githubusercontent.com/deel-learn/DeepLearning-500-questions/master/ch3_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/img/ch3/3-29.png) + +#### 5. SolftPlus 激活函数 +函数的定义为:$$ f(x) = ln( 1 + e^x) $$,值域为 $$ (0,+∞) $$。图像如下 + +![pic](https://raw.githubusercontent.com/deel-learn/DeepLearning-500-questions/master/ch3_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/img/ch3/3-30.png) + +#### 6. softmax激活函数 +函数定义为: $$ \sigma(z)j = \frac{e^{z_j}}{\sum{k=1}^K e^{z_k}} $$。 +Softmax 多用于多分类神经网络输出。 diff --git a/basic/deep_learn.md b/basic/deep_learn.md new file mode 100644 index 0000000..b9ef949 --- /dev/null +++ b/basic/deep_learn.md @@ -0,0 +1,45 @@ +## 深度模型的局限性 +随着深度学习的不断进步以及数据处理能力的不断提升,各大研究机构及科技巨头相继对深度学习领域投入了大量的资金和精力,并取得 +了惊人的成就。然而,我们不能忽略的一个重要问题是,深度学习实际上仍然存在着局限性: + +### 深度学习需要大量的训练数据 +度学习的性能,能否提升取决于数据集的大小,因此深度学习通常需要大量的数据作为支撑,如果不能进行大量有效的训练,往往会导致 +过拟合(过拟合是指深度学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的 +现象)现象的产生。 + + +### 缺乏推理能力 +深度学习能够发现事件之间的关联性,建立事件之间的映射关系,但是深度学习不能解释因果关系。简单来说,深度学习学到的是输入与 +输出特征间的复杂关系,而非因果性的表征。深度学习可以把人类当作整体,并学习到身高与词汇量的相关性,但并不能了解到长大与发 +展间的关系。也就是说,孩子随着长大会学到更多单词,但这并不代表学习更多单词会让孩子长大。 + +### 深度网络对图像的改变过于敏感 + +在人类看来,对图片进行局部调整可能并会不影响对图的判断。然而,深度网络不仅对标准对抗攻击敏感,而且对环境的变化也会敏感。 +下图显示了在一张丛林猴子的照片中PS上一把吉他的效果。这导致深度网络将猴子误认为人类,同时将吉他误认为鸟,大概是因为它认为 +人类比猴子更可能携带吉他,而鸟类比吉他更可能出现在附近的丛林中。 +![pic](http://dynamic-image.yesky.com/1200x-/uploadImages/2019/051/59/GVLL362E78A2.png) + +图:添加遮蔽体会导致深度网络失效。左:用摩托车进行遮挡后,猴子被识别为人类。中:用自行车进行遮挡后,猴子被识别为人类,同 +时丛林背景导致自行车把手被误认为是鸟。右:用吉他进行遮挡后,猴子被识别为人类,而丛林把吉他变成了鸟. + +类似地,通过梯度上升,可以稍微修改图像,以便最大化给定类的类预测。通过拍摄一只熊猫,并添加一个“长臂猿”梯度,我们可以得到 +一个神经网络将这只熊猫分类为长臂猿。这证明了这些模型的脆弱性,以及它们运行的输入到输出映射与我们自己的人类感知之间的深刻 +差异。 + +![pic](https://www.mayi888.com/wp-content/uploads/2017/10/p20170722094310570.wm.png) + + +### 无法判断数据的正确性 + +深度学习可以在不理解数据的情况下模仿数据中的内容,它不会否定任何数据,不会发现数据中隐藏的偏见,这就可能会造成最终生成 +结果的不客观。 + +人工智能目前具有的一个非常真实的风险——人们误解了深度学习模型,并高估了它们的能力。人类思想的一个根本特征是我们的“思想理 +论”,我们倾向于对我们周围的事物设计意向、信仰和知识。在岩石上画一个笑脸,突然让我们“开心”。应用于深度学习,这意味着,例 +如,当我们能够成功地训练一个模型以生成描述图片的说明时,我们误认为该模型“理解”了图片的内容以及图片所生成的内容。但是,当 +训练数据中的图像存在轻微的偏离,使得模型开始生成完全荒谬的说明时,我们又非常惊讶。 + +![pic](https://www.mayi888.com/wp-content/uploads/2017/10/p20170722094255127.wm.png) + +案例:这个“男孩”正拿着一个“棒球棒”(正确说明应该是“这个女孩正拿着牙刷”) diff --git a/basic/evaluation.md b/basic/evaluation.md new file mode 100644 index 0000000..d354979 --- /dev/null +++ b/basic/evaluation.md @@ -0,0 +1,90 @@ +# 评估方法 +## 留出法 +留出法(hold-out)直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即有$$D=S∪T,S∩T=∅ $$ +建议:
+训练集/测试集:2/3~4/5 + +## 交叉验证法 +交叉验证法(cross validation)先将数据集D划分为k个大小相似的互斥子集。即有:$$D=D1∪D2∪...∪Dk,Di∩Dj=∅$$ +每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的那个子集 +作为测试集,这样就可以获得k组训练/测试集。从而可以进行k次训练与测试,最终返回的是这k个测试结果的均值。
+![交叉验证法](http://index.zeekling.cn/gogsPics/ml/basic/20161109110731469.png)
+缺陷:数据集较大时,计算开销。同时留一法的估计结果也未必比其他评估方法准确。 + +## 自助法 +简单的说,它从数据集D中每次随机取出一个样本,将其拷贝一份放入新的采样数据集D′,样本放回原数据集中,重复这个过程m次,就得 +到了同样包含m个样本的数据集D′,显然D中会有一部分数据会在D′中重复出现。样本在m次采样中始终不被采样到的概率是 +![概率](http://index.zeekling.cn/gogsPics/ml/basic/2018-12-08_23-13.png),取极限得到:
+![自助法](http://index.zeekling.cn/gogsPics/ml/basic/2018-12-08_23-02.png)
+即通过自助法,初始数据集中约有36.8%样本未出现在采样数据集D′中。可将D′作为训练集,D\D′作为测试集,(\表示集合的减法)。保 +证了实际评估的模型与期望评估的模型都是用m个训练样本,而有数据总量约1/3的、没在训练集中出过的样本用于测试,这样的测试结 +果,也叫做”包外估计”(out-of-bagestimate). + +### 适用场景 +自助法在数据集较小、难以有效划分训练/测试集很有用;此外自助法可以从初始数据集中产生多个不同的训练集,这对集成学习等方法 +有很大好处。 + +### 缺点 +自助法产生的数据集改变了初始数据集的分布,引入估计偏差。故在数据量足够时,留出法与交叉验证更为常用。 + +# 性能度量 +在预测任务中,给定样本集 +![样本集](http://index.zeekling.cn/gogsPics/ml/basic/v2-ec2cf40da68b421eaa9fd3161c3c6aae_hd.jpg) +其中,yi是示例xi的真实标记。回归任务中最常用的性能度量是均方误差(mean squeared error),f(x)是机器学习预测结果
+![均方误差](http://index.zeekling.cn/gogsPics/ml/basic/20170728160012970.png)
+更一般的形式(数据分布D,概率密度函数p(x))
+![均方误差](http://index.zeekling.cn/gogsPics/ml/basic/20170728160030374.png) + +## 错误率和精度 +错误率的定义:
+![错误率](http://index.zeekling.cn/gogsPics/ml/basic/20170728160111980.png)
+更一般的定义:
+![错误率](http://index.zeekling.cn/gogsPics/ml/basic/20170728160154325.png)
+精度的定义:
+![精度](http://index.zeekling.cn/gogsPics/ml/basic/20170728160235638.png)
+更一般的定义:
+![精度](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341707.png) + +## 查准率、查全率与F1 +下表是二分类结果混淆矩阵,将判断结果分为四个类别,真正例(TP)、假正例(FP)、假反例(FN)、真反例(TN)。
+![二分类问题](http://index.zeekling.cn/gogsPics/ml/basic/v2-d86bd2ab359674615166d641c0a290b3_hd.jpg)
+查准率:【真正例样本数】与【预测结果是正例的样本数】的比值。
+查全率:【真正例样本数】与【真实情况是正例的样本数】的比值。
+![P-R曲线](http://index.zeekling.cn/gogsPics/ml/basic/v2-c2eb73c67a9c3ced1cb0167363ab8971_hd.png)
+- 当曲线没有交叉的时候:外侧曲线的学习器性能优于内侧; +- 当曲线有交叉的时候: + - 第一种方法是比较曲线下面积,但值不太容易估算; + - 第二种方法是比较两条曲线的平衡点,平衡点是“查准率=查全率”时的取值,在图中表示为曲线和对角线的交点。平衡点在外侧的 + 曲线的学习器性能优于内侧。 + - 第三种方法是F1度量和Fβ度量。F1是基于查准率与查全率的调和平均定义的,Fβ则是加权调和平均。
+ ![F1](http://index.zeekling.cn/gogsPics/ml/basic/v2-8767d0e40027a80c9dfbb4e67c415562_hd.png)
+ ![Fb](http://index.zeekling.cn/gogsPics/ml/basic/v2-b1957f27cd827f658c44e09f25950676_hd.png)
+ + +## ROC与AUC +ROC曲线便是从这个角度出发来研究学习器泛化性能的有力工具。
+与P-R曲线使用查准率、查全率为横纵轴不同,ROC的纵轴是”真正样例(True Positive Rate,简称TPR)”,横轴是“假正例率(False +Positive Rate,简称FPR),两者分别定义为
+![ROC](http://index.zeekling.cn/gogsPics/ml/basic/v2-4c7d54020323bbf3b04e57be62bb29dc_hd.jpg)
+显示ROC的曲线图称为“ROC图”
+![pic](http://index.zeekling.cn/gogsPics/ml/basic/v2-688e036b40e5fae2ffa0fa54b77cb5a4_hd.jpg)
+进行学习器比较时,与P-R如相似,若一个学习器的ROC曲线被另一个学习器的曲线“包住”,则可断言后者的性能优于前者;若两个学习 +器的ROC曲线发生交叉,则难以一般性的断言两者孰优孰劣。此时如果一定要进行比较,则较为合理的判断是比较ROC曲线下的面积, +即AUC(Area Under ROC Curve)。 + +注意:AUC计算公式没看懂 + +## 代价敏感错误率与代价曲线 +在现实任务中会遇到这样的情况:不同类型错误所造成的后果不同。以二分类任务为例,我们可根据任务领域知识设定一个“代价矩阵”, +如下图所示,
+![代价矩阵](http://index.zeekling.cn/gogsPics/ml/basic/v2-85d636c2cc2078f7a38134f4dceb2019_hd.jpg)
+在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线(cost curve)”则可达到目的。代价曲线图的横轴是取 +值为[0,1]的正例概率代价,
+![正概率代价](http://index.zeekling.cn/gogsPics/ml/basic/v2-33493342b0a90d67276250573aea107e_hd.jpg)
+纵轴是取值为[0,1]的归一化代价
+![归一化代价](http://index.zeekling.cn/gogsPics/ml/basic/v2-e02dbd62fa02979d958291d56fbaae0b_hd.jpg)
+画图表示如下图所示
+![图](http://index.zeekling.cn/gogsPics/ml/basic/v2-3d72a25b2a326afa1ccebed64f41f2ce_hd.jpg)
+ +# 比较检验 + diff --git a/basic/math_basis.md b/basic/math_basis.md new file mode 100644 index 0000000..1303b66 --- /dev/null +++ b/basic/math_basis.md @@ -0,0 +1,43 @@ +# 数学基础 + +## 标量、向量、矩阵、张量之间的联系 +### 标量(scalar) +一个标量表示一个单独的数,它不同于线性代数中研究的其他大部分对象(通常是多个数的数组)。我们用斜体表示标量。标量通常被 +赋予小写的变量名称。 +### 向量(vector) +一个向量表示组有序排列的数。通过次序中的索引,我们可以确定每个单独的数。通常我们赋予向量粗体的小写变量名称,比如xx。向量 +中的元素可以通过带脚标的斜体表示。向量x的第一个元素是x1,第二个元素是x2,以此类推。我们也会注明存储在向量中的元素的类型 +(实数、虚数等)。 +### 矩阵(matrix) +矩阵是具有相同特征和纬度的对象的集合,表现为一张二维数据表。其意义是一个对象表示为矩阵中的一行,一个特征表示为矩阵中的一 +列,每个特征都有数值型的取值。通常会赋予矩阵粗体的大写变量名称,比如A。 +### 张量(tensor) +在某些情况下,我们会讨论坐标超过两维的数组。一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。 + +### 奇异值分解 +[https://zhuanlan.zhihu.com/p/26306568 ](https://zhuanlan.zhihu.com/p/26306568) + +## 常见概率分布 +![常见概率分布](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341708.png) +![常见概率分布](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341709.png) +![常见概率分布](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341710.png) +![常见概率分布](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341711.png) +![常见概率分布](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341712.png) +![常见概率分布](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341713.png) +![常见概率分布](http://index.zeekling.cn/gogsPics/ml/basic/20170728160341714.png) + +## 数值计算 + +[Jacobian矩阵和Hessian矩阵](https://www.cnblogs.com/wangyarui/p/6407604.html) + +## 估计、偏差、方差 +[偏差和方差](http://liuchengxu.org/blog-cn/posts/bias-variance/) + +## 极大似然估计 +[相对熵(KL散度)](https://blog.csdn.net/ACdreamers/article/details/44657745) + +极大似然相关理解 +1. [https://www.jiqizhixin.com/articles/2018-01-09-6 ](https://www.jiqizhixin.com/articles/2018-01-09-6) + + + diff --git a/basic/pic/README.md b/basic/pic/README.md new file mode 100644 index 0000000..e0975d5 --- /dev/null +++ b/basic/pic/README.md @@ -0,0 +1,12 @@ +# 图片相关基础知识 + +## 上采样和下采样 + +### 上采样 + + + +### 下采样 + + + diff --git a/bayes/README.md b/bayes/README.md new file mode 100644 index 0000000..effa14a --- /dev/null +++ b/bayes/README.md @@ -0,0 +1,81 @@ +# 朴素贝叶斯 + +叶斯分类器是一种概率框架下的统计学习分类器,对分类任务而言,假设在相关概率都已知的情况下,贝叶斯分类器考虑如何基于这些概 +率为样本判定最优的类标。在开始介绍贝叶斯决策论之前,我们首先来回顾下概率论委员会常委--贝叶斯公式。 + +![条件概率](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/1.png)
+ +### 条件概率 +朴素贝叶斯最核心的部分是贝叶斯法则,而贝叶斯法则的基石是条件概率。贝叶斯法则如下: + +![条件概率](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/0.png)
+ +对于给定的样本x,P(x)与类标无关,P(c)称为类先验概率,p(x | c )称为类条件概率。这时估计后验概率P(c | x)就变成为 +估计类先验概率和类条件概率的问题。对于先验概率和后验概率,在看这章之前也是模糊了我好久,这里普及一下它们的基本概念。 + +> 先验概率: 根据以往经验和分析得到的概率。
+> 后验概率:后验概率是基于新的信息,修正原来的先验概率后所获得的更接近实际情况的概率估计。 + +实际上先验概率就是在没有任何结果出来的情况下估计的概率,而后验概率则是在有一定依据后的重新估计,直观意义上后验概率就是条 +件概率。 + +![pic](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/2.png)
+ +回归正题,对于类先验概率P(c),p(c)就是样本空间中各类样本所占的比例,根据大数定理(当样本足够多时,频率趋于稳定等于其 +概率),这样当训练样本充足时,p(c)可以使用各类出现的频率来代替。因此只剩下类条件概率p(x | c ),它表达的意思是在类别c中 +出现x的概率,它涉及到属性的联合概率问题,若只有一个离散属性还好,当属性多时采用频率估计起来就十分困难,因此这里一般采用 +极大似然法进行估计。 + +### 极大似然法 +极大似然估计(Maximum Likelihood Estimation,简称MLE),是一种根据数据采样来估计概率分布的经典方法。常用的策略是先假定总 +体具有某种确定的概率分布,再基于训练样本对概率分布的参数进行估计。运用到类条件概率p(x | c )中,假设p(x | c )服从一个 +参数为θ的分布,问题就变为根据已知的训练样本来估计θ。极大似然法的核心思想就是:估计出的参数使得已知样本出现的概率最大,即 +使得训练数据的似然最大。 + +![pic](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/3.png)
+ +所以,贝叶斯分类器的训练过程就是参数估计。总结最大似然法估计参数的过程,一般分为以下四个步骤: + +> 1. 写出似然函数;
+> 2. 对似然函数取对数,并整理;
+> 3. 求导数,令偏导数为0,得到似然方程组;
+> 4. 解似然方程组,得到所有参数即为所求。 + +例如:假设样本属性都是连续值,p(x | c )服从一个多维高斯分布,则通过MLE计算出的参数刚好分别为: + +![pic](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/4.png)
+ +上述结果看起来十分合乎实际,但是采用最大似然法估计参数的效果很大程度上依赖于作出的假设是否合理,是否符合潜在的真实数据分 +布。这就需要大量的经验知识,搞统计越来越值钱也是这个道理,大牛们掐指一算比我们搬砖几天更有效果。 + +### 朴素贝叶斯分类器 +不难看出:原始的贝叶斯分类器最大的问题在于联合概率密度函数的估计,首先需要根据经验来假设联合概率分布,其次当属性很多时, +训练样本往往覆盖不够,参数的估计会出现很大的偏差。为了避免这个问题,朴素贝叶斯分类器(naive Bayes classifier)采用了“属 +性条件独立性假设”,即样本数据的所有属性之间相互独立。这样类条件概率p(x | c )可以改写为: + +![pic](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/5.png)
+ +这样,为每个样本估计类条件概率变成为每个样本的每个属性估计类条件概率。 + +![pic](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/6.png)
+ +相比原始贝叶斯分类器,朴素贝叶斯分类器基于单个的属性计算类条件概率更加容易操作,需要注意的是:若某个属性值在训练集中和某 +个类别没有一起出现过,这样会抹掉其它的属性信息,因为该样本的类条件概率被计算为0。因此在估计概率值时,常常用进行平滑( +smoothing)处理,拉普拉斯修正(Laplacian correction)就是其中的一种经典方法,具体计算方法如下: + +![pic](http://index.zeekling.cn/data/Pictures/gogs/ml/bayes/7.png)
+ +当训练集越大时,拉普拉斯修正引入的影响越来越小。对于贝叶斯分类器,模型的训练就是参数估计,因此可以事先将所有的概率储存好 +,当有新样本需要判定时,直接查表计算即可。 + +### 词集模型 +对于给定文档,只统计某个侮辱性词汇(准确说是词条)是否在本文档出现 + +### 词袋模型 +对于给定文档,统计某个侮辱性词汇在本文当中出现的频率,除此之外,往往还需要剔除重要性极低的高频词和停用词。因此, +词袋模型更精炼,也更有效。 + +## 数据预处理 + +### 向量化 +向量化、矩阵化操作是机器学习的追求。从数学表达式上看,向量化、矩阵化表示更加简洁;在实际操作中,矩阵化(向量是特殊的矩阵)更高效。 diff --git a/bayes/bayes.py b/bayes/bayes.py new file mode 100755 index 0000000..9150500 --- /dev/null +++ b/bayes/bayes.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +# coding:utf-8 +import numpy as np + + +def load_data_set(): + posting_list = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'], + ['maybe', 'not', 'take', 'him', 'dog', 'park', 'stupid'], + ['my', 'dalmation', 'is', 'so', 'cute', '_i', 'love', 'him'], + ['stop', 'posting', 'stupid', 'worthless', 'garbage'], + ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'], + ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']] + + class_vec = [0, 1, 0, 1, 0, 1] + return posting_list, class_vec + + +def create_vocab_list(data_set): + vocab_set = set([]) + for document in data_set: + vocab_set = vocab_set | set(document) + + return list(vocab_set) + + +def set_of_words2_vec(vocab_list, input_set): + return_vec = [0] * len(vocab_list) + for word in input_set: + if word in vocab_list: + return_vec[vocab_list.index(word)] = 1 + else: + print("the word:%s is not in my vocabulary!", word) + + return return_vec + + +# 贝叶斯分类器训练函数 +def train_nb0(train_matrix, train_category): + num_train_docs = len(train_matrix) + num_words = len(train_matrix[0]) + p_abusive = sum(train_category)/float(num_train_docs) + p0_num = np.zeros(num_words) + p1_num = np.zeros(num_words) + p0_denom = 0.0 + p1_denom = 0.0 + for i in range(num_train_docs): + if train_category[i] == 1: + p1_num += train_matrix[i] + p1_denom += sum(train_matrix[i]) + else: + p0_num += train_matrix[i] + p0_denom += sum(train_matrix[i]) + + p1_vect = p1_num/p1_denom + p0_vect = p0_num/p0_denom + return p0_vect, p1_vect, p_abusive + + +def classify_nb(vec2_classify, p0_vec, p1_vec, p_class1): + p1 = sum(vec2_classify * p1_vec) + np.log(p_class1) + p0 = sum(vec2_classify * p0_vec) + np.log(1.0 - p_class1) + if p1 > p0: + return 1 + else: + return 0 + + +def testing_nb(): + list0_posts, list_classes = load_data_set() + my_vocab_list = create_vocab_list(list0_posts) + train_mat = [] + for postin_doc in list0_posts: + train_mat.append(set_of_words2_vec(my_vocab_list, postin_doc)) + p0_v, p1_v, p_ab = train_nb0(np.array(train_mat), np.array(list_classes)) + test_entry = ['love', 'my', 'dalmation'] + this_doc = np.array(set_of_words2_vec(my_vocab_list, test_entry)) + print(test_entry, 'classsified as:', classify_nb(this_doc, p0_v, p1_v, p_ab)) + test_entry = ['stupid', 'garbage'] + this_doc = np.array(set_of_words2_vec(my_vocab_list, test_entry)) + print(test_entry, 'classsified as:', classify_nb(this_doc, p0_v, p1_v, p_ab)) + + +testing_nb() diff --git a/book.json b/book.json new file mode 100644 index 0000000..332cda5 --- /dev/null +++ b/book.json @@ -0,0 +1,75 @@ +{ + "root":"./", + "author":"小令童鞋", + "description":"没有到不了的明天,只有回不了的昨天", + "plugins":["github", + "-sharing", + "-search", + "sharing-plus", + "-highlight", + "expandable-chapters-small", + "mathjax", + "splitter", + "disqus", + "3-ba", + "theme-comscore", + "search-plus", + "prism", + "prism-themes", + "github-buttons", + "ad", + "tbfed-pagefooter", + "ga", + "alerts", + "anchors", + "include-codeblock", + "ace" + ], + "links":{ + "sidebar":{ + "主页":"http://www.zeekling.cn" + } + }, + "pluginsConfig":{ + "sharing":{ + "douban":false, + "facebook":false, + "qq":false, + "qzone":false, + "google":false, + "all": [ + "weibo","qq","qzone","google","douban" + ] + }, + "disqus":{ + "shortName":"zeekling" + }, + "ad":{ + + }, + "include-codeblock":{ + "template":"ace", + "unindent":true, + "theme":"monokai" + }, + "tbfed-pagefooter":{ + "Copyright":"© zeekling.cn", + "modify_label":"文件修改时间", + "modify_format":"YYYY-MM-DD HH:mm:ss" + }, + "3-ba":{ + "token":"zeekling" + }, + "ga":{ + "token":"zeekling", + "configuration":{ + "cookieName":"zeekling", + "cookieDomain":"book.zeekling.cn" + } + }, + "github":{"url":"http://www.zeekling.cn/gogs/zeek"}, + "theme-default": { + "showLevel": true + } + } +} diff --git a/decisionTree/AllElectronics.py b/decisionTree/AllElectronics.py new file mode 100755 index 0000000..378661d --- /dev/null +++ b/decisionTree/AllElectronics.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- + diff --git a/decisionTree/README.md b/decisionTree/README.md new file mode 100644 index 0000000..0de373b --- /dev/null +++ b/decisionTree/README.md @@ -0,0 +1,97 @@ +# 决策树 + + +# 决策树的构造 +决策树的构造是一个递归的过程,有三种情形会导致递归返回:(1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节 +点,并设为相应的类别;(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类 +别设为该节点所含样本最多的类别;(3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节 +点中所含样本最多的类别。算法的基本流程如下图所示: + +![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335075.png)
+ +可以看出:决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。属性划分的目 +标是让各个划分出来的子节点尽可能地“纯”,即属于同一类别。 + +## 数学归纳算法(ID3) +### 信息增益 + +相关概念 +1. 熵:表示随机变量的不确定性。 +2. 条件熵:在一个条件下,随机变量的不确定性。 +3. 信息增益:熵 - 条件熵,在一个条件下,信息不确定性减少的程度! + +### 信息熵 +ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标,假定当前样本集合D中 +第k类样本所占比例为pk,则样本集合D的信息熵定义为: +![信息熵](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335076.png) + +信息熵特点 +> 1. 不同类别的概率分布越均匀,信息熵越大; +> 2. 类别个数越多,信息熵越大; +> 3. 信息熵越大,越不容易被预测;(变化个数多,变化之间区分小,则越不容易被预测)(对于确定性问题,信息熵为0;p=1; E=p*logp=0)
+> 相关理解:[通俗理解信息熵](https://zhuanlan.zhihu.com/p/26486223)、[条件熵](https://zhuanlan.zhihu.com/p/26551798) + +假定通过属性划分样本集D,产生了V个分支节点,v表示其中第v个分支节点,易知:分支节点包含的样本数越多,表示该分支节点的影响 +力越大。故可以计算出划分后相比原始数据集D获得的“信息增益”(information gain)。 + +![信息增益](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335077.png)
+信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。 + +### C4.5算法 +ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分 +支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了“增益率”(gain ratio)来选择划分 +属性,来避免这个问题带来的困扰。首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率, +增益率定义为: +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335078.png)
+ +### cart算法 +CART决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概 +率,因此Gini(D)越小越好,基尼指数定义如下: +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335079.png)
+进而,使用属性α划分后的基尼指数为: +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335080.png)
+ +## 剪枝处理 +从决策树的构造流程中我们可以直观地看出:不管怎么样的训练集,决策树总是能很好地将各个类别分离开来,这时就会遇到之前提到过 +的问题:过拟合(overfitting),即太依赖于训练样本。剪枝(pruning)则是决策树算法对付过拟合的主要手段,剪枝的策略有两种如 +下: +> * 预剪枝(prepruning):在构造的过程中先评估,再考虑是否分支。 +> * 后剪枝(post-pruning):在构造好一颗完整的决策树后,自底向上,评估分支的必要性。 + +评估指的是性能度量,即决策树的泛化性能。之前提到:可以使用测试集作为学习器泛化性能的近似,因此可以将数据集划分为训练集和 +测试集。预剪枝表示在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分支时在测试集上的性能,再计算分支之后的性 +能,若分支对性能没有提升,则选择不分支(即剪枝)。后剪枝则表示在构造好一颗完整的决策树后,从最下面的节点开始,考虑该节点 +分支对模型的性能是否有提升,若无则剪枝,即将该节点标记为叶子节点,类别标记为其包含样本最多的类别。 +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335081.png)
+
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335082.png)
+
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335083.png)
+上图分别表示不剪枝处理的决策树、预剪枝决策树和后剪枝决策树。预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间 +开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝“贪心”的本质阻止了分支的展 +开,在一定程度上带来了欠拟合的风险。而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自 +底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升。 + + +## 连续值与缺失值处理 +对于连续值的属性,若每个取值作为一个分支则显得不可行,因此需要进行离散化处理,常用的方法为二分法,基本思想为:给定样本集 +D与连续属性α,二分法试图找到一个划分点t将样本集D在属性α上分为≤t与>t。 +> * 首先将α的所有取值按升序排列,所有相邻属性的均值作为候选划分点(n-1个,n为α所有的取值数目)。 +> * 计算每一个划分点划分集合D(即划分为两个分支)后的信息增益。 +> * 选择最大信息增益的划分点作为最优划分点。 + +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335084.png)
+现实中常会遇到不完整的样本,即某些属性值缺失。有时若简单采取剔除,则会造成大量的信息浪费,因此在属性值缺失的情况下需要解 +决两个问题:(1)如何选择划分属性。(2)给定划分属性,若某样本在该属性上缺失值,如何划分到具体的分支上。假定为样本集中的 +每一个样本都赋予一个权重,根节点中的权重初始化为1,则定义: +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335085.png)
+对于(1):通过在样本集D中选取在属性α上没有缺失值的样本子集,计算在该样本子集上的信息增益,最终的信息增益等于该样本子集 +划分后信息增益乘以样本子集占样本集的比重。即: +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335086.png)
+对于(2):若该样本子集在属性α上的值缺失,则将该样本以不同的权重(即每个分支所含样本比例)划入到所有分支节点中。该样本在 +分支节点中的权重变为: +
![pic](http://index.zeekling.cn/gogsPics/ml/decisionTree/20170121190335087.png)
+ + +## 优缺点 +- 处理连续变量不好 +- 类型比较多的时候错误增加的比较快 +- 可规模性一般 diff --git a/decisionTree/pics/20170121190335074.png b/decisionTree/pics/20170121190335074.png new file mode 100644 index 0000000..9657273 Binary files /dev/null and b/decisionTree/pics/20170121190335074.png differ diff --git a/decisionTree/pics/812093045.png b/decisionTree/pics/812093045.png new file mode 100644 index 0000000..cfaa451 Binary files /dev/null and b/decisionTree/pics/812093045.png differ diff --git a/decisionTree/trees.py b/decisionTree/trees.py new file mode 100755 index 0000000..9a6fd52 --- /dev/null +++ b/decisionTree/trees.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# coding: utf-8 + +from math import log + + +# 计算香农熵 +def calcShannonEnt(dataSet): + numEntries = len(dataSet) + labelCounts = {} + for featVec in dataSet: + currentLabel = featVec[-1] + if currentLabel not in labelCounts: + labelCounts[currentLabel] = 0 + labelCounts[currentLabel] += 1 + shannonEnt = 0.0 + for key in labelCounts: + prob = float(labelCounts[key]) / numEntries + shannonEnt -= prob * log(prob, 2) + return shannonEnt + + +# 初始值 +def createDataSet(): + dataSet = [[1, 1, 'yes'], + [1, 0, 'yes'], + [1, 0, 'no'], + [0, 1, 'no'], + [0, 1, 'no']] + label = ['no surfaceing', 'flippers'] + return dataSet, label + + +# 按照给定特征划分数据集 +def splitDataSet(dataSet, axis, value): + retDataSet = [] + for featVec in dataSet: + if featVec[axis] == value: + reducedFeatVec = featVec[:axis] + reducedFeatVec.extend(featVec[axis + 1:]) + retDataSet.append(reducedFeatVec) + return retDataSet + + +# 选择最好数据集的划分方式 +def choooseBestFeatureToSplit(dataSet): + numFeatures = len(dataSet) + baseEntropy = calcShannonEnt(dataSet) + bestInfoGain = 0.0 + bestFeature = -1 + for i in range(numFeatures): + featList = [example[i] for example in dataSet] + uniqyeVals = set(featList) + newEntropy = 0.0 + for value in uniqyeVals: + subDataSet = splitDataSet(dataSet, i, value) + prob = len(subDataSet)/float(len(dataSet)) + newEntropy += prob * calcShannonEnt(subDataSet) + infoGain = baseEntropy - newEntropy + if (infoGain > bestInfoGain): + bestInfoGain = infoGain + bestFeature = i + return bestFeature + +""" +myData, labels = createDataSet() +print(myData) +calcShannonEnt(myData) +myData[0][-1] = 'maybe' +print(myData) +shannonEnt = calcShannonEnt(myData) +print(shannonEnt) +myData[0][-1] = 'yes' +data = splitDataSet(myData, 0, 1) +print(data) +data = splitDataSet(myData, 0, 0) +print(data) +""" diff --git a/index.html b/index.html new file mode 100644 index 0000000..563583f --- /dev/null +++ b/index.html @@ -0,0 +1,9 @@ + + 机器学习 + + + + + diff --git a/knn/KNN.py b/knn/KNN.py new file mode 100755 index 0000000..2502aaa --- /dev/null +++ b/knn/KNN.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- +import math + + +def computeEuclideanDistance(x1, y1, x2, y2): + d = math.sqrt(math.pow((x1 - x2), 2) + math.pow((y1 - y2), 2)) + return d + + +d_ag = computeEuclideanDistance(3, 104, 18, 90) + +print(d_ag) diff --git a/knn/README.md b/knn/README.md new file mode 100644 index 0000000..46d8918 --- /dev/null +++ b/knn/README.md @@ -0,0 +1,18 @@ +# k-近邻算法 + +K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较不成熟的方法,也是最简单的机器学习算法之一。 +该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则 +该样本也属于这个类别。 + +[详解](https://blog.csdn.net/taoyanqi8932/article/details/53727841) + + +## 综述 +- 分类算法 +- 基于实例的学习,懒惰学习 + +## 算法详述 + +### 算法步骤 +为了判断实例的类别,以所有已知实例作为参照 + diff --git a/knn/SklearnExample.py b/knn/SklearnExample.py new file mode 100755 index 0000000..3c2bf45 --- /dev/null +++ b/knn/SklearnExample.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- + +from sklearn import neighbors +from sklearn import datasets + +knn = neighbors.KNeighborsClassifier() + +iris = datasets.load_iris() + +print iris + +knn.fit(iris.data, iris.target) + +predictedLabel = knn.predict([[0.1, 0.2, 0.3, 0.4]]) + +print predictedLabel diff --git a/knn/knn_test.py b/knn/knn_test.py new file mode 100755 index 0000000..021a6e4 --- /dev/null +++ b/knn/knn_test.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +# -*- coding:utf-8 -*- +import numpy as np +import operator + + +def createDataSet(): + group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) + labels = ['A', 'A', 'B', 'B'] + return group, labels + + +# K-近邻算法 +def classify0(inX, dataSet, labels, k): + dataSetSize = np.shape(dataSet)[0] + diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet + sqDiffMat = diffMat ** 2 + sqDistances = np.sum(sqDiffMat, axis=1) + distances = sqDistances ** 0.5 + sortedDistIndicies = np.argsort(distances) + classCount = {} + for i in range(k): + voteLabel = labels[sortedDistIndicies[i]] + classCount[voteLabel] = classCount.get(voteLabel, 0) + 1 + + sortedClassCount = np.sort(classCount.iteritems(), + key=operator.itemgetter(0), + reversed=True) + + return sortedClassCount diff --git a/logistic/LogRegres-gj.py b/logistic/LogRegres-gj.py new file mode 100755 index 0000000..007b7fa --- /dev/null +++ b/logistic/LogRegres-gj.py @@ -0,0 +1,231 @@ +#!/usr/bin/env python3 +# -*- coding:UTF-8 -*- +from matplotlib.font_manager import FontProperties +import matplotlib.pyplot as plt +import numpy as np +import random + + +""" +函数说明:加载数据 + +Parameters: + 无 +Returns: + dataMat - 数据列表 + labelMat - 标签列表 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def loadDataSet(): + dataMat = [] #创建数据列表 + labelMat = [] #创建标签列表 + fr = open('testSet.txt') #打开文件 + for line in fr.readlines(): #逐行读取 + lineArr = line.strip().split() #去回车,放入列表 + dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) #添加数据 + labelMat.append(int(lineArr[2])) #添加标签 + fr.close() #关闭文件 + return dataMat, labelMat #返回 + +""" +函数说明:sigmoid函数 + +Parameters: + inX - 数据 +Returns: + sigmoid函数 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def sigmoid(inX): + return 1.0 / (1 + np.exp(-inX)) + +""" +函数说明:梯度上升算法 + +Parameters: + dataMatIn - 数据集 + classLabels - 数据标签 +Returns: + weights.getA() - 求得的权重数组(最优参数) + weights_array - 每次更新的回归系数 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def gradAscent(dataMatIn, classLabels): + dataMatrix = np.mat(dataMatIn) #转换成numpy的mat + labelMat = np.mat(classLabels).transpose() #转换成numpy的mat,并进行转置 + m, n = np.shape(dataMatrix) #返回dataMatrix的大小。m为行数,n为列数。 + alpha = 0.01 #移动步长,也就是学习速率,控制更新的幅度。 + maxCycles = 500 #最大迭代次数 + weights = np.ones((n,1)) + weights_array = np.array([]) + for k in range(maxCycles): + h = sigmoid(dataMatrix * weights) #梯度上升矢量化公式 + error = labelMat - h + weights = weights + alpha * dataMatrix.transpose() * error + weights_array = np.append(weights_array,weights) + weights_array = weights_array.reshape(maxCycles,n) + return weights.getA(),weights_array #将矩阵转换为数组,并返回 + +""" +函数说明:改进的随机梯度上升算法 + +Parameters: + dataMatrix - 数据数组 + classLabels - 数据标签 + numIter - 迭代次数 +Returns: + weights - 求得的回归系数数组(最优参数) + weights_array - 每次更新的回归系数 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-31 +""" +def stocGradAscent1(dataMatrix, classLabels, numIter=150): + m,n = np.shape(dataMatrix) #返回dataMatrix的大小。m为行数,n为列数。 + weights = np.ones(n) #参数初始化 + weights_array = np.array([]) #存储每次更新的回归系数 + for j in range(numIter): + dataIndex = list(range(m)) + for i in range(m): + alpha = 4/(1.0+j+i)+0.01 #降低alpha的大小,每次减小1/(j+i)。 + randIndex = int(random.uniform(0,len(dataIndex))) #随机选取样本 + h = sigmoid(sum(dataMatrix[randIndex]*weights)) #选择随机选取的一个样本,计算h + error = classLabels[randIndex] - h #计算误差 + weights = weights + alpha * error * dataMatrix[randIndex] #更新回归系数 + weights_array = np.append(weights_array,weights,axis=0) #添加回归系数到数组中 + del(dataIndex[randIndex]) #删除已经使用的样本 + weights_array = weights_array.reshape(numIter*m,n) #改变维度 + return weights,weights_array #返回 + +""" +函数说明:绘制数据集 + +Parameters: + weights - 权重参数数组 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-30 +""" +def plotBestFit(weights): + dataMat, labelMat = loadDataSet() #加载数据集 + dataArr = np.array(dataMat) #转换成numpy的array数组 + n = np.shape(dataMat)[0] #数据个数 + xcord1 = []; ycord1 = [] #正样本 + xcord2 = []; ycord2 = [] #负样本 + for i in range(n): #根据数据集标签进行分类 + if int(labelMat[i]) == 1: + xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2]) #1为正样本 + else: + xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2]) #0为负样本 + fig = plt.figure() + ax = fig.add_subplot(111) #添加subplot + ax.scatter(xcord1, ycord1, s = 20, c = 'red', marker = 's',alpha=.5)#绘制正样本 + ax.scatter(xcord2, ycord2, s = 20, c = 'green',alpha=.5) #绘制负样本 + x = np.arange(-3.0, 3.0, 0.1) + y = (-weights[0] - weights[1] * x) / weights[2] + ax.plot(x, y) + plt.title('BestFit') #绘制title + plt.xlabel('X1'); plt.ylabel('X2') #绘制label + plt.show() + +""" +函数说明:绘制回归系数与迭代次数的关系 + +Parameters: + weights_array1 - 回归系数数组1 + weights_array2 - 回归系数数组2 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-30 +""" +def plotWeights(weights_array1,weights_array2): + #设置汉字格式 + #font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) + #将fig画布分隔成1行1列,不共享x轴和y轴,fig画布的大小为(13,8) + #当nrow=3,nclos=2时,代表fig画布被分为六个区域,axs[0][0]表示第一行第一列 + fig, axs = plt.subplots(nrows=3, ncols=2,sharex=False, sharey=False, figsize=(20,10)) + x1 = np.arange(0, len(weights_array1), 1) + #绘制w0与迭代次数的关系 + axs[0][0].plot(x1,weights_array1[:,0]) + axs0_title_text = axs[0][0].set_title(u'Improved Random Gradient Rising') + axs0_ylabel_text = axs[0][0].set_ylabel(u'W0') + plt.setp(axs0_title_text, size=20, weight='bold', color='black') + plt.setp(axs0_ylabel_text, size=20, weight='bold', color='black') + #绘制w1与迭代次数的关系 + axs[1][0].plot(x1,weights_array1[:,1]) + axs1_ylabel_text = axs[1][0].set_ylabel(u'W1') + plt.setp(axs1_ylabel_text, size=20, weight='bold', color='black') + #绘制w2与迭代次数的关系 + axs[2][0].plot(x1,weights_array1[:,2]) + axs2_xlabel_text = axs[2][0].set_xlabel(u'Iteration times') + axs2_ylabel_text = axs[2][0].set_ylabel(u'W1') + plt.setp(axs2_xlabel_text, size=20, weight='bold', color='black') + plt.setp(axs2_ylabel_text, size=20, weight='bold', color='black') + + + x2 = np.arange(0, len(weights_array2), 1) + #绘制w0与迭代次数的关系 + axs[0][1].plot(x2,weights_array2[:,0]) + axs0_title_text = axs[0][1].set_title(u'Random Gradient Rising') + axs0_ylabel_text = axs[0][1].set_ylabel(u'W0') + plt.setp(axs0_title_text, size=20, weight='bold', color='black') + plt.setp(axs0_ylabel_text, size=20, weight='bold', color='black') + #绘制w1与迭代次数的关系 + axs[1][1].plot(x2,weights_array2[:,1]) + axs1_ylabel_text = axs[1][1].set_ylabel(u'W1') + plt.setp(axs1_ylabel_text, size=20, weight='bold', color='black') + #绘制w2与迭代次数的关系 + axs[2][1].plot(x2,weights_array2[:,2]) + axs2_xlabel_text = axs[2][1].set_xlabel(u'Iteration times') + axs2_ylabel_text = axs[2][1].set_ylabel(u'W1') + plt.setp(axs2_xlabel_text, size=20, weight='bold', color='black') + plt.setp(axs2_ylabel_text, size=20, weight='bold', color='black') + + plt.show() + +if __name__ == '__main__': + dataMat, labelMat = loadDataSet() + weights1,weights_array1 = stocGradAscent1(np.array(dataMat), labelMat) + + weights2,weights_array2 = gradAscent(dataMat, labelMat) + plotWeights(weights_array1, weights_array2) diff --git a/logistic/colicLogRegres.py b/logistic/colicLogRegres.py new file mode 100755 index 0000000..a0d5d70 --- /dev/null +++ b/logistic/colicLogRegres.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +# -*- coding:UTF-8 -*- +from sklearn.linear_model import LogisticRegression +import numpy as np +import random + +""" +函数说明:sigmoid函数 + +Parameters: + inX - 数据 +Returns: + sigmoid函数 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-05 +""" +def sigmoid(inX): + return 1.0 / (1 + np.exp(-inX)) + +""" +函数说明:改进的随机梯度上升算法 + +Parameters: + dataMatrix - 数据数组 + classLabels - 数据标签 + numIter - 迭代次数 +Returns: + weights - 求得的回归系数数组(最优参数) +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-05 +""" +def stocGradAscent1(dataMatrix, classLabels, numIter=150): + m,n = np.shape(dataMatrix) #返回dataMatrix的大小。m为行数,n为列数。 + weights = np.ones(n) #参数初始化 #存储每次更新的回归系数 + for j in range(numIter): + dataIndex = list(range(m)) + for i in range(m): + alpha = 4/(1.0+j+i)+0.01 #降低alpha的大小,每次减小1/(j+i)。 + randIndex = int(random.uniform(0,len(dataIndex))) #随机选取样本 + h = sigmoid(sum(dataMatrix[randIndex]*weights)) #选择随机选取的一个样本,计算h + error = classLabels[randIndex] - h #计算误差 + weights = weights + alpha * error * dataMatrix[randIndex] #更新回归系数 + del(dataIndex[randIndex]) #删除已经使用的样本 + return weights #返回 + + +""" +函数说明:梯度上升算法 + +Parameters: + dataMatIn - 数据集 + classLabels - 数据标签 +Returns: + weights.getA() - 求得的权重数组(最优参数) +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def gradAscent(dataMatIn, classLabels): + dataMatrix = np.mat(dataMatIn) #转换成numpy的mat + labelMat = np.mat(classLabels).transpose() #转换成numpy的mat,并进行转置 + m, n = np.shape(dataMatrix) #返回dataMatrix的大小。m为行数,n为列数。 + alpha = 0.01 #移动步长,也就是学习速率,控制更新的幅度。 + maxCycles = 500 #最大迭代次数 + weights = np.ones((n,1)) + for k in range(maxCycles): + h = sigmoid(dataMatrix * weights) #梯度上升矢量化公式 + error = labelMat - h + weights = weights + alpha * dataMatrix.transpose() * error + return weights.getA() #将矩阵转换为数组,并返回 + + + +""" +函数说明:使用Python写的Logistic分类器做预测 + +Parameters: + 无 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-05 +""" +def colicTest(): + frTrain = open('horseColicTraining.txt') #打开训练集 + frTest = open('horseColicTest.txt') #打开测试集 + trainingSet = []; trainingLabels = [] + for line in frTrain.readlines(): + currLine = line.strip().split('\t') + lineArr = [] + for i in range(len(currLine)-1): + lineArr.append(float(currLine[i])) + trainingSet.append(lineArr) + trainingLabels.append(float(currLine[-1])) + trainWeights = stocGradAscent1(np.array(trainingSet), trainingLabels,500) #使用改进的随即上升梯度训练 + errorCount = 0; numTestVec = 0.0 + for line in frTest.readlines(): + numTestVec += 1.0 + currLine = line.strip().split('\t') + lineArr =[] + for i in range(len(currLine)-1): + lineArr.append(float(currLine[i])) + if int(classifyVector(np.array(lineArr), trainWeights))!= int(currLine[-1]): + errorCount += 1 + errorRate = (float(errorCount)/numTestVec) * 100 #错误率计算 + print("测试集错误率为: %.2f%%" % errorRate) + +""" +函数说明:分类函数 + +Parameters: + inX - 特征向量 + weights - 回归系数 +Returns: + 分类结果 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-05 +""" +def classifyVector(inX, weights): + prob = sigmoid(sum(inX*weights)) + if prob > 0.5: return 1.0 + else: return 0.0 + +""" +函数说明:使用Sklearn构建Logistic回归分类器 + +Parameters: + 无 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-05 +""" +def colicSklearn(): + frTrain = open('horseColicTraining.txt') #打开训练集 + frTest = open('horseColicTest.txt') #打开测试集 + trainingSet = []; trainingLabels = [] + testSet = []; testLabels = [] + for line in frTrain.readlines(): + currLine = line.strip().split('\t') + lineArr = [] + for i in range(len(currLine)-1): + lineArr.append(float(currLine[i])) + trainingSet.append(lineArr) + trainingLabels.append(float(currLine[-1])) + for line in frTest.readlines(): + currLine = line.strip().split('\t') + lineArr =[] + for i in range(len(currLine)-1): + lineArr.append(float(currLine[i])) + testSet.append(lineArr) + testLabels.append(float(currLine[-1])) + classifier = LogisticRegression(solver = 'sag',max_iter = 5000).fit(trainingSet, trainingLabels) + test_accurcy = classifier.score(testSet, testLabels) * 100 + print('正确率:%f%%' % test_accurcy) + +if __name__ == '__main__': + colicSklearn() diff --git a/logistic/horseColicTest.txt b/logistic/horseColicTest.txt new file mode 100644 index 0000000..ce89e0f --- /dev/null +++ b/logistic/horseColicTest.txt @@ -0,0 +1,67 @@ +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 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 +1 1 37.7 44 28 0 4 3 2 5 4 4 1 1 0 3 5 45 70 3 2 1 +1 1 37 56 24 3 1 4 2 4 4 3 1 1 0 0 0 35 61 3 2 0 +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 +1 1 0 60 40 3 0 1 1 0 4 0 3 2 0 0 5 42 72 0 0 1 +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 +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 +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 +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 +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 +1 1 0 140 0 0 0 4 2 5 4 4 1 1 0 0 5 30 69 0 0 0 +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 +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 +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 +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 +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 +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 +2 9 0 150 60 4 4 4 2 5 4 4 0 0 0 0 0 0 0 0 0 0 +1 1 39.7 100 30 0 0 6 2 4 4 3 1 0 0 4 5 65 75 0 0 0 +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 +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 +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 +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 +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 +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 +2 1 38.4 52 20 2 1 3 1 1 3 2 2 1 0 3 5 41 63 1 1 1 +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 +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 +1 1 39.1 60 10 0 1 1 0 2 3 0 0 0 0 4 4 0 0 0 0 1 +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 +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 +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 +2 1 38.30 88 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +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 +1 1 0 0 0 3 1 1 1 2 3 3 1 3 6.00 4 4 0 0 2 0 0 +1 1 37.60 40 0 1 1 1 1 1 1 1 0 0 0 1 1 0 0 2 2.10 1 +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 +2 1 38.2 42 16 1 1 3 1 1 3 1 0 0 0 1 0 35 60 1 1 1 +2 1 38 56 44 3 3 3 0 0 1 1 2 1 0 4 0 47 70 2 1 1 +2 1 38.30 45 20 3 3 2 2 2 4 1 2 0 0 4 0 0 0 0 0 1 +1 1 0 48 96 1 1 3 1 0 4 1 2 1 0 1 4 42.00 8.00 1 0 1 +1 1 37.70 55 28 2 1 2 1 2 3 3 0 3 5.00 4 5 0 0 0 0 1 +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 +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 +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 +1 1 38.1 72 30 3 3 3 1 4 4 3 2 1 0 3 5 37 56 3 1 1 +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 +1 1 38.6 48 20 3 1 1 1 4 3 1 0 0 0 3 0 37 75 0 0 1 +1 1 0 82 72 3 1 4 1 2 3 3 0 3 0 4 4 53 65 3 2 0 +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 +2 1 37.8 60 16 1 1 3 1 2 3 2 1 2 0 3 0 41 73 0 0 0 +1 1 38.7 34 30 2 0 3 1 2 3 0 0 0 0 0 0 33 69 0 2 0 +1 1 0 36 12 1 1 1 1 1 2 1 1 1 0 1 5 44.00 0 0 0 1 +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 +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 +1 1 0 0 0 4 3 0 2 2 4 1 0 0 0 0 0 54 76 3 2 1 +1 1 36.6 48 16 3 1 3 1 4 1 1 1 1 0 0 0 27 56 0 0 0 +1 1 38.5 90 0 1 1 3 1 3 3 3 2 3 2 4 5 47 79 0 0 1 +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 +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 +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 +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 +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 +1 1 38 60 12 1 1 2 1 2 1 1 1 1 0 1 4 44 65 3 2 0 +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 +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 \ No newline at end of file diff --git a/logistic/horseColicTraining.txt b/logistic/horseColicTraining.txt new file mode 100644 index 0000000..def190a --- /dev/null +++ b/logistic/horseColicTraining.txt @@ -0,0 +1,299 @@ +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 \ No newline at end of file diff --git a/logistic/log_regres.py b/logistic/log_regres.py new file mode 100755 index 0000000..20a7294 --- /dev/null +++ b/logistic/log_regres.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +# -*- coding:UTF-8 -*- +import matplotlib.pyplot as plt +import numpy as np + +""" +函数说明:梯度上升算法测试函数 + +求函数f(x) = -x^2 + 4x的极大值 + +Parameters: + 无 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def Gradient_Ascent_test(): + def f_prime(x_old): #f(x)的导数 + return -2 * x_old + 4 + x_old = -1 #初始值,给一个小于x_new的值 + x_new = 0 #梯度上升算法初始值,即从(0,0)开始 + alpha = 0.01 #步长,也就是学习速率,控制更新的幅度 + presision = 0.00000001 #精度,也就是更新阈值 + while abs(x_new - x_old) > presision: + x_old = x_new + x_new = x_old + alpha * f_prime(x_old) #上面提到的公式 + print(x_new) #打印最终求解的极值近似值 + +""" +函数说明:加载数据 + +Parameters: + 无 +Returns: + dataMat - 数据列表 + labelMat - 标签列表 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def loadDataSet(): + dataMat = [] #创建数据列表 + labelMat = [] #创建标签列表 + fr = open('testSet.txt') #打开文件 + for line in fr.readlines(): #逐行读取 + lineArr = line.strip().split() #去回车,放入列表 + dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) #添加数据 + labelMat.append(int(lineArr[2])) #添加标签 + fr.close() #关闭文件 + return dataMat, labelMat #返回 + +""" +函数说明:sigmoid函数 + +Parameters: + inX - 数据 +Returns: + sigmoid函数 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def sigmoid(inX): + return 1.0 / (1 + np.exp(-inX)) + +""" +函数说明:梯度上升算法 + +Parameters: + dataMatIn - 数据集 + classLabels - 数据标签 +Returns: + weights.getA() - 求得的权重数组(最优参数) +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-28 +""" +def gradAscent(dataMatIn, classLabels): + dataMatrix = np.mat(dataMatIn) #转换成numpy的mat + labelMat = np.mat(classLabels).transpose() #转换成numpy的mat,并进行转置 + m, n = np.shape(dataMatrix) #返回dataMatrix的大小。m为行数,n为列数。 + alpha = 0.001 #移动步长,也就是学习速率,控制更新的幅度。 + maxCycles = 500 #最大迭代次数 + weights = np.ones((n,1)) + for k in range(maxCycles): + h = sigmoid(dataMatrix * weights) #梯度上升矢量化公式 + error = labelMat - h + weights = weights + alpha * dataMatrix.transpose() * error + return weights.getA() #将矩阵转换为数组,返回权重数组 + +""" +函数说明:绘制数据集 + +Parameters: + 无 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-30 +""" +def plotDataSet(): + dataMat, labelMat = loadDataSet() #加载数据集 + dataArr = np.array(dataMat) #转换成numpy的array数组 + n = np.shape(dataMat)[0] #数据个数 + xcord1 = []; ycord1 = [] #正样本 + xcord2 = []; ycord2 = [] #负样本 + for i in range(n): #根据数据集标签进行分类 + if int(labelMat[i]) == 1: + xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2]) #1为正样本 + else: + xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2]) #0为负样本 + fig = plt.figure() + ax = fig.add_subplot(111) #添加subplot + ax.scatter(xcord1, ycord1, s = 20, c = 'red', marker = 's',alpha=.5)#绘制正样本 + ax.scatter(xcord2, ycord2, s = 20, c = 'green',alpha=.5) #绘制负样本 + plt.title('DataSet') #绘制title + plt.xlabel('X1'); plt.ylabel('X2') #绘制label + plt.show() #显示 + +""" +函数说明:绘制数据集 + +Parameters: + weights - 权重参数数组 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-08-30 +""" +def plotBestFit(weights): + dataMat, labelMat = loadDataSet() #加载数据集 + dataArr = np.array(dataMat) #转换成numpy的array数组 + n = np.shape(dataMat)[0] #数据个数 + xcord1 = []; ycord1 = [] #正样本 + xcord2 = []; ycord2 = [] #负样本 + for i in range(n): #根据数据集标签进行分类 + if int(labelMat[i]) == 1: + xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2]) #1为正样本 + else: + xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2]) #0为负样本 + fig = plt.figure() + ax = fig.add_subplot(111) #添加subplot + ax.scatter(xcord1, ycord1, s = 20, c = 'red', marker = 's',alpha=.5)#绘制正样本 + ax.scatter(xcord2, ycord2, s = 20, c = 'green',alpha=.5) #绘制负样本 + x = np.arange(-3.0, 3.0, 0.1) + y = (-weights[0] - weights[1] * x) / weights[2] + ax.plot(x, y) + plt.title('BestFit') #绘制title + plt.xlabel('X1'); plt.ylabel('X2') #绘制label + plt.show() + +if __name__ == '__main__': + dataMat, labelMat = loadDataSet() + weights = gradAscent(dataMat, labelMat) + plotBestFit(weights) diff --git a/logistic/testSet.txt b/logistic/testSet.txt new file mode 100644 index 0000000..f2f9024 --- /dev/null +++ b/logistic/testSet.txt @@ -0,0 +1,100 @@ +-0.017612 14.053064 0 +-1.395634 4.662541 1 +-0.752157 6.538620 0 +-1.322371 7.152853 0 +0.423363 11.054677 0 +0.406704 7.067335 1 +0.667394 12.741452 0 +-2.460150 6.866805 1 +0.569411 9.548755 0 +-0.026632 10.427743 0 +0.850433 6.920334 1 +1.347183 13.175500 0 +1.176813 3.167020 1 +-1.781871 9.097953 0 +-0.566606 5.749003 1 +0.931635 1.589505 1 +-0.024205 6.151823 1 +-0.036453 2.690988 1 +-0.196949 0.444165 1 +1.014459 5.754399 1 +1.985298 3.230619 1 +-1.693453 -0.557540 1 +-0.576525 11.778922 0 +-0.346811 -1.678730 1 +-2.124484 2.672471 1 +1.217916 9.597015 0 +-0.733928 9.098687 0 +-3.642001 -1.618087 1 +0.315985 3.523953 1 +1.416614 9.619232 0 +-0.386323 3.989286 1 +0.556921 8.294984 1 +1.224863 11.587360 0 +-1.347803 -2.406051 1 +1.196604 4.951851 1 +0.275221 9.543647 0 +0.470575 9.332488 0 +-1.889567 9.542662 0 +-1.527893 12.150579 0 +-1.185247 11.309318 0 +-0.445678 3.297303 1 +1.042222 6.105155 1 +-0.618787 10.320986 0 +1.152083 0.548467 1 +0.828534 2.676045 1 +-1.237728 10.549033 0 +-0.683565 -2.166125 1 +0.229456 5.921938 1 +-0.959885 11.555336 0 +0.492911 10.993324 0 +0.184992 8.721488 0 +-0.355715 10.325976 0 +-0.397822 8.058397 0 +0.824839 13.730343 0 +1.507278 5.027866 1 +0.099671 6.835839 1 +-0.344008 10.717485 0 +1.785928 7.718645 1 +-0.918801 11.560217 0 +-0.364009 4.747300 1 +-0.841722 4.119083 1 +0.490426 1.960539 1 +-0.007194 9.075792 0 +0.356107 12.447863 0 +0.342578 12.281162 0 +-0.810823 -1.466018 1 +2.530777 6.476801 1 +1.296683 11.607559 0 +0.475487 12.040035 0 +-0.783277 11.009725 0 +0.074798 11.023650 0 +-1.337472 0.468339 1 +-0.102781 13.763651 0 +-0.147324 2.874846 1 +0.518389 9.887035 0 +1.015399 7.571882 0 +-1.658086 -0.027255 1 +1.319944 2.171228 1 +2.056216 5.019981 1 +-0.851633 4.375691 1 +-1.510047 6.061992 0 +-1.076637 -3.181888 1 +1.821096 10.283990 0 +3.010150 8.401766 1 +-1.099458 1.688274 1 +-0.834872 -1.733869 1 +-0.846637 3.849075 1 +1.400102 12.628781 0 +1.752842 5.468166 1 +0.078557 0.059736 1 +0.089392 -0.715300 1 +1.825662 12.693808 0 +0.197445 9.744638 0 +0.126117 0.922311 1 +-0.679797 1.220530 1 +0.677983 2.556666 1 +0.761349 10.693862 0 +-2.168791 0.143632 1 +1.388610 9.341997 0 +0.317029 14.739025 0 diff --git a/ml.xml b/ml.xml new file mode 100644 index 0000000..1cf3349 --- /dev/null +++ b/ml.xml @@ -0,0 +1,249 @@ + + + + http://www.zeekling.cn/book/ml/bayes/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/bayes/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/logistic/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/decisionTree/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/decisionTree/pics/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/decisionTree/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/deep_learn.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/math_basis.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/pic/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/pic/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/deep_basic.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/evaluation.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/basic/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/svm/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/svm/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/knn/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/knn/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nlp/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nlp/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/lego/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/lego/lego10196.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/lego/lego8288.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/lego/lego10189.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/lego/lego10181.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/lego/lego10030.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/lego/lego10179.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/线性模型.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/regression/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/rl/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/rl/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/targetDetection/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/targetDetection/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nn/ + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nn/rnn.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nn/multi_task.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nn/ResNet.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nn/cnn.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/nn/index.html + weekly + 0.8 + 2019-06-17 + + + http://www.zeekling.cn/book/ml/index.html + weekly + 0.8 + 2019-06-17 + + diff --git a/nlp/README.md b/nlp/README.md new file mode 100644 index 0000000..0b207ff --- /dev/null +++ b/nlp/README.md @@ -0,0 +1 @@ +# 自然语言理解 diff --git a/nlp/word2vec.md b/nlp/word2vec.md new file mode 100644 index 0000000..c386a31 --- /dev/null +++ b/nlp/word2vec.md @@ -0,0 +1,2 @@ +# Word2vec + diff --git a/nn/README.md b/nn/README.md new file mode 100644 index 0000000..27ece64 --- /dev/null +++ b/nn/README.md @@ -0,0 +1,128 @@ +# 神经网络 +一直沿用至今的“M-P神经元模型”正是对这一结构进行了抽象,也称“阈值逻辑单元“,其中树突对应于输入部分,每个神经元收到n个其他 +神经元传递过来的输入信号,这些信号通过带权重的连接传递给细胞体,这些权重又称为连接权(connection weight)。细胞体分为两 +部分,前一部分计算总输入值(即输入信号的加权和,或者说累积电平),后一部分先计算总输入值与该神经元阈值的差值,然后通过 +激活函数(activation function)的处理,产生输出从轴突传送给其它神经元。M-P神经元模型如下图所示: + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/1.png)
+ +与线性分类十分相似,神经元模型最理想的激活函数也是阶跃函数,即将神经元输入值与阈值的差值映射为输出值1或0,若差值大于零输 +出1,对应兴奋;若差值小于零则输出0,对应抑制。但阶跃函数不连续,不光滑,故在M-P神经元模型中,也采用Sigmoid函数来近似, +Sigmoid函数将较大范围内变化的输入值挤压到 (0,1) 输出值范围内,所以也称为挤压函数(squashing function)。 + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/2.png)
+ +将多个神经元按一定的层次结构连接起来,就得到了神经网络。它是一种包含多个参数的模型,比方说10个神经元两两连接,则有100个 +参数需要学习(每个神经元有9个连接权以及1个阈值),若将每个神经元都看作一个函数,则整个神经网络就是由这些函数相互嵌套而成。 + +## 感知机与多层网络 +感知机(Perceptron)是由两层神经元组成的一个简单模型,但只有输出层是M-P神经元,即只有输出层神经元进行激活函数处理,也称 +为功能神经元(functional neuron);输入层只是接受外界信号(样本属性)并传递给输出层(输入层的神经元个数等于样本的属性数 +目),而没有激活函数。这样一来,感知机与之前线性模型中的对数几率回归的思想基本是一样的,都是通过对属性加权与另一个常数求 +和,再使用sigmoid函数将这个输出值压缩到0-1之间,从而解决分类问题。不同的是感知机的输出层应该可以有多个神经元,从而可以实 +现多分类问题,同时两个模型所用的参数估计方法十分不同。 + +给定训练集,则感知机的n+1个参数(n个权重+1个阈值)都可以通过学习得到。阈值Θ可以看作一个输入值固定为-1的哑结点的权重ωn+1, +即假设有一个固定输入xn+1=-1的输入层神经元,其对应的权重为ωn+1,这样就把权重和阈值统一为权重的学习了。简单感知机的结构如 +下图所示: + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/3.png)
+ +感知机权重的学习规则如下:对于训练样本(x,y),当该样本进入感知机学习后,会产生一个输出值,若该输出值与样本的真实标记 +不一致,则感知机会对权重进行调整,若激活函数为阶跃函数,则调整的方法为(基于梯度下降法):(看不懂) + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/4.png)
+ +其中 η∈(0,1)称为学习率,可以看出感知机是通过逐个样本输入来更新权重,首先设定好初始权重(一般为随机),逐个地输入样本 +数据,若输出值与真实标记相同则继续输入下一个样本,若不一致则更新权重,然后再重新逐个检验,直到每个样本数据的输出值都与真 +实标记相同。容易看出:感知机模型总是能将训练数据的每一个样本都预测正确,和决策树模型总是能将所有训练数据都分开一样,感 +知机模型很容易产生过拟合问题。 + +由于感知机模型只有一层功能神经元,因此其功能十分有限,只能处理线性可分的问题,对于这类问题,感知机的学习过程一定会收敛 +(converge),因此总是可以求出适当的权值。但是对于像书上提到的异或问题,只通过一层功能神经元往往不能解决,因此要解决非线 +性可分问题,需要考虑使用多层功能神经元,即神经网络。多层神经网络的拓扑结构如下图所示: + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/4.png)
+ +在神经网络中,输入层与输出层之间的层称为隐含层或隐层(hidden layer),隐层和输出层的神经元都是具有激活函数的功能神经元。 +只需包含一个隐层便可以称为多层神经网络,常用的神经网络称为“多层前馈神经网络”(multi-layer feedforward neural network), +该结构满足以下几个特点: + +* 每层神经元与下一层神经元之间完全互连 +* 神经元之间不存在同层连接 +* 神经元之间不存在跨层连接 + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/6.png)
+ +根据上面的特点可以得知:这里的“前馈”指的是网络拓扑结构中不存在环或回路,而不是指该网络只能向前传播而不能向后传播(下节中 +的BP神经网络正是基于前馈神经网络而增加了反馈调节机制)。神经网络的学习过程就是根据训练数据来调整神经元之间的“连接权”以及 +每个神经元的阈值,换句话说:神经网络所学习到的东西都蕴含在网络的连接权与阈值中。 + +## BP神经网络算法 + +一般而言,只需包含一个足够多神经元的隐层,就能以任意精度逼近任意复杂度的连续函数[Hornik et al.,1989],故下面以训练单隐 +层的前馈神经网络为例,介绍BP神经网络的算法思想。 + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/7.png)
+ +上图为一个单隐层前馈神经网络的拓扑结构,BP神经网络算法也使用梯度下降法(gradient descent),以单个样本的均方误差的负梯度 +方向对权重进行调节。可以看出:BP算法首先将误差反向传播给隐层神经元,调节隐层到输出层的连接权重与输出层神经元的阈值;接着 +根据隐含层神经元的均方误差,来调节输入层到隐含层的连接权值与隐含层神经元的阈值。BP算法基本的推导过程与感知机的推导过程原 +理是相同的,下面给出调整隐含层到输出层的权重调整规则的推导过程: + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/8.png)
+ +学习率η∈(0,1)控制着沿反梯度方向下降的步长,若步长太大则下降太快容易产生震荡,若步长太小则收敛速度太慢,一般地常把η设 +置为0.1,有时更新权重时会将输出层与隐含层设置为不同的学习率。BP算法的基本流程如下所示: + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/9.png)
+ +BP算法的更新规则是基于每个样本的预测值与真实类标的均方误差来进行权值调节,即BP算法每次更新只针对于单个样例。需要注意的是 +:BP算法的最终目标是要最小化整个训练集D上的累积误差,即: + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/10.png)
+ +如果基于累积误差最小化的更新规则,则得到了累积误差逆传播算法(accumulated error backpropagation),即每次读取全部的数据 +集一遍,进行一轮学习,从而基于当前的累积误差进行权值调整,因此参数更新的频率相比标准BP算法低了很多,但在很多任务中,尤其 +是在数据量很大的时候,往往标准BP算法会获得较好的结果。另外对于如何设置隐层神经元个数的问题,至今仍然没有好的解决方案, +常使用“试错法”进行调整。 + +- 早停:将数据分为训练集与测试集,训练集用于学习,测试集用于评估性能,若在训练过程中,训练集的累积误差降低,而测试集的 + 累积误差升高,则停止训练。 +- 引入正则化(regularization):基本思想是在累积误差函数中增加一个用于描述网络复杂度的部分,例如所有权值与阈值的平方和, + 其中λ∈(0,1)用于对累积经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。 + +![pic](http://index.zeekling.cn/gogsPics/ml/nn/11.png)
+ +### 全局最小与局部最小 +模型学习的过程实质上就是一个寻找最优参数的过程,例如BP算法试图通过最速下降来寻找使得累积经验误差最小的权值与阈值,在谈到 +最优时,一般会提到局部极小(local minimum)和全局最小(global minimum)。 +> * 局部极小解:参数空间中的某个点,其邻域点的误差函数值均不小于该点的误差函数值。 +> * 全局最小解:参数空间中的某个点,所有其他点的误差函数值均不小于该点的误差函数值。 + +
![pic](http://index.zeekling.cn/gogsPics/ml/nn/12.png)
+要成为局部极小点,只要满足该点在参数空间中的梯度为零。局部极小可以有多个,而全局最小只有一个。全局最小一定是局部极小,但 +局部最小却不一定是全局最小。显然在很多机器学习算法中,都试图找到目标函数的全局最小。梯度下降法的主要思想就是沿着负梯度方 +向去搜索最优解,负梯度方向是函数值下降最快的方向,若迭代到某处的梯度为0,则表示达到一个局部最小,参数更新停止。因此在现 +实任务中,通常使用以下策略尽可能地去接近全局最小。 +> * 以多组不同参数值初始化多个神经网络,按标准方法训练,迭代停止后,取其中误差最小的解作为最终参数。 +> * 使用“模拟退火”技术,这里不做具体介绍。 +> * 使用随机梯度下降,即在计算梯度时加入了随机因素,使得在局部最小时,计算的梯度仍可能不为0,从而迭代可以继续进行。 + +不太懂 + + +## 其他神经网络 +### RBF网络 + +### ART网络 + +### SOM网络 + +### 级联相关网络 + +### Elman网络 + +### Bolttzmann网络 + + diff --git a/nn/ResNet.md b/nn/ResNet.md new file mode 100644 index 0000000..eca3cb3 --- /dev/null +++ b/nn/ResNet.md @@ -0,0 +1,68 @@ +# ResNet 详解 + +## 背景简介 + +深度网络随着层数不断加深,可能会引起梯度消失/梯度爆炸的问题: +1. “梯度消失”:指的是即当梯度(小于1.0)在被反向传播到前面的层时,重复的相乘可能会使梯度变得无限小。 +2. “梯度爆炸”:指的是即当梯度(大于1.0)在被反向传播到前面的层时,重复的相乘可能会使梯度变得非常大甚至无限大导致溢出。 + +随着网络深度的不断增加,常常会出现以下两个问题: +1. 长时间训练但是网络收敛变得非常困难甚至不收敛 +2. 网络性能会逐渐趋于饱和,甚至还会开始下降,可以观察到下图中56层的误差比20层的更多,故这种现象并不是由于过拟合造成的。 + 这种现象称为深度网络的退化问题。 + +![pic](http://www.zeekling.cn/gogsPics/ml/nn/13.png) + +ResNet深度残差网络,成功解决了此类问题,使得即使在网络层数很深(甚至在1000多层)的情况下,网络依然可以得到很好的性能与效 +率。 + +## 参差网络 + +ResNet引入残差网络结构(residual network),即在输入与输出之间(称为堆积层)引入一个前向反馈的shortcut connection,这有 +点类似与电路中的“短路”,也是文中提到identity mapping(恒等映射y=x)。原来的网络是学习输入到输出的映射H(x),而残差网络学 +习的是$$ F(x)=H(x)−x $$。残差学习的结构如下图所示: + +![pic](http://www.zeekling.cn/gogsPics/ml/nn/14.png) + +另外我们可以从数学的角度来分析这个问题,首先残差单元可以表示为: + +$$ +y_l=h(x_l) + F(x_l, W-l) \\ +x_{l+1} = f(y_l) +$$ + +其中$$ x_{l} $$ 和$$ x_{l+1} $$ 分别表示的是第 l 个残差单元的输入和输出,注意每个残差单元一般包含多层结构。 F 是残差函 +数,表示学习到的残差,而h表示恒等映射, f 是ReLU激活函数。基于上式,我们求得从浅层 l 到深层 L 的学习特征为: + +$$ x_L = x_l + \sum_{i=l}^{L-1} F(x_i, W_i) $$ + +利用链式规则,可以求得反向过程的梯度: +$$ +\frac{\alpha{loss}}{\alpha{x_l}} = \frac{\alpha{loss}}{\alpha{x_L}} * \frac{\alpha{x_L}}{\alpha{x_l}} += \frac{\alpha{loss}}{\alpha{x_L}} * (1 + \frac{\alpha}{\alpha{x_L}} \sum_{i=l}^{L-1} F(x_i, W_i) ) +$$ + +式子的第一个因子表示的损失函数到达 L 的梯度,小括号中的1表明短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带 +有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残 +差学习会更容易。 + + +实线、虚线就是为了区分这两种情况的: +1. 实线的Connection部分,表示通道相同,如上图的第一个粉色矩形和第三个粉色矩形,都是3x3x64的特征图,由于通道相同,所以采 +用计算方式为$$ H(x)=F(x)+x $$ +2. 虚线的的Connection部分,表示通道不同,如上图的第一个绿色矩形和第三个绿色矩形,分别是3x3x64和3x3x128的特征图,通道不 +同,采用的计算方式为$$ H(x)=F(x)+Wx $$,其中W是卷积操作,用来调整x维度的。 +![pic](http://www.zeekling.cn/gogsPics/ml/nn/16.png) + +## 残差学习的本质 + +![pic](http://www.zeekling.cn/gogsPics/ml/nn/15.png) + +残差网络的确解决了退化的问题,在训练集和校验集上,都证明了的更深的网络错误率越小: +![pic](http://www.zeekling.cn/gogsPics/ml/nn/17.png) + +下面是resnet的成绩单, 在imagenet2015夺得冠军: + +![pic](http://www.zeekling.cn/gogsPics/ml/nn/18.png) + + diff --git a/nn/cnn.md b/nn/cnn.md new file mode 100644 index 0000000..1aad976 --- /dev/null +++ b/nn/cnn.md @@ -0,0 +1,64 @@ +# 卷积神经网络 + +## 详解 + +卷积神经网络沿用了普通的神经元网络即多层感知器的结构,是一个前馈网络。以应用于图像领域的CNN为例,大体结构如图。 + +![卷积神经网络](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/cnn2.jpg) + +### 输入层 +为了减小后续BP算法处理的复杂度,一般建议使用灰度图像。也可以使用RGB彩色图像,此时输入图像原始图像的RGB三通道。对于输入的 +图像像素分量为 [0, 255],为了计算方便一般需要归一化,如果使用sigmoid激活函数,则归一化到[0, 1],如果使用tanh激活函数, +则归一化到[-1, 1]。 + +### 卷积层 +特征提取层(C层) - 特征映射层(S层)。将上一层的输出图像与本层卷积核(权重参数w)加权值,加偏置,通过一个Sigmoid函数得到各个 +C层,然后下采样subsampling得到各个S层。C层和S层的输出称为Feature Map(特征图)。 + +### 激活层 + +将上面特征图中的得到的每个参数放入到下面的几个激活函数中进行处理 + +Sigmoid(S形函数),得到的是[0,1]区间的数值 + +Tanh(双曲正切,双S形函数),得到的是[-1,0]之间的数值 + +ReLU 当x<0 时,y=0,当x>0 时,y = x + +Leaky ReLU 当x<0 时,y = α(exp(x-1)),当x>0时,y= x + +![激活层](https://pic3.zhimg.com/80/v2-6fcb293439ca1160391b17cbc58aff87_hd.jpg) + +### 池化层 +通过上一层2*2的卷积核操作后,我们将原始图像由4*4的尺寸变为了3*3的一个新的图片。池化层的主要目的是通过降采样的方式,在不 +影响图像质量的情况下,压缩图片,减少参数。简单来说,假设现在设定池化层采用MaxPooling,大小为2*2,步长为1,取每个窗口最 +大的数值重新,那么图片的尺寸就会由3*3变为2*2:(3-2)+1=2。从上例来看,会有如下变换: + +![池化](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/853467-20171104142056685-2048616836.png) + +### 全连接层 + +通 过不断的设计卷积核的尺寸,数量,提取更多的特征,最后识别不同类别的物体。做完Max Pooling后,我们就会把这些 数据“拍平”把3维的数组变成1维的数组,丢到Flatten层,然后把Flatten层的output放到full connected +Layer里,采用softmax对其进行分类。 + +## CNN三大核心思想 + +卷积神经网络CNN的出现是为了解决MLP多层感知器全连接和梯度发散的问题。其引入三个核心思想:1.局部感知(local field),2.权值 +共享(Shared Weights),3.下采样(subsampling)。极大地提升了计算速度,减少了连接数量。 + +### 局部感知 +如下图所示,左边是每个像素的全连接,右边是每行隔两个像素作为局部连接,因此在数量上,少了很多权值参数数量(每一条连接每 +一条线需要有一个权值参数,具体忘记了的可以回顾单个[神经元模型]。因此局部感知就是: +通过卷积操作,把 全连接变成局部连接 ,因为多层网络能够抽取高阶统计特性, 即使网络为局部连接,由于格外的突触连接和额外的 +神经交互作用,也可以使网络在不十分严格的意义下获得一个全局关系。 + +![局部感知](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/cnn3.jpg) + +### 权值共享 +不同的图像或者同一张图像共用一个卷积核,减少重复的卷积核。同一张图像当中可能会出现相同的特征,共享卷积核能够进一步减少权 +值参数。 + +### 池化 +1. 这些统计特征能够有更低的维度,减少计算量。 +2. 不容易过拟合,当参数过多的时候很容易造成过度拟合。 +3. 缩小图像的规模,提升计算速度。 diff --git a/nn/handWrittenDigitsRecoginition.py b/nn/handWrittenDigitsRecoginition.py new file mode 100755 index 0000000..5be54c0 --- /dev/null +++ b/nn/handWrittenDigitsRecoginition.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +# coding: utf-8 +import numpy as np +import sklearn.datasets as ds +import sklearn.metrics as mt +import sklearn.preprocessing as prep +import neuralNetwork as nn +import sklearn.cross_validation as cross + + +digits = ds.load_digits() +x = digits.data +y = digits.target +# 将x中的值设置到0-1之间 +x -= x.min() +x /= x.max() + +# n = nn.NeuralNetwork([64, 100, 10], 'tanh') +n = nn.NeuralNetwork([64, 100, 10], 'logistic') +x_train, x_test, y_train, y_test = cross.train_test_split(x, y) +labels_train = prep.LabelBinarizer().fit_transform(y_train) +labels_test = prep.LabelBinarizer().fit_transform(y_test) +print("start fitting") +n.fit(x_train, labels_train, epochs=10000) +preddctions = [] +for i in range(x_test.shape[0]): + o = n.predit(x_test[i]) + preddctions.append(np.argmax(o)) +print(mt.confusion_matrix(y_test, preddctions)) +print(mt.classification_report(y_test, preddctions)) diff --git a/nn/multi_task.md b/nn/multi_task.md new file mode 100644 index 0000000..0c622f5 --- /dev/null +++ b/nn/multi_task.md @@ -0,0 +1,4 @@ +# 多任务学习 + +相关学习资料 +1. [模型汇总-14 多任务学习-Multitask Learning概述](https://zhuanlan.zhihu.com/p/27421983) diff --git a/nn/neuralNetwork.py b/nn/neuralNetwork.py new file mode 100755 index 0000000..464166d --- /dev/null +++ b/nn/neuralNetwork.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +# coding: utf-8 +import numpy as np + + +# 计算tanh的值,激活函数 +def tanh(x): + return np.tanh(x) + + +# 求tanh的导数 +def tanh_deriv(x): + return 1.0 - np.tanh(x)*np.tanh(x) + + +# 逻辑函数 +def logistic(x): + return 1.0/(1.0 + np.exp(-x)) + + +# 逻辑函数求导 +def logistic_deriv(x): + return logistic(x)*(1.0 - logistic(x)) + + +class NeuralNetwork: + def __init__(self, layers, activation='tanh'): + """ + :param layers: A list + """ + if activation == 'logistic': + self.activation = logistic + self.activation_deriv = logistic_deriv + elif activation == 'tanh': + self.activation = tanh + self.activation_deriv = tanh_deriv + + self.weights = [] + for i in range(1, len(layers) - 1): + # 初始化 权值范围 [-0.25,0.25) + # [0,1) * 2 - 1 => [-1,1) => * 0.25 => [-0.25,0.25) + self.weights.append((2*np.random.random((layers[i - 1] + 1, layers[i] + 1))-1)*0.25) + self.weights.append((2*np.random.random((layers[i] + 1, layers[i+1]))-1)*0.25) + + def fit(self, x, y, learning_rate=0.2, epochs=10000): + x = np.atleast_2d(x) + temp = np.ones([x.shape[0], x.shape[1] + 1]) + temp[:, 0:-1] = x + x = temp + y = np.array(y) + for k in range(epochs): + i = np.random.randint(x.shape[0]) + a = [x[i]] + + # 正向计算 + for l in range(len(self.weights)): + a.append(self.activation(np.dot(a[l], self.weights[l]))) + # 反向传播 + error = y[i] - a[-1] + deltas = [error*self.activation_deriv(a[-1])] + + # 开始反向计算,从倒数第二层开始计算 + for j in range(len(a)-2, 0, -1): + deltas.append(deltas[-1].dot(self.weights[j].T)*self.activation_deriv(a[j])) + deltas.reverse() + + # 更新权值 + for i in range(len(self.weights)): + layer = np.atleast_2d(a[i]) + delta = np.atleast_2d(deltas[i]) + self.weights[i] += learning_rate * layer.T.dot(delta) + + def predit(self, x): + x = np.array(x) + temp = np.ones(x.shape[0] + 1) + temp[0:-1] = x + a = temp + for l in range(0, len(self.weights)): + a = self.activation(np.dot(a, self.weights[l])) + return a diff --git a/nn/rnn.md b/nn/rnn.md new file mode 100644 index 0000000..dc1391b --- /dev/null +++ b/nn/rnn.md @@ -0,0 +1,37 @@ +# 循环神经网络 + +## RNN结构 +RNN结构如下: + +![rnn](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/rnn1.png) + +- 左侧是RNN的原始结构, 右侧是RNN在时间上展开的结果 +- RNN的结构,本质上和全连接网络相同 + +![rnn](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/rnn2.gif) + + +## LSTM 网络 +LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。 + +![SLTM](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/005BVyzmly1fotnatxsm7j30jg07bjsi.jpg) + + +### 遗忘门 +在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取ht−1和xt,输出一个在 +0到 1之间的数值给每个在细胞状态 Ct−1 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。 + +![遗忘门](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/005BVyzmly1fotoa9sgm5j30jg06074q.jpg) + +### 输入门 +我们把旧状态与ft相乘,丢弃掉我们确定需要丢弃的信息。接着加上it∗C~t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。 + +![输入门](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/005BVyzmly1fotoftw50ij31eq0fomz4.jpg) + +### 输出门 +在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如 +果是动词的话,我们也知道动词需要进行的词形变化。 + +![输出门](http://index.zeekling.cn/gogsPics/ml/neuralNetwork/005BVyzmly1fotoky28zbj30jg06074w.jpg) + + diff --git a/nn/testnn.py b/nn/testnn.py new file mode 100755 index 0000000..06561a2 --- /dev/null +++ b/nn/testnn.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +# coding: utf-8 +import neuralNetwork as nn +import numpy as np + +n = nn.NeuralNetwork([2, 2, 1], 'tanh') + +x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) +y = np.array([0, 1, 1, 0]) +n.fit(x, y) +for i in [[0, 0], [0, 1], [1, 0], [1, 1]]: + print(i, n.predit(i)) diff --git a/nn/visualizeDigits.py b/nn/visualizeDigits.py new file mode 100755 index 0000000..b85fa88 --- /dev/null +++ b/nn/visualizeDigits.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +# coding:utf-8 + +import sklearn.datasets as ds +import pylab as pl + + +digits = ds.load_digits() +print(digits.data.shape) + +pl.gray() +pl.matshow(digits.images[0]) +pl.show() diff --git a/nn/残差resnet网络原理详解.docx b/nn/残差resnet网络原理详解.docx new file mode 100644 index 0000000..19bcaf0 Binary files /dev/null and b/nn/残差resnet网络原理详解.docx differ diff --git a/regression/MultipleRegDelvery.py b/regression/MultipleRegDelvery.py new file mode 100755 index 0000000..007208e --- /dev/null +++ b/regression/MultipleRegDelvery.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +import numpy as np +from sklearn import datasets, linear_model + +dataPath = r"./multipleDummy.csv" +deliveryData = np.genfromtxt(dataPath, delimiter=',') + +print "data" +print deliveryData + +X = deliveryData[:, :-1] +Y = deliveryData[:, -1] + +print "X:", X +print "Y:", Y + +regr = linear_model.LinearRegression() +regr.fit(X, Y) + +print "coefficients:", regr.coef_ +print "intercept:", regr.intercept_ + +# 转换成一维数组,否则执行predict函数时报错 +xPred = np.array([102, 6, 0, 1, 0]) +yPred = regr.predict(xPred.reshape(1, 5)) +# +print yPred diff --git a/regression/MultipleRegDelveryExample.py b/regression/MultipleRegDelveryExample.py new file mode 100755 index 0000000..9fcb802 --- /dev/null +++ b/regression/MultipleRegDelveryExample.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +import numpy as np +from sklearn import datasets, linear_model + +dataPath = r"./multiple.csv" +deliveryData = np.genfromtxt(dataPath, delimiter=',') + +print "data" +print deliveryData + +X = deliveryData[:, :-1] +Y = deliveryData[:, -1] + +print "X:", X +print "Y:", Y + +regr = linear_model.LinearRegression() +regr.fit(X, Y) + +print "coefficients:", regr.coef_ +print "intercept:", regr.intercept_ + +# 转换成一维数组,否则执行predict函数时报错 +xPred = np.array([102, 6]) +yPred = regr.predict(xPred.reshape(1, -1)) + +print yPred diff --git a/regression/README.md b/regression/README.md new file mode 100644 index 0000000..7a144e7 --- /dev/null +++ b/regression/README.md @@ -0,0 +1,62 @@ +## 回归问题 + +## 线性回归 +### 统计量:描述数据特征 +#### 集中趋势衡量 +- 均值(平均数、平均值) +- 中位数:排序,求中间数 +- 众数:出现次数最多的数 + +#### 离散程度衡量 +- 方差 +- 标准差 + +### 简单线性回归 +- 一个字变量、一个应变量 + +### 非线性回归 +- 概率 + +## 逻辑回归 +### 激活函数 +#### Sigmoid函数 +Sigmoid函数的定义: +![Sigmoid函数](http://index.zeekling.cn/gogsPics/ml/regression/0df3d7ca7bcb0a4659502a5f6f63f6246b60af62.jpg) +;导数为: +![sigmoid函数导数](http://index.zeekling.cn/gogsPics/ml/regression/64380cd7912397dde41ab3095182b2b7d0a2875f.jpg) + +### 梯度上升算法 +![梯度上升算法](http://index.zeekling.cn/gogsPics/ml/regression/20170415112712137.png) + +此式便是梯度上升算法的更新规则,α是学习率,决定了梯度上升的快慢。可以看到与线性回归类似,只是增加了特征到结果 +的映射函数。 + +### 梯度下降算法 + + +### 非线性回归问题 + + + +### 回归中的相关度和决定系数 + +#### 皮尔逊相关系数(Pearson Correlation Coefficient) + +1. 衡量两个值线性相关强度的量 +2. 取值范围:[-1,1]:正向相关:大于0,负向相关:小于 0,无相关性:=0 + +![计算公式](http://index.zeekling.cn/data/Pictures/gogs/ml/regression/20171113155730874.jpeg) + +#### R平方值 + +1. 决定系数,反应因变量的全部变异能通过回归关系被自变量解释的比例 +2. 如R平方为0.8,则表示回归关系可以解释因变量80%的变异;即如果自变量不变,则因变量的变异程度会减少80% +3. 简单线性回归:R^2=r*r + +![ss](http://index.zeekling.cn/data/Pictures/gogs/ml/regression/20171113155750424.jpeg) +![多元线性回归](http://index.zeekling.cn/data/Pictures/gogs/ml/regression/20171113155802833.jpeg) + +##### R平方局限性 +R平方随着自变量的增大会变大,R平方和样本量是有关系的。所以,需要对R平方进行修正,修正方法为: + +![R平方局限性](http://index.zeekling.cn/data/Pictures/gogs/ml/regression/20171113155817281.jpeg) diff --git a/regression/SimpleLinearRegression.py b/regression/SimpleLinearRegression.py new file mode 100755 index 0000000..1099b76 --- /dev/null +++ b/regression/SimpleLinearRegression.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +import numpy as np + + +def fitslr(x, y): + n = len(x) + din = 0 + num = 0 + avgX = np.mean(x) + avgY = np.mean(y) + for i in range(0, n): + num += (x[i] - avgX) * (y[i] - avgY) + din += (x[i] - avgX) ** 2 + + print "din:", din + print "num:", num + b1 = num / float(din) + b0 = avgY / float(avgX) + return b0, b1 + + +def predict(x, b0, b1): + return b0 + x * b1 + + +x = [1, 3, 2, 1, 3] +y = [14, 24, 18, 17, 27] + +b0, b1 = fitslr(x, y) + +print "intercept:", b0, "slope:", b1 + +x_test = 6 +y_test = predict(6, b0, b1) + +print "y_test", y_test diff --git a/regression/abalone.py b/regression/abalone.py new file mode 100755 index 0000000..f49eb6e --- /dev/null +++ b/regression/abalone.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +# -*- coding:utf-8 -*- +from matplotlib.font_manager import FontProperties +import matplotlib.pyplot as plt +import numpy as np + +def loadDataSet(fileName): + """ + 函数说明:加载数据 + Parameters: + fileName - 文件名 + Returns: + xArr - x数据集 + yArr - y数据集 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-19 + """ + numFeat = len(open(fileName).readline().split('\t')) - 1 + xArr = []; yArr = [] + fr = open(fileName) + for line in fr.readlines(): + lineArr =[] + curLine = line.strip().split('\t') + for i in range(numFeat): + lineArr.append(float(curLine[i])) + xArr.append(lineArr) + yArr.append(float(curLine[-1])) + return xArr, yArr + +def lwlr(testPoint, xArr, yArr, k = 1.0): + """ + 函数说明:使用局部加权线性回归计算回归系数w + Parameters: + testPoint - 测试样本点 + xArr - x数据集 + yArr - y数据集 + k - 高斯核的k,自定义参数 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-19 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T + m = np.shape(xMat)[0] + weights = np.mat(np.eye((m))) #创建权重对角矩阵 + for j in range(m): #遍历数据集计算每个样本的权重 + diffMat = testPoint - xMat[j, :] + weights[j, j] = np.exp(diffMat * diffMat.T/(-2.0 * k**2)) + xTx = xMat.T * (weights * xMat) + if np.linalg.det(xTx) == 0.0: + print("矩阵为奇异矩阵,不能求逆") + return + ws = xTx.I * (xMat.T * (weights * yMat)) #计算回归系数 + return testPoint * ws + +def lwlrTest(testArr, xArr, yArr, k=1.0): + """ + 函数说明:局部加权线性回归测试 + Parameters: + testArr - 测试数据集,测试集 + xArr - x数据集,训练集 + yArr - y数据集,训练集 + k - 高斯核的k,自定义参数 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-19 + """ + m = np.shape(testArr)[0] #计算测试数据集大小 + yHat = np.zeros(m) + for i in range(m): #对每个样本点进行预测 + yHat[i] = lwlr(testArr[i],xArr,yArr,k) + return yHat + +def standRegres(xArr,yArr): + """ + 函数说明:计算回归系数w + Parameters: + xArr - x数据集 + yArr - y数据集 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-19 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T + xTx = xMat.T * xMat #根据文中推导的公示计算回归系数 + if np.linalg.det(xTx) == 0.0: + print("矩阵为奇异矩阵,不能求逆") + return + ws = xTx.I * (xMat.T*yMat) + return ws + +def rssError(yArr, yHatArr): + """ + 误差大小评价函数 + Parameters: + yArr - 真实数据 + yHatArr - 预测数据 + Returns: + 误差大小 + """ + return ((yArr - yHatArr) **2).sum() + +if __name__ == '__main__': + abX, abY = loadDataSet('abalone.txt') + print('训练集与测试集相同:局部加权线性回归,核k的大小对预测的影响:') + yHat01 = lwlrTest(abX[0:99], abX[0:99], abY[0:99], 0.1) + yHat1 = lwlrTest(abX[0:99], abX[0:99], abY[0:99], 1) + yHat10 = lwlrTest(abX[0:99], abX[0:99], abY[0:99], 10) + print('k=0.1时,误差大小为:',rssError(abY[0:99], yHat01.T)) + print('k=1 时,误差大小为:',rssError(abY[0:99], yHat1.T)) + print('k=10 时,误差大小为:',rssError(abY[0:99], yHat10.T)) + + print('') + + print('训练集与测试集不同:局部加权线性回归,核k的大小是越小越好吗?更换数据集,测试结果如下:') + yHat01 = lwlrTest(abX[100:199], abX[0:99], abY[0:99], 0.1) + yHat1 = lwlrTest(abX[100:199], abX[0:99], abY[0:99], 1) + yHat10 = lwlrTest(abX[100:199], abX[0:99], abY[0:99], 10) + print('k=0.1时,误差大小为:',rssError(abY[100:199], yHat01.T)) + print('k=1 时,误差大小为:',rssError(abY[100:199], yHat1.T)) + print('k=10 时,误差大小为:',rssError(abY[100:199], yHat10.T)) + + print('') + + print('训练集与测试集不同:简单的线性归回与k=1时的局部加权线性回归对比:') + print('k=1时,误差大小为:', rssError(abY[100:199], yHat1.T)) + ws = standRegres(abX[0:99], abY[0:99]) + yHat = np.mat(abX[100:199]) * ws + print('简单的线性回归误差大小:', rssError(abY[100:199], yHat.T.A)) diff --git a/regression/abalone.txt b/regression/abalone.txt new file mode 100644 index 0000000..975c371 --- /dev/null +++ b/regression/abalone.txt @@ -0,0 +1,4177 @@ +1 0.455 0.365 0.095 0.514 0.2245 0.101 0.15 15 +1 0.35 0.265 0.09 0.2255 0.0995 0.0485 0.07 7 +-1 0.53 0.42 0.135 0.677 0.2565 0.1415 0.21 9 +1 0.44 0.365 0.125 0.516 0.2155 0.114 0.155 10 +0 0.33 0.255 0.08 0.205 0.0895 0.0395 0.055 7 +0 0.425 0.3 0.095 0.3515 0.141 0.0775 0.12 8 +-1 0.53 0.415 0.15 0.7775 0.237 0.1415 0.33 20 +-1 0.545 0.425 0.125 0.768 0.294 0.1495 0.26 16 +1 0.475 0.37 0.125 0.5095 0.2165 0.1125 0.165 9 +-1 0.55 0.44 0.15 0.8945 0.3145 0.151 0.32 19 +-1 0.525 0.38 0.14 0.6065 0.194 0.1475 0.21 14 +1 0.43 0.35 0.11 0.406 0.1675 0.081 0.135 10 +1 0.49 0.38 0.135 0.5415 0.2175 0.095 0.19 11 +-1 0.535 0.405 0.145 0.6845 0.2725 0.171 0.205 10 +-1 0.47 0.355 0.1 0.4755 0.1675 0.0805 0.185 10 +1 0.5 0.4 0.13 0.6645 0.258 0.133 0.24 12 +0 0.355 0.28 0.085 0.2905 0.095 0.0395 0.115 7 +-1 0.44 0.34 0.1 0.451 0.188 0.087 0.13 10 +1 0.365 0.295 0.08 0.2555 0.097 0.043 0.1 7 +1 0.45 0.32 0.1 0.381 0.1705 0.075 0.115 9 +1 0.355 0.28 0.095 0.2455 0.0955 0.062 0.075 11 +0 0.38 0.275 0.1 0.2255 0.08 0.049 0.085 10 +-1 0.565 0.44 0.155 0.9395 0.4275 0.214 0.27 12 +-1 0.55 0.415 0.135 0.7635 0.318 0.21 0.2 9 +-1 0.615 0.48 0.165 1.1615 0.513 0.301 0.305 10 +-1 0.56 0.44 0.14 0.9285 0.3825 0.188 0.3 11 +-1 0.58 0.45 0.185 0.9955 0.3945 0.272 0.285 11 +1 0.59 0.445 0.14 0.931 0.356 0.234 0.28 12 +1 0.605 0.475 0.18 0.9365 0.394 0.219 0.295 15 +1 0.575 0.425 0.14 0.8635 0.393 0.227 0.2 11 +1 0.58 0.47 0.165 0.9975 0.3935 0.242 0.33 10 +-1 0.68 0.56 0.165 1.639 0.6055 0.2805 0.46 15 +1 0.665 0.525 0.165 1.338 0.5515 0.3575 0.35 18 +-1 0.68 0.55 0.175 1.798 0.815 0.3925 0.455 19 +-1 0.705 0.55 0.2 1.7095 0.633 0.4115 0.49 13 +1 0.465 0.355 0.105 0.4795 0.227 0.124 0.125 8 +-1 0.54 0.475 0.155 1.217 0.5305 0.3075 0.34 16 +-1 0.45 0.355 0.105 0.5225 0.237 0.1165 0.145 8 +-1 0.575 0.445 0.135 0.883 0.381 0.2035 0.26 11 +1 0.355 0.29 0.09 0.3275 0.134 0.086 0.09 9 +-1 0.45 0.335 0.105 0.425 0.1865 0.091 0.115 9 +-1 0.55 0.425 0.135 0.8515 0.362 0.196 0.27 14 +0 0.24 0.175 0.045 0.07 0.0315 0.0235 0.02 5 +0 0.205 0.15 0.055 0.042 0.0255 0.015 0.012 5 +0 0.21 0.15 0.05 0.042 0.0175 0.0125 0.015 4 +0 0.39 0.295 0.095 0.203 0.0875 0.045 0.075 7 +1 0.47 0.37 0.12 0.5795 0.293 0.227 0.14 9 +-1 0.46 0.375 0.12 0.4605 0.1775 0.11 0.15 7 +0 0.325 0.245 0.07 0.161 0.0755 0.0255 0.045 6 +-1 0.525 0.425 0.16 0.8355 0.3545 0.2135 0.245 9 +0 0.52 0.41 0.12 0.595 0.2385 0.111 0.19 8 +1 0.4 0.32 0.095 0.303 0.1335 0.06 0.1 7 +1 0.485 0.36 0.13 0.5415 0.2595 0.096 0.16 10 +-1 0.47 0.36 0.12 0.4775 0.2105 0.1055 0.15 10 +1 0.405 0.31 0.1 0.385 0.173 0.0915 0.11 7 +-1 0.5 0.4 0.14 0.6615 0.2565 0.1755 0.22 8 +1 0.445 0.35 0.12 0.4425 0.192 0.0955 0.135 8 +1 0.47 0.385 0.135 0.5895 0.2765 0.12 0.17 8 +0 0.245 0.19 0.06 0.086 0.042 0.014 0.025 4 +-1 0.505 0.4 0.125 0.583 0.246 0.13 0.175 7 +1 0.45 0.345 0.105 0.4115 0.18 0.1125 0.135 7 +1 0.505 0.405 0.11 0.625 0.305 0.16 0.175 9 +-1 0.53 0.41 0.13 0.6965 0.302 0.1935 0.2 10 +1 0.425 0.325 0.095 0.3785 0.1705 0.08 0.1 7 +1 0.52 0.4 0.12 0.58 0.234 0.1315 0.185 8 +1 0.475 0.355 0.12 0.48 0.234 0.1015 0.135 8 +-1 0.565 0.44 0.16 0.915 0.354 0.1935 0.32 12 +-1 0.595 0.495 0.185 1.285 0.416 0.224 0.485 13 +-1 0.475 0.39 0.12 0.5305 0.2135 0.1155 0.17 10 +0 0.31 0.235 0.07 0.151 0.063 0.0405 0.045 6 +1 0.555 0.425 0.13 0.7665 0.264 0.168 0.275 13 +-1 0.4 0.32 0.11 0.353 0.1405 0.0985 0.1 8 +-1 0.595 0.475 0.17 1.247 0.48 0.225 0.425 20 +1 0.57 0.48 0.175 1.185 0.474 0.261 0.38 11 +-1 0.605 0.45 0.195 1.098 0.481 0.2895 0.315 13 +-1 0.6 0.475 0.15 1.0075 0.4425 0.221 0.28 15 +1 0.595 0.475 0.14 0.944 0.3625 0.189 0.315 9 +-1 0.6 0.47 0.15 0.922 0.363 0.194 0.305 10 +-1 0.555 0.425 0.14 0.788 0.282 0.1595 0.285 11 +-1 0.615 0.475 0.17 1.1025 0.4695 0.2355 0.345 14 +-1 0.575 0.445 0.14 0.941 0.3845 0.252 0.285 9 +1 0.62 0.51 0.175 1.615 0.5105 0.192 0.675 12 +-1 0.52 0.425 0.165 0.9885 0.396 0.225 0.32 16 +1 0.595 0.475 0.16 1.3175 0.408 0.234 0.58 21 +1 0.58 0.45 0.14 1.013 0.38 0.216 0.36 14 +-1 0.57 0.465 0.18 1.295 0.339 0.2225 0.44 12 +1 0.625 0.465 0.14 1.195 0.4825 0.205 0.4 13 +1 0.56 0.44 0.16 0.8645 0.3305 0.2075 0.26 10 +-1 0.46 0.355 0.13 0.517 0.2205 0.114 0.165 9 +-1 0.575 0.45 0.16 0.9775 0.3135 0.231 0.33 12 +1 0.565 0.425 0.135 0.8115 0.341 0.1675 0.255 15 +1 0.555 0.44 0.15 0.755 0.307 0.1525 0.26 12 +1 0.595 0.465 0.175 1.115 0.4015 0.254 0.39 13 +-1 0.625 0.495 0.165 1.262 0.507 0.318 0.39 10 +1 0.695 0.56 0.19 1.494 0.588 0.3425 0.485 15 +1 0.665 0.535 0.195 1.606 0.5755 0.388 0.48 14 +1 0.535 0.435 0.15 0.725 0.269 0.1385 0.25 9 +1 0.47 0.375 0.13 0.523 0.214 0.132 0.145 8 +1 0.47 0.37 0.13 0.5225 0.201 0.133 0.165 7 +-1 0.475 0.375 0.125 0.5785 0.2775 0.085 0.155 10 +0 0.36 0.265 0.095 0.2315 0.105 0.046 0.075 7 +1 0.55 0.435 0.145 0.843 0.328 0.1915 0.255 15 +1 0.53 0.435 0.16 0.883 0.316 0.164 0.335 15 +1 0.53 0.415 0.14 0.724 0.3105 0.1675 0.205 10 +1 0.605 0.47 0.16 1.1735 0.4975 0.2405 0.345 12 +-1 0.52 0.41 0.155 0.727 0.291 0.1835 0.235 12 +-1 0.545 0.43 0.165 0.802 0.2935 0.183 0.28 11 +-1 0.5 0.4 0.125 0.6675 0.261 0.1315 0.22 10 +-1 0.51 0.39 0.135 0.6335 0.231 0.179 0.2 9 +-1 0.435 0.395 0.105 0.3635 0.136 0.098 0.13 9 +1 0.495 0.395 0.125 0.5415 0.2375 0.1345 0.155 9 +1 0.465 0.36 0.105 0.431 0.172 0.107 0.175 9 +0 0.435 0.32 0.08 0.3325 0.1485 0.0635 0.105 9 +1 0.425 0.35 0.105 0.393 0.13 0.063 0.165 9 +-1 0.545 0.41 0.125 0.6935 0.2975 0.146 0.21 11 +-1 0.53 0.415 0.115 0.5915 0.233 0.1585 0.18 11 +-1 0.49 0.375 0.135 0.6125 0.2555 0.102 0.22 11 +1 0.44 0.34 0.105 0.402 0.1305 0.0955 0.165 10 +-1 0.56 0.43 0.15 0.8825 0.3465 0.172 0.31 9 +1 0.405 0.305 0.085 0.2605 0.1145 0.0595 0.085 8 +-1 0.47 0.365 0.105 0.4205 0.163 0.1035 0.14 9 +0 0.385 0.295 0.085 0.2535 0.103 0.0575 0.085 7 +-1 0.515 0.425 0.14 0.766 0.304 0.1725 0.255 14 +1 0.37 0.265 0.075 0.214 0.09 0.051 0.07 6 +0 0.36 0.28 0.08 0.1755 0.081 0.0505 0.07 6 +0 0.27 0.195 0.06 0.073 0.0285 0.0235 0.03 5 +0 0.375 0.275 0.09 0.238 0.1075 0.0545 0.07 6 +0 0.385 0.29 0.085 0.2505 0.112 0.061 0.08 8 +1 0.7 0.535 0.16 1.7255 0.63 0.2635 0.54 19 +1 0.71 0.54 0.165 1.959 0.7665 0.261 0.78 18 +1 0.595 0.48 0.165 1.262 0.4835 0.283 0.41 17 +-1 0.44 0.35 0.125 0.4035 0.175 0.063 0.129 9 +-1 0.325 0.26 0.09 0.1915 0.085 0.036 0.062 7 +0 0.35 0.26 0.095 0.211 0.086 0.056 0.068 7 +0 0.265 0.2 0.065 0.0975 0.04 0.0205 0.028 7 +-1 0.425 0.33 0.115 0.406 0.1635 0.081 0.1355 8 +-1 0.305 0.23 0.08 0.156 0.0675 0.0345 0.048 7 +1 0.345 0.255 0.09 0.2005 0.094 0.0295 0.063 9 +-1 0.405 0.325 0.11 0.3555 0.151 0.063 0.117 9 +1 0.375 0.285 0.095 0.253 0.096 0.0575 0.0925 9 +-1 0.565 0.445 0.155 0.826 0.341 0.2055 0.2475 10 +-1 0.55 0.45 0.145 0.741 0.295 0.1435 0.2665 10 +1 0.65 0.52 0.19 1.3445 0.519 0.306 0.4465 16 +1 0.56 0.455 0.155 0.797 0.34 0.19 0.2425 11 +1 0.475 0.375 0.13 0.5175 0.2075 0.1165 0.17 10 +-1 0.49 0.38 0.125 0.549 0.245 0.1075 0.174 10 +1 0.46 0.35 0.12 0.515 0.224 0.108 0.1565 10 +0 0.28 0.205 0.08 0.127 0.052 0.039 0.042 9 +0 0.175 0.13 0.055 0.0315 0.0105 0.0065 0.0125 5 +0 0.17 0.13 0.095 0.03 0.013 0.008 0.01 4 +1 0.59 0.475 0.145 1.053 0.4415 0.262 0.325 15 +-1 0.605 0.5 0.185 1.1185 0.469 0.2585 0.335 9 +-1 0.635 0.515 0.19 1.3715 0.5065 0.305 0.45 10 +-1 0.605 0.485 0.16 1.0565 0.37 0.2355 0.355 10 +-1 0.565 0.45 0.135 0.9885 0.387 0.1495 0.31 12 +1 0.515 0.405 0.13 0.722 0.32 0.131 0.21 10 +-1 0.575 0.46 0.19 0.994 0.392 0.2425 0.34 13 +1 0.645 0.485 0.215 1.514 0.546 0.2615 0.635 16 +-1 0.58 0.455 0.17 0.9075 0.374 0.2135 0.285 13 +-1 0.575 0.46 0.165 1.124 0.2985 0.1785 0.44 13 +1 0.605 0.465 0.165 1.056 0.4215 0.2475 0.34 13 +-1 0.605 0.485 0.16 1.222 0.53 0.2575 0.28 13 +1 0.61 0.485 0.175 1.2445 0.544 0.297 0.345 12 +-1 0.725 0.56 0.21 2.141 0.65 0.398 1.005 18 +-1 0.65 0.545 0.23 1.752 0.5605 0.2895 0.815 16 +1 0.725 0.57 0.19 2.55 1.0705 0.483 0.725 14 +-1 0.725 0.575 0.175 2.124 0.765 0.4515 0.85 20 +-1 0.68 0.57 0.205 1.842 0.625 0.408 0.65 20 +1 0.705 0.56 0.22 1.981 0.8175 0.3085 0.76 14 +-1 0.68 0.515 0.175 1.6185 0.5125 0.409 0.62 12 +1 0.695 0.55 0.215 1.9565 0.7125 0.541 0.59 14 +-1 0.53 0.395 0.145 0.775 0.308 0.169 0.255 7 +1 0.525 0.435 0.155 1.065 0.486 0.233 0.285 8 +-1 0.52 0.405 0.115 0.776 0.32 0.1845 0.22 8 +0 0.235 0.16 0.04 0.048 0.0185 0.018 0.015 5 +0 0.36 0.26 0.09 0.1785 0.0645 0.037 0.075 7 +0 0.315 0.21 0.06 0.125 0.06 0.0375 0.035 5 +0 0.315 0.245 0.085 0.1435 0.053 0.0475 0.05 8 +0 0.225 0.16 0.045 0.0465 0.025 0.015 0.015 4 +1 0.58 0.475 0.15 0.97 0.385 0.2165 0.35 11 +1 0.57 0.48 0.18 0.9395 0.399 0.2 0.295 14 +1 0.64 0.51 0.175 1.368 0.515 0.266 0.57 21 +-1 0.56 0.45 0.16 1.0235 0.429 0.268 0.3 10 +-1 0.62 0.475 0.175 1.0165 0.4355 0.214 0.325 10 +-1 0.645 0.51 0.2 1.5675 0.621 0.367 0.46 12 +1 0.62 0.49 0.19 1.218 0.5455 0.2965 0.355 13 +-1 0.63 0.48 0.15 1.0525 0.392 0.336 0.285 12 +-1 0.63 0.5 0.185 1.383 0.54 0.3315 0.38 10 +-1 0.63 0.48 0.16 1.199 0.5265 0.335 0.315 11 +-1 0.585 0.46 0.17 0.9325 0.365 0.271 0.29 9 +1 0.615 0.48 0.18 1.1595 0.4845 0.2165 0.325 13 +1 0.61 0.485 0.17 1.0225 0.419 0.2405 0.36 12 +1 0.58 0.45 0.15 0.927 0.276 0.1815 0.36 14 +0 0.355 0.275 0.085 0.22 0.092 0.06 0.15 8 +-1 0.51 0.4 0.14 0.8145 0.459 0.1965 0.195 10 +1 0.5 0.405 0.155 0.772 0.346 0.1535 0.245 12 +-1 0.505 0.41 0.15 0.644 0.285 0.145 0.21 11 +1 0.64 0.5 0.185 1.3035 0.4445 0.2635 0.465 16 +1 0.56 0.45 0.16 0.922 0.432 0.178 0.26 15 +1 0.585 0.46 0.185 0.922 0.3635 0.213 0.285 10 +-1 0.45 0.345 0.12 0.4165 0.1655 0.095 0.135 9 +1 0.5 0.4 0.165 0.825 0.254 0.205 0.285 13 +-1 0.5 0.4 0.145 0.63 0.234 0.1465 0.23 12 +-1 0.53 0.435 0.17 0.8155 0.2985 0.155 0.275 13 +1 0.42 0.335 0.115 0.369 0.171 0.071 0.12 8 +-1 0.44 0.34 0.14 0.482 0.186 0.1085 0.16 9 +0 0.4 0.3 0.11 0.315 0.109 0.067 0.12 9 +0 0.435 0.34 0.11 0.3795 0.1495 0.085 0.12 8 +-1 0.525 0.415 0.17 0.8325 0.2755 0.1685 0.31 13 +0 0.37 0.28 0.095 0.2655 0.122 0.052 0.08 7 +-1 0.49 0.365 0.145 0.6345 0.1995 0.1625 0.22 10 +1 0.335 0.25 0.09 0.181 0.0755 0.0415 0.06 7 +-1 0.415 0.325 0.105 0.38 0.1595 0.0785 0.12 12 +1 0.5 0.405 0.14 0.6155 0.241 0.1355 0.205 9 +-1 0.485 0.395 0.16 0.66 0.2475 0.128 0.235 14 +1 0.55 0.405 0.14 0.8025 0.244 0.1635 0.255 10 +1 0.45 0.35 0.13 0.46 0.174 0.111 0.135 8 +0 0.405 0.3 0.12 0.324 0.1265 0.07 0.11 7 +1 0.47 0.36 0.135 0.501 0.1665 0.115 0.165 10 +-1 0.415 0.305 0.13 0.32 0.1305 0.0755 0.105 8 +-1 0.445 0.325 0.125 0.455 0.1785 0.1125 0.14 9 +-1 0.47 0.35 0.145 0.5175 0.187 0.1235 0.18 11 +-1 0.49 0.375 0.15 0.5755 0.22 0.144 0.19 9 +-1 0.445 0.355 0.15 0.485 0.181 0.125 0.155 11 +0 0.425 0.38 0.105 0.3265 0.1285 0.0785 0.1 10 +-1 0.5 0.37 0.135 0.45 0.1715 0.1055 0.155 9 +-1 0.39 0.29 0.125 0.3055 0.121 0.082 0.09 7 +0 0.365 0.27 0.085 0.205 0.078 0.0485 0.07 7 +-1 0.58 0.465 0.165 1.1015 0.404 0.2095 0.35 11 +-1 0.53 0.415 0.16 0.783 0.2935 0.158 0.245 15 +1 0.555 0.445 0.135 0.836 0.336 0.1625 0.275 13 +1 0.565 0.44 0.175 0.9025 0.31 0.193 0.325 14 +1 0.625 0.505 0.215 1.4455 0.496 0.287 0.435 22 +0 0.275 0.215 0.075 0.1155 0.0485 0.029 0.035 7 +0 0.44 0.35 0.135 0.435 0.1815 0.083 0.125 12 +0 0.295 0.225 0.08 0.124 0.0485 0.032 0.04 9 +0 0.075 0.055 0.01 0.002 0.001 0.0005 0.0015 1 +0 0.13 0.1 0.03 0.013 0.0045 0.003 0.004 3 +0 0.11 0.09 0.03 0.008 0.0025 0.002 0.003 3 +0 0.16 0.12 0.035 0.021 0.0075 0.0045 0.005 5 +1 0.565 0.425 0.16 0.9425 0.3495 0.2185 0.275 17 +0 0.27 0.2 0.07 0.1 0.034 0.0245 0.035 5 +0 0.23 0.175 0.065 0.0645 0.026 0.0105 0.02 5 +0 0.3 0.23 0.08 0.1275 0.0435 0.0265 0.04 8 +0 0.33 0.255 0.085 0.1655 0.063 0.039 0.06 8 +0 0.35 0.26 0.085 0.174 0.0705 0.0345 0.06 10 +0 0.32 0.245 0.08 0.1585 0.0635 0.0325 0.05 13 +0 0.36 0.275 0.085 0.1975 0.0745 0.0415 0.07 9 +0 0.305 0.245 0.075 0.156 0.0675 0.038 0.045 7 +0 0.345 0.27 0.11 0.2135 0.082 0.0545 0.07 7 +0 0.33 0.25 0.105 0.1715 0.0655 0.035 0.06 7 +1 0.59 0.47 0.18 1.1235 0.4205 0.2805 0.36 13 +-1 0.595 0.455 0.155 1.0605 0.5135 0.2165 0.3 12 +-1 0.575 0.46 0.185 1.094 0.4485 0.217 0.345 15 +1 0.6 0.495 0.165 1.2415 0.485 0.2775 0.34 15 +1 0.56 0.45 0.175 1.011 0.3835 0.2065 0.37 15 +1 0.56 0.45 0.185 1.07 0.3805 0.175 0.41 19 +1 0.545 0.46 0.16 0.8975 0.341 0.1655 0.345 10 +-1 0.635 0.505 0.17 1.415 0.605 0.297 0.365 15 +-1 0.59 0.475 0.16 1.1015 0.4775 0.2555 0.295 13 +-1 0.54 0.475 0.155 0.928 0.394 0.194 0.26 11 +-1 0.57 0.44 0.125 0.865 0.3675 0.1725 0.27 12 +1 0.53 0.42 0.165 0.8945 0.319 0.239 0.245 11 +0 0.245 0.195 0.06 0.095 0.0445 0.0245 0.026 4 +1 0.27 0.2 0.08 0.1205 0.0465 0.028 0.04 6 +-1 0.46 0.38 0.13 0.639 0.3 0.1525 0.16 11 +1 0.52 0.45 0.15 0.895 0.3615 0.186 0.235 14 +1 0.35 0.275 0.11 0.2925 0.1225 0.0635 0.0905 8 +1 0.47 0.39 0.15 0.6355 0.2185 0.0885 0.255 9 +-1 0.45 0.36 0.125 0.4995 0.2035 0.1 0.17 13 +-1 0.64 0.525 0.215 1.779 0.4535 0.2855 0.55 22 +1 0.59 0.5 0.2 1.187 0.412 0.2705 0.37 16 +1 0.62 0.485 0.205 1.219 0.3875 0.2505 0.385 14 +1 0.63 0.505 0.225 1.525 0.56 0.3335 0.45 15 +1 0.63 0.515 0.155 1.259 0.4105 0.197 0.41 13 +1 0.655 0.54 0.215 1.844 0.7425 0.327 0.585 22 +-1 0.66 0.53 0.185 1.3485 0.493 0.245 0.49 12 +1 0.61 0.5 0.24 1.642 0.532 0.3345 0.69 18 +1 0.635 0.525 0.205 1.484 0.55 0.3115 0.43 20 +-1 0.515 0.425 0.135 0.712 0.2665 0.1605 0.25 11 +-1 0.535 0.415 0.185 0.8415 0.314 0.1585 0.3 15 +0 0.36 0.285 0.105 0.2415 0.0915 0.057 0.075 7 +-1 0.455 0.355 0.12 0.4495 0.177 0.104 0.15 9 +1 0.485 0.395 0.14 0.6295 0.2285 0.127 0.225 14 +1 0.515 0.38 0.175 0.9565 0.325 0.158 0.31 14 +-1 0.535 0.415 0.17 0.879 0.295 0.1965 0.285 10 +1 0.53 0.435 0.155 0.699 0.288 0.1595 0.205 10 +-1 0.495 0.4 0.155 0.6445 0.242 0.1325 0.205 17 +1 0.44 0.355 0.125 0.4775 0.132 0.0815 0.19 9 +-1 0.535 0.435 0.16 0.8105 0.3155 0.1795 0.24 10 +1 0.54 0.435 0.18 0.996 0.3835 0.226 0.325 17 +-1 0.565 0.505 0.21 1.2765 0.501 0.279 0.355 12 +1 0.61 0.475 0.165 1.116 0.428 0.2205 0.315 15 +-1 0.565 0.455 0.175 1.013 0.342 0.207 0.35 19 +1 0.6 0.495 0.195 1.0575 0.384 0.19 0.375 26 +0 0.295 0.215 0.085 0.128 0.049 0.034 0.04 6 +0 0.275 0.205 0.075 0.1105 0.045 0.0285 0.035 6 +0 0.28 0.21 0.085 0.1065 0.039 0.0295 0.03 4 +1 0.49 0.395 0.14 0.549 0.2215 0.1275 0.15 11 +1 0.37 0.28 0.105 0.234 0.0905 0.0585 0.075 9 +-1 0.405 0.305 0.095 0.3485 0.1455 0.0895 0.1 9 +-1 0.54 0.435 0.175 0.892 0.322 0.174 0.335 13 +1 0.37 0.28 0.1 0.252 0.1065 0.0595 0.074 8 +1 0.36 0.27 0.1 0.217 0.0885 0.0495 0.0715 6 +-1 0.47 0.36 0.13 0.472 0.182 0.114 0.15 10 +0 0.2 0.145 0.06 0.037 0.0125 0.0095 0.011 4 +0 0.165 0.12 0.03 0.0215 0.007 0.005 0.005 3 +1 0.645 0.515 0.24 1.5415 0.471 0.369 0.535 13 +1 0.55 0.41 0.125 0.7605 0.2505 0.1635 0.195 14 +1 0.57 0.435 0.145 0.9055 0.3925 0.2355 0.275 10 +-1 0.63 0.485 0.19 1.2435 0.4635 0.3055 0.39 21 +1 0.56 0.44 0.14 0.971 0.443 0.2045 0.265 14 +1 0.595 0.455 0.195 1.3305 0.4595 0.3235 0.345 19 +-1 0.62 0.47 0.2 1.2255 0.381 0.27 0.435 23 +1 0.63 0.485 0.175 1.3 0.4335 0.2945 0.46 23 +0 0.45 0.355 0.11 0.4585 0.194 0.067 0.14 8 +-1 0.635 0.535 0.19 1.242 0.576 0.2475 0.39 14 +1 0.45 0.35 0.1 0.3675 0.1465 0.1015 0.12 10 +-1 0.58 0.455 0.155 0.8365 0.315 0.1385 0.32 18 +0 0.33 0.255 0.095 0.172 0.066 0.0255 0.06 6 +0 0.265 0.21 0.06 0.0965 0.0425 0.022 0.03 5 +0 0.19 0.145 0.04 0.038 0.0165 0.0065 0.015 4 +1 0.385 0.31 0.1 0.2845 0.1065 0.075 0.1 11 +0 0.265 0.205 0.07 0.1055 0.039 0.041 0.035 5 +1 0.335 0.265 0.105 0.222 0.0935 0.056 0.075 7 +0 0.355 0.275 0.09 0.251 0.097 0.053 0.08 7 +0 0.32 0.255 0.1 0.1755 0.073 0.0415 0.065 7 +1 0.51 0.4 0.13 0.6435 0.27 0.1665 0.205 12 +1 0.36 0.295 0.105 0.241 0.0865 0.053 0.095 8 +0 0.36 0.28 0.09 0.2255 0.0885 0.04 0.09 8 +1 0.5 0.38 0.155 0.5955 0.2135 0.161 0.2 12 +-1 0.4 0.325 0.12 0.3185 0.134 0.0565 0.095 8 +0 0.3 0.22 0.08 0.121 0.0475 0.042 0.035 5 +0 0.235 0.175 0.04 0.0705 0.0335 0.015 0.02 5 +-1 0.74 0.6 0.195 1.974 0.598 0.4085 0.71 16 +1 0.62 0.465 0.19 1.3415 0.5705 0.3175 0.355 11 +1 0.6 0.475 0.19 1.0875 0.403 0.2655 0.325 14 +1 0.59 0.45 0.185 1.283 0.473 0.276 0.425 16 +1 0.62 0.475 0.185 1.325 0.6045 0.325 0.33 13 +-1 0.565 0.45 0.195 1.0035 0.406 0.2505 0.285 15 +1 0.575 0.455 0.145 1.165 0.581 0.2275 0.3 14 +-1 0.62 0.51 0.205 1.3475 0.4775 0.2565 0.48 14 +1 0.62 0.465 0.185 1.274 0.579 0.3065 0.32 12 +-1 0.505 0.375 0.18 0.568 0.2325 0.1495 0.17 12 +-1 0.46 0.425 0.155 0.746 0.3005 0.152 0.24 8 +1 0.49 0.39 0.14 0.707 0.2795 0.2185 0.18 13 +-1 0.525 0.42 0.16 0.756 0.2745 0.173 0.275 9 +0 0.34 0.26 0.08 0.2 0.08 0.0555 0.055 6 +0 0.375 0.305 0.115 0.2715 0.092 0.074 0.09 8 +1 0.61 0.48 0.15 1.2 0.56 0.2455 0.28 14 +-1 0.61 0.495 0.185 1.153 0.536 0.2905 0.245 8 +-1 0.585 0.45 0.17 0.8685 0.3325 0.1635 0.27 22 +1 0.57 0.46 0.14 0.9535 0.4465 0.2065 0.245 12 +1 0.58 0.455 0.17 0.93 0.408 0.259 0.22 9 +1 0.635 0.515 0.17 1.275 0.509 0.286 0.34 16 +1 0.7 0.58 0.205 2.13 0.7415 0.49 0.58 20 +1 0.675 0.525 0.185 1.587 0.6935 0.336 0.395 13 +-1 0.645 0.525 0.19 1.8085 0.7035 0.3885 0.395 18 +1 0.745 0.585 0.215 2.499 0.9265 0.472 0.7 17 +-1 0.685 0.545 0.18 1.768 0.7495 0.392 0.485 16 +1 0.605 0.49 0.18 1.227 0.48 0.287 0.35 18 +-1 0.59 0.465 0.15 0.997 0.392 0.246 0.34 12 +-1 0.65 0.525 0.175 1.4225 0.61 0.2995 0.445 20 +-1 0.6 0.48 0.15 1.029 0.4085 0.2705 0.295 16 +-1 0.62 0.5 0.175 1.186 0.4985 0.3015 0.35 12 +1 0.63 0.515 0.16 1.016 0.4215 0.244 0.355 19 +1 0.58 0.465 0.145 0.887 0.4405 0.1655 0.265 11 +-1 0.58 0.455 0.12 1.0735 0.479 0.2735 0.265 10 +1 0.63 0.49 0.18 1.13 0.458 0.2765 0.315 12 +-1 0.69 0.56 0.215 1.719 0.68 0.299 0.47 17 +-1 0.65 0.545 0.165 1.566 0.6645 0.3455 0.415 16 +-1 0.66 0.565 0.195 1.7605 0.692 0.3265 0.5 16 +-1 0.68 0.58 0.2 1.787 0.585 0.453 0.6 19 +-1 0.7 0.575 0.17 1.31 0.5095 0.314 0.42 14 +1 0.685 0.52 0.15 1.343 0.4635 0.292 0.4 13 +-1 0.675 0.545 0.195 1.7345 0.6845 0.3695 0.605 20 +1 0.63 0.49 0.19 1.1775 0.4935 0.3365 0.285 11 +-1 0.585 0.45 0.16 1.077 0.4995 0.2875 0.25 10 +1 0.565 0.465 0.175 0.995 0.3895 0.183 0.37 15 +-1 0.61 0.495 0.185 1.1085 0.3705 0.3135 0.33 12 +1 0.605 0.47 0.18 1.1405 0.3755 0.2805 0.385 15 +1 0.535 0.42 0.145 0.791 0.33 0.189 0.25 10 +1 0.485 0.4 0.135 0.663 0.313 0.137 0.2 10 +1 0.47 0.375 0.12 0.5565 0.226 0.122 0.195 12 +1 0.545 0.425 0.135 0.8445 0.373 0.21 0.235 10 +-1 0.455 0.37 0.105 0.4925 0.216 0.1245 0.135 9 +1 0.54 0.42 0.155 0.7385 0.3515 0.152 0.215 12 +1 0.46 0.38 0.135 0.482 0.207 0.1225 0.145 10 +1 0.49 0.42 0.125 0.609 0.239 0.1435 0.22 14 +0 0.465 0.375 0.12 0.471 0.222 0.119 0.14 9 +0 0.415 0.325 0.1 0.3215 0.1535 0.0595 0.105 10 +1 0.475 0.375 0.125 0.593 0.277 0.115 0.18 10 +-1 0.47 0.375 0.125 0.5615 0.252 0.137 0.18 10 +0 0.365 0.295 0.095 0.25 0.1075 0.0545 0.08 9 +0 0.345 0.275 0.095 0.1995 0.0755 0.0535 0.07 6 +0 0.39 0.31 0.1 0.302 0.116 0.064 0.115 11 +-1 0.5 0.395 0.14 0.7155 0.3165 0.176 0.24 10 +1 0.47 0.38 0.145 0.5865 0.2385 0.144 0.185 8 +1 0.535 0.44 0.15 0.6765 0.256 0.139 0.26 12 +1 0.585 0.455 0.15 0.987 0.4355 0.2075 0.31 11 +-1 0.485 0.365 0.12 0.5885 0.27 0.131 0.175 9 +1 0.515 0.455 0.135 0.7225 0.295 0.1625 0.235 9 +-1 0.435 0.325 0.11 0.4335 0.178 0.0985 0.155 7 +-1 0.515 0.415 0.14 0.6935 0.3115 0.152 0.2 10 +0 0.44 0.345 0.12 0.365 0.1655 0.083 0.11 7 +-1 0.525 0.44 0.15 0.8425 0.3685 0.1985 0.24 12 +1 0.45 0.355 0.115 0.479 0.2125 0.1045 0.15 8 +1 0.59 0.485 0.12 0.911 0.39 0.182 0.29 16 +1 0.555 0.45 0.145 0.915 0.4 0.246 0.285 11 +1 0.57 0.44 0.095 0.827 0.3395 0.2215 0.235 8 +1 0.59 0.5 0.165 1.1045 0.4565 0.2425 0.34 15 +1 0.585 0.475 0.12 0.945 0.41 0.2115 0.28 14 +-1 0.58 0.46 0.12 0.9935 0.4625 0.2385 0.28 11 +1 0.545 0.44 0.12 0.8565 0.3475 0.1715 0.24 12 +-1 0.605 0.495 0.17 1.2385 0.528 0.2465 0.39 14 +-1 0.62 0.47 0.14 1.0325 0.3605 0.224 0.36 15 +-1 0.63 0.5 0.17 1.3135 0.5595 0.267 0.4 20 +1 0.63 0.515 0.165 1.352 0.488 0.349 0.45 20 +-1 0.63 0.5 0.155 1.005 0.367 0.199 0.36 16 +1 0.545 0.41 0.14 0.625 0.223 0.16 0.235 13 +-1 0.67 0.54 0.165 1.5015 0.518 0.358 0.505 14 +0 0.49 0.38 0.12 0.529 0.2165 0.139 0.155 11 +-1 0.49 0.39 0.135 0.5785 0.2465 0.123 0.2 13 +0 0.29 0.225 0.07 0.101 0.036 0.0235 0.035 8 +0 0.26 0.2 0.07 0.092 0.037 0.02 0.03 6 +1 0.58 0.45 0.175 1.068 0.425 0.203 0.32 13 +-1 0.61 0.485 0.165 1.0915 0.3935 0.2435 0.33 18 +1 0.6 0.5 0.16 1.015 0.3995 0.1735 0.33 19 +-1 0.56 0.455 0.125 0.943 0.344 0.129 0.375 21 +-1 0.575 0.45 0.17 1.0475 0.3775 0.1705 0.385 18 +-1 0.57 0.45 0.175 0.9555 0.38 0.1665 0.295 18 +1 0.6 0.47 0.155 1.036 0.4375 0.196 0.325 20 +1 0.565 0.455 0.17 0.9065 0.342 0.156 0.32 18 +1 0.545 0.42 0.14 0.7505 0.2475 0.13 0.255 22 +0 0.44 0.345 0.1 0.366 0.122 0.0905 0.12 13 +1 0.5 0.41 0.15 0.662 0.2815 0.137 0.22 11 +0 0.36 0.275 0.095 0.217 0.084 0.0435 0.09 7 +0 0.385 0.305 0.095 0.252 0.0915 0.055 0.09 14 +1 0.39 0.3 0.09 0.3055 0.143 0.0645 0.085 9 +1 0.5 0.415 0.165 0.6885 0.249 0.138 0.25 13 +0 0.36 0.275 0.11 0.2335 0.095 0.0525 0.085 10 +0 0.335 0.26 0.1 0.192 0.0785 0.0585 0.07 8 +-1 0.505 0.425 0.14 0.85 0.275 0.1625 0.285 19 +0 0.395 0.295 0.1 0.2715 0.134 0.0325 0.085 10 +-1 0.41 0.325 0.105 0.3635 0.159 0.077 0.12 10 +-1 0.56 0.455 0.19 0.714 0.283 0.129 0.275 9 +1 0.565 0.435 0.185 0.9815 0.329 0.136 0.39 13 +1 0.565 0.455 0.185 0.9265 0.354 0.1575 0.375 16 +1 0.605 0.5 0.175 1.098 0.4765 0.232 0.375 12 +-1 0.565 0.455 0.15 0.8205 0.365 0.159 0.26 18 +1 0.725 0.565 0.215 1.891 0.6975 0.4725 0.58 16 +-1 0.675 0.535 0.16 1.41 0.592 0.3175 0.42 16 +-1 0.665 0.555 0.195 1.4385 0.581 0.354 0.36 17 +-1 0.565 0.49 0.155 0.9245 0.405 0.2195 0.255 11 +-1 0.645 0.55 0.175 1.2915 0.57 0.3045 0.33 14 +1 0.575 0.47 0.14 0.8375 0.3485 0.1735 0.24 11 +-1 0.64 0.54 0.175 1.221 0.51 0.259 0.39 15 +0 0.36 0.28 0.105 0.199 0.0695 0.045 0.08 9 +0 0.415 0.31 0.11 0.2965 0.123 0.057 0.0995 10 +-1 0.525 0.41 0.135 0.7085 0.293 0.1525 0.235 11 +1 0.38 0.285 0.1 0.2665 0.115 0.061 0.075 11 +-1 0.585 0.465 0.17 0.9915 0.3865 0.224 0.265 12 +0 0.24 0.185 0.07 0.0715 0.026 0.018 0.025 6 +0 0.22 0.165 0.055 0.0545 0.0215 0.012 0.02 5 +0 0.255 0.195 0.07 0.0735 0.0255 0.02 0.025 6 +0 0.175 0.125 0.05 0.0235 0.008 0.0035 0.008 5 +-1 0.67 0.55 0.19 1.3905 0.5425 0.3035 0.4 12 +1 0.655 0.53 0.195 1.388 0.567 0.2735 0.41 13 +-1 0.68 0.55 0.21 1.7445 0.5975 0.305 0.625 17 +1 0.675 0.555 0.2 1.4385 0.545 0.2665 0.465 21 +-1 0.53 0.44 0.135 0.7835 0.313 0.1715 0.2185 9 +-1 0.515 0.405 0.12 0.646 0.2895 0.1405 0.177 10 +0 0.43 0.34 0.12 0.3575 0.151 0.0645 0.1045 9 +-1 0.52 0.405 0.12 0.627 0.2645 0.1415 0.181 11 +-1 0.545 0.415 0.16 0.7715 0.272 0.1455 0.2765 10 +1 0.53 0.415 0.175 0.7395 0.261 0.1395 0.2645 17 +-1 0.465 0.35 0.115 0.421 0.1565 0.091 0.1345 9 +1 0.665 0.54 0.175 1.347 0.4955 0.254 0.415 17 +1 0.735 0.59 0.225 1.756 0.637 0.3405 0.58 21 +1 0.66 0.545 0.185 1.32 0.5305 0.2635 0.455 16 +-1 0.7 0.585 0.185 1.8075 0.7055 0.3215 0.475 29 +1 0.575 0.4 0.155 0.9325 0.3605 0.2445 0.3 17 +1 0.57 0.465 0.125 0.849 0.3785 0.1765 0.24 15 +-1 0.58 0.46 0.15 0.9955 0.429 0.212 0.26 19 +1 0.63 0.48 0.145 1.0115 0.4235 0.237 0.305 12 +-1 0.585 0.465 0.14 0.908 0.381 0.1615 0.315 13 +1 0.55 0.45 0.13 0.92 0.378 0.2385 0.29 11 +-1 0.625 0.515 0.15 1.2415 0.5235 0.3065 0.36 15 +1 0.54 0.42 0.135 0.8075 0.3485 0.1795 0.235 11 +-1 0.57 0.455 0.165 1.0595 0.44 0.2195 0.285 14 +1 0.59 0.455 0.145 1.073 0.475 0.19 0.285 14 +1 0.58 0.46 0.13 0.921 0.357 0.181 0.29 13 +-1 0.655 0.51 0.155 1.2895 0.5345 0.2855 0.41 11 +1 0.655 0.53 0.175 1.2635 0.486 0.2635 0.415 15 +1 0.625 0.5 0.195 1.369 0.5875 0.2185 0.37 17 +-1 0.625 0.5 0.15 0.953 0.3445 0.2235 0.305 15 +-1 0.64 0.52 0.175 1.248 0.4245 0.2595 0.48 12 +-1 0.605 0.485 0.165 1.0105 0.435 0.209 0.3 19 +-1 0.615 0.525 0.155 1.0385 0.427 0.2315 0.345 11 +1 0.555 0.45 0.175 0.874 0.3275 0.202 0.305 10 +-1 0.58 0.44 0.18 0.854 0.3665 0.1635 0.245 12 +-1 0.62 0.52 0.225 1.1835 0.378 0.27 0.395 23 +-1 0.62 0.47 0.225 1.115 0.378 0.2145 0.36 15 +-1 0.6 0.505 0.19 1.129 0.4385 0.256 0.36 13 +-1 0.625 0.485 0.19 1.1745 0.4385 0.2305 0.42 17 +1 0.6 0.47 0.175 1.105 0.4865 0.247 0.315 15 +1 0.56 0.46 0.235 0.8395 0.3325 0.157 0.305 12 +1 0.585 0.455 0.225 1.055 0.3815 0.221 0.365 15 +1 0.56 0.435 0.18 0.889 0.36 0.204 0.25 11 +0 0.56 0.445 0.155 0.8735 0.3005 0.209 0.275 16 +0 0.68 0.53 0.185 1.1095 0.439 0.245 0.34 10 +-1 0.455 0.35 0.14 0.5185 0.221 0.1265 0.135 10 +-1 0.49 0.38 0.145 0.6725 0.249 0.181 0.21 10 +1 0.31 0.22 0.085 0.146 0.061 0.0365 0.045 6 +-1 0.275 0.195 0.07 0.08 0.031 0.0215 0.025 5 +1 0.27 0.195 0.08 0.1 0.0385 0.0195 0.03 6 +1 0.4 0.29 0.115 0.2795 0.1115 0.0575 0.075 9 +1 0.28 0.2 0.08 0.0915 0.033 0.0215 0.03 5 +1 0.325 0.23 0.09 0.147 0.06 0.034 0.045 4 +-1 0.345 0.25 0.09 0.203 0.078 0.059 0.055 6 +1 0.21 0.15 0.05 0.0385 0.0155 0.0085 0.01 3 +-1 0.36 0.27 0.09 0.1885 0.0845 0.0385 0.055 5 +0 0.365 0.26 0.115 0.218 0.0935 0.0445 0.07 9 +1 0.2 0.14 0.055 0.035 0.0145 0.008 0.01 5 +1 0.235 0.16 0.06 0.0545 0.0265 0.0095 0.015 4 +1 0.175 0.125 0.04 0.024 0.0095 0.006 0.005 4 +1 0.155 0.11 0.04 0.0155 0.0065 0.003 0.005 3 +-1 0.57 0.445 0.155 0.733 0.282 0.159 0.235 14 +-1 0.57 0.45 0.16 0.9715 0.3965 0.255 0.26 12 +1 0.385 0.3 0.095 0.24 0.0885 0.059 0.085 9 +0 0.53 0.42 0.185 0.752 0.299 0.156 0.205 20 +-1 0.46 0.355 0.13 0.458 0.192 0.1055 0.13 13 +0 0.47 0.37 0.12 0.4705 0.1845 0.1055 0.155 12 +-1 0.435 0.335 0.11 0.38 0.1695 0.086 0.11 9 +0 0.47 0.37 0.14 0.4985 0.2095 0.1225 0.145 10 +0 0.465 0.38 0.13 0.454 0.1895 0.08 0.155 11 +0 0.52 0.405 0.14 0.5775 0.2 0.145 0.179 11 +1 0.29 0.23 0.075 0.1165 0.043 0.0255 0.04 7 +1 0.275 0.205 0.07 0.094 0.0335 0.02 0.0325 5 +-1 0.375 0.29 0.115 0.2705 0.093 0.066 0.0885 10 +-1 0.5 0.375 0.14 0.604 0.242 0.1415 0.179 15 +-1 0.44 0.355 0.115 0.415 0.1585 0.0925 0.131 11 +1 0.42 0.325 0.115 0.2885 0.1 0.057 0.1135 15 +1 0.445 0.35 0.115 0.3615 0.1565 0.0695 0.117 8 +-1 0.38 0.29 0.105 0.257 0.099 0.051 0.085 10 +1 0.32 0.245 0.075 0.1555 0.0585 0.038 0.049 11 +1 0.255 0.195 0.065 0.08 0.0315 0.018 0.027 8 +1 0.205 0.155 0.045 0.0425 0.017 0.0055 0.0155 7 +-1 0.565 0.45 0.16 0.795 0.3605 0.1555 0.23 12 +0 0.555 0.425 0.18 0.875 0.3695 0.2005 0.255 11 +0 0.65 0.515 0.16 1.1625 0.495 0.203 0.33 17 +0 0.615 0.49 0.155 0.9885 0.4145 0.195 0.345 13 +0 0.56 0.44 0.165 0.8 0.335 0.1735 0.25 12 +0 0.48 0.37 0.12 0.514 0.2075 0.131 0.155 13 +0 0.485 0.39 0.125 0.591 0.287 0.141 0.12 9 +0 0.5 0.385 0.15 0.6265 0.2605 0.1665 0.16 10 +0 0.525 0.405 0.15 0.795 0.3075 0.205 0.255 14 +-1 0.66 0.5 0.165 1.1905 0.4585 0.298 0.37 12 +-1 0.66 0.53 0.17 1.326 0.519 0.2625 0.44 13 +0 0.52 0.4 0.145 0.66 0.267 0.1055 0.22 13 +-1 0.44 0.34 0.105 0.364 0.148 0.0805 0.1175 8 +0 0.515 0.4 0.12 0.659 0.2705 0.179 0.17 13 +-1 0.475 0.35 0.115 0.452 0.1715 0.092 0.155 11 +-1 0.545 0.415 0.15 0.7335 0.2795 0.163 0.2185 11 +-1 0.47 0.355 0.13 0.5465 0.2005 0.126 0.185 14 +1 0.35 0.255 0.065 0.179 0.0705 0.0385 0.06 10 +0 0.485 0.355 0.13 0.581 0.245 0.132 0.168 12 +0 0.435 0.33 0.125 0.406 0.1685 0.1055 0.096 12 +1 0.28 0.21 0.08 0.1085 0.041 0.0265 0.0345 7 +-1 0.41 0.32 0.115 0.387 0.165 0.1005 0.0985 11 +0 0.45 0.35 0.14 0.474 0.21 0.109 0.1275 16 +0 0.45 0.345 0.135 0.443 0.1975 0.0875 0.1175 14 +-1 0.59 0.455 0.155 1.066 0.382 0.2275 0.415 20 +-1 0.57 0.44 0.14 0.9535 0.3785 0.201 0.305 17 +0 0.61 0.475 0.15 0.9665 0.4145 0.2 0.345 10 +-1 0.61 0.475 0.14 1.133 0.5275 0.2355 0.35 11 +0 0.56 0.425 0.14 0.9175 0.4005 0.1975 0.26 10 +-1 0.585 0.435 0.175 0.982 0.4055 0.2495 0.27 10 +0 0.58 0.445 0.15 0.8865 0.383 0.209 0.255 11 +-1 0.63 0.48 0.175 1.3675 0.5015 0.3035 0.515 17 +-1 0.625 0.49 0.175 1.233 0.5565 0.247 0.365 11 +0 0.55 0.425 0.15 0.806 0.376 0.171 0.245 14 +-1 0.645 0.525 0.19 1.4635 0.6615 0.3435 0.435 19 +0 0.46 0.355 0.14 0.4935 0.216 0.133 0.115 13 +-1 0.41 0.305 0.1 0.363 0.1735 0.065 0.11 11 +0 0.495 0.39 0.125 0.6655 0.284 0.162 0.2 11 +0 0.52 0.425 0.17 0.6805 0.28 0.174 0.195 10 +-1 0.55 0.41 0.145 0.8285 0.3095 0.1905 0.25 13 +1 0.45 0.335 0.14 0.4625 0.164 0.076 0.15 14 +-1 0.405 0.31 0.12 0.3095 0.138 0.058 0.095 13 +0 0.51 0.4 0.15 0.745 0.2865 0.1675 0.235 13 +-1 0.37 0.29 0.115 0.25 0.111 0.057 0.075 9 +0 0.525 0.41 0.175 0.874 0.3585 0.207 0.205 18 +-1 0.66 0.52 0.18 1.514 0.526 0.2975 0.42 19 +1 0.535 0.42 0.15 0.6995 0.2575 0.153 0.24 12 +0 0.575 0.455 0.18 0.8525 0.3015 0.1825 0.3 13 +-1 0.55 0.43 0.14 0.7135 0.2565 0.186 0.225 9 +0 0.605 0.47 0.14 0.939 0.3385 0.201 0.32 13 +0 0.605 0.495 0.145 1.054 0.369 0.2255 0.36 12 +-1 0.56 0.445 0.195 0.981 0.305 0.2245 0.335 16 +0 0.535 0.42 0.145 0.926 0.398 0.1965 0.25 17 +-1 0.385 0.315 0.11 0.286 0.1225 0.0635 0.0835 10 +-1 0.39 0.3 0.1 0.265 0.1075 0.06 0.0865 13 +0 0.47 0.345 0.115 0.4885 0.2005 0.108 0.166 11 +0 0.515 0.39 0.14 0.5555 0.2 0.1135 0.2235 12 +0 0.425 0.345 0.125 0.425 0.16 0.0795 0.154 13 +1 0.345 0.27 0.09 0.195 0.078 0.0455 0.059 9 +0 0.485 0.37 0.13 0.458 0.181 0.113 0.136 10 +1 0.37 0.285 0.1 0.228 0.0675 0.0675 0.081 10 +1 0.35 0.265 0.09 0.1775 0.0575 0.042 0.068 12 +-1 0.44 0.345 0.17 0.4085 0.15 0.0825 0.1515 12 +1 0.195 0.145 0.05 0.032 0.01 0.008 0.012 4 +1 0.325 0.24 0.075 0.155 0.0475 0.0355 0.06 9 +0 0.495 0.37 0.125 0.4775 0.185 0.0705 0.169 18 +0 0.45 0.35 0.145 0.525 0.2085 0.1 0.1655 15 +1 0.415 0.345 0.135 0.3865 0.128 0.07 0.148 13 +-1 0.47 0.355 0.14 0.433 0.1525 0.095 0.152 12 +1 0.32 0.24 0.085 0.17 0.0655 0.047 0.049 7 +1 0.31 0.225 0.075 0.1295 0.0455 0.0335 0.044 9 +1 0.235 0.17 0.055 0.0515 0.018 0.0105 0.0195 7 +1 0.345 0.255 0.08 0.169 0.06 0.0425 0.054 10 +0 0.485 0.38 0.14 0.673 0.2175 0.13 0.195 18 +-1 0.5 0.385 0.115 0.6785 0.2945 0.138 0.195 12 +-1 0.5 0.385 0.105 0.498 0.1795 0.1095 0.17 17 +0 0.465 0.36 0.105 0.498 0.214 0.116 0.14 15 +-1 0.525 0.405 0.16 0.658 0.2655 0.1125 0.225 12 +-1 0.425 0.335 0.095 0.322 0.1205 0.061 0.125 10 +-1 0.38 0.305 0.095 0.2815 0.1255 0.0525 0.09 8 +0 0.53 0.415 0.145 0.944 0.3845 0.185 0.265 21 +1 0.34 0.265 0.085 0.1835 0.077 0.046 0.065 10 +0 0.475 0.365 0.115 0.49 0.223 0.1235 0.1335 9 +-1 0.43 0.34 0.12 0.391 0.1555 0.095 0.1405 7 +1 0.46 0.365 0.125 0.467 0.1895 0.0945 0.158 10 +0 0.47 0.36 0.13 0.5225 0.198 0.1065 0.165 9 +1 0.36 0.295 0.1 0.2105 0.066 0.0525 0.075 9 +1 0.355 0.265 0.09 0.168 0.05 0.041 0.063 8 +1 0.38 0.235 0.1 0.258 0.1055 0.054 0.08 7 +1 0.355 0.26 0.085 0.1905 0.081 0.0485 0.055 6 +0 0.44 0.345 0.12 0.487 0.1965 0.108 0.16 14 +-1 0.51 0.4 0.13 0.5735 0.219 0.1365 0.195 13 +1 0.325 0.24 0.085 0.173 0.0795 0.038 0.05 7 +0 0.62 0.485 0.18 1.1785 0.4675 0.2655 0.39 13 +-1 0.59 0.45 0.16 0.9 0.358 0.156 0.315 19 +1 0.33 0.255 0.095 0.1875 0.0735 0.045 0.06 7 +1 0.45 0.34 0.13 0.3715 0.1605 0.0795 0.105 9 +0 0.445 0.33 0.12 0.347 0.12 0.084 0.105 11 +1 0.33 0.215 0.075 0.1145 0.045 0.0265 0.035 6 +1 0.48 0.375 0.145 0.777 0.216 0.13 0.17 9 +0 0.46 0.35 0.12 0.4885 0.193 0.105 0.155 11 +-1 0.475 0.36 0.125 0.447 0.1695 0.081 0.14 9 +1 0.255 0.18 0.065 0.079 0.034 0.014 0.025 5 +0 0.335 0.245 0.09 0.1665 0.0595 0.04 0.06 6 +0 0.47 0.35 0.13 0.466 0.1845 0.099 0.145 11 +1 0.31 0.225 0.08 0.1345 0.054 0.024 0.05 7 +-1 0.37 0.28 0.11 0.2305 0.0945 0.0465 0.075 10 +1 0.295 0.215 0.075 0.129 0.05 0.0295 0.04 7 +-1 0.555 0.435 0.165 0.97 0.336 0.2315 0.295 17 +-1 0.615 0.515 0.17 1.14 0.4305 0.2245 0.42 16 +0 0.58 0.49 0.195 1.3165 0.5305 0.254 0.41 18 +-1 0.585 0.475 0.185 0.9585 0.4145 0.1615 0.33 11 +0 0.65 0.525 0.18 1.626 0.597 0.3445 0.53 18 +0 0.535 0.45 0.17 0.781 0.3055 0.1555 0.295 11 +-1 0.415 0.34 0.13 0.3675 0.146 0.0885 0.12 10 +-1 0.38 0.305 0.105 0.281 0.1045 0.0615 0.09 12 +0 0.45 0.355 0.12 0.412 0.1145 0.0665 0.16 19 +-1 0.395 0.295 0.095 0.2245 0.078 0.054 0.08 10 +1 0.455 0.35 0.12 0.4835 0.1815 0.144 0.16 11 +-1 0.485 0.38 0.15 0.605 0.2155 0.14 0.18 15 +1 0.55 0.425 0.155 0.9175 0.2775 0.243 0.335 13 +-1 0.45 0.35 0.145 0.5425 0.1765 0.123 0.175 13 +1 0.475 0.385 0.145 0.6175 0.235 0.108 0.215 14 +-1 0.5 0.38 0.155 0.655 0.2405 0.143 0.205 17 +-1 0.53 0.41 0.165 0.8115 0.24 0.169 0.24 19 +1 0.49 0.39 0.15 0.573 0.225 0.124 0.17 21 +-1 0.49 0.385 0.15 0.7865 0.241 0.14 0.24 23 +-1 0.52 0.395 0.18 0.64 0.158 0.11 0.245 22 +1 0.54 0.415 0.145 0.74 0.2635 0.168 0.245 12 +-1 0.5 0.375 0.115 0.5945 0.185 0.148 0.19 11 +-1 0.45 0.38 0.165 0.8165 0.25 0.1915 0.265 23 +-1 0.37 0.275 0.1 0.2225 0.093 0.026 0.08 8 +0 0.37 0.275 0.1 0.2295 0.0885 0.0465 0.07 7 +1 0.485 0.37 0.14 0.5725 0.204 0.1415 0.175 10 +-1 0.435 0.325 0.115 0.3915 0.154 0.094 0.12 7 +1 0.535 0.405 0.185 0.8345 0.3175 0.1725 0.29 16 +1 0.51 0.4 0.14 0.6515 0.2455 0.1665 0.185 10 +1 0.565 0.44 0.185 0.909 0.344 0.2325 0.255 15 +-1 0.535 0.4 0.15 0.8045 0.3345 0.2125 0.21 13 +-1 0.535 0.405 0.125 0.927 0.26 0.1425 0.345 16 +1 0.525 0.4 0.17 0.7305 0.279 0.2055 0.195 11 +1 0.59 0.44 0.15 0.9555 0.366 0.2425 0.295 11 +1 0.5 0.375 0.15 0.636 0.2535 0.145 0.19 10 +0 0.255 0.19 0.075 0.0865 0.0345 0.0205 0.025 5 +-1 0.43 0.325 0.115 0.3865 0.1475 0.1065 0.11 11 +1 0.38 0.29 0.12 0.283 0.1175 0.0655 0.085 9 +0 0.165 0.11 0.02 0.019 0.0065 0.0025 0.005 4 +0 0.315 0.23 0.09 0.1285 0.043 0.04 0.04 7 +0 0.155 0.105 0.05 0.0175 0.005 0.0035 0.005 4 +1 0.28 0.205 0.1 0.1165 0.0545 0.0285 0.03 5 +-1 0.43 0.335 0.12 0.444 0.155 0.1145 0.14 13 +-1 0.395 0.315 0.105 0.3515 0.1185 0.091 0.1195 16 +1 0.385 0.285 0.105 0.2905 0.1215 0.0685 0.0875 12 +-1 0.48 0.385 0.135 0.536 0.1895 0.142 0.173 14 +-1 0.445 0.33 0.105 0.4525 0.18 0.103 0.123 9 +1 0.395 0.295 0.115 0.316 0.1205 0.0595 0.1105 12 +1 0.4 0.3 0.125 0.417 0.191 0.09 0.1175 9 +1 0.415 0.325 0.14 0.417 0.1535 0.1015 0.144 10 +1 0.315 0.25 0.09 0.203 0.0615 0.037 0.0795 11 +-1 0.345 0.26 0.09 0.207 0.0775 0.0435 0.0765 10 +1 0.36 0.295 0.13 0.2765 0.0895 0.057 0.1005 10 +0 0.295 0.225 0.09 0.1105 0.0405 0.0245 0.032 7 +0 0.325 0.25 0.08 0.176 0.0595 0.0355 0.063 7 +1 0.375 0.3 0.1 0.2465 0.104 0.0475 0.083 11 +0 0.28 0.205 0.055 0.1135 0.045 0.0275 0.0335 7 +1 0.355 0.265 0.085 0.201 0.069 0.053 0.0695 8 +1 0.35 0.255 0.08 0.1915 0.08 0.0385 0.063 9 +0 0.275 0.2 0.065 0.1035 0.0475 0.0205 0.03 7 +0 0.29 0.205 0.07 0.0975 0.036 0.019 0.035 8 +0 0.25 0.19 0.06 0.0765 0.036 0.0115 0.0245 6 +0 0.18 0.125 0.035 0.0265 0.0095 0.0055 0.0085 4 +0 0.15 0.1 0.025 0.015 0.0045 0.004 0.005 2 +0 0.16 0.11 0.025 0.018 0.0065 0.0055 0.005 3 +1 0.555 0.455 0.16 1.0575 0.3925 0.228 0.293 13 +1 0.555 0.44 0.15 1.092 0.416 0.212 0.4405 15 +1 0.525 0.41 0.13 0.99 0.3865 0.243 0.295 15 +1 0.465 0.36 0.08 0.488 0.191 0.125 0.155 11 +-1 0.49 0.36 0.11 0.5005 0.161 0.107 0.195 17 +1 0.4 0.305 0.085 0.297 0.108 0.0705 0.1 10 +-1 0.48 0.375 0.105 0.525 0.2185 0.1195 0.155 12 +1 0.505 0.4 0.125 0.77 0.2735 0.159 0.255 13 +-1 0.52 0.4 0.12 0.6515 0.261 0.2015 0.165 15 +1 0.525 0.4 0.13 0.8295 0.2405 0.1825 0.275 11 +1 0.545 0.42 0.13 0.879 0.374 0.1695 0.23 13 +1 0.52 0.4 0.12 0.823 0.298 0.1805 0.265 15 +1 0.505 0.38 0.13 0.656 0.227 0.1785 0.22 13 +1 0.525 0.425 0.12 0.8665 0.2825 0.176 0.29 18 +1 0.51 0.39 0.125 0.6565 0.262 0.1835 0.175 10 +1 0.52 0.385 0.115 0.669 0.2385 0.172 0.205 12 +-1 0.52 0.405 0.125 0.6435 0.2415 0.1735 0.21 12 +1 0.535 0.41 0.135 0.862 0.2855 0.1525 0.32 14 +1 0.445 0.345 0.09 0.3795 0.143 0.074 0.125 10 +1 0.53 0.44 0.205 0.835 0.32 0.2175 0.245 14 +-1 0.36 0.265 0.09 0.2065 0.078 0.057 0.06 8 +-1 0.535 0.42 0.15 0.7365 0.2785 0.186 0.215 14 +-1 0.52 0.405 0.14 0.8175 0.2795 0.183 0.26 17 +1 0.53 0.415 0.13 0.8425 0.275 0.1945 0.265 20 +-1 0.53 0.42 0.13 1.001 0.34 0.226 0.265 17 +-1 0.66 0.52 0.2 1.676 0.673 0.4805 0.45 17 +1 0.52 0.385 0.14 0.6595 0.2485 0.2035 0.16 9 +1 0.535 0.42 0.13 0.8055 0.301 0.181 0.28 14 +1 0.695 0.515 0.175 1.5165 0.578 0.4105 0.39 15 +-1 0.51 0.39 0.105 0.612 0.187 0.15 0.195 13 +1 0.485 0.355 0.12 0.547 0.215 0.1615 0.14 10 +-1 0.605 0.46 0.17 1.122 0.347 0.3045 0.315 13 +-1 0.58 0.455 0.165 1.1365 0.369 0.3005 0.275 13 +1 0.65 0.515 0.175 1.4805 0.5295 0.272 0.525 20 +1 0.62 0.505 0.185 1.5275 0.69 0.368 0.35 13 +1 0.615 0.525 0.155 1.1375 0.367 0.236 0.37 20 +-1 0.605 0.495 0.19 1.437 0.469 0.2655 0.41 15 +1 0.57 0.44 0.155 1.116 0.4775 0.2315 0.27 13 +1 0.57 0.43 0.12 1.0615 0.348 0.167 0.31 15 +1 0.585 0.405 0.15 1.2565 0.435 0.202 0.325 15 +-1 0.55 0.44 0.155 0.946 0.313 0.1825 0.335 16 +-1 0.54 0.44 0.135 0.959 0.2385 0.221 0.3 17 +1 0.64 0.51 0.19 1.613 0.6215 0.361 0.47 14 +-1 0.61 0.47 0.145 1.153 0.403 0.296 0.32 14 +1 0.545 0.45 0.15 0.978 0.3365 0.1905 0.3 11 +-1 0.59 0.445 0.13 1.1325 0.3825 0.234 0.32 13 +1 0.345 0.27 0.095 0.197 0.0665 0.05 0.07 9 +-1 0.55 0.43 0.155 0.785 0.289 0.227 0.233 11 +-1 0.53 0.425 0.17 0.949 0.3485 0.2395 0.278 17 +-1 0.53 0.455 0.165 0.9805 0.3155 0.2815 0.2965 11 +0 0.485 0.375 0.14 0.521 0.2 0.123 0.17 8 +1 0.385 0.275 0.115 0.2685 0.0975 0.0825 0.085 8 +1 0.455 0.34 0.135 0.462 0.1675 0.158 0.12 9 +1 0.49 0.38 0.14 0.7605 0.245 0.167 0.185 10 +1 0.53 0.41 0.165 0.732 0.189 0.17 0.31 11 +1 0.505 0.385 0.145 0.6775 0.236 0.179 0.2 15 +1 0.49 0.38 0.14 0.6385 0.2305 0.142 0.195 13 +1 0.465 0.35 0.14 0.5755 0.2015 0.1505 0.19 15 +-1 0.47 0.36 0.145 0.537 0.1725 0.1375 0.195 15 +1 0.56 0.41 0.165 0.93 0.3505 0.237 0.3 13 +1 0.505 0.385 0.15 0.6415 0.246 0.152 0.215 12 +1 0.515 0.435 0.145 0.8815 0.292 0.206 0.255 10 +0 0.385 0.28 0.125 0.244 0.102 0.038 0.085 6 +0 0.215 0.155 0.06 0.0525 0.021 0.0165 0.015 5 +1 0.55 0.415 0.175 1.042 0.3295 0.2325 0.2905 15 +-1 0.515 0.39 0.13 0.5755 0.1975 0.13 0.1845 9 +1 0.495 0.385 0.135 0.709 0.211 0.1375 0.262 12 +-1 0.505 0.39 0.16 0.644 0.2475 0.2025 0.1635 9 +-1 0.6 0.465 0.165 0.8875 0.309 0.246 0.262 12 +-1 0.57 0.465 0.16 0.8935 0.3145 0.2575 0.263 10 +-1 0.485 0.375 0.135 0.556 0.1925 0.1315 0.1685 10 +1 0.47 0.37 0.18 0.51 0.1915 0.1285 0.1625 9 +1 0.575 0.45 0.165 0.9215 0.3275 0.225 0.256 12 +1 0.58 0.465 0.16 1.0345 0.315 0.26 0.3635 12 +1 0.515 0.405 0.145 0.695 0.215 0.1635 0.234 15 +1 0.53 0.41 0.155 0.7155 0.2805 0.1685 0.214 11 +1 0.44 0.335 0.11 0.394 0.157 0.096 0.122 9 +1 0.52 0.42 0.16 0.745 0.255 0.157 0.2885 11 +-1 0.425 0.345 0.11 0.3665 0.125 0.081 0.117 11 +1 0.46 0.34 0.135 0.495 0.1655 0.117 0.185 10 +1 0.45 0.335 0.125 0.349 0.119 0.1055 0.115 10 +1 0.425 0.33 0.13 0.4405 0.152 0.0935 0.155 9 +0 0.37 0.275 0.1 0.22 0.094 0.045 0.065 7 +1 0.515 0.38 0.135 0.6615 0.2875 0.2095 0.155 10 +1 0.405 0.305 0.12 0.3185 0.1235 0.0905 0.095 7 +0 0.28 0.205 0.07 0.1015 0.041 0.03 0.03 6 +-1 0.48 0.4 0.125 0.759 0.2125 0.179 0.24 15 +-1 0.44 0.34 0.13 0.4195 0.153 0.1155 0.13 10 +-1 0.52 0.41 0.115 0.807 0.2855 0.179 0.235 12 +1 0.505 0.405 0.14 0.875 0.2665 0.174 0.285 12 +-1 0.49 0.365 0.13 0.6835 0.165 0.1315 0.205 21 +0 0.235 0.175 0.055 0.067 0.027 0.0125 0.018 6 +0 0.255 0.185 0.06 0.088 0.0365 0.021 0.023 5 +0 0.315 0.24 0.085 0.1715 0.071 0.0345 0.0535 7 +0 0.325 0.25 0.08 0.1735 0.0765 0.0345 0.049 7 +0 0.335 0.25 0.08 0.183 0.0735 0.04 0.0575 6 +0 0.35 0.27 0.09 0.2055 0.075 0.0575 0.062 6 +0 0.35 0.25 0.07 0.18 0.0655 0.048 0.054 6 +0 0.36 0.3 0.085 0.27 0.1185 0.064 0.0745 7 +0 0.365 0.275 0.135 0.24 0.108 0.0445 0.0735 7 +0 0.37 0.275 0.14 0.2215 0.097 0.0455 0.0615 6 +0 0.38 0.275 0.095 0.1375 0.086 0.0585 0.0605 7 +0 0.385 0.29 0.095 0.312 0.143 0.0635 0.086 6 +0 0.385 0.3 0.1 0.2895 0.1215 0.063 0.09 7 +0 0.395 0.29 0.095 0.319 0.138 0.08 0.082 7 +0 0.395 0.29 0.095 0.304 0.127 0.084 0.077 6 +0 0.4 0.31 0.1 0.306 0.13 0.06 0.094 6 +0 0.41 0.325 0.1 0.394 0.208 0.0655 0.106 6 +0 0.415 0.32 0.11 0.3735 0.175 0.0755 0.109 7 +1 0.415 0.305 0.1 0.325 0.156 0.0505 0.091 6 +0 0.425 0.325 0.1 0.398 0.1185 0.0645 0.0945 6 +0 0.44 0.365 0.115 0.501 0.2435 0.084 0.1465 9 +0 0.445 0.335 0.1 0.4895 0.2745 0.086 0.1105 7 +0 0.445 0.325 0.1 0.378 0.1795 0.1 0.089 7 +0 0.45 0.35 0.13 0.547 0.245 0.1405 0.1405 8 +1 0.47 0.375 0.12 0.5805 0.266 0.0935 0.169 8 +0 0.475 0.365 0.125 0.5465 0.229 0.1185 0.172 9 +-1 0.48 0.365 0.135 0.6395 0.2945 0.113 0.175 8 +0 0.485 0.355 0.105 0.498 0.2175 0.096 0.1525 9 +1 0.49 0.385 0.125 0.609 0.3065 0.096 0.1775 8 +-1 0.495 0.41 0.125 0.7555 0.3355 0.129 0.214 9 +1 0.5 0.4 0.125 0.5975 0.27 0.1275 0.166 9 +1 0.505 0.44 0.14 0.8275 0.3415 0.1855 0.239 8 +1 0.525 0.395 0.13 0.7635 0.3375 0.1425 0.225 8 +1 0.54 0.405 0.125 0.891 0.4815 0.1915 0.202 9 +-1 0.54 0.42 0.14 0.805 0.369 0.1725 0.21 11 +-1 0.545 0.44 0.135 0.9185 0.429 0.2015 0.2375 10 +-1 0.55 0.43 0.125 0.923 0.4035 0.175 0.283 8 +1 0.55 0.45 0.15 1.0145 0.407 0.2015 0.2875 10 +-1 0.55 0.45 0.15 0.875 0.362 0.1755 0.2765 10 +1 0.555 0.435 0.145 0.9685 0.4985 0.168 0.2385 9 +1 0.565 0.45 0.155 1.0595 0.4735 0.24 0.265 10 +1 0.57 0.455 0.15 0.952 0.3895 0.2155 0.2745 9 +1 0.57 0.435 0.13 0.7535 0.349 0.1755 0.194 10 +-1 0.575 0.465 0.14 0.958 0.442 0.1815 0.2705 9 +1 0.59 0.475 0.165 1.077 0.4545 0.244 0.3095 9 +1 0.59 0.46 0.13 1.102 0.455 0.2055 0.33 12 +-1 0.595 0.48 0.15 1.11 0.498 0.228 0.33 10 +-1 0.595 0.48 0.16 1.2095 0.5225 0.296 0.32 8 +-1 0.595 0.475 0.16 1.1405 0.547 0.231 0.271 6 +-1 0.595 0.465 0.14 1.113 0.5175 0.244 0.305 12 +1 0.6 0.475 0.175 1.3445 0.549 0.2875 0.36 11 +-1 0.6 0.475 0.155 1.21 0.653 0.1695 0.3205 10 +1 0.6 0.495 0.175 1.29 0.606 0.276 0.3445 11 +-1 0.605 0.475 0.175 1.382 0.609 0.2325 0.3985 10 +1 0.605 0.455 0.16 1.1035 0.421 0.3015 0.325 9 +-1 0.615 0.5 0.175 1.377 0.5585 0.33 0.292 12 +-1 0.615 0.52 0.15 1.3435 0.629 0.2605 0.345 10 +1 0.615 0.51 0.15 1.296 0.545 0.3315 0.32 9 +1 0.615 0.505 0.165 1.34 0.5315 0.2815 0.41 12 +-1 0.62 0.505 0.16 1.3725 0.6285 0.275 0.3685 11 +1 0.62 0.5 0.165 1.307 0.6355 0.2545 0.315 9 +-1 0.625 0.49 0.155 1.2085 0.465 0.162 0.411 11 +-1 0.625 0.49 0.2 1.3825 0.5895 0.285 0.381 11 +1 0.63 0.505 0.165 1.26 0.4525 0.2755 0.406 14 +1 0.635 0.51 0.17 1.3555 0.619 0.305 0.39 9 +-1 0.635 0.5 0.15 1.376 0.6495 0.361 0.31 10 +-1 0.635 0.485 0.165 1.2945 0.668 0.2605 0.2715 9 +-1 0.64 0.51 0.165 1.486 0.7595 0.332 0.321 8 +1 0.65 0.525 0.175 1.4715 0.675 0.315 0.399 11 +1 0.655 0.52 0.165 1.4095 0.586 0.291 0.405 9 +1 0.655 0.58 0.205 2.0805 0.959 0.3415 0.601 17 +1 0.66 0.53 0.17 1.3905 0.5905 0.212 0.453 15 +1 0.66 0.52 0.19 1.558 0.755 0.298 0.4 10 +-1 0.67 0.585 0.16 1.309 0.5445 0.2945 0.413 10 +-1 0.675 0.525 0.17 1.8095 0.784 0.391 0.455 12 +-1 0.675 0.525 0.155 1.4785 0.628 0.3405 0.42 9 +-1 0.68 0.56 0.195 1.7775 0.861 0.322 0.415 11 +-1 0.685 0.54 0.16 1.6675 0.833 0.3775 0.475 11 +-1 0.695 0.56 0.22 1.834 0.8455 0.422 0.455 11 +1 0.73 0.595 0.23 2.8255 1.1465 0.419 0.897 17 +0 0.205 0.14 0.05 0.046 0.0165 0.012 0.0135 6 +0 0.24 0.175 0.055 0.0705 0.025 0.014 0.021 5 +0 0.24 0.175 0.065 0.0665 0.031 0.0135 0.017 3 +0 0.255 0.19 0.05 0.083 0.0295 0.0215 0.027 6 +0 0.255 0.18 0.055 0.083 0.031 0.0215 0.02 4 +0 0.265 0.195 0.06 0.092 0.0345 0.025 0.0245 6 +0 0.28 0.12 0.075 0.117 0.0455 0.029 0.0345 4 +0 0.295 0.23 0.08 0.1625 0.065 0.05 0.0385 5 +0 0.3 0.235 0.08 0.131 0.05 0.0265 0.043 4 +0 0.3 0.23 0.095 0.1385 0.056 0.0365 0.037 6 +0 0.305 0.22 0.07 0.141 0.062 0.031 0.037 5 +0 0.315 0.235 0.075 0.1485 0.0585 0.0375 0.0425 6 +0 0.315 0.23 0.07 0.144 0.053 0.0305 0.04 8 +0 0.32 0.24 0.09 0.1575 0.07 0.0265 0.0425 5 +0 0.325 0.24 0.075 0.187 0.0825 0.0445 0.05 6 +0 0.33 0.265 0.085 0.196 0.0775 0.0305 0.0445 6 +0 0.335 0.25 0.075 0.1825 0.0705 0.044 0.055 7 +0 0.335 0.25 0.075 0.186 0.0945 0.038 0.0445 7 +0 0.34 0.25 0.075 0.1785 0.0665 0.0455 0.045 5 +0 0.34 0.25 0.07 0.2225 0.104 0.0425 0.055 7 +0 0.345 0.265 0.1 0.2455 0.111 0.0535 0.065 7 +0 0.37 0.29 0.095 0.249 0.1045 0.058 0.067 6 +0 0.37 0.28 0.095 0.2865 0.1505 0.069 0.0795 7 +0 0.375 0.28 0.09 0.215 0.084 0.06 0.055 6 +0 0.385 0.265 0.08 0.251 0.124 0.037 0.07 6 +0 0.41 0.31 0.09 0.339 0.155 0.0695 0.09 7 +0 0.41 0.305 0.09 0.3535 0.157 0.0745 0.1 7 +0 0.41 0.31 0.09 0.3335 0.1635 0.061 0.091 6 +0 0.415 0.33 0.09 0.3595 0.17 0.081 0.09 6 +0 0.42 0.32 0.115 0.376 0.169 0.092 0.1 5 +0 0.42 0.315 0.1 0.3435 0.157 0.0795 0.09 6 +0 0.425 0.34 0.1 0.382 0.164 0.096 0.1 6 +0 0.425 0.315 0.1 0.377 0.1645 0.072 0.105 6 +0 0.43 0.325 0.1 0.3645 0.1575 0.0825 0.105 7 +0 0.43 0.325 0.09 0.425 0.217 0.087 0.095 7 +0 0.435 0.325 0.12 0.3995 0.1815 0.061 0.1125 8 +0 0.435 0.34 0.115 0.3925 0.1825 0.078 0.1145 6 +0 0.44 0.345 0.13 0.4495 0.209 0.0835 0.134 6 +0 0.44 0.325 0.09 0.35 0.148 0.067 0.105 7 +-1 0.445 0.335 0.11 0.4355 0.2025 0.1095 0.1195 6 +0 0.445 0.35 0.13 0.4195 0.1695 0.0945 0.1195 7 +0 0.45 0.36 0.13 0.478 0.191 0.127 0.137 7 +0 0.45 0.355 0.105 0.4445 0.197 0.093 0.1335 8 +0 0.45 0.345 0.11 0.47 0.2355 0.0855 0.1135 7 +0 0.45 0.335 0.105 0.447 0.2335 0.153 0.119 7 +0 0.455 0.355 0.125 0.5325 0.225 0.126 0.1465 7 +0 0.455 0.375 0.12 0.497 0.2355 0.1055 0.1295 6 +0 0.46 0.36 0.1 0.4635 0.2325 0.093 0.115 7 +0 0.46 0.345 0.105 0.449 0.196 0.0945 0.1265 7 +0 0.465 0.365 0.115 0.467 0.2315 0.0925 0.113 7 +0 0.465 0.37 0.115 0.534 0.261 0.098 0.143 7 +0 0.465 0.345 0.11 0.4415 0.1755 0.0905 0.12 7 +-1 0.465 0.35 0.125 0.482 0.23 0.106 0.1095 6 +1 0.47 0.365 0.12 0.612 0.327 0.15 0.14 8 +-1 0.47 0.365 0.12 0.582 0.29 0.092 0.146 8 +1 0.475 0.37 0.125 0.537 0.222 0.1215 0.15 9 +-1 0.475 0.36 0.12 0.5915 0.3245 0.11 0.127 6 +1 0.48 0.375 0.115 0.6765 0.3205 0.1065 0.17 6 +1 0.48 0.385 0.145 0.64 0.2925 0.1405 0.1575 6 +1 0.48 0.36 0.1 0.439 0.194 0.099 0.115 8 +1 0.48 0.365 0.12 0.6015 0.312 0.117 0.14 7 +-1 0.485 0.37 0.115 0.4785 0.1995 0.0955 0.129 7 +1 0.49 0.385 0.125 0.649 0.32 0.124 0.1695 8 +1 0.495 0.395 0.135 0.6335 0.3035 0.1295 0.1495 8 +1 0.495 0.4 0.135 0.61 0.272 0.1435 0.144 7 +1 0.5 0.39 0.135 0.6595 0.3145 0.1535 0.1565 6 +0 0.5 0.385 0.12 0.56 0.2835 0.103 0.135 8 +1 0.5 0.385 0.135 0.6425 0.3195 0.129 0.1535 7 +1 0.5 0.4 0.125 0.6725 0.336 0.12 0.1825 7 +-1 0.505 0.39 0.13 0.674 0.3165 0.141 0.1785 9 +0 0.505 0.39 0.15 0.685 0.362 0.131 0.156 8 +1 0.505 0.41 0.125 0.642 0.289 0.133 0.155 9 +0 0.505 0.355 0.125 0.601 0.25 0.1205 0.185 8 +1 0.51 0.39 0.135 0.769 0.3935 0.1455 0.19 8 +0 0.51 0.375 0.1 0.5785 0.238 0.1225 0.175 7 +0 0.51 0.405 0.135 0.769 0.3655 0.1585 0.18 7 +1 0.51 0.405 0.15 0.7035 0.347 0.134 0.1885 8 +1 0.51 0.41 0.145 0.796 0.3865 0.1815 0.1955 8 +-1 0.515 0.43 0.14 0.834 0.367 0.2 0.23 8 +1 0.515 0.39 0.155 0.7125 0.3695 0.137 0.155 7 +-1 0.525 0.415 0.14 0.724 0.3475 0.173 0.175 8 +1 0.525 0.4 0.14 0.7325 0.334 0.1575 0.17 11 +-1 0.53 0.425 0.13 0.7585 0.325 0.197 0.205 8 +-1 0.53 0.425 0.15 0.8495 0.328 0.232 0.202 8 +1 0.53 0.405 0.125 0.6515 0.2715 0.1605 0.186 7 +-1 0.535 0.4 0.135 0.8215 0.3935 0.196 0.205 8 +1 0.535 0.43 0.14 0.7165 0.2855 0.1595 0.2155 8 +1 0.535 0.435 0.14 0.874 0.3735 0.229 0.2195 8 +-1 0.55 0.445 0.155 0.9905 0.544 0.178 0.218 9 +-1 0.55 0.43 0.14 0.8105 0.368 0.161 0.275 9 +-1 0.56 0.455 0.16 0.967 0.4525 0.207 0.274 9 +-1 0.565 0.4 0.13 0.6975 0.3075 0.1665 0.18 8 +1 0.57 0.45 0.155 1.195 0.5625 0.2565 0.295 10 +1 0.57 0.45 0.155 1.1935 0.513 0.21 0.343 10 +-1 0.57 0.455 0.15 1.107 0.54 0.255 0.27 8 +1 0.57 0.445 0.14 1.0635 0.5265 0.2195 0.24 8 +1 0.57 0.46 0.17 0.9035 0.4075 0.1935 0.214 7 +1 0.575 0.475 0.16 1.114 0.4955 0.2745 0.29 9 +-1 0.575 0.46 0.16 1.103 0.538 0.221 0.249 9 +-1 0.58 0.46 0.15 1.1155 0.5575 0.2255 0.29 7 +-1 0.58 0.46 0.18 1.0515 0.4095 0.2595 0.276 8 +1 0.58 0.455 0.15 1.012 0.4985 0.2115 0.2835 10 +-1 0.58 0.45 0.145 1.137 0.5585 0.22 0.29 8 +1 0.58 0.49 0.13 1.1335 0.586 0.2565 0.237 9 +1 0.59 0.465 0.155 1.136 0.5245 0.2615 0.275 11 +1 0.59 0.47 0.16 1.206 0.479 0.2425 0.309 8 +-1 0.59 0.455 0.145 1.063 0.5155 0.2445 0.25 8 +-1 0.595 0.47 0.155 1.121 0.4515 0.178 0.155 11 +-1 0.595 0.45 0.15 1.114 0.5865 0.2205 0.25 11 +1 0.595 0.475 0.165 1.213 0.621 0.2435 0.274 9 +-1 0.595 0.46 0.14 1.0045 0.4655 0.2095 0.2515 9 +1 0.595 0.455 0.15 1.044 0.518 0.2205 0.27 9 +-1 0.605 0.49 0.15 1.1345 0.5265 0.2645 0.295 9 +1 0.605 0.475 0.155 1.161 0.572 0.2455 0.275 9 +1 0.605 0.47 0.165 1.2315 0.6025 0.262 0.2925 11 +1 0.61 0.47 0.15 1.1625 0.565 0.258 0.3085 11 +1 0.61 0.475 0.155 1.168 0.554 0.239 0.3295 10 +-1 0.615 0.48 0.16 1.2525 0.585 0.2595 0.33 8 +-1 0.62 0.51 0.18 1.3315 0.594 0.276 0.388 11 +-1 0.625 0.48 0.17 1.3525 0.6235 0.278 0.365 10 +1 0.625 0.49 0.175 1.3325 0.5705 0.271 0.405 10 +-1 0.625 0.475 0.175 1.1435 0.4755 0.2475 0.349 10 +-1 0.625 0.5 0.165 1.288 0.573 0.3035 0.315 9 +-1 0.625 0.485 0.2 1.38 0.5845 0.302 0.401 9 +1 0.63 0.485 0.155 1.278 0.637 0.275 0.31 8 +-1 0.63 0.495 0.165 1.3075 0.599 0.284 0.315 11 +1 0.63 0.48 0.15 1.1785 0.5185 0.248 0.3235 8 +1 0.635 0.49 0.175 1.375 0.623 0.2705 0.395 11 +1 0.635 0.525 0.185 1.4065 0.684 0.3 0.3745 10 +1 0.64 0.505 0.155 1.4025 0.705 0.2655 0.335 10 +-1 0.64 0.5 0.17 1.5175 0.693 0.326 0.409 11 +-1 0.64 0.5 0.175 1.394 0.4935 0.291 0.4 10 +-1 0.645 0.5 0.155 1.2205 0.6145 0.236 0.3185 10 +1 0.645 0.52 0.175 1.636 0.779 0.342 0.432 11 +1 0.645 0.52 0.175 1.561 0.709 0.3555 0.4 8 +-1 0.645 0.505 0.165 1.4325 0.684 0.308 0.336 8 +1 0.645 0.5 0.175 1.3385 0.633 0.299 0.349 11 +-1 0.645 0.5 0.16 1.2465 0.5475 0.327 0.3 10 +-1 0.645 0.515 0.15 1.212 0.515 0.2055 0.385 10 +1 0.65 0.495 0.16 1.304 0.57 0.312 0.3725 9 +1 0.65 0.52 0.21 1.6785 0.6665 0.308 0.46 11 +1 0.65 0.525 0.185 1.622 0.6645 0.3225 0.477 10 +-1 0.655 0.46 0.16 1.494 0.6895 0.331 0.1825 9 +-1 0.655 0.51 0.175 1.6525 0.8515 0.3365 0.403 10 +-1 0.66 0.505 0.185 1.528 0.69 0.3025 0.441 11 +1 0.66 0.535 0.19 1.5905 0.6425 0.297 0.5175 9 +1 0.66 0.495 0.195 1.6275 0.594 0.3595 0.485 10 +-1 0.66 0.475 0.18 1.3695 0.641 0.294 0.335 6 +1 0.67 0.525 0.165 1.6085 0.682 0.3145 0.4005 11 +-1 0.675 0.57 0.225 1.587 0.739 0.2995 0.435 10 +-1 0.675 0.565 0.195 1.8375 0.7645 0.3615 0.553 12 +1 0.68 0.535 0.185 1.607 0.7245 0.3215 0.498 12 +1 0.69 0.525 0.175 1.7005 0.8255 0.362 0.405 8 +1 0.69 0.505 0.2 1.872 0.893 0.4015 0.48 10 +-1 0.695 0.535 0.175 1.8385 0.8035 0.396 0.503 10 +-1 0.705 0.535 0.18 1.685 0.693 0.42 0.4045 12 +1 0.71 0.565 0.205 2.198 1.012 0.5225 0.5475 11 +1 0.715 0.565 0.175 1.9525 0.7645 0.4185 0.4135 10 +-1 0.715 0.525 0.185 1.56 0.6655 0.383 0.405 11 +-1 0.735 0.6 0.22 2.555 1.1335 0.44 0.6 11 +1 0.765 0.6 0.22 2.302 1.007 0.509 0.6205 12 +0 0.185 0.13 0.045 0.029 0.012 0.0075 0.0095 4 +0 0.195 0.15 0.045 0.0375 0.018 0.006 0.011 3 +0 0.195 0.135 0.04 0.0325 0.0135 0.005 0.0095 4 +0 0.2 0.155 0.04 0.0435 0.0155 0.009 0.007 4 +0 0.225 0.165 0.055 0.059 0.027 0.0125 0.015 4 +0 0.245 0.18 0.065 0.071 0.03 0.013 0.0215 4 +0 0.25 0.18 0.065 0.0685 0.0245 0.0155 0.0225 5 +0 0.265 0.195 0.055 0.084 0.0365 0.0175 0.025 7 +0 0.275 0.195 0.065 0.106 0.054 0.02 0.028 6 +0 0.28 0.21 0.085 0.1075 0.0415 0.024 0.034 5 +0 0.285 0.22 0.065 0.096 0.0405 0.0205 0.03 5 +0 0.3 0.22 0.08 0.1255 0.055 0.0265 0.039 6 +0 0.315 0.235 0.055 0.151 0.065 0.027 0.039 6 +0 0.32 0.225 0.085 0.1415 0.0675 0.0295 0.0405 6 +0 0.34 0.265 0.08 0.2015 0.09 0.0475 0.055 5 +0 0.37 0.28 0.1 0.221 0.1165 0.0265 0.0635 6 +0 0.375 0.28 0.08 0.2345 0.1125 0.0455 0.067 6 +0 0.375 0.275 0.1 0.2325 0.1165 0.042 0.065 6 +0 0.385 0.29 0.08 0.2485 0.122 0.0495 0.065 7 +0 0.4 0.32 0.095 0.348 0.194 0.053 0.087 6 +0 0.405 0.3 0.11 0.32 0.172 0.044 0.093 7 +0 0.41 0.3 0.1 0.282 0.1255 0.057 0.0875 7 +0 0.41 0.325 0.1 0.3245 0.132 0.072 0.106 6 +0 0.42 0.3 0.105 0.316 0.1255 0.07 0.1035 7 +0 0.42 0.32 0.11 0.3625 0.174 0.0635 0.105 7 +0 0.42 0.31 0.095 0.279 0.1255 0.051 0.088 6 +0 0.425 0.325 0.115 0.3685 0.162 0.0865 0.1045 7 +1 0.43 0.335 0.12 0.397 0.1985 0.0865 0.1035 7 +0 0.435 0.33 0.11 0.413 0.2055 0.096 0.096 6 +0 0.435 0.345 0.115 0.418 0.222 0.0735 0.106 7 +0 0.44 0.33 0.11 0.3705 0.1545 0.084 0.12 7 +0 0.445 0.345 0.105 0.409 0.1675 0.1015 0.117 7 +0 0.445 0.34 0.145 0.434 0.1945 0.0905 0.13 7 +0 0.445 0.335 0.11 0.411 0.1985 0.0935 0.109 8 +0 0.45 0.365 0.125 0.462 0.2135 0.0985 0.1315 8 +0 0.45 0.34 0.12 0.4925 0.241 0.1075 0.12 6 +0 0.45 0.33 0.105 0.3715 0.1865 0.0785 0.0975 7 +0 0.45 0.33 0.1 0.411 0.1945 0.1 0.098 6 +0 0.45 0.33 0.11 0.3685 0.16 0.0885 0.102 6 +0 0.46 0.35 0.115 0.4155 0.18 0.098 0.1175 7 +1 0.47 0.36 0.105 0.544 0.27 0.1395 0.129 7 +0 0.47 0.38 0.125 0.4845 0.211 0.1075 0.142 6 +0 0.475 0.35 0.11 0.4565 0.206 0.099 0.13 6 +0 0.475 0.35 0.1 0.4545 0.2165 0.111 0.115 7 +0 0.48 0.38 0.125 0.6245 0.3395 0.1085 0.1665 8 +1 0.49 0.465 0.125 0.5225 0.235 0.13 0.141 7 +0 0.5 0.375 0.14 0.5495 0.248 0.112 0.1585 7 +0 0.5 0.375 0.12 0.542 0.215 0.116 0.17 9 +0 0.5 0.38 0.125 0.519 0.2485 0.1135 0.134 8 +1 0.5 0.39 0.125 0.5215 0.2485 0.117 0.131 6 +-1 0.505 0.39 0.125 0.5445 0.246 0.15 0.1405 7 +0 0.51 0.405 0.125 0.6795 0.3465 0.1395 0.182 8 +-1 0.51 0.4 0.125 0.545 0.261 0.115 0.1385 6 +0 0.51 0.4 0.125 0.5575 0.2615 0.1195 0.1525 9 +0 0.51 0.38 0.115 0.5155 0.215 0.1135 0.166 8 +0 0.515 0.385 0.125 0.6115 0.3175 0.1265 0.15 8 +1 0.52 0.4 0.145 0.7765 0.3525 0.1845 0.185 9 +0 0.52 0.38 0.135 0.5395 0.2295 0.133 0.157 8 +0 0.52 0.38 0.125 0.5545 0.288 0.1295 0.167 8 +-1 0.52 0.46 0.15 1.019 0.523 0.1985 0.254 7 +0 0.525 0.4 0.13 0.6455 0.325 0.1245 0.17 8 +0 0.525 0.4 0.14 0.601 0.2625 0.1285 0.1835 9 +1 0.525 0.405 0.12 0.7555 0.3755 0.1555 0.201 9 +0 0.525 0.395 0.12 0.608 0.297 0.1395 0.1405 8 +0 0.53 0.4 0.125 0.617 0.279 0.127 0.19 8 +0 0.535 0.39 0.125 0.599 0.2595 0.149 0.169 9 +0 0.54 0.42 0.14 0.6665 0.3125 0.138 0.1895 10 +1 0.545 0.39 0.135 0.7835 0.4225 0.1815 0.156 7 +1 0.545 0.41 0.12 0.793 0.434 0.1405 0.19 9 +1 0.545 0.415 0.14 0.82 0.4615 0.127 0.218 9 +-1 0.55 0.415 0.135 0.8145 0.427 0.1855 0.175 8 +-1 0.55 0.43 0.15 0.84 0.395 0.195 0.223 8 +1 0.55 0.425 0.15 0.8315 0.411 0.1765 0.2165 10 +1 0.56 0.43 0.145 0.8995 0.464 0.1775 0.234 9 +1 0.56 0.445 0.16 0.8965 0.42 0.2175 0.2215 8 +-1 0.56 0.44 0.155 0.6405 0.336 0.1765 0.245 8 +1 0.56 0.415 0.145 0.852 0.43 0.1885 0.205 8 +1 0.565 0.455 0.15 0.9595 0.4565 0.2395 0.23 9 +1 0.565 0.435 0.15 0.99 0.5795 0.1825 0.206 8 +-1 0.565 0.45 0.175 1.0095 0.447 0.2375 0.2645 9 +1 0.57 0.46 0.15 1.0375 0.5415 0.2035 0.25 9 +-1 0.57 0.445 0.145 0.8775 0.412 0.217 0.22 8 +0 0.57 0.44 0.15 0.755 0.3425 0.16 0.224 8 +-1 0.575 0.46 0.145 0.9945 0.466 0.229 0.265 7 +-1 0.575 0.45 0.16 1.068 0.556 0.214 0.2575 10 +1 0.575 0.435 0.14 0.8455 0.401 0.191 0.222 9 +-1 0.575 0.47 0.165 0.869 0.435 0.197 0.238 9 +1 0.575 0.455 0.135 0.907 0.4245 0.197 0.26 9 +0 0.575 0.435 0.13 0.805 0.3155 0.2155 0.245 10 +1 0.575 0.445 0.17 1.0225 0.549 0.2175 0.228 9 +1 0.575 0.445 0.145 0.847 0.415 0.1945 0.22 9 +1 0.58 0.455 0.15 1.114 0.4765 0.2155 0.265 8 +1 0.58 0.455 0.195 1.859 0.945 0.426 0.441 9 +1 0.58 0.445 0.135 0.814 0.3775 0.1915 0.22 9 +1 0.58 0.45 0.14 0.9615 0.486 0.1815 0.253 9 +1 0.58 0.45 0.145 1.0025 0.547 0.1975 0.2295 8 +-1 0.58 0.45 0.155 0.93 0.385 0.246 0.265 9 +1 0.585 0.46 0.145 0.9335 0.478 0.1825 0.235 9 +1 0.585 0.465 0.16 0.9555 0.4595 0.236 0.265 7 +1 0.59 0.47 0.15 0.9955 0.481 0.232 0.24 8 +-1 0.6 0.475 0.16 1.0265 0.485 0.2495 0.2565 9 +1 0.6 0.455 0.17 1.1915 0.696 0.2395 0.24 8 +-1 0.6 0.465 0.15 1.1025 0.5455 0.262 0.25 8 +1 0.6 0.465 0.155 1.0165 0.512 0.2465 0.225 10 +-1 0.605 0.47 0.165 1.1775 0.611 0.2275 0.292 9 +1 0.605 0.475 0.14 1.1175 0.555 0.257 0.274 9 +1 0.605 0.48 0.17 1.1835 0.582 0.2365 0.317 10 +-1 0.605 0.475 0.165 1.056 0.433 0.2195 0.357 9 +1 0.61 0.485 0.16 1.0145 0.5315 0.212 0.2415 8 +1 0.61 0.485 0.145 1.3305 0.783 0.2255 0.2865 9 +1 0.61 0.47 0.165 1.052 0.498 0.242 0.267 9 +1 0.615 0.46 0.17 1.0565 0.4815 0.272 0.27 10 +-1 0.615 0.465 0.15 0.923 0.4615 0.1825 0.2415 9 +-1 0.615 0.475 0.155 1.027 0.447 0.25 0.285 9 +1 0.62 0.47 0.135 1.0195 0.5315 0.2005 0.2475 8 +1 0.62 0.45 0.2 0.858 0.4285 0.1525 0.2405 8 +-1 0.62 0.48 0.16 1.1125 0.5635 0.2445 0.281 8 +-1 0.625 0.485 0.175 1.3745 0.7335 0.2715 0.332 9 +1 0.625 0.48 0.185 1.2065 0.587 0.29 0.286 8 +1 0.63 0.47 0.155 1.1325 0.589 0.211 0.287 8 +1 0.63 0.5 0.175 1.2645 0.5635 0.3065 0.3425 10 +-1 0.635 0.495 0.015 1.1565 0.5115 0.308 0.2885 9 +1 0.64 0.515 0.165 1.369 0.632 0.3415 0.358 10 +1 0.645 0.53 0.195 1.39 0.6465 0.2945 0.3735 10 +-1 0.645 0.48 0.17 1.1345 0.528 0.254 0.305 10 +-1 0.65 0.5 0.19 1.464 0.6415 0.339 0.4245 9 +1 0.65 0.5 0.155 1.202 0.565 0.3135 0.294 11 +1 0.655 0.515 0.16 1.31 0.553 0.369 0.345 11 +-1 0.655 0.51 0.175 1.415 0.5885 0.3725 0.364 10 +-1 0.66 0.53 0.185 1.346 0.546 0.2705 0.476 11 +1 0.665 0.525 0.16 1.363 0.629 0.279 0.34 8 +0 0.665 0.5 0.17 1.2975 0.6035 0.291 0.3595 9 +-1 0.67 0.505 0.205 1.3645 0.6075 0.3025 0.353 9 +-1 0.685 0.54 0.215 1.7025 0.664 0.3655 0.4735 14 +1 0.685 0.52 0.165 1.519 0.699 0.3685 0.4 10 +-1 0.69 0.54 0.155 1.454 0.624 0.3105 0.39 9 +1 0.69 0.53 0.21 1.583 0.7355 0.405 0.3865 12 +-1 0.69 0.53 0.17 1.5535 0.7945 0.3485 0.3695 9 +1 0.695 0.56 0.185 1.74 0.885 0.3715 0.4375 10 +1 0.7 0.565 0.18 1.751 0.895 0.3355 0.446 9 +1 0.7 0.575 0.19 2.273 1.095 0.418 0.638 12 +-1 0.7 0.525 0.19 1.6465 0.8545 0.307 0.3995 9 +-1 0.705 0.55 0.17 1.219 0.6395 0.236 0.301 9 +-1 0.71 0.56 0.18 1.652 0.735 0.381 0.4525 11 +1 0.715 0.55 0.19 2.0045 1.0465 0.407 0.5075 12 +1 0.715 0.535 0.19 1.6755 0.889 0.313 0.42 10 +-1 0.72 0.58 0.195 2.103 1.0265 0.48 0.5375 10 +-1 0.72 0.55 0.2 1.9965 0.9035 0.469 0.5215 10 +1 0.72 0.565 0.145 1.187 0.691 0.1945 0.2685 8 +1 0.725 0.505 0.185 1.978 1.026 0.4255 0.4505 12 +-1 0.73 0.575 0.185 1.8795 0.931 0.38 0.4825 12 +1 0.735 0.585 0.185 2.124 0.952 0.55 0.5 11 +1 0.745 0.565 0.215 1.931 0.896 0.4585 0.5 11 +-1 0.75 0.57 0.21 2.236 1.109 0.5195 0.545 11 +-1 0.755 0.625 0.21 2.505 1.1965 0.513 0.6785 11 +1 0.755 0.58 0.205 2.0065 0.8295 0.4015 0.595 10 +-1 0.78 0.63 0.215 2.657 1.488 0.4985 0.586 11 +0 0.185 0.375 0.12 0.4645 0.196 0.1045 0.15 6 +0 0.245 0.205 0.06 0.0765 0.034 0.014 0.0215 4 +0 0.25 0.185 0.065 0.0685 0.0295 0.014 0.0225 5 +0 0.25 0.19 0.065 0.0835 0.039 0.015 0.025 5 +0 0.275 0.195 0.09 0.1125 0.0545 0.0295 0.0355 6 +0 0.305 0.215 0.065 0.1075 0.044 0.0205 0.038 5 +0 0.31 0.225 0.07 0.1055 0.435 0.015 0.04 5 +0 0.315 0.23 0.08 0.1375 0.0545 0.031 0.0445 5 +0 0.315 0.23 0.07 0.1145 0.046 0.0235 0.0385 5 +0 0.325 0.225 0.075 0.139 0.0565 0.032 0.09 6 +0 0.33 0.25 0.095 0.2085 0.102 0.0395 0.052 7 +0 0.33 0.205 0.095 0.1595 0.077 0.032 0.0435 5 +0 0.335 0.245 0.09 0.2015 0.096 0.0405 0.048 7 +0 0.34 0.25 0.09 0.179 0.0775 0.033 0.055 6 +0 0.345 0.255 0.095 0.1945 0.0925 0.037 0.055 6 +0 0.345 0.255 0.085 0.2005 0.105 0.037 0.05 5 +0 0.35 0.27 0.075 0.215 0.1 0.036 0.065 6 +0 0.35 0.255 0.09 0.1785 0.0855 0.0305 0.0525 8 +0 0.36 0.27 0.085 0.196 0.0875 0.035 0.064 4 +0 0.365 0.27 0.085 0.1875 0.081 0.042 0.058 6 +0 0.365 0.27 0.085 0.196 0.0825 0.0375 0.06 7 +0 0.365 0.265 0.085 0.213 0.0945 0.049 0.06 7 +0 0.37 0.29 0.09 0.2445 0.089 0.0655 0.075 7 +0 0.37 0.28 0.085 0.217 0.1095 0.035 0.062 6 +0 0.375 0.29 0.095 0.213 0.096 0.041 0.061 5 +0 0.375 0.29 0.085 0.2385 0.118 0.045 0.0695 7 +0 0.375 0.275 0.09 0.218 0.093 0.0405 0.0755 6 +0 0.375 0.275 0.095 0.2465 0.11 0.0415 0.0775 6 +0 0.375 0.28 0.08 0.2025 0.0825 0.048 0.065 8 +0 0.375 0.27 0.085 0.218 0.0945 0.039 0.07 7 +0 0.38 0.275 0.11 0.256 0.11 0.0535 0.0755 6 +0 0.38 0.27 0.08 0.2105 0.0865 0.042 0.07 8 +0 0.385 0.29 0.09 0.2615 0.111 0.0595 0.0745 9 +0 0.385 0.28 0.085 0.2175 0.097 0.038 0.067 8 +0 0.385 0.3 0.095 0.302 0.152 0.0615 0.0735 7 +0 0.385 0.28 0.09 0.228 0.1025 0.042 0.0655 5 +0 0.39 0.3 0.095 0.3265 0.1665 0.0575 0.089 7 +0 0.395 0.305 0.105 0.284 0.1135 0.0595 0.0945 8 +0 0.395 0.295 0.095 0.2725 0.115 0.0625 0.085 8 +0 0.395 0.27 0.1 0.2985 0.1445 0.061 0.082 5 +0 0.4 0.29 0.1 0.2675 0.1205 0.0605 0.0765 5 +0 0.405 0.285 0.09 0.2645 0.1265 0.0505 0.075 6 +0 0.41 0.335 0.11 0.33 0.157 0.0705 0.17 7 +0 0.42 0.305 0.09 0.328 0.168 0.0615 0.082 6 +0 0.425 0.325 0.11 0.3335 0.173 0.045 0.1 7 +0 0.425 0.32 0.1 0.3055 0.126 0.06 0.106 7 +0 0.425 0.31 0.09 0.301 0.1385 0.065 0.08 7 +0 0.43 0.34 0 0.428 0.2065 0.086 0.115 8 +0 0.43 0.315 0.095 0.378 0.175 0.08 0.1045 8 +0 0.435 0.315 0.11 0.3685 0.1615 0.0715 0.12 7 +0 0.44 0.34 0.12 0.438 0.2115 0.083 0.12 9 +0 0.45 0.33 0.105 0.448 0.208 0.089 0.12 9 +0 0.455 0.345 0.105 0.4005 0.164 0.0755 0.126 8 +-1 0.455 0.365 0.115 0.4305 0.184 0.108 0.1245 8 +0 0.455 0.33 0.1 0.372 0.358 0.0775 0.11 8 +0 0.46 0.36 0.105 0.466 0.2225 0.099 0.11 7 +0 0.46 0.35 0.105 0.3705 0.1575 0.077 0.114 9 +-1 0.46 0.365 0.125 0.4785 0.206 0.1045 0.141 8 +0 0.465 0.34 0.11 0.346 0.1425 0.073 0.113 11 +0 0.47 0.365 0.1 0.411 0.175 0.0855 0.135 8 +0 0.47 0.355 0.18 0.48 0.2055 0.105 0.1505 8 +0 0.47 0.355 0.12 0.393 0.167 0.0885 0.115 8 +0 0.475 0.355 0.1 0.5035 0.2535 0.091 0.14 8 +0 0.475 0.38 0.12 0.441 0.1785 0.0885 0.1505 8 +0 0.475 0.36 0.11 0.492 0.211 0.11 0.15 8 +0 0.48 0.37 0.125 0.5435 0.244 0.101 0.165 9 +0 0.48 0.355 0.115 0.4725 0.2065 0.112 0.132 8 +0 0.48 0.365 0.1 0.461 0.2205 0.0835 0.135 8 +0 0.495 0.355 0.12 0.4965 0.214 0.1045 0.1495 8 +0 0.495 0.38 0.13 0.5125 0.2185 0.116 0.16 7 +1 0.495 0.395 0.12 0.553 0.224 0.1375 0.167 8 +0 0.5 0.38 0.135 0.594 0.2945 0.104 0.1565 9 +1 0.5 0.42 0.135 0.6765 0.302 0.1415 0.2065 9 +0 0.5 0.375 0.145 0.5795 0.239 0.1375 0.185 9 +0 0.5 0.41 0.14 0.6615 0.2585 0.1625 0.196 9 +0 0.5 0.375 0.125 0.5695 0.259 0.124 0.157 7 +0 0.5 0.395 0.14 0.6215 0.2925 0.1205 0.195 9 +0 0.505 0.405 0.13 0.6015 0.3015 0.11 0.18 8 +0 0.505 0.38 0.12 0.594 0.2595 0.1435 0.18 7 +0 0.505 0.395 0.105 0.551 0.248 0.103 0.171 8 +0 0.515 0.38 0.12 0.625 0.3265 0.1295 0.16 7 +0 0.515 0.42 0.135 0.711 0.337 0.144 0.205 13 +0 0.515 0.4 0.135 0.6965 0.32 0.1255 0.175 9 +0 0.52 0.4 0.13 0.5825 0.233 0.1365 0.18 10 +0 0.52 0.395 0.125 0.663 0.3005 0.131 0.1905 9 +0 0.525 0.4 0.125 0.6965 0.369 0.1385 0.164 9 +1 0.525 0.42 0.155 0.842 0.428 0.1415 0.2045 9 +0 0.53 0.415 0.13 0.694 0.3905 0.111 0.167 9 +0 0.53 0.42 0.155 0.81 0.4725 0.111 0.192 10 +0 0.53 0.415 0.11 0.5745 0.2525 0.1235 0.189 9 +0 0.53 0.425 0.13 0.7675 0.419 0.1205 0.21 9 +0 0.535 0.4 0.135 0.6025 0.2895 0.121 0.154 9 +0 0.535 0.415 0.15 0.5765 0.3595 0.135 0.225 8 +-1 0.535 0.41 0.13 0.7145 0.335 0.144 0.2075 9 +1 0.535 0.435 0.15 0.717 0.3475 0.1445 0.194 9 +-1 0.54 0.42 0.145 0.8655 0.4315 0.163 0.2175 10 +0 0.54 0.42 0.14 0.7265 0.3205 0.1445 0.229 9 +0 0.545 0.435 0.135 0.7715 0.372 0.148 0.227 8 +-1 0.545 0.445 0.15 0.8 0.3535 0.163 0.207 9 +0 0.545 0.43 0.15 0.7285 0.302 0.1315 0.2545 10 +0 0.545 0.405 0.135 0.5945 0.27 0.1185 0.185 8 +0 0.55 0.43 0.145 0.7895 0.3745 0.171 0.223 11 +-1 0.55 0.405 0.125 0.651 0.2965 0.137 0.2 9 +1 0.55 0.43 0.15 0.8745 0.413 0.1905 0.248 9 +0 0.55 0.435 0.14 0.7535 0.3285 0.1555 0.2325 10 +0 0.55 0.425 0.135 0.7305 0.3325 0.1545 0.215 9 +1 0.555 0.44 0.14 0.8705 0.407 0.156 0.255 9 +0 0.555 0.43 0.155 0.7395 0.3135 0.1435 0.28 10 +0 0.555 0.43 0.14 0.7665 0.341 0.165 0.23 9 +0 0.555 0.425 0.145 0.7905 0.3485 0.1765 0.225 9 +0 0.56 0.425 0.135 0.8205 0.3715 0.185 0.236 9 +0 0.56 0.425 0.145 0.688 0.3095 0.1305 0.2165 9 +-1 0.56 0.445 0.155 1.224 0.5565 0.3225 0.2695 10 +0 0.56 0.455 0.145 0.974 0.547 0.1615 0.235 9 +0 0.565 0.44 0.175 0.8735 0.414 0.21 0.21 11 +-1 0.565 0.45 0.145 0.8495 0.4215 0.1685 0.225 8 +1 0.565 0.445 0.15 0.796 0.3635 0.184 0.219 8 +1 0.565 0.39 0.125 0.744 0.352 0.13 0.1685 11 +0 0.57 0.45 0.145 0.751 0.2825 0.2195 0.2215 10 +0 0.57 0.45 0.135 0.794 0.3815 0.1415 0.245 8 +-1 0.57 0.46 0.135 0.9795 0.397 0.2525 0.2655 9 +1 0.57 0.435 0.17 0.873 0.382 0.183 0.2705 10 +0 0.57 0.44 0.13 0.7665 0.347 0.1785 0.202 10 +1 0.57 0.435 0.125 0.8965 0.383 0.1835 0.275 9 +-1 0.575 0.42 0.135 0.857 0.461 0.147 0.2125 10 +-1 0.575 0.48 0.165 1.078 0.511 0.2095 0.306 9 +1 0.575 0.46 0.155 0.892 0.4415 0.176 0.22 10 +1 0.58 0.46 0.155 1.4395 0.6715 0.273 0.2955 10 +1 0.58 0.455 0.135 0.7955 0.405 0.167 0.204 10 +-1 0.58 0.445 0.15 0.858 0.4 0.156 0.253 8 +1 0.585 0.465 0.155 0.9145 0.4555 0.1965 0.235 9 +1 0.585 0.49 0.185 1.171 0.522 0.2535 0.335 10 +0 0.585 0.475 0.16 1.0505 0.48 0.234 0.285 10 +1 0.585 0.46 0.165 1.1135 0.5825 0.2345 0.274 10 +1 0.585 0.47 0.165 1.409 0.8 0.229 0.295 10 +1 0.585 0.475 0.15 1.065 0.5315 0.199 0.2885 10 +1 0.585 0.45 0.18 0.7995 0.336 0.1855 0.237 8 +0 0.59 0.445 0.135 0.7715 0.328 0.1745 0.23 9 +1 0.59 0.47 0.18 1.187 0.5985 0.227 0.31 9 +1 0.59 0.455 0.155 0.8855 0.388 0.188 0.275 10 +-1 0.595 0.465 0.15 0.98 0.4115 0.196 0.2255 10 +-1 0.595 0.465 0.155 1.026 0.4645 0.112 0.305 12 +1 0.6 0.475 0.17 1.1315 0.508 0.272 0.309 10 +1 0.6 0.48 0.155 1.014 0.451 0.1885 0.325 11 +0 0.6 0.475 0.15 1.12 0.565 0.2465 0.27 10 +-1 0.6 0.465 0.155 1.04 0.4755 0.25 0.28 11 +-1 0.6 0.455 0.145 0.8895 0.419 0.1715 0.269 10 +1 0.6 0.46 0.155 0.9595 0.4455 0.189 0.295 11 +0 0.605 0.485 0.15 1.238 0.6315 0.226 0.33 11 +1 0.605 0.49 0.14 0.9755 0.419 0.206 0.315 10 +0 0.605 0.435 0.13 0.9025 0.432 0.174 0.26 11 +-1 0.605 0.475 0.175 1.076 0.463 0.2195 0.335 9 +-1 0.605 0.47 0.16 1.0835 0.5405 0.2215 0.275 12 +1 0.61 0.45 0.15 0.871 0.407 0.1835 0.25 10 +1 0.61 0.48 0.165 1.244 0.6345 0.257 0.305 12 +1 0.61 0.475 0.17 1.0265 0.435 0.2335 0.3035 10 +0 0.61 0.465 0.15 0.9605 0.4495 0.1725 0.286 9 +1 0.61 0.48 0.17 1.137 0.4565 0.29 0.347 10 +1 0.61 0.46 0.16 1 0.494 0.197 0.275 10 +-1 0.615 0.475 0.155 1.004 0.4475 0.193 0.2895 10 +1 0.615 0.47 0.165 1.128 0.4465 0.2195 0.34 10 +1 0.615 0.5 0.17 1.054 0.4845 0.228 0.295 10 +-1 0.615 0.475 0.165 1.023 0.4905 0.1955 0.3035 12 +1 0.615 0.475 0.17 1.129 0.4795 0.302 0.3 10 +1 0.615 0.48 0.175 1.118 0.446 0.3195 0.3 9 +-1 0.615 0.475 0.155 1.115 0.484 0.2115 0.355 10 +1 0.62 0.51 0.175 1.2815 0.5715 0.2385 0.39 10 +1 0.62 0.495 0.18 1.2555 0.5765 0.254 0.355 12 +-1 0.62 0.5 0.15 1.293 0.596 0.3135 0.354 10 +-1 0.62 0.475 0.16 1.1295 0.463 0.2685 0.33 10 +1 0.625 0.455 0.17 1.082 0.4955 0.2345 0.315 9 +-1 0.625 0.505 0.175 1.15 0.5475 0.256 0.3045 11 +-1 0.625 0.515 0.16 1.264 0.5715 0.326 0.321 9 +-1 0.625 0.48 0.155 1.2035 0.5865 0.239 0.3185 12 +-1 0.63 0.485 0.17 1.3205 0.5945 0.345 0.345 9 +0 0.63 0.505 0.18 1.272 0.6025 0.295 0.315 11 +1 0.63 0.485 0.145 1.062 0.5065 0.1785 0.3365 12 +0 0.63 0.475 0.145 1.0605 0.5165 0.2195 0.28 10 +1 0.63 0.495 0.16 1.093 0.497 0.221 0.315 12 +1 0.635 0.49 0.16 1.101 0.534 0.1865 0.3455 10 +-1 0.635 0.5 0.165 1.4595 0.705 0.2645 0.39 9 +-1 0.635 0.495 0.175 1.211 0.707 0.2725 0.323 9 +1 0.635 0.475 0.17 1.1935 0.5205 0.2695 0.3665 10 +1 0.635 0.51 0.155 0.986 0.405 0.2255 0.31 10 +1 0.64 0.565 0.23 1.521 0.644 0.372 0.406 15 +1 0.64 0.525 0.18 1.3135 0.4865 0.2995 0.4075 10 +1 0.645 0.51 0.16 1.1835 0.556 0.2385 0.345 11 +1 0.645 0.5 0.195 1.401 0.6165 0.3515 0.3725 10 +1 0.645 0.525 0.16 1.5075 0.7455 0.245 0.4325 11 +-1 0.65 0.505 0.165 1.16 0.4785 0.274 0.349 11 +-1 0.65 0.59 0.22 1.662 0.77 0.378 0.435 11 +1 0.65 0.525 0.175 1.5365 0.6865 0.3585 0.405 11 +1 0.65 0.51 0.19 1.542 0.7155 0.3735 0.375 9 +-1 0.65 0.51 0.17 1.567 0.7245 0.349 0.391 10 +-1 0.655 0.525 0.19 1.3595 0.564 0.3215 0.3985 10 +1 0.655 0.535 0.205 1.6445 0.7305 0.3595 0.46 13 +-1 0.655 0.52 0.19 1.4545 0.6 0.3865 0.383 10 +1 0.655 0.49 0.175 1.3585 0.6395 0.294 0.365 10 +-1 0.66 0.495 0.21 1.548 0.724 0.3525 0.3925 10 +-1 0.66 0.515 0.17 1.337 0.615 0.3125 0.3575 10 +-1 0.665 0.53 0.18 1.491 0.6345 0.342 0.435 10 +-1 0.67 0.53 0.225 1.5615 0.63 0.487 0.3725 11 +-1 0.67 0.505 0.175 1.0145 0.4375 0.271 0.3745 10 +1 0.675 0.545 0.185 1.7375 0.876 0.3135 0.469 13 +1 0.685 0.545 0.205 1.7925 0.8145 0.416 0.461 9 +-1 0.695 0.565 0.19 1.7635 0.7465 0.399 0.4975 11 +-1 0.7 0.545 0.13 1.556 0.6725 0.374 0.195 12 +1 0.705 0.565 0.515 2.21 1.1075 0.4865 0.512 10 +1 0.705 0.555 0.215 2.141 1.0465 0.383 0.528 11 +-1 0.705 0.57 0.18 1.5345 0.96 0.4195 0.43 12 +-1 0.71 0.55 0.17 1.614 0.743 0.345 0.45 11 +-1 0.72 0.575 0.17 1.9335 0.913 0.389 0.51 13 +1 0.72 0.575 0.215 2.173 0.9515 0.564 0.5365 12 +-1 0.725 0.6 0.2 1.737 0.697 0.3585 0.595 11 +-1 0.73 0.58 0.19 1.7375 0.6785 0.4345 0.52 11 +-1 0.735 0.565 0.205 2.1275 0.949 0.46 0.565 12 +-1 0.745 0.57 0.215 2.25 1.1565 0.446 0.558 9 +-1 0.75 0.61 0.235 2.5085 1.232 0.519 0.612 14 +-1 0.815 0.65 0.25 2.255 0.8905 0.42 0.7975 14 +0 0.14 0.105 0.035 0.014 0.0055 0.0025 0.004 3 +0 0.23 0.165 0.06 0.0515 0.019 0.0145 0.036 4 +0 0.365 0.265 0.135 0.2215 0.105 0.047 0.0605 7 +0 0.365 0.255 0.08 0.1985 0.0785 0.0345 0.053 5 +0 0.37 0.27 0.095 0.232 0.1325 0.041 0.0615 6 +0 0.375 0.28 0.085 0.3155 0.187 0.046 0.067 7 +0 0.385 0.3 0.09 0.247 0.1225 0.044 0.0675 5 +0 0.395 0.295 0.09 0.3025 0.143 0.0665 0.0765 5 +0 0.4 0.29 0.11 0.329 0.188 0.0455 0.0825 6 +0 0.4 0.3 0.09 0.2815 0.1185 0.061 0.08 7 +0 0.405 0.31 0.095 0.3425 0.1785 0.064 0.0855 8 +0 0.405 0.29 0.09 0.2825 0.112 0.075 0.0815 7 +0 0.405 0.3 0.105 0.304 0.1455 0.061 0.0805 6 +0 0.41 0.32 0.095 0.2905 0.141 0.063 0.073 5 +1 0.415 0.315 0.115 0.3895 0.2015 0.065 0.103 9 +0 0.425 0.34 0.105 0.389 0.2015 0.0905 0.088 6 +0 0.43 0.34 0.105 0.4405 0.2385 0.0745 0.1075 6 +0 0.44 0.34 0.105 0.369 0.164 0.08 0.1015 5 +1 0.44 0.32 0.12 0.4565 0.2435 0.092 0.1025 8 +0 0.44 0.365 0.11 0.4465 0.213 0.089 0.1135 9 +1 0.45 0.335 0.125 0.4475 0.2165 0.126 0.11 6 +0 0.455 0.335 0.135 0.501 0.274 0.0995 0.1065 7 +0 0.46 0.355 0.11 0.436 0.1975 0.096 0.125 8 +0 0.47 0.345 0.14 0.4615 0.229 0.1105 0.116 9 +0 0.47 0.35 0.125 0.4315 0.19 0.1165 0.1175 6 +0 0.47 0.355 0.12 0.3685 0.126 0.0835 0.1365 6 +1 0.475 0.37 0.125 0.649 0.347 0.136 0.142 8 +0 0.475 0.365 0.115 0.459 0.2175 0.093 0.1165 7 +-1 0.475 0.365 0.115 0.566 0.281 0.117 0.1335 7 +0 0.48 0.36 0.125 0.542 0.2795 0.1025 0.147 7 +0 0.485 0.38 0.12 0.4725 0.2075 0.1075 0.147 6 +1 0.485 0.39 0.085 0.6435 0.2945 0.103 0.198 8 +1 0.485 0.37 0.13 0.526 0.2485 0.105 0.1555 6 +-1 0.495 0.38 0.12 0.573 0.2655 0.1285 0.144 7 +1 0.505 0.385 0.105 0.5525 0.239 0.1245 0.1555 9 +-1 0.505 0.38 0.135 0.6855 0.361 0.1565 0.161 9 +0 0.515 0.395 0.125 0.556 0.2695 0.096 0.17 8 +1 0.515 0.425 0.145 0.9365 0.497 0.181 0.2185 8 +0 0.515 0.4 0.125 0.5625 0.25 0.1245 0.17 7 +1 0.52 0.4 0.125 0.559 0.254 0.139 0.149 8 +1 0.525 0.4 0.14 0.7205 0.3685 0.145 0.1735 8 +0 0.53 0.43 0.13 0.7045 0.346 0.1415 0.189 9 +1 0.53 0.4 0.125 0.7575 0.398 0.151 0.175 8 +-1 0.545 0.41 0.14 0.7405 0.3565 0.1775 0.203 9 +-1 0.55 0.43 0.14 0.84 0.375 0.218 0.1945 8 +1 0.55 0.425 0.16 0.793 0.343 0.2035 0.215 9 +-1 0.56 0.43 0.15 0.8745 0.453 0.161 0.22 8 +-1 0.56 0.435 0.15 0.8715 0.4755 0.1835 0.1835 9 +1 0.57 0.445 0.15 0.9875 0.504 0.207 0.249 8 +1 0.575 0.465 0.15 1.08 0.595 0.2065 0.238 9 +1 0.575 0.46 0.165 0.9155 0.4005 0.2465 0.2385 8 +-1 0.58 0.46 0.175 1.165 0.65 0.2205 0.3055 9 +-1 0.58 0.435 0.14 0.953 0.475 0.2165 0.2095 9 +1 0.585 0.455 0.15 0.906 0.4095 0.23 0.2335 8 +1 0.59 0.44 0.15 0.8725 0.387 0.215 0.245 8 +-1 0.59 0.465 0.15 1.151 0.613 0.239 0.2515 9 +-1 0.59 0.46 0.145 0.9905 0.453 0.2205 0.275 8 +-1 0.595 0.455 0.16 1.04 0.452 0.2655 0.288 9 +1 0.6 0.455 0.155 0.945 0.4365 0.2085 0.25 8 +1 0.6 0.465 0.2 1.259 0.6405 0.1985 0.357 9 +-1 0.605 0.485 0.165 0.9515 0.4535 0.193 0.2765 11 +-1 0.605 0.485 0.16 1.201 0.417 0.2875 0.38 9 +-1 0.605 0.515 0.17 1.289 0.6 0.2945 0.3315 9 +-1 0.61 0.485 0.17 1.1005 0.5125 0.229 0.305 11 +0 0.615 0.475 0.13 0.8425 0.353 0.1915 0.251 8 +1 0.62 0.485 0.155 1.049 0.462 0.231 0.25 10 +-1 0.62 0.435 0.155 1.012 0.477 0.236 0.275 8 +1 0.62 0.48 0.165 1.0725 0.4815 0.235 0.312 9 +1 0.625 0.52 0.175 1.4105 0.691 0.322 0.3465 10 +1 0.625 0.47 0.18 1.136 0.451 0.3245 0.305 11 +1 0.63 0.47 0.145 1.1005 0.52 0.26 0.276 9 +-1 0.63 0.5 0.175 1.1105 0.467 0.268 0.329 10 +1 0.63 0.455 0.15 1.1315 0.481 0.2745 0.305 9 +1 0.63 0.48 0.15 1.271 0.6605 0.2425 0.31 11 +-1 0.63 0.49 0.225 1.336 0.6805 0.259 0.3245 10 +-1 0.635 0.505 0.145 1.1345 0.505 0.2655 0.315 10 +1 0.635 0.51 0.185 1.308 0.544 0.318 0.377 8 +-1 0.64 0.515 0.205 1.5335 0.6635 0.3345 0.4025 9 +-1 0.645 0.515 0.175 1.546 0.7035 0.365 0.415 10 +1 0.645 0.51 0.155 1.539 0.6405 0.3585 0.43 11 +-1 0.645 0.505 0.165 1.318 0.55 0.3015 0.335 11 +-1 0.65 0.545 0.175 1.5245 0.59 0.326 0.495 10 +1 0.65 0.515 0.175 1.466 0.677 0.3045 0.4 10 +-1 0.65 0.5 0.16 1.3825 0.702 0.304 0.3195 9 +1 0.65 0.485 0.14 1.175 0.475 0.2435 0.215 8 +-1 0.655 0.54 0.215 1.5555 0.695 0.296 0.444 11 +1 0.655 0.51 0.215 1.7835 0.8885 0.4095 0.4195 11 +1 0.66 0.505 0.165 1.374 0.589 0.351 0.345 10 +-1 0.665 0.515 0.18 1.389 0.5945 0.324 0.395 10 +1 0.67 0.545 0.2 1.7025 0.833 0.374 0.41 11 +1 0.67 0.51 0.175 1.5265 0.651 0.4475 0.345 10 +1 0.67 0.5 0.19 1.519 0.616 0.388 0.415 10 +-1 0.68 0.5 0.185 1.741 0.7665 0.3255 0.4685 12 +1 0.68 0.515 0.17 1.6115 0.8415 0.306 0.395 11 +1 0.69 0.525 0.2 1.7825 0.9165 0.3325 0.461 12 +-1 0.7 0.55 0.17 1.684 0.7535 0.3265 0.32 11 +1 0.7 0.555 0.2 1.858 0.73 0.3665 0.595 11 +1 0.705 0.56 0.165 1.675 0.797 0.4095 0.388 10 +1 0.72 0.565 0.2 2.1055 1.017 0.363 0.494 12 +1 0.725 0.575 0.24 2.21 1.351 0.413 0.5015 13 +1 0.74 0.57 0.18 1.8725 0.9115 0.427 0.446 10 +1 0.75 0.55 0.18 1.893 0.942 0.397 0.445 11 +0 0.21 0.17 0.045 0.0475 0.019 0.011 0.013 5 +0 0.285 0.21 0.055 0.101 0.0415 0.017 0.0335 5 +0 0.295 0.215 0.07 0.121 0.047 0.0155 0.0405 6 +0 0.3 0.23 0.085 0.117 0.05 0.0175 0.0415 6 +0 0.305 0.225 0.09 0.1465 0.063 0.034 0.0415 6 +0 0.335 0.255 0.08 0.168 0.079 0.0355 0.05 5 +0 0.35 0.26 0.075 0.18 0.09 0.0245 0.055 5 +0 0.355 0.27 0.075 0.1775 0.079 0.0315 0.054 6 +0 0.355 0.26 0.09 0.1985 0.0715 0.0495 0.058 7 +0 0.36 0.27 0.095 0.2 0.073 0.056 0.061 8 +0 0.36 0.275 0.075 0.2205 0.0985 0.044 0.066 7 +0 0.36 0.265 0.075 0.1845 0.083 0.0365 0.055 7 +0 0.365 0.27 0.085 0.2225 0.0935 0.0525 0.066 7 +0 0.37 0.27 0.095 0.2175 0.097 0.046 0.065 6 +0 0.375 0.28 0.08 0.2165 0.0935 0.0925 0.07 7 +0 0.38 0.285 0.095 0.243 0.0895 0.0665 0.075 7 +0 0.38 0.29 0.1 0.237 0.108 0.0395 0.082 6 +0 0.385 0.29 0.09 0.2365 0.1 0.0505 0.076 8 +0 0.385 0.28 0.095 0.257 0.119 0.059 0.07 7 +0 0.385 0.3 0.09 0.308 0.1525 0.056 0.0835 8 +0 0.39 0.3 0.09 0.252 0.1065 0.053 0.08 7 +0 0.39 0.285 0.1 0.281 0.1275 0.062 0.077 7 +0 0.39 0.29 0.1 0.2225 0.095 0.0465 0.073 7 +0 0.41 0.3 0.09 0.304 0.129 0.071 0.0955 8 +0 0.41 0.3 0.09 0.28 0.141 0.0575 0.075 8 +0 0.415 0.325 0.1 0.313 0.139 0.0625 0.0965 7 +0 0.425 0.325 0.11 0.317 0.135 0.048 0.09 8 +0 0.425 0.315 0.08 0.303 0.131 0.0585 0.095 7 +0 0.435 0.335 0.1 0.3295 0.129 0.07 0.11 7 +0 0.435 0.325 0.11 0.367 0.1595 0.08 0.105 6 +0 0.45 0.34 0.095 0.3245 0.1385 0.064 0.105 8 +0 0.45 0.335 0.11 0.4195 0.181 0.085 0.1345 7 +0 0.455 0.36 0.115 0.457 0.2085 0.0855 0.147 10 +0 0.46 0.35 0.11 0.4 0.176 0.083 0.1205 7 +0 0.46 0.355 0.11 0.4255 0.2015 0.081 0.13 7 +0 0.465 0.37 0.12 0.4365 0.188 0.0815 0.147 9 +0 0.465 0.345 0.11 0.393 0.1825 0.0735 0.12 8 +0 0.47 0.355 0.125 0.499 0.21 0.0985 0.155 8 +0 0.475 0.36 0.145 0.6325 0.2825 0.137 0.19 8 +1 0.475 0.36 0.1 0.4285 0.1965 0.099 0.112 7 +0 0.475 0.36 0.125 0.4905 0.205 0.1305 0.125 8 +0 0.48 0.37 0.125 0.474 0.179 0.1035 0.175 9 +0 0.48 0.37 0.12 0.536 0.251 0.114 0.15 8 +1 0.48 0.355 0.16 0.464 0.221 0.106 0.239 8 +0 0.485 0.375 0.13 0.6025 0.2935 0.1285 0.16 7 +0 0.49 0.375 0.115 0.4615 0.204 0.0945 0.143 8 +0 0.49 0.4 0.135 0.624 0.3035 0.1285 0.169 8 +0 0.495 0.37 0.125 0.4715 0.2075 0.091 0.15 8 +0 0.495 0.4 0.105 0.602 0.2505 0.1265 0.19 8 +0 0.5 0.4 0.12 0.616 0.261 0.143 0.1935 8 +0 0.5 0.39 0.12 0.5955 0.2455 0.147 0.173 8 +0 0.5 0.375 0.14 0.559 0.2375 0.135 0.169 9 +0 0.51 0.395 0.13 0.6025 0.281 0.143 0.162 7 +-1 0.515 0.375 0.11 0.6065 0.3005 0.131 0.15 6 +0 0.515 0.36 0.125 0.4725 0.1815 0.125 0.138 9 +0 0.515 0.35 0.105 0.4745 0.213 0.123 0.1275 10 +0 0.515 0.395 0.125 0.6635 0.32 0.14 0.17 8 +0 0.515 0.39 0.125 0.5705 0.238 0.1265 0.185 8 +0 0.52 0.41 0.145 0.646 0.2965 0.1595 0.165 9 +0 0.52 0.39 0.13 0.5545 0.2355 0.1095 0.1895 7 +1 0.525 0.415 0.145 0.845 0.3525 0.1635 0.2875 8 +0 0.525 0.39 0.12 0.664 0.3115 0.147 0.178 9 +0 0.525 0.38 0.135 0.615 0.261 0.159 0.175 8 +0 0.525 0.4 0.14 0.654 0.305 0.16 0.169 7 +1 0.525 0.4 0.155 0.707 0.282 0.1605 0.225 9 +0 0.53 0.42 0.12 0.5965 0.2555 0.141 0.177 7 +0 0.53 0.43 0.135 0.6255 0.245 0.1455 0.2135 10 +0 0.53 0.4 0.145 0.555 0.1935 0.1305 0.195 9 +0 0.53 0.42 0.13 0.8365 0.3745 0.167 0.249 11 +0 0.535 0.4 0.13 0.657 0.2835 0.162 0.175 7 +0 0.54 0.43 0.17 0.836 0.3725 0.1815 0.24 9 +0 0.54 0.425 0.14 0.742 0.32 0.1395 0.25 9 +0 0.54 0.43 0.14 0.8195 0.3935 0.1725 0.2295 9 +1 0.54 0.455 0.14 0.972 0.419 0.255 0.269 10 +0 0.54 0.42 0.14 0.6275 0.2505 0.1175 0.235 9 +0 0.54 0.425 0.13 0.7205 0.2955 0.169 0.225 10 +0 0.54 0.425 0.135 0.686 0.3475 0.1545 0.213 8 +0 0.545 0.4 0.13 0.686 0.3285 0.1455 0.18 9 +0 0.545 0.375 0.12 0.543 0.2375 0.1155 0.1725 8 +0 0.545 0.42 0.125 0.717 0.358 0.112 0.22 8 +1 0.55 0.435 0.14 0.7625 0.327 0.1685 0.259 10 +0 0.55 0.425 0.15 0.639 0.269 0.1345 0.217 9 +0 0.55 0.42 0.135 0.816 0.3995 0.1485 0.23 12 +0 0.55 0.415 0.145 0.7815 0.373 0.16 0.2215 8 +0 0.55 0.425 0.15 0.7665 0.339 0.176 0.21 8 +0 0.555 0.395 0.13 0.5585 0.222 0.1245 0.17 9 +0 0.555 0.435 0.14 0.765 0.3945 0.15 0.206 8 +0 0.555 0.46 0.145 0.9005 0.3845 0.158 0.2765 11 +0 0.56 0.445 0.15 0.8225 0.3685 0.187 0.236 10 +0 0.56 0.44 0.13 0.7235 0.349 0.149 0.2 8 +1 0.56 0.425 0.135 0.849 0.3265 0.221 0.2645 10 +0 0.565 0.42 0.155 0.743 0.31 0.186 0.231 9 +-1 0.565 0.44 0.15 0.863 0.435 0.149 0.27 9 +1 0.565 0.44 0.125 0.802 0.3595 0.1825 0.215 9 +1 0.565 0.43 0.15 0.831 0.4245 0.1735 0.219 10 +-1 0.57 0.45 0.135 0.7805 0.3345 0.185 0.21 8 +1 0.57 0.45 0.14 0.795 0.3385 0.148 0.245 9 +0 0.57 0.435 0.17 0.848 0.4 0.166 0.25 9 +0 0.57 0.43 0.145 0.833 0.354 0.144 0.2815 10 +0 0.57 0.445 0.155 0.867 0.3705 0.1705 0.28 9 +0 0.57 0.445 0.145 0.7405 0.306 0.172 0.1825 12 +1 0.575 0.455 0.165 0.867 0.3765 0.1805 0.268 8 +0 0.575 0.425 0.135 0.7965 0.364 0.196 0.239 10 +-1 0.575 0.47 0.155 1.116 0.509 0.238 0.34 10 +0 0.575 0.45 0.125 0.78 0.3275 0.188 0.235 9 +1 0.575 0.47 0.185 0.985 0.3745 0.2175 0.355 10 +-1 0.575 0.465 0.195 0.9965 0.417 0.247 0.47 8 +0 0.575 0.445 0.17 0.8015 0.3475 0.1465 0.25 9 +0 0.575 0.45 0.135 0.807 0.3615 0.176 0.254 10 +-1 0.575 0.435 0.15 1.0305 0.4605 0.218 0.36 8 +1 0.575 0.445 0.16 0.839 0.4005 0.198 0.239 9 +1 0.575 0.44 0.16 0.9615 0.483 0.166 0.275 13 +-1 0.58 0.435 0.15 0.834 0.428 0.1515 0.23 8 +1 0.58 0.46 0.155 1.0335 0.469 0.2225 0.295 10 +1 0.58 0.43 0.13 0.798 0.365 0.173 0.2285 10 +0 0.58 0.445 0.125 0.7095 0.303 0.1405 0.235 9 +-1 0.585 0.445 0.14 0.913 0.4305 0.2205 0.253 10 +1 0.59 0.49 0.165 1.207 0.559 0.235 0.309 10 +0 0.59 0.45 0.145 1.022 0.428 0.268 0.265 10 +0 0.59 0.46 0.145 0.9015 0.419 0.1785 0.26 11 +-1 0.595 0.435 0.15 0.9 0.4175 0.17 0.265 8 +1 0.595 0.45 0.14 0.838 0.3965 0.194 0.217 10 +1 0.595 0.45 0.145 0.959 0.463 0.2065 0.2535 10 +0 0.595 0.46 0.15 0.8335 0.377 0.1925 0.235 8 +-1 0.6 0.46 0.155 0.9735 0.427 0.2045 0.3 8 +-1 0.6 0.475 0.15 1.13 0.575 0.196 0.305 9 +1 0.6 0.48 0.165 0.9165 0.4135 0.1965 0.2725 9 +0 0.6 0.48 0.17 0.9175 0.38 0.2225 0.29 8 +-1 0.6 0.48 0.18 1.0645 0.4495 0.2455 0.325 10 +1 0.6 0.47 0.165 1.059 0.504 0.241 0.275 9 +1 0.6 0.47 0.16 1.194 0.5625 0.3045 0.2635 10 +-1 0.605 0.455 0.145 0.9775 0.468 0.1775 0.275 9 +1 0.605 0.475 0.145 0.884 0.3835 0.1905 0.27 8 +0 0.605 0.47 0.145 0.8025 0.379 0.2265 0.22 9 +-1 0.605 0.48 0.14 0.991 0.4735 0.2345 0.24 8 +-1 0.605 0.47 0.155 0.974 0.393 0.224 0.3345 9 +-1 0.605 0.505 0.18 1.434 0.7285 0.264 0.431 11 +1 0.61 0.475 0.155 0.983 0.4565 0.228 0.266 10 +-1 0.61 0.465 0.16 1.0725 0.4835 0.2515 0.28 10 +-1 0.61 0.485 0.15 1.2405 0.6025 0.2915 0.3085 12 +1 0.61 0.47 0.16 1.022 0.449 0.2345 0.2945 9 +-1 0.61 0.475 0.16 1.1155 0.3835 0.223 0.379 10 +0 0.61 0.465 0.125 0.9225 0.436 0.19 0.26 9 +1 0.61 0.47 0.17 1.1185 0.5225 0.2405 0.31 9 +-1 0.61 0.485 0.18 1.2795 0.5735 0.2855 0.355 7 +1 0.615 0.47 0.16 1.0175 0.473 0.2395 0.28 10 +1 0.615 0.475 0.175 1.224 0.6035 0.261 0.311 9 +0 0.62 0.485 0.18 1.154 0.4935 0.256 0.315 12 +-1 0.62 0.515 0.155 1.3255 0.6685 0.2605 0.335 12 +1 0.62 0.515 0.175 1.221 0.535 0.241 0.395 13 +-1 0.62 0.54 0.165 1.139 0.4995 0.2435 0.357 11 +0 0.62 0.49 0.16 1.066 0.446 0.246 0.305 11 +-1 0.62 0.48 0.18 1.2215 0.582 0.2695 0.313 12 +0 0.62 0.47 0.14 0.8565 0.3595 0.16 0.295 9 +0 0.62 0.45 0.135 0.924 0.358 0.2265 0.2965 10 +1 0.62 0.48 0.15 1.266 0.6285 0.2575 0.309 12 +-1 0.62 0.48 0.175 1.0405 0.464 0.2225 0.3 9 +1 0.625 0.49 0.165 1.1165 0.4895 0.2615 0.3325 11 +1 0.625 0.475 0.16 1.0845 0.5005 0.2355 0.3105 10 +1 0.625 0.5 0.17 1.0985 0.4645 0.22 0.354 9 +0 0.625 0.47 0.155 1.1955 0.643 0.2055 0.3145 12 +-1 0.625 0.485 0.175 1.362 0.6765 0.2615 0.3705 10 +0 0.625 0.485 0.15 1.044 0.438 0.2865 0.278 9 +1 0.63 0.505 0.17 1.0915 0.4615 0.266 0.3 9 +-1 0.63 0.5 0.18 1.1965 0.514 0.2325 0.3995 8 +1 0.63 0.49 0.17 1.1745 0.5255 0.273 0.339 11 +1 0.63 0.485 0.165 1.233 0.6565 0.2315 0.3035 10 +1 0.63 0.495 0.175 1.2695 0.605 0.271 0.328 11 +0 0.635 0.5 0.165 1.489 0.715 0.3445 0.3615 13 +1 0.635 0.5 0.17 1.4345 0.611 0.309 0.418 12 +-1 0.635 0.49 0.175 1.2435 0.5805 0.313 0.305 10 +-1 0.635 0.49 0.17 1.2615 0.5385 0.2665 0.38 9 +-1 0.64 0.505 0.165 1.2235 0.5215 0.2695 0.36 10 +1 0.64 0.515 0.18 1.247 0.5475 0.2925 0.3685 10 +1 0.64 0.525 0.185 1.707 0.763 0.4205 0.4435 11 +1 0.645 0.505 0.15 1.1605 0.519 0.2615 0.335 10 +1 0.645 0.5 0.175 1.286 0.5645 0.288 0.386 12 +1 0.645 0.5 0.19 1.5595 0.741 0.3715 0.3845 14 +1 0.645 0.51 0.19 1.4745 0.605 0.345 0.48 9 +1 0.645 0.51 0.195 1.226 0.5885 0.2215 0.3745 10 +1 0.645 0.51 0.16 1.33 0.6665 0.309 0.317 9 +-1 0.645 0.51 0.16 1.2415 0.5815 0.276 0.315 9 +1 0.645 0.5 0.175 1.3375 0.554 0.308 0.415 10 +-1 0.645 0.51 0.19 1.363 0.573 0.362 0.36 10 +1 0.645 0.485 0.15 1.2215 0.5695 0.2735 0.33 9 +-1 0.645 0.48 0.19 1.371 0.6925 0.2905 0.35 12 +-1 0.65 0.495 0.155 1.337 0.615 0.3195 0.335 9 +1 0.65 0.505 0.19 1.274 0.59 0.23 0.391 11 +1 0.65 0.525 0.185 1.488 0.665 0.337 0.378 11 +1 0.65 0.51 0.16 1.3835 0.6385 0.2905 0.3665 9 +1 0.655 0.55 0.18 1.274 0.586 0.281 0.365 10 +-1 0.655 0.51 0.15 1.043 0.4795 0.223 0.305 9 +-1 0.655 0.505 0.19 1.3485 0.5935 0.2745 0.425 12 +-1 0.655 0.505 0.195 1.4405 0.688 0.3805 0.363 11 +1 0.66 0.5 0.165 1.3195 0.667 0.269 0.341 9 +-1 0.66 0.535 0.175 1.5175 0.711 0.3125 0.415 12 +1 0.66 0.53 0.195 1.5505 0.6505 0.3295 0.495 10 +1 0.66 0.51 0.165 1.6375 0.7685 0.3545 0.3925 14 +1 0.665 0.525 0.175 1.443 0.6635 0.3845 0.353 11 +1 0.665 0.505 0.16 1.289 0.6145 0.253 0.3665 11 +-1 0.665 0.505 0.16 1.2915 0.631 0.2925 0.32 11 +1 0.665 0.52 0.175 1.3725 0.606 0.32 0.395 12 +1 0.665 0.5 0.175 1.2975 0.6075 0.314 0.315 9 +1 0.67 0.505 0.16 1.2585 0.6255 0.311 0.308 12 +1 0.67 0.52 0.165 1.39 0.711 0.2865 0.3 11 +-1 0.67 0.52 0.19 1.32 0.5235 0.3095 0.4275 13 +-1 0.67 0.55 0.155 1.566 0.858 0.339 0.354 10 +-1 0.67 0.54 0.195 1.619 0.74 0.3305 0.465 11 +1 0.675 0.525 0.16 1.2835 0.572 0.2755 0.3545 13 +-1 0.675 0.51 0.195 1.382 0.6045 0.3175 0.3965 10 +1 0.68 0.52 0.195 1.4535 0.592 0.391 0.4125 10 +-1 0.68 0.51 0.2 1.6075 0.714 0.339 0.4705 11 +1 0.685 0.52 0.15 1.3735 0.7185 0.293 0.32 11 +-1 0.685 0.565 0.175 1.638 0.7775 0.375 0.438 11 +-1 0.69 0.55 0.2 1.569 0.687 0.3675 0.46 12 +1 0.7 0.565 0.175 1.8565 0.8445 0.3935 0.54 10 +-1 0.7 0.535 0.175 1.773 0.6805 0.48 0.512 15 +-1 0.705 0.545 0.17 1.58 0.6435 0.4565 0.265 11 +1 0.71 0.575 0.215 2.009 0.9895 0.4475 0.502 11 +-1 0.71 0.57 0.195 1.9805 0.9925 0.4925 0.48 12 +-1 0.71 0.54 0.205 1.5805 0.802 0.287 0.435 10 +1 0.71 0.56 0.22 2.015 0.9215 0.454 0.566 11 +1 0.72 0.57 0.2 1.8275 0.919 0.366 0.485 10 +1 0.72 0.55 0.205 2.125 1.1455 0.4425 0.511 13 +-1 0.72 0.525 0.18 1.445 0.631 0.3215 0.435 7 +-1 0.725 0.565 0.21 2.1425 1.03 0.487 0.503 14 +-1 0.73 0.56 0.19 1.9425 0.799 0.5195 0.5655 11 +1 0.735 0.59 0.215 1.747 0.7275 0.403 0.557 11 +-1 0.74 0.565 0.205 2.119 0.9655 0.5185 0.482 12 +-1 0.75 0.565 0.215 1.938 0.7735 0.4825 0.575 11 +1 0.75 0.595 0.205 2.2205 1.083 0.421 0.63 12 +1 0.77 0.62 0.195 2.5155 1.1155 0.6415 0.642 12 +1 0.775 0.63 0.25 2.7795 1.3485 0.76 0.578 12 +0 0.275 0.175 0.09 0.2315 0.096 0.057 0.0705 5 +0 0.375 0.245 0.1 0.394 0.166 0.091 0.1125 6 +-1 0.375 0.27 0.135 0.597 0.272 0.131 0.1675 7 +1 0.39 0.28 0.125 0.564 0.3035 0.0955 0.143 7 +0 0.435 0.3 0.12 0.5965 0.259 0.139 0.1645 8 +1 0.445 0.32 0.12 0.414 0.199 0.09 0.117 7 +0 0.455 0.335 0.105 0.422 0.229 0.0865 0.1 6 +0 0.455 0.325 0.135 0.82 0.4005 0.1715 0.211 8 +0 0.455 0.345 0.11 0.434 0.207 0.0855 0.1215 8 +0 0.465 0.325 0.14 0.7615 0.362 0.1535 0.209 10 +1 0.465 0.36 0.115 0.5795 0.295 0.1395 0.12 7 +0 0.485 0.365 0.105 0.5205 0.195 0.123 0.182 8 +1 0.485 0.37 0.155 0.968 0.419 0.2455 0.2365 9 +0 0.485 0.345 0.16 0.869 0.3085 0.185 0.319 9 +-1 0.49 0.355 0.16 0.8795 0.3485 0.215 0.2825 8 +1 0.5 0.37 0.15 1.0615 0.494 0.223 0.296 9 +1 0.515 0.35 0.155 0.9225 0.4185 0.198 0.273 9 +1 0.515 0.395 0.135 1.007 0.472 0.2495 0.252 8 +1 0.525 0.365 0.17 0.9605 0.438 0.2225 0.276 10 +1 0.525 0.38 0.125 0.65 0.303 0.155 0.159 7 +1 0.53 0.41 0.14 0.7545 0.3495 0.1715 0.2105 8 +-1 0.535 0.425 0.135 0.771 0.3765 0.1815 0.1795 8 +0 0.535 0.385 0.18 1.0835 0.4955 0.2295 0.304 8 +0 0.545 0.42 0.165 0.8935 0.4235 0.2195 0.228 8 +-1 0.545 0.415 0.2 1.358 0.567 0.318 0.403 10 +-1 0.545 0.385 0.15 1.1185 0.5425 0.2445 0.2845 9 +-1 0.55 0.38 0.165 1.205 0.543 0.294 0.3345 10 +1 0.55 0.42 0.16 1.3405 0.6325 0.311 0.344 10 +1 0.57 0.455 0.175 1.02 0.4805 0.2145 0.29 9 +1 0.575 0.44 0.185 1.025 0.5075 0.2245 0.2485 10 +0 0.575 0.45 0.13 0.8145 0.403 0.1715 0.213 10 +-1 0.58 0.43 0.17 1.48 0.6535 0.324 0.4155 10 +1 0.585 0.455 0.145 0.953 0.3945 0.2685 0.258 10 +0 0.585 0.45 0.15 0.8915 0.3975 0.2035 0.253 8 +1 0.6 0.495 0.175 1.3005 0.6195 0.284 0.3285 11 +1 0.6 0.465 0.165 1.038 0.4975 0.2205 0.251 9 +1 0.605 0.475 0.175 1.2525 0.5575 0.3055 0.343 9 +1 0.605 0.475 0.15 1.15 0.575 0.232 0.297 10 +-1 0.61 0.475 0.15 1.1135 0.5195 0.2575 0.3005 11 +-1 0.615 0.455 0.145 1.1155 0.5045 0.238 0.315 10 +1 0.62 0.47 0.145 1.0865 0.511 0.2715 0.2565 10 +1 0.625 0.495 0.175 1.254 0.5815 0.286 0.3185 9 +1 0.625 0.49 0.185 1.169 0.5275 0.2535 0.344 11 +1 0.635 0.495 0.195 1.172 0.445 0.3115 0.3475 11 +-1 0.635 0.475 0.15 1.1845 0.533 0.307 0.291 10 +-1 0.64 0.475 0.14 1.0725 0.4895 0.2295 0.31 8 +1 0.645 0.5 0.16 1.3815 0.672 0.326 0.315 9 +1 0.65 0.525 0.19 1.6125 0.777 0.3685 0.3965 11 +1 0.65 0.485 0.16 1.7395 0.5715 0.2785 0.3075 10 +-1 0.655 0.52 0.2 1.5475 0.713 0.314 0.466 9 +1 0.655 0.545 0.19 1.4245 0.6325 0.333 0.378 10 +-1 0.665 0.515 0.185 1.3405 0.5595 0.293 0.4375 11 +-1 0.675 0.53 0.175 1.4465 0.6775 0.33 0.389 10 +-1 0.685 0.535 0.175 1.5845 0.7175 0.3775 0.4215 9 +-1 0.695 0.55 0.185 1.679 0.805 0.4015 0.3965 10 +1 0.695 0.53 0.19 1.726 0.7625 0.436 0.455 11 +-1 0.705 0.545 0.18 1.5395 0.6075 0.3675 0.4645 13 +-1 0.72 0.55 0.195 2.073 1.0715 0.4265 0.5015 9 +1 0.72 0.56 0.18 1.5865 0.691 0.375 0.4425 11 +1 0.73 0.575 0.21 2.069 0.9285 0.409 0.643 11 +0 0.185 0.135 0.04 0.027 0.0105 0.0055 0.009 5 +0 0.24 0.18 0.055 0.0555 0.0235 0.013 0.018 4 +0 0.31 0.215 0.075 0.1275 0.0565 0.0275 0.036 7 +0 0.34 0.26 0.085 0.1885 0.0815 0.0335 0.06 6 +0 0.35 0.265 0.08 0.2 0.09 0.042 0.06 7 +0 0.365 0.27 0.085 0.197 0.0815 0.0325 0.065 6 +0 0.365 0.275 0.085 0.223 0.098 0.0375 0.075 7 +0 0.365 0.27 0.075 0.2215 0.095 0.0445 0.07 6 +0 0.39 0.31 0.105 0.2665 0.1185 0.0525 0.081 8 +0 0.405 0.3 0.09 0.269 0.103 0.067 0.11 6 +0 0.41 0.315 0.095 0.2805 0.114 0.0345 0.11 7 +0 0.41 0.335 0.105 0.3305 0.1405 0.064 0.105 7 +0 0.415 0.31 0.09 0.2815 0.1245 0.0615 0.085 6 +0 0.415 0.31 0.1 0.2805 0.114 0.0565 0.0975 6 +0 0.415 0.31 0.095 0.311 0.1125 0.0625 0.115 8 +0 0.42 0.325 0.1 0.368 0.1675 0.0625 0.1135 11 +0 0.43 0.34 0.1 0.3405 0.1395 0.0665 0.12 8 +0 0.435 0.335 0.1 0.3245 0.135 0.0785 0.098 7 +0 0.435 0.33 0.11 0.38 0.1515 0.0945 0.11 7 +0 0.435 0.33 0.105 0.335 0.156 0.0555 0.105 8 +0 0.435 0.345 0.12 0.3215 0.13 0.056 0.1185 7 +0 0.445 0.33 0.11 0.358 0.1525 0.067 0.1185 8 +0 0.465 0.37 0.11 0.445 0.1635 0.096 0.166 7 +0 0.47 0.375 0.12 0.487 0.196 0.099 0.135 8 +0 0.475 0.34 0.105 0.4535 0.203 0.08 0.1465 9 +0 0.485 0.385 0.13 0.568 0.2505 0.178 0.154 7 +0 0.485 0.36 0.12 0.5155 0.2465 0.1025 0.147 8 +0 0.485 0.37 0.115 0.457 0.1885 0.0965 0.15 9 +0 0.495 0.38 0.135 0.5095 0.2065 0.1165 0.165 8 +0 0.495 0.38 0.145 0.5 0.205 0.148 0.1505 8 +0 0.495 0.375 0.14 0.494 0.181 0.0975 0.191 8 +0 0.5 0.38 0.11 0.5605 0.28 0.106 0.15 9 +0 0.505 0.405 0.13 0.599 0.2245 0.1175 0.225 11 +0 0.505 0.4 0.145 0.7045 0.334 0.1425 0.207 8 +-1 0.51 0.4 0.12 0.7005 0.347 0.1105 0.195 10 +0 0.515 0.415 0.135 0.7125 0.285 0.152 0.245 10 +0 0.515 0.42 0.15 0.6725 0.2555 0.1335 0.235 10 +1 0.515 0.385 0.11 0.5785 0.253 0.16 0.14 8 +0 0.52 0.41 0.11 0.5185 0.2165 0.0915 0.184 8 +0 0.52 0.415 0.14 0.6375 0.308 0.1335 0.168 9 +0 0.52 0.395 0.125 0.5805 0.2445 0.146 0.165 9 +0 0.52 0.38 0.115 0.6645 0.3285 0.17 0.1425 7 +0 0.52 0.385 0.115 0.581 0.2555 0.156 0.143 10 +0 0.525 0.415 0.12 0.596 0.2805 0.12 0.1695 9 +0 0.525 0.405 0.145 0.6965 0.3045 0.1535 0.21 8 +0 0.525 0.4 0.145 0.6095 0.248 0.159 0.175 9 +0 0.53 0.43 0.14 0.677 0.298 0.0965 0.23 8 +0 0.53 0.43 0.16 0.7245 0.321 0.1275 0.24 9 +0 0.53 0.395 0.13 0.575 0.247 0.115 0.183 9 +0 0.53 0.405 0.12 0.632 0.2715 0.148 0.1875 9 +0 0.535 0.455 0.14 1.0015 0.53 0.1765 0.244 9 +-1 0.54 0.425 0.16 0.9455 0.3675 0.2005 0.295 9 +0 0.54 0.395 0.135 0.6555 0.2705 0.155 0.192 9 +0 0.54 0.39 0.125 0.6255 0.2525 0.158 0.19 8 +0 0.545 0.425 0.14 0.8145 0.305 0.231 0.244 10 +0 0.545 0.43 0.14 0.687 0.2615 0.1405 0.25 9 +0 0.55 0.435 0.14 0.7995 0.295 0.1905 0.238 10 +0 0.55 0.45 0.13 0.804 0.3375 0.1405 0.23 6 +1 0.555 0.435 0.14 0.7495 0.341 0.1645 0.214 8 +1 0.555 0.41 0.125 0.599 0.2345 0.1465 0.194 8 +1 0.555 0.4 0.13 0.7075 0.332 0.1585 0.18 7 +0 0.555 0.45 0.175 0.738 0.304 0.1755 0.22 9 +1 0.555 0.455 0.135 0.837 0.382 0.171 0.235 9 +0 0.56 0.445 0.165 0.832 0.3455 0.179 0.279 9 +-1 0.565 0.445 0.125 0.8305 0.3135 0.1785 0.23 11 +1 0.565 0.415 0.125 0.667 0.302 0.1545 0.185 7 +1 0.565 0.455 0.155 0.9355 0.421 0.183 0.26 11 +0 0.565 0.435 0.145 0.8445 0.3975 0.158 0.255 9 +1 0.565 0.45 0.16 0.895 0.415 0.195 0.246 9 +0 0.565 0.46 0.155 0.8715 0.3755 0.215 0.25 10 +1 0.57 0.46 0.155 1.0005 0.454 0.205 0.265 11 +1 0.57 0.455 0.155 0.832 0.3585 0.174 0.277 11 +1 0.57 0.44 0.175 0.9415 0.3805 0.2285 0.283 9 +1 0.57 0.415 0.13 0.88 0.4275 0.1955 0.238 13 +-1 0.57 0.44 0.12 0.803 0.382 0.1525 0.234 9 +1 0.575 0.45 0.13 0.785 0.318 0.193 0.2265 9 +1 0.575 0.45 0.155 0.9765 0.495 0.2145 0.235 9 +1 0.575 0.435 0.135 0.992 0.432 0.2225 0.239 10 +1 0.575 0.455 0.155 1.013 0.4685 0.2085 0.295 11 +1 0.575 0.445 0.145 0.876 0.3795 0.1615 0.27 10 +-1 0.575 0.465 0.175 1.099 0.4735 0.202 0.35 9 +0 0.575 0.45 0.135 0.8715 0.45 0.162 0.225 10 +0 0.575 0.45 0.135 0.8245 0.3375 0.2115 0.239 11 +-1 0.575 0.43 0.155 0.7955 0.3485 0.1925 0.22 9 +1 0.575 0.475 0.145 0.857 0.3665 0.173 0.269 9 +-1 0.58 0.45 0.195 0.8265 0.4035 0.173 0.225 9 +-1 0.58 0.5 0.165 0.925 0.37 0.185 0.3005 10 +1 0.58 0.44 0.15 1.0465 0.518 0.2185 0.2795 10 +0 0.58 0.44 0.145 0.7905 0.3525 0.1645 0.242 10 +1 0.58 0.44 0.16 0.8295 0.3365 0.2005 0.2485 9 +1 0.595 0.455 0.15 0.886 0.4315 0.201 0.223 10 +-1 0.6 0.47 0.135 0.97 0.4655 0.1955 0.264 11 +1 0.6 0.46 0.17 1.1805 0.456 0.337 0.329 11 +1 0.6 0.475 0.15 0.99 0.386 0.2195 0.3105 10 +-1 0.6 0.465 0.16 1.133 0.466 0.2885 0.298 11 +0 0.605 0.49 0.165 1.071 0.482 0.1935 0.352 10 +-1 0.605 0.455 0.145 0.862 0.334 0.1985 0.3 9 +1 0.605 0.47 0.18 1.1155 0.479 0.2565 0.321 10 +1 0.61 0.48 0.14 1.031 0.4375 0.2615 0.27 8 +-1 0.61 0.46 0.145 1.1185 0.478 0.2945 0.2985 10 +-1 0.61 0.46 0.155 0.957 0.4255 0.1975 0.265 8 +-1 0.61 0.47 0.165 1.1785 0.566 0.2785 0.294 11 +1 0.615 0.47 0.145 1.0285 0.4435 0.2825 0.285 11 +1 0.615 0.47 0.15 1.0875 0.4975 0.283 0.2685 9 +-1 0.615 0.495 0.16 1.255 0.5815 0.3195 0.3225 12 +1 0.615 0.495 0.2 1.219 0.564 0.227 0.3885 10 +1 0.62 0.49 0.16 1.035 0.44 0.2525 0.285 11 +1 0.62 0.49 0.15 1.195 0.4605 0.302 0.355 9 +-1 0.62 0.495 0.17 1.062 0.372 0.213 0.34 11 +1 0.62 0.495 0.195 1.5145 0.579 0.346 0.5195 15 +1 0.62 0.47 0.15 1.309 0.587 0.4405 0.325 9 +1 0.62 0.485 0.155 1.0295 0.425 0.2315 0.335 12 +1 0.625 0.495 0.155 1.0485 0.487 0.212 0.3215 11 +1 0.625 0.515 0.17 1.331 0.5725 0.3005 0.361 9 +1 0.625 0.505 0.185 1.1565 0.52 0.2405 0.3535 10 +-1 0.625 0.445 0.16 1.09 0.46 0.2965 0.304 11 +-1 0.625 0.52 0.18 1.354 0.4845 0.351 0.375 11 +-1 0.625 0.47 0.145 0.984 0.475 0.2 0.265 11 +1 0.63 0.49 0.155 1.2525 0.63 0.246 0.289 9 +-1 0.635 0.485 0.165 1.2695 0.5635 0.3065 0.3395 11 +-1 0.635 0.52 0.165 1.3405 0.5065 0.296 0.412 11 +-1 0.635 0.505 0.155 1.2895 0.594 0.314 0.345 11 +1 0.635 0.525 0.16 1.195 0.5435 0.246 0.335 12 +1 0.635 0.5 0.165 1.273 0.6535 0.213 0.365 12 +1 0.635 0.515 0.165 1.229 0.5055 0.2975 0.3535 10 +1 0.64 0.53 0.165 1.1895 0.4765 0.3 0.35 11 +-1 0.64 0.48 0.145 1.1145 0.508 0.24 0.34 10 +-1 0.64 0.515 0.165 1.3115 0.4945 0.2555 0.41 10 +0 0.64 0.49 0.135 1.1 0.488 0.2505 0.2925 10 +1 0.64 0.49 0.155 1.1285 0.477 0.269 0.34 9 +-1 0.64 0.485 0.185 1.4195 0.6735 0.3465 0.3255 11 +-1 0.645 0.51 0.18 1.6195 0.7815 0.322 0.4675 12 +1 0.645 0.49 0.175 1.32 0.6525 0.2375 0.3385 11 +-1 0.645 0.52 0.21 1.5535 0.616 0.3655 0.474 16 +0 0.65 0.52 0.15 1.238 0.5495 0.296 0.3305 10 +-1 0.65 0.51 0.155 1.189 0.483 0.278 0.3645 13 +-1 0.65 0.51 0.185 1.375 0.531 0.384 0.3985 10 +-1 0.655 0.515 0.18 1.412 0.6195 0.2485 0.497 11 +-1 0.655 0.525 0.175 1.348 0.5855 0.2605 0.394 10 +1 0.655 0.52 0.17 1.1445 0.53 0.223 0.348 9 +-1 0.66 0.535 0.205 1.4415 0.5925 0.2775 0.49 10 +1 0.66 0.51 0.175 1.218 0.5055 0.303 0.37 11 +-1 0.665 0.5 0.15 1.2475 0.4625 0.2955 0.3595 10 +1 0.665 0.515 0.2 1.2695 0.5115 0.2675 0.436 12 +1 0.665 0.525 0.18 1.429 0.6715 0.29 0.4 12 +-1 0.67 0.53 0.205 1.4015 0.643 0.2465 0.416 12 +1 0.675 0.515 0.15 1.312 0.556 0.2845 0.4115 11 +-1 0.675 0.51 0.185 1.473 0.6295 0.3025 0.4245 11 +1 0.68 0.54 0.19 1.623 0.7165 0.354 0.4715 12 +1 0.68 0.54 0.155 1.534 0.671 0.379 0.384 10 +1 0.685 0.535 0.155 1.3845 0.6615 0.2145 0.4075 10 +1 0.69 0.55 0.18 1.6915 0.6655 0.402 0.5 11 +1 0.695 0.545 0.185 1.5715 0.6645 0.3835 0.4505 13 +-1 0.7 0.575 0.205 1.773 0.605 0.447 0.538 13 +1 0.7 0.55 0.175 1.4405 0.6565 0.2985 0.375 12 +1 0.7 0.55 0.195 1.6245 0.675 0.347 0.535 13 +-1 0.705 0.535 0.22 1.866 0.929 0.3835 0.4395 10 +-1 0.72 0.575 0.18 1.6705 0.732 0.3605 0.501 12 +1 0.72 0.565 0.19 2.081 1.0815 0.4305 0.503 11 +-1 0.725 0.57 0.205 1.6195 0.744 0.315 0.488 11 +-1 0.75 0.55 0.195 1.8325 0.83 0.366 0.44 11 +1 0.76 0.605 0.215 2.173 0.801 0.4915 0.646 13 +0 0.135 0.13 0.04 0.029 0.0125 0.0065 0.008 4 +0 0.16 0.11 0.025 0.0195 0.0075 0.005 0.006 4 +0 0.21 0.15 0.055 0.0465 0.017 0.012 0.015 5 +0 0.28 0.21 0.075 0.1195 0.053 0.0265 0.03 6 +0 0.28 0.2 0.065 0.0895 0.036 0.0185 0.03 7 +0 0.285 0.215 0.06 0.0935 0.031 0.023 0.03 6 +0 0.29 0.21 0.07 0.1115 0.048 0.0205 0.03 5 +0 0.29 0.21 0.06 0.1195 0.056 0.0235 0.03 6 +0 0.29 0.21 0.065 0.097 0.0375 0.022 0.03 6 +0 0.32 0.24 0.07 0.133 0.0585 0.0255 0.041 6 +0 0.325 0.25 0.07 0.1745 0.0875 0.0355 0.04 7 +0 0.335 0.25 0.08 0.1695 0.0695 0.044 0.0495 6 +0 0.35 0.235 0.08 0.17 0.0725 0.0465 0.0495 7 +0 0.35 0.25 0.07 0.1605 0.0715 0.0335 0.046 6 +0 0.355 0.27 0.105 0.271 0.1425 0.0525 0.0735 9 +0 0.36 0.27 0.085 0.2185 0.1065 0.038 0.062 6 +0 0.36 0.27 0.085 0.196 0.0905 0.034 0.053 7 +0 0.375 0.28 0.08 0.226 0.105 0.047 0.065 6 +0 0.375 0.275 0.085 0.22 0.109 0.05 0.0605 7 +0 0.395 0.29 0.095 0.3 0.158 0.068 0.078 7 +0 0.405 0.25 0.09 0.2875 0.128 0.063 0.0805 7 +0 0.415 0.325 0.11 0.316 0.1385 0.0795 0.0925 8 +0 0.425 0.315 0.095 0.3675 0.1865 0.0675 0.0985 7 +0 0.43 0.32 0.11 0.3675 0.1675 0.102 0.105 8 +0 0.435 0.325 0.12 0.346 0.159 0.084 0.095 7 +1 0.45 0.33 0.105 0.4955 0.2575 0.082 0.129 8 +0 0.46 0.35 0.11 0.4675 0.2125 0.099 0.1375 7 +1 0.47 0.365 0.135 0.522 0.2395 0.1525 0.145 10 +0 0.47 0.375 0.105 0.441 0.167 0.0865 0.145 10 +0 0.475 0.365 0.12 0.5185 0.268 0.1095 0.1365 8 +1 0.505 0.39 0.12 0.653 0.3315 0.1385 0.167 9 +1 0.505 0.395 0.135 0.5915 0.288 0.1315 0.185 12 +1 0.505 0.385 0.115 0.4825 0.21 0.1035 0.1535 10 +0 0.51 0.455 0.135 0.6855 0.2875 0.154 0.2035 9 +1 0.515 0.4 0.14 0.6335 0.288 0.145 0.168 9 +1 0.525 0.41 0.13 0.6875 0.3435 0.1495 0.1765 9 +-1 0.53 0.43 0.15 0.741 0.325 0.1855 0.196 9 +-1 0.53 0.405 0.13 0.6355 0.2635 0.1565 0.185 9 +1 0.545 0.44 0.14 0.8395 0.356 0.1905 0.2385 11 +-1 0.55 0.47 0.15 0.9205 0.381 0.2435 0.2675 10 +-1 0.56 0.41 0.16 0.8215 0.342 0.184 0.253 9 +1 0.565 0.445 0.145 0.9255 0.4345 0.212 0.2475 9 +-1 0.57 0.435 0.15 0.8295 0.3875 0.156 0.245 10 +1 0.58 0.46 0.16 1.063 0.513 0.2705 0.2625 9 +1 0.59 0.465 0.165 1.115 0.5165 0.273 0.275 10 +-1 0.6 0.45 0.14 0.837 0.37 0.177 0.2425 10 +1 0.605 0.445 0.14 0.982 0.4295 0.2085 0.295 12 +1 0.61 0.49 0.16 1.112 0.465 0.228 0.341 10 +-1 0.625 0.515 0.18 1.3485 0.5255 0.252 0.3925 14 +1 0.66 0.515 0.195 1.5655 0.7345 0.353 0.386 9 +0 0.255 0.19 0.06 0.086 0.04 0.0185 0.025 5 +0 0.27 0.195 0.065 0.1065 0.0475 0.0225 0.0285 5 +0 0.28 0.215 0.08 0.132 0.072 0.022 0.033 5 +0 0.285 0.215 0.07 0.1075 0.051 0.0225 0.027 6 +0 0.32 0.255 0.085 0.1745 0.072 0.033 0.057 8 +0 0.325 0.24 0.07 0.152 0.0565 0.0305 0.054 8 +0 0.385 0.28 0.1 0.2755 0.1305 0.061 0.0725 8 +0 0.395 0.295 0.1 0.293 0.14 0.062 0.082 7 +-1 0.4 0.305 0.16 0.368 0.173 0.0705 0.105 7 +0 0.405 0.31 0.09 0.312 0.138 0.06 0.087 8 +0 0.415 0.305 0.12 0.336 0.165 0.076 0.0805 7 +0 0.42 0.315 0.115 0.355 0.1895 0.065 0.087 6 +0 0.44 0.305 0.115 0.379 0.162 0.091 0.11 9 +0 0.445 0.32 0.12 0.378 0.152 0.0825 0.12 8 +1 0.45 0.35 0.13 0.4655 0.2075 0.1045 0.135 8 +-1 0.455 0.355 1.13 0.594 0.332 0.116 0.1335 8 +1 0.46 0.345 0.12 0.4935 0.2435 0.1175 0.132 8 +1 0.46 0.345 0.11 0.4595 0.235 0.0885 0.116 7 +1 0.465 0.36 0.11 0.4955 0.2665 0.085 0.121 7 +0 0.465 0.355 0.09 0.4325 0.2005 0.074 0.1275 9 +-1 0.475 0.38 0.14 0.689 0.3165 0.1315 0.1955 7 +0 0.48 0.35 0.135 0.5465 0.2735 0.0995 0.158 8 +1 0.485 0.39 0.135 0.617 0.25 0.1345 0.1635 8 +0 0.49 0.37 0.11 0.538 0.271 0.1035 0.139 8 +1 0.5 0.39 0.135 0.7815 0.361 0.1575 0.2385 9 +-1 0.5 0.38 0.14 0.6355 0.277 0.143 0.1785 8 +1 0.505 0.385 0.13 0.6435 0.3135 0.149 0.1515 7 +1 0.525 0.385 0.1 0.5115 0.246 0.1005 0.1455 8 +1 0.535 0.42 0.125 0.738 0.355 0.1895 0.1795 8 +-1 0.535 0.42 0.13 0.699 0.3125 0.1565 0.2035 8 +-1 0.54 0.385 0.14 0.7655 0.3265 0.116 0.2365 10 +-1 0.54 0.42 0.13 0.7505 0.368 0.1675 0.1845 9 +-1 0.545 0.43 0.16 0.844 0.3945 0.1855 0.231 9 +1 0.55 0.41 0.13 0.8705 0.4455 0.2115 0.213 9 +0 0.55 0.42 0.115 0.668 0.2925 0.137 0.209 11 +-1 0.565 0.44 0.135 0.83 0.393 0.1735 0.238 9 +1 0.58 0.45 0.12 0.8685 0.418 0.1475 0.2605 8 +-1 0.58 0.435 0.15 0.839 0.3485 0.207 0.192 7 +-1 0.585 0.485 0.15 1.079 0.4145 0.2115 0.356 11 +1 0.595 0.465 0.15 0.919 0.4335 0.1765 0.262 9 +-1 0.6 0.47 0.19 1.1345 0.492 0.2595 0.3375 10 +-1 0.61 0.43 0.14 0.909 0.438 0.2 0.22 8 +1 0.61 0.48 0.165 1.2435 0.5575 0.2675 0.372 8 +-1 0.62 0.49 0.16 1.056 0.493 0.244 0.2725 9 +1 0.645 0.495 0.15 1.2095 0.603 0.2225 0.339 9 +1 0.65 0.5 0.14 1.238 0.6165 0.2355 0.32 8 +-1 0.665 0.525 0.21 1.644 0.818 0.3395 0.4275 10 +1 0.685 0.55 0.2 1.7725 0.813 0.387 0.49 11 +-1 0.69 0.54 0.195 1.2525 0.73 0.3975 0.462 12 +-1 0.705 0.57 0.185 1.761 0.747 0.3725 0.488 10 +-1 0.71 0.5 0.15 1.3165 0.6835 0.2815 0.28 10 +1 0.72 0.585 0.22 1.914 0.9155 0.448 0.479 11 +-1 0.72 0.575 0.215 2.1 0.8565 0.4825 0.602 12 +-1 0.73 0.555 0.18 1.6895 0.6555 0.1965 0.4935 10 +1 0.775 0.57 0.22 2.032 0.735 0.4755 0.6585 17 +-1 0.505 0.39 0.115 0.66 0.3045 0.1555 0.175 8 +1 0.53 0.425 0.13 0.7455 0.2995 0.1355 0.245 10 +-1 0.505 0.385 0.115 0.616 0.243 0.1075 0.21 11 +0 0.405 0.305 0.09 0.2825 0.114 0.0575 0.095 7 +1 0.415 0.3 0.1 0.3355 0.1545 0.0685 0.095 7 +1 0.5 0.39 0.145 0.651 0.273 0.132 0.22 11 +1 0.425 0.33 0.08 0.361 0.134 0.0825 0.125 7 +1 0.47 0.35 0.1 0.4775 0.1885 0.0885 0.175 8 +-1 0.4 0.31 0.115 0.3465 0.1475 0.0695 0.115 10 +0 0.37 0.29 0.1 0.25 0.1025 0.0505 0.085 10 +1 0.5 0.38 0.155 0.66 0.2655 0.1365 0.215 19 +0 0.41 0.31 0.11 0.315 0.124 0.082 0.095 9 +1 0.375 0.29 0.1 0.276 0.1175 0.0565 0.085 9 +-1 0.49 0.385 0.125 0.5395 0.2175 0.128 0.165 11 +1 0.585 0.48 0.185 1.04 0.434 0.265 0.285 10 +1 0.595 0.455 0.155 1.041 0.416 0.2105 0.365 14 +-1 0.675 0.55 0.18 1.6885 0.562 0.3705 0.6 15 +1 0.665 0.535 0.225 2.1835 0.7535 0.391 0.885 27 +1 0.62 0.49 0.17 1.2105 0.5185 0.2555 0.335 13 +0 0.325 0.25 0.055 0.166 0.076 0.051 0.045 5 +0 0.455 0.355 0.08 0.452 0.2165 0.0995 0.125 9 +1 0.525 0.405 0.13 0.7185 0.3265 0.1975 0.175 8 +0 0.385 0.29 0.09 0.232 0.0855 0.0495 0.08 7 +0 0.13 0.095 0.035 0.0105 0.005 0.0065 0.0035 4 +0 0.18 0.13 0.045 0.0275 0.0125 0.01 0.009 3 +0 0.31 0.225 0.05 0.1445 0.0675 0.0385 0.045 6 +-1 0.375 0.29 0.08 0.282 0.1405 0.0725 0.08 7 +-1 0.48 0.38 0.12 0.608 0.2705 0.1405 0.185 8 +0 0.455 0.37 0.125 0.433 0.201 0.1265 0.145 9 +1 0.425 0.325 0.1 0.3295 0.1365 0.0725 0.11 7 +0 0.475 0.36 0.11 0.4555 0.177 0.0965 0.145 9 +-1 0.435 0.35 0.12 0.4585 0.192 0.1 0.13 11 +-1 0.29 0.21 0.075 0.275 0.113 0.0675 0.035 6 +1 0.385 0.295 0.095 0.335 0.147 0.094 0.09 7 +1 0.47 0.375 0.115 0.4265 0.1685 0.0755 0.15 8 +-1 0.5 0.4 0.125 0.5765 0.2395 0.126 0.185 10 +0 0.4 0.31 0.1 0.127 0.106 0.071 0.085 7 +1 0.62 0.51 0.175 1.1505 0.4375 0.2265 0.4 12 +1 0.595 0.47 0.15 0.8915 0.359 0.2105 0.245 12 +1 0.585 0.455 0.14 0.97 0.462 0.185 0.295 9 +1 0.32 0.24 0.08 0.18 0.08 0.0385 0.055 6 +-1 0.52 0.41 0.125 0.6985 0.2945 0.1625 0.215 10 +1 0.44 0.35 0.11 0.4585 0.2 0.0885 0.13 9 +-1 0.44 0.33 0.115 0.4005 0.143 0.113 0.12 8 +1 0.565 0.425 0.1 0.7145 0.3055 0.166 0.18 12 +-1 0.56 0.425 0.125 0.932 0.361 0.213 0.335 9 +-1 0.59 0.455 0.175 0.966 0.391 0.2455 0.31 10 +-1 0.57 0.465 0.18 0.9995 0.405 0.277 0.295 16 +1 0.68 0.53 0.205 1.496 0.5825 0.337 0.465 14 +-1 0.45 0.36 0.125 0.5065 0.222 0.105 0.16 10 +0 0.32 0.24 0.075 0.1735 0.076 0.0355 0.05 7 +0 0.46 0.35 0.11 0.3945 0.1685 0.0865 0.125 9 +1 0.47 0.37 0.105 0.4665 0.2025 0.1015 0.155 10 +1 0.455 0.35 0.105 0.401 0.1575 0.083 0.135 9 +-1 0.415 0.325 0.115 0.3455 0.1405 0.0765 0.11 9 +1 0.465 0.35 0.12 0.5205 0.2015 0.1625 0.185 11 +1 0.46 0.375 0.135 0.4935 0.186 0.0845 0.17 12 +1 0.415 0.31 0.09 0.3245 0.1305 0.0735 0.115 8 +1 0.27 0.195 0.07 0.106 0.0465 0.018 0.036 7 +1 0.445 0.355 0.11 0.4415 0.1805 0.1035 0.1505 10 +-1 0.745 0.585 0.19 1.966 0.8435 0.437 0.5855 18 +-1 0.4 0.3 0.115 0.3025 0.1335 0.0465 0.0935 8 +0 0.28 0.2 0.075 0.1225 0.0545 0.0115 0.035 5 +1 0.55 0.44 0.135 0.879 0.368 0.2095 0.265 10 +1 0.58 0.46 0.165 1.2275 0.473 0.1965 0.435 16 +1 0.61 0.5 0.165 1.2715 0.4915 0.185 0.49 12 +1 0.62 0.495 0.175 1.806 0.643 0.3285 0.725 17 +1 0.56 0.42 0.195 0.8085 0.3025 0.1795 0.285 14 +-1 0.64 0.51 0.2 1.3905 0.61 0.3315 0.41 12 +1 0.69 0.55 0.2 1.8465 0.732 0.472 0.57 19 +-1 0.715 0.565 0.24 2.1995 0.7245 0.465 0.885 17 +-1 0.71 0.565 0.195 1.817 0.785 0.492 0.49 11 +-1 0.55 0.47 0.15 0.897 0.377 0.184 0.29 9 +1 0.375 0.305 0.09 0.3245 0.1395 0.0565 0.095 5 +-1 0.61 0.45 0.16 1.136 0.414 0.311 0.3 9 +0 0.38 0.28 0.085 0.2735 0.115 0.061 0.085 6 +-1 0.37 0.275 0.085 0.2405 0.104 0.0535 0.07 5 +1 0.335 0.235 0.085 0.1545 0.066 0.0345 0.045 6 +0 0.165 0.115 0.015 0.0145 0.0055 0.003 0.005 4 +1 0.285 0.21 0.075 0.1185 0.055 0.0285 0.04 7 +0 0.19 0.13 0.03 0.0295 0.0155 0.015 0.01 6 +0 0.215 0.15 0.03 0.0385 0.0115 0.005 0.01 5 +1 0.595 0.465 0.125 0.799 0.3245 0.2 0.23 10 +-1 0.645 0.5 0.17 1.1845 0.4805 0.274 0.355 13 +1 0.575 0.45 0.185 0.925 0.342 0.197 0.35 12 +-1 0.57 0.45 0.17 1.098 0.414 0.187 0.405 20 +-1 0.58 0.45 0.235 1.071 0.3 0.206 0.395 14 +-1 0.595 0.48 0.2 0.975 0.358 0.2035 0.34 15 +-1 0.595 0.47 0.25 1.283 0.462 0.2475 0.445 14 +-1 0.625 0.42 0.165 1.0595 0.358 0.165 0.445 21 +1 0.535 0.42 0.165 0.9195 0.3355 0.1985 0.26 16 +1 0.55 0.43 0.16 0.9295 0.317 0.1735 0.355 13 +1 0.495 0.4 0.155 0.8085 0.2345 0.1155 0.35 6 +0 0.32 0.235 0.08 0.1485 0.064 0.031 0.045 6 +1 0.445 0.34 0.12 0.4475 0.193 0.1035 0.13 9 +-1 0.52 0.4 0.125 0.6865 0.295 0.1715 0.185 9 +1 0.495 0.385 0.135 0.6335 0.2 0.1225 0.26 14 +1 0.47 0.37 0.135 0.547 0.222 0.1325 0.17 12 +-1 0.49 0.37 0.14 0.585 0.243 0.115 0.195 10 +1 0.58 0.47 0.165 0.927 0.3215 0.1985 0.315 11 +1 0.645 0.495 0.185 1.4935 0.5265 0.2785 0.455 15 +-1 0.575 0.485 0.165 1.0405 0.419 0.264 0.3 14 +0 0.215 0.17 0.055 0.0605 0.0205 0.014 0.02 6 +0 0.43 0.325 0.11 0.3675 0.1355 0.0935 0.12 13 +0 0.26 0.215 0.08 0.099 0.037 0.0255 0.045 5 +0 0.37 0.28 0.09 0.233 0.0905 0.0545 0.07 11 +0 0.405 0.305 0.105 0.3625 0.1565 0.0705 0.125 10 +0 0.27 0.19 0.08 0.081 0.0265 0.0195 0.03 6 +-1 0.68 0.55 0.2 1.596 0.525 0.4075 0.585 21 +-1 0.65 0.515 0.195 1.4005 0.5195 0.36 0.44 13 +-1 0.645 0.49 0.215 1.406 0.4265 0.2285 0.51 25 +1 0.57 0.405 0.16 0.9245 0.3445 0.2185 0.295 19 +1 0.615 0.48 0.19 1.36 0.5305 0.2375 0.47 18 +1 0.42 0.345 0.105 0.43 0.175 0.096 0.13 7 +0 0.275 0.22 0.08 0.1365 0.0565 0.0285 0.042 6 +-1 0.29 0.225 0.075 0.14 0.0515 0.0235 0.04 5 +1 0.42 0.34 0.115 0.4215 0.175 0.093 0.135 8 +-1 0.625 0.525 0.215 1.5765 0.5115 0.2595 0.665 16 +-1 0.55 0.465 0.18 1.2125 0.3245 0.205 0.525 27 +1 0.66 0.505 0.2 1.6305 0.4865 0.297 0.61 18 +1 0.565 0.47 0.195 1.142 0.387 0.258 0.35 17 +-1 0.595 0.495 0.235 1.366 0.5065 0.219 0.52 13 +1 0.63 0.51 0.23 1.539 0.5635 0.2815 0.57 17 +-1 0.43 0.325 0.12 0.445 0.165 0.0995 0.155 8 +-1 0.455 0.35 0.14 0.5725 0.1965 0.1325 0.175 10 +0 0.33 0.26 0.08 0.19 0.0765 0.0385 0.065 7 +-1 0.515 0.415 0.13 0.764 0.276 0.196 0.25 13 +1 0.495 0.39 0.15 0.853 0.3285 0.189 0.27 14 +-1 0.485 0.375 0.145 0.5885 0.2385 0.1155 0.19 13 +-1 0.535 0.46 0.145 0.7875 0.3395 0.2005 0.2 8 +1 0.58 0.465 0.175 1.035 0.401 0.1865 0.385 17 +-1 0.625 0.525 0.195 1.352 0.4505 0.2445 0.53 13 +-1 0.555 0.455 0.18 0.958 0.296 0.195 0.39 14 +-1 0.55 0.425 0.145 0.797 0.297 0.15 0.265 9 +1 0.59 0.475 0.155 0.857 0.356 0.174 0.28 13 +0 0.355 0.28 0.11 0.2235 0.0815 0.0525 0.08 7 +0 0.275 0.2 0.075 0.086 0.0305 0.019 0.03 7 +-1 0.505 0.39 0.175 0.692 0.267 0.15 0.215 12 +1 0.37 0.28 0.095 0.2225 0.0805 0.051 0.075 7 +1 0.555 0.43 0.165 0.7575 0.2735 0.1635 0.275 13 +-1 0.505 0.4 0.165 0.729 0.2675 0.155 0.25 9 +-1 0.56 0.445 0.18 0.903 0.3575 0.2045 0.295 9 +1 0.595 0.475 0.17 1.0965 0.419 0.229 0.35 17 +-1 0.57 0.45 0.165 0.903 0.3305 0.1845 0.295 14 +1 0.6 0.48 0.175 1.229 0.4125 0.2735 0.415 13 +-1 0.56 0.435 0.185 1.106 0.422 0.2435 0.33 15 +1 0.585 0.465 0.19 1.171 0.3905 0.2355 0.4 17 +0 0.46 0.335 0.11 0.444 0.225 0.0745 0.11 8 +-1 0.46 0.36 0.115 0.4755 0.2105 0.105 0.16 8 +1 0.415 0.315 0.125 0.388 0.068 0.09 0.125 12 +-1 0.435 0.32 0.12 0.3785 0.152 0.0915 0.125 11 +-1 0.475 0.38 0.135 0.486 0.1735 0.07 0.185 7 +1 0.465 0.36 0.13 0.5265 0.2105 0.1185 0.165 10 +0 0.355 0.28 0.1 0.2275 0.0935 0.0455 0.085 11 +1 0.46 0.375 0.14 0.5105 0.192 0.1045 0.205 9 +-1 0.38 0.325 0.11 0.3105 0.12 0.074 0.105 10 +-1 0.47 0.365 0.12 0.543 0.2295 0.1495 0.15 9 +1 0.36 0.27 0.09 0.2225 0.083 0.053 0.075 6 +-1 0.585 0.455 0.165 0.998 0.345 0.2495 0.315 12 +1 0.655 0.59 0.2 1.5455 0.654 0.3765 0.415 11 +1 0.6 0.485 0.175 1.2675 0.4995 0.2815 0.38 13 +-1 0.57 0.46 0.17 1.1 0.4125 0.2205 0.38 14 +-1 0.645 0.5 0.2 1.4285 0.639 0.305 0.36 11 +1 0.65 0.495 0.18 1.793 0.8005 0.339 0.53 14 +1 0.51 0.395 0.145 0.6185 0.216 0.1385 0.24 12 +1 0.52 0.38 0.135 0.5825 0.2505 0.1565 0.175 8 +1 0.495 0.415 0.165 0.7485 0.264 0.134 0.285 13 +1 0.43 0.335 0.115 0.406 0.166 0.0935 0.135 8 +-1 0.59 0.465 0.16 1.1005 0.506 0.2525 0.295 13 +1 0.55 0.46 0.175 0.869 0.3155 0.1825 0.32 10 +1 0.585 0.43 0.16 0.955 0.3625 0.176 0.27 11 +-1 0.58 0.455 0.16 0.9215 0.312 0.196 0.3 17 +-1 0.62 0.51 0.15 1.456 0.581 0.2875 0.32 13 +0 0.59 0.45 0.16 0.893 0.2745 0.2185 0.345 14 +-1 0.72 0.575 0.215 2.226 0.8955 0.405 0.62 13 +-1 0.635 0.51 0.175 1.2125 0.5735 0.261 0.36 14 +-1 0.61 0.48 0.175 1.0675 0.391 0.216 0.42 15 +-1 0.545 0.445 0.175 0.8525 0.3465 0.189 0.295 13 +1 0.57 0.45 0.16 0.8615 0.3725 0.2175 0.255 12 +-1 0.6 0.475 0.18 1.162 0.511 0.2675 0.32 18 +-1 0.52 0.41 0.17 0.8705 0.3735 0.219 0.25 14 +1 0.635 0.51 0.21 1.598 0.6535 0.2835 0.58 15 +-1 0.67 0.52 0.15 1.406 0.519 0.348 0.37 13 +1 0.695 0.57 0.2 2.033 0.751 0.4255 0.685 15 +1 0.655 0.525 0.185 1.259 0.487 0.2215 0.445 20 +-1 0.62 0.48 0.23 1.0935 0.403 0.245 0.355 14 +-1 0.6 0.475 0.18 1.1805 0.4345 0.2475 0.425 19 +1 0.51 0.405 0.13 0.7175 0.3725 0.158 0.17 9 +1 0.525 0.405 0.135 0.7575 0.3305 0.216 0.195 10 +1 0.44 0.375 0.13 0.487 0.226 0.0965 0.155 9 +0 0.485 0.415 0.14 0.5705 0.25 0.134 0.185 8 +-1 0.495 0.385 0.13 0.6905 0.3125 0.179 0.175 10 +0 0.435 0.345 0.12 0.4475 0.221 0.112 0.125 7 +0 0.405 0.315 0.105 0.347 0.1605 0.0785 0.1 9 +0 0.42 0.33 0.1 0.352 0.1635 0.089 0.1 9 +-1 0.5 0.395 0.15 0.7145 0.3235 0.173 0.195 9 +-1 0.385 0.305 0.105 0.3315 0.1365 0.0745 0.1 7 +0 0.33 0.265 0.09 0.18 0.068 0.036 0.06 6 +-1 0.58 0.475 0.155 0.974 0.4305 0.23 0.285 10 +0 0.325 0.27 0.1 0.185 0.08 0.0435 0.065 6 +1 0.475 0.375 0.12 0.563 0.2525 0.1205 0.185 10 +-1 0.38 0.3 0.09 0.3215 0.1545 0.075 0.095 9 +0 0.34 0.26 0.09 0.179 0.076 0.0525 0.055 6 +1 0.525 0.425 0.12 0.702 0.3335 0.1465 0.22 12 +-1 0.52 0.415 0.145 0.8045 0.3325 0.1725 0.285 10 +-1 0.535 0.45 0.135 0.8075 0.322 0.181 0.25 13 +1 0.475 0.36 0.12 0.578 0.2825 0.12 0.17 8 +0 0.415 0.325 0.1 0.385 0.167 0.08 0.125 7 +0 0.495 0.385 0.125 0.585 0.2755 0.1235 0.165 8 +-1 0.48 0.405 0.13 0.6375 0.277 0.1445 0.21 10 +-1 0.52 0.425 0.15 0.813 0.385 0.2015 0.23 10 +1 0.46 0.375 0.13 0.5735 0.2505 0.119 0.195 9 +-1 0.58 0.455 0.12 0.94 0.399 0.257 0.265 11 +1 0.59 0.49 0.135 1.008 0.422 0.2245 0.285 11 +-1 0.55 0.415 0.135 0.775 0.302 0.179 0.26 23 +-1 0.65 0.5 0.165 1.1445 0.485 0.218 0.365 12 +-1 0.465 0.375 0.135 0.6 0.2225 0.129 0.23 16 +1 0.455 0.355 0.13 0.515 0.2 0.1275 0.175 11 +1 0.47 0.375 0.13 0.5795 0.2145 0.164 0.195 13 +-1 0.435 0.35 0.11 0.384 0.143 0.1005 0.125 13 +1 0.35 0.265 0.11 0.2965 0.1365 0.063 0.085 7 +0 0.315 0.24 0.07 0.137 0.0545 0.0315 0.04 8 +1 0.595 0.47 0.145 0.991 0.4035 0.1505 0.34 16 +-1 0.58 0.475 0.135 0.925 0.391 0.165 0.275 14 +1 0.575 0.435 0.15 0.805 0.293 0.1625 0.27 17 +1 0.535 0.435 0.155 0.8915 0.3415 0.177 0.25 13 +1 0.515 0.42 0.14 0.769 0.2505 0.154 0.29 13 +-1 0.505 0.385 0.135 0.6185 0.251 0.1175 0.2 12 +-1 0.505 0.395 0.145 0.6515 0.2695 0.153 0.205 15 +0 0.4 0.31 0.1 0.2875 0.1145 0.0635 0.095 10 +1 0.49 0.395 0.135 0.5545 0.213 0.0925 0.215 14 +1 0.53 0.435 0.135 0.7365 0.3275 0.1315 0.22 12 +0 0.395 0.325 0.105 0.306 0.111 0.0735 0.095 8 +-1 0.665 0.535 0.19 1.496 0.5775 0.2815 0.475 17 +-1 0.415 0.305 0.105 0.3605 0.12 0.082 0.1 10 +1 0.43 0.345 0.115 0.3045 0.0925 0.055 0.12 11 +1 0.475 0.395 0.135 0.592 0.2465 0.1645 0.2 13 +-1 0.525 0.425 0.145 0.7995 0.3345 0.209 0.24 15 +0 0.48 0.39 0.145 0.5825 0.2315 0.121 0.255 15 +0 0.42 0.345 0.115 0.3435 0.1515 0.0795 0.115 9 +1 0.59 0.46 0.155 0.906 0.327 0.1485 0.335 15 +-1 0.515 0.42 0.135 0.6295 0.2815 0.127 0.215 9 +1 0.695 0.55 0.22 1.5515 0.566 0.3835 0.445 13 +-1 0.8 0.63 0.195 2.526 0.933 0.59 0.62 23 +1 0.61 0.49 0.15 1.103 0.425 0.2025 0.36 23 +-1 0.565 0.48 0.175 0.957 0.3885 0.215 0.275 18 +1 0.56 0.455 0.165 0.86 0.4015 0.1695 0.245 11 +1 0.655 0.485 0.195 1.62 0.6275 0.358 0.485 17 +1 0.64 0.52 0.2 1.407 0.566 0.304 0.455 17 +-1 0.59 0.47 0.17 0.9 0.355 0.1905 0.25 11 +0 0.31 0.24 0.09 0.1455 0.0605 0.0315 0.045 7 +0 0.255 0.185 0.07 0.075 0.028 0.018 0.025 6 +0 0.17 0.125 0.055 0.0235 0.009 0.0055 0.008 6 +1 0.67 0.55 0.17 1.247 0.472 0.2455 0.4 21 +-1 0.71 0.565 0.195 1.7265 0.638 0.3365 0.565 17 +-1 0.56 0.43 0.125 0.8025 0.313 0.1715 0.263 13 +1 0.505 0.4 0.13 0.764 0.3035 0.189 0.2175 11 +1 0.525 0.43 0.165 0.8645 0.376 0.1945 0.2515 16 +-1 0.45 0.36 0.105 0.4715 0.2035 0.0935 0.149 9 +-1 0.515 0.435 0.17 0.631 0.2765 0.111 0.216 12 +1 0.59 0.475 0.16 0.9455 0.3815 0.184 0.27 19 +1 0.7 0.53 0.19 1.3185 0.548 0.233 0.42 18 +-1 0.72 0.56 0.175 1.7265 0.637 0.3415 0.525 17 +1 0.635 0.495 0.15 1.081 0.4825 0.242 0.31 11 +1 0.555 0.44 0.135 0.9025 0.3805 0.2105 0.28 13 +1 0.575 0.47 0.15 1.1415 0.4515 0.204 0.4 13 +1 0.585 0.455 0.125 1.027 0.391 0.212 0.25 17 +-1 0.61 0.485 0.21 1.3445 0.535 0.2205 0.515 20 +-1 0.645 0.525 0.2 1.449 0.601 0.2565 0.505 13 +-1 0.545 0.44 0.175 0.7745 0.2985 0.1875 0.265 11 +1 0.55 0.45 0.155 0.7895 0.343 0.159 0.25 12 +-1 0.66 0.525 0.205 1.3665 0.5005 0.291 0.41 18 +1 0.57 0.475 0.195 1.0295 0.4635 0.1905 0.305 18 +-1 0.6 0.47 0.2 1.031 0.392 0.2035 0.29 15 +-1 0.63 0.505 0.165 1.065 0.4595 0.216 0.315 12 +1 0.695 0.57 0.23 1.885 0.8665 0.435 0.5 19 +1 0.65 0.545 0.16 1.2425 0.487 0.296 0.48 15 +-1 0.72 0.595 0.225 1.969 0.8045 0.423 0.66 16 +0 0.56 0.44 0.17 0.9445 0.3545 0.2175 0.3 12 +0 0.42 0.325 0.115 0.354 0.1625 0.064 0.105 8 +1 0.18 0.125 0.05 0.023 0.0085 0.0055 0.01 3 +-1 0.405 0.325 0.11 0.3575 0.145 0.0725 0.11 12 +-1 0.5 0.405 0.15 0.5965 0.253 0.126 0.185 12 +0 0.435 0.335 0.11 0.383 0.1555 0.0675 0.135 12 +1 0.34 0.275 0.09 0.2065 0.0725 0.043 0.07 10 +-1 0.43 0.34 0.11 0.382 0.154 0.0955 0.109 8 +0 0.535 0.41 0.155 0.6315 0.2745 0.1415 0.1815 12 +0 0.415 0.325 0.115 0.3285 0.1405 0.051 0.106 12 +-1 0.36 0.265 0.09 0.2165 0.096 0.037 0.0735 10 +1 0.175 0.135 0.04 0.0305 0.011 0.0075 0.01 5 +1 0.155 0.115 0.025 0.024 0.009 0.005 0.0075 5 +0 0.525 0.43 0.15 0.7365 0.3225 0.161 0.215 11 +-1 0.525 0.39 0.135 0.6005 0.2265 0.131 0.21 16 +-1 0.44 0.345 0.105 0.4285 0.165 0.083 0.132 11 +-1 0.45 0.345 0.115 0.496 0.1905 0.117 0.14 12 +-1 0.485 0.365 0.14 0.6195 0.2595 0.1445 0.177 14 +0 0.47 0.35 0.135 0.567 0.2315 0.1465 0.1525 11 +0 0.515 0.375 0.14 0.6505 0.2495 0.141 0.2215 10 +1 0.42 0.34 0.125 0.4495 0.165 0.1125 0.144 11 +-1 0.455 0.35 0.125 0.4485 0.1585 0.102 0.1335 16 +1 0.37 0.29 0.09 0.241 0.11 0.045 0.069 10 +1 0.33 0.25 0.09 0.197 0.085 0.041 0.0605 10 +0 0.3 0.22 0.09 0.1425 0.057 0.0335 0.043 7 +0 0.625 0.46 0.16 1.2395 0.55 0.273 0.38 14 +0 0.61 0.475 0.17 1.0385 0.4435 0.241 0.32 14 +0 0.625 0.465 0.155 0.972 0.404 0.1845 0.35 14 +0 0.635 0.505 0.19 1.3315 0.5805 0.252 0.435 17 +0 0.5 0.385 0.155 0.762 0.3795 0.161 0.19 14 +-1 0.53 0.43 0.17 0.775 0.35 0.152 0.235 17 +0 0.445 0.33 0.1 0.437 0.163 0.0755 0.17 13 +-1 0.585 0.415 0.155 0.6985 0.3 0.146 0.195 12 +0 0.44 0.355 0.165 0.435 0.159 0.105 0.14 16 +1 0.29 0.225 0.08 0.1295 0.0535 0.026 0.045 10 +0 0.555 0.455 0.17 0.8435 0.309 0.1905 0.3 15 +0 0.655 0.515 0.145 1.25 0.5265 0.283 0.315 15 +-1 0.58 0.46 0.185 1.017 0.3515 0.2 0.32 10 +0 0.625 0.43 0.175 1.411 0.572 0.297 0.395 12 +0 0.62 0.485 0.17 1.208 0.4805 0.3045 0.33 15 +-1 0.64 0.5 0.15 1.0705 0.371 0.2705 0.36 8 +-1 0.505 0.375 0.115 0.5895 0.2635 0.12 0.167 10 +0 0.5 0.395 0.12 0.537 0.2165 0.1085 0.1785 9 +1 0.31 0.245 0.095 0.15 0.0525 0.034 0.048 7 +-1 0.505 0.38 0.145 0.651 0.2935 0.19 0.17 12 +0 0.42 0.305 0.11 0.28 0.094 0.0785 0.0955 9 +1 0.4 0.315 0.105 0.287 0.1135 0.037 0.113 10 +1 0.425 0.315 0.125 0.3525 0.1135 0.0565 0.13 18 +1 0.31 0.235 0.06 0.12 0.0415 0.033 0.04 11 +-1 0.465 0.35 0.13 0.494 0.1945 0.103 0.155 18 +-1 0.465 0.36 0.12 0.4765 0.192 0.1125 0.16 10 +1 0.35 0.255 0.085 0.2145 0.1 0.0465 0.06 13 +0 0.52 0.415 0.16 0.595 0.2105 0.142 0.26 15 +-1 0.475 0.365 0.13 0.4805 0.1905 0.114 0.1475 12 +-1 0.41 0.315 0.11 0.321 0.1255 0.0655 0.095 10 +1 0.26 0.2 0.065 0.096 0.044 0.027 0.03 6 +0 0.575 0.45 0.17 0.9315 0.358 0.2145 0.26 13 +0 0.565 0.435 0.155 0.782 0.2715 0.168 0.285 14 +1 0.26 0.19 0.075 0.0945 0.0445 0.02 0.03 6 +-1 0.53 0.385 0.125 0.6695 0.289 0.151 0.18 10 +1 0.34 0.255 0.095 0.213 0.081 0.034 0.07 9 +0 0.52 0.38 0.14 0.525 0.1775 0.115 0.185 11 +-1 0.635 0.5 0.18 1.312 0.529 0.2485 0.485 18 +-1 0.61 0.485 0.165 1.087 0.4255 0.232 0.38 11 +-1 0.66 0.515 0.18 1.523 0.54 0.3365 0.555 16 +0 0.635 0.5 0.18 1.319 0.5485 0.292 0.49 16 +-1 0.465 0.38 0.135 0.579 0.208 0.1095 0.22 14 +1 0.515 0.4 0.16 0.8175 0.2515 0.156 0.3 23 +0 0.335 0.24 0.095 0.17 0.062 0.039 0.055 9 +-1 0.515 0.4 0.17 0.796 0.258 0.1755 0.28 16 +-1 0.345 0.255 0.1 0.197 0.071 0.051 0.06 9 +1 0.465 0.355 0.125 0.5255 0.2025 0.135 0.145 13 +1 0.54 0.415 0.17 0.879 0.339 0.208 0.255 10 +1 0.475 0.355 0.125 0.4625 0.186 0.107 0.145 9 +-1 0.445 0.335 0.14 0.4565 0.1785 0.114 0.14 11 +1 0.5 0.355 0.14 0.528 0.2125 0.149 0.14 9 +1 0.5 0.38 0.135 0.5835 0.2295 0.1265 0.18 12 +-1 0.55 0.435 0.17 0.884 0.2875 0.1645 0.28 14 +0 0.275 0.205 0.08 0.096 0.036 0.0185 0.03 6 +-1 0.35 0.265 0.09 0.1855 0.0745 0.0415 0.06 7 +-1 0.37 0.285 0.105 0.27 0.1125 0.0585 0.0835 9 +-1 0.42 0.33 0.125 0.463 0.186 0.11 0.145 10 +1 0.35 0.26 0.09 0.198 0.0725 0.056 0.06 10 +1 0.395 0.305 0.105 0.282 0.0975 0.065 0.096 9 +0 0.325 0.2 0.08 0.0995 0.0395 0.0225 0.032 8 +0 0.275 0.2 0.065 0.092 0.0385 0.0235 0.027 5 +0 0.235 0.17 0.065 0.0625 0.023 0.014 0.022 6 +0 0.25 0.18 0.06 0.073 0.028 0.017 0.0225 5 +0 0.25 0.185 0.065 0.071 0.027 0.0185 0.0225 5 +0 0.2 0.145 0.05 0.036 0.0125 0.008 0.011 4 +-1 0.585 0.47 0.17 1.099 0.3975 0.2325 0.358 20 +1 0.445 0.35 0.14 0.5905 0.2025 0.158 0.19 14 +-1 0.5 0.385 0.13 0.768 0.2625 0.095 0.27 13 +1 0.44 0.325 0.08 0.413 0.144 0.1015 0.13 8 +1 0.515 0.405 0.14 0.8505 0.312 0.146 0.315 17 +-1 0.52 0.405 0.14 0.6915 0.276 0.137 0.215 11 +1 0.5 0.39 0.13 0.709 0.275 0.168 0.18 11 +1 0.425 0.325 0.12 0.3755 0.142 0.1065 0.105 9 +1 0.51 0.415 0.14 0.8185 0.3025 0.2155 0.235 16 +-1 0.37 0.275 0.08 0.227 0.093 0.0625 0.07 8 +1 0.54 0.415 0.13 0.8245 0.272 0.226 0.24 13 +1 0.615 0.475 0.17 1.1825 0.474 0.2895 0.24 11 +1 0.565 0.44 0.175 1.122 0.393 0.2 0.375 20 +1 0.645 0.515 0.175 1.6115 0.6745 0.384 0.385 14 +-1 0.615 0.47 0.175 1.2985 0.5135 0.343 0.32 14 +1 0.605 0.49 0.145 1.3 0.517 0.3285 0.31 14 +-1 0.59 0.455 0.165 1.161 0.38 0.2455 0.28 12 +1 0.645 0.485 0.155 1.489 0.5915 0.312 0.38 18 +1 0.57 0.42 0.155 1.008 0.377 0.193 0.34 13 +-1 0.47 0.355 0.18 0.441 0.1525 0.1165 0.135 8 +-1 0.5 0.44 0.155 0.742 0.2025 0.2005 0.2115 14 +-1 0.52 0.425 0.145 0.7 0.207 0.1905 0.24 13 +1 0.39 0.285 0.095 0.271 0.11 0.06 0.08 8 +1 0.52 0.4 0.165 0.8565 0.2745 0.201 0.21 12 +-1 0.54 0.415 0.175 0.8975 0.275 0.241 0.275 14 +1 0.46 0.36 0.135 0.6105 0.1955 0.107 0.235 14 +0 0.355 0.26 0.09 0.1925 0.077 0.038 0.065 8 +-1 0.49 0.4 0.145 0.6635 0.21 0.1295 0.2515 13 +-1 0.63 0.51 0.185 1.235 0.5115 0.349 0.3065 11 +1 0.5 0.385 0.145 0.7615 0.246 0.195 0.204 14 +1 0.49 0.39 0.135 0.592 0.242 0.096 0.1835 15 +1 0.44 0.325 0.115 0.39 0.163 0.087 0.113 7 +-1 0.515 0.395 0.165 0.7565 0.1905 0.17 0.3205 10 +-1 0.475 0.38 0.145 0.57 0.167 0.118 0.187 11 +0 0.42 0.31 0.1 0.2865 0.115 0.0735 0.085 8 +1 0.4 0.305 0.13 0.2935 0.096 0.0675 0.105 9 +1 0.45 0.36 0.16 0.567 0.174 0.1245 0.225 12 +-1 0.52 0.4 0.13 0.6245 0.215 0.2065 0.17 15 +1 0.505 0.4 0.155 0.8415 0.2715 0.1775 0.285 12 +1 0.495 0.4 0.14 0.7775 0.2015 0.18 0.25 15 +1 0.54 0.41 0.145 0.989 0.2815 0.213 0.355 19 +-1 0.48 0.39 0.125 0.6905 0.219 0.155 0.2 12 +-1 0.33 0.26 0.08 0.2 0.0625 0.05 0.07 9 +0 0.285 0.21 0.07 0.109 0.044 0.0265 0.033 5 +0 0.3 0.23 0.075 0.127 0.052 0.03 0.0345 6 +0 0.31 0.24 0.105 0.2885 0.118 0.065 0.083 6 +0 0.34 0.255 0.075 0.18 0.0745 0.04 0.0525 6 +0 0.375 0.3 0.075 0.144 0.059 0.03 0.044 7 +0 0.415 0.325 0.1 0.4665 0.2285 0.1065 0.114 7 +0 0.415 0.315 0.105 0.33 0.1405 0.0705 0.095 6 +0 0.415 0.315 0.09 0.3625 0.175 0.0835 0.093 6 +0 0.42 0.32 0.1 0.34 0.1745 0.05 0.0945 8 +0 0.425 0.31 0.105 0.365 0.159 0.0825 0.105 6 +1 0.465 0.375 0.11 0.5 0.21 0.113 0.1505 8 +-1 0.465 0.35 0.135 0.6265 0.259 0.1445 0.175 8 +0 0.47 0.37 0.11 0.5555 0.25 0.115 0.163 8 +-1 0.47 0.375 0.12 0.6015 0.2765 0.1455 0.135 8 +0 0.475 0.365 0.12 0.53 0.2505 0.0975 0.1625 10 +1 0.48 0.37 0.135 0.6315 0.3445 0.1015 0.161 7 +1 0.5 0.4 0.13 0.7715 0.37 0.16 0.211 8 +0 0.505 0.39 0.185 0.6125 0.267 0.142 0.172 7 +1 0.525 0.425 0.19 0.872 0.4625 0.1725 0.199 9 +1 0.54 0.42 0.12 0.8115 0.392 0.1455 0.2235 9 +1 0.545 0.45 0.15 0.8795 0.387 0.15 0.2625 11 +-1 0.565 0.44 0.15 0.983 0.4475 0.2355 0.2485 9 +1 0.58 0.46 0.18 1.145 0.48 0.277 0.325 11 +1 0.59 0.455 0.16 1.09 0.5 0.2215 0.292 9 +1 0.59 0.48 0.16 1.262 0.5685 0.2725 0.335 9 +1 0.595 0.49 0.185 1.185 0.482 0.2015 0.361 10 +-1 0.6 0.475 0.135 1.4405 0.5885 0.191 0.3175 9 +-1 0.6 0.5 0.155 1.332 0.6235 0.2835 0.35 8 +-1 0.6 0.485 0.165 1.1405 0.587 0.2175 0.288 9 +1 0.605 0.475 0.175 1.201 0.5395 0.275 0.309 10 +-1 0.625 0.49 0.155 1.33 0.6675 0.259 0.33 10 +1 0.63 0.5 0.185 1.362 0.5785 0.3125 0.384 10 +1 0.64 0.585 0.195 1.647 0.7225 0.331 0.471 12 +-1 0.64 0.5 0.18 1.4995 0.593 0.314 0.431 11 +-1 0.655 0.545 0.165 1.6225 0.6555 0.299 0.513 12 +0 0.66 0.525 0.215 1.786 0.6725 0.3615 0.4065 11 +1 0.66 0.535 0.2 1.791 0.733 0.318 0.54 15 +-1 0.675 0.555 0.205 1.925 0.713 0.358 0.4535 13 +-1 0.675 0.55 0.175 1.689 0.694 0.371 0.474 13 +-1 0.69 0.55 0.18 1.659 0.8715 0.2655 0.4395 9 +-1 0.695 0.53 0.2 2.0475 0.75 0.4195 0.6095 14 +-1 0.7 0.525 0.19 1.6015 0.707 0.365 0.43 10 +-1 0.73 0.57 0.165 2.0165 1.0685 0.418 0.435 10 +0 0.205 0.15 0.065 0.04 0.02 0.011 0.013 4 +0 0.225 0.17 0.07 0.0565 0.024 0.013 0.016 4 +0 0.23 0.18 0.05 0.064 0.0215 0.0135 0.02 5 +0 0.275 0.195 0.07 0.0875 0.0345 0.022 0.0255 4 +0 0.28 0.21 0.055 0.106 0.0415 0.0265 0.031 5 +0 0.28 0.22 0.08 0.1315 0.066 0.024 0.03 5 +0 0.295 0.22 0.07 0.126 0.0515 0.0275 0.035 6 +0 0.31 0.225 0.075 0.155 0.065 0.037 0.0365 6 +0 0.315 0.235 0.07 0.149 0.058 0.0325 0.047 7 +0 0.34 0.265 0.07 0.185 0.0625 0.0395 0.07 7 +0 0.37 0.29 0.08 0.2545 0.108 0.0565 0.07 6 +0 0.38 0.285 0.085 0.237 0.115 0.0405 0.07 6 +0 0.39 0.295 0.1 0.279 0.1155 0.059 0.08 7 +0 0.405 0.31 0.065 0.3205 0.1575 0.066 0.088 6 +0 0.415 0.325 0.1 0.3335 0.1445 0.0715 0.095 7 +0 0.44 0.335 0.11 0.3885 0.175 0.0835 0.111 7 +0 0.44 0.345 0.115 0.545 0.269 0.111 0.1305 6 +0 0.44 0.325 0.1 0.4165 0.185 0.0865 0.11 6 +0 0.44 0.355 0.12 0.495 0.231 0.11 0.125 7 +0 0.45 0.35 0.125 0.4775 0.2235 0.089 0.118 6 +0 0.45 0.35 0.12 0.468 0.2005 0.1065 0.1325 8 +-1 0.455 0.35 0.12 0.4555 0.1945 0.1045 0.1375 7 +-1 0.46 0.35 0.115 0.46 0.2025 0.1115 0.1165 6 +0 0.46 0.345 0.12 0.4155 0.198 0.0885 0.107 7 +0 0.46 0.345 0.115 0.4215 0.1895 0.102 0.111 6 +0 0.465 0.355 0.11 0.474 0.23 0.1005 0.12 7 +1 0.465 0.34 0.105 0.486 0.231 0.1035 0.1225 9 +0 0.475 0.385 0.11 0.5735 0.311 0.1025 0.136 7 +0 0.475 0.355 0.105 0.468 0.201 0.1115 0.12 8 +1 0.48 0.37 0.1 0.5135 0.243 0.1015 0.135 8 +1 0.5 0.375 0.145 0.6215 0.274 0.166 0.1485 7 +0 0.5 0.38 0.11 0.494 0.218 0.09 0.1325 7 +0 0.505 0.385 0.12 0.6005 0.239 0.142 0.185 7 +1 0.515 0.395 0.12 0.646 0.285 0.1365 0.172 9 +1 0.525 0.415 0.135 0.7945 0.394 0.189 0.202 7 +1 0.525 0.425 0.125 0.812 0.4035 0.1705 0.195 8 +-1 0.53 0.42 0.17 0.828 0.41 0.208 0.1505 6 +1 0.53 0.41 0.14 0.681 0.3095 0.1415 0.1835 6 +-1 0.53 0.405 0.15 0.889 0.4055 0.2275 0.215 8 +1 0.54 0.435 0.14 0.7345 0.33 0.1595 0.213 9 +-1 0.55 0.425 0.125 0.964 0.5475 0.159 0.215 8 +-1 0.555 0.425 0.14 0.963 0.44 0.224 0.24 7 +-1 0.57 0.445 0.15 0.995 0.504 0.185 0.2505 9 +-1 0.57 0.435 0.14 0.8585 0.3905 0.196 0.2295 8 +1 0.575 0.45 0.155 0.948 0.429 0.206 0.259 7 +-1 0.58 0.445 0.145 0.888 0.41 0.1815 0.2425 8 +-1 0.585 0.45 0.16 0.9045 0.405 0.2215 0.2335 8 +1 0.59 0.465 0.14 1.046 0.4695 0.263 0.263 7 +-1 0.595 0.47 0.155 1.1775 0.542 0.269 0.31 9 +-1 0.595 0.465 0.15 1.0765 0.491 0.22 0.287 9 +-1 0.595 0.465 0.15 1.0255 0.412 0.2745 0.289 11 +-1 0.6 0.46 0.145 0.9325 0.3985 0.2245 0.248 8 +-1 0.6 0.46 0.15 1.235 0.6025 0.274 0.29 8 +1 0.6 0.46 0.15 1.247 0.5335 0.2735 0.29 9 +1 0.61 0.48 0.15 1.1495 0.564 0.274 0.264 8 +-1 0.615 0.485 0.16 1.1575 0.5005 0.2495 0.315 10 +-1 0.615 0.5 0.165 1.327 0.6 0.3015 0.355 10 +1 0.615 0.47 0.155 1.2 0.5085 0.32 0.292 8 +-1 0.62 0.51 0.175 1.2705 0.5415 0.323 0.3225 9 +-1 0.62 0.485 0.175 1.2155 0.545 0.253 0.345 10 +-1 0.62 0.475 0.16 1.3245 0.6865 0.233 0.3275 9 +1 0.625 0.48 0.17 1.3555 0.671 0.268 0.3385 10 +-1 0.625 0.49 0.165 1.127 0.477 0.2365 0.3185 9 +-1 0.625 0.49 0.175 1.1075 0.4485 0.2165 0.3595 8 +-1 0.63 0.495 0.2 1.4255 0.659 0.336 0.38 11 +-1 0.63 0.495 0.145 1.147 0.5455 0.266 0.2885 9 +1 0.63 0.48 0.165 1.286 0.604 0.271 0.35 8 +-1 0.635 0.495 0.18 1.596 0.617 0.317 0.37 11 +-1 0.635 0.495 0.195 1.297 0.556 0.2985 0.37 11 +1 0.645 0.49 0.16 1.251 0.5355 0.3345 0.3165 9 +1 0.645 0.5 0.175 1.5105 0.6735 0.3755 0.3775 12 +-1 0.65 0.5 0.185 1.4415 0.741 0.2955 0.341 9 +1 0.67 0.52 0.19 1.6385 0.8115 0.369 0.391 9 +-1 0.69 0.545 0.205 1.933 0.7855 0.429 0.498 13 +1 0.69 0.54 0.185 1.71 0.7725 0.3855 0.4325 8 +-1 0.695 0.55 0.155 1.8495 0.767 0.442 0.4175 10 +1 0.695 0.525 0.175 1.742 0.696 0.389 0.505 12 +-1 0.7 0.575 0.205 1.7975 0.7295 0.3935 0.5165 13 +-1 0.705 0.56 0.205 2.381 0.9915 0.5005 0.624 10 +1 0.765 0.585 0.18 2.398 1.128 0.512 0.5335 12 +1 0.77 0.6 0.215 2.1945 1.0515 0.482 0.584 10 +0 0.22 0.16 0.05 0.049 0.0215 0.01 0.015 4 +0 0.275 0.205 0.07 0.1055 0.495 0.019 0.0315 5 +0 0.29 0.21 0.06 0.1045 0.0415 0.022 0.035 5 +0 0.33 0.24 0.075 0.163 0.0745 0.033 0.048 6 +0 0.355 0.285 0.095 0.2275 0.0955 0.0475 0.0715 6 +0 0.375 0.29 0.1 0.219 0.0925 0.038 0.075 6 +0 0.415 0.315 0.1 0.3645 0.1765 0.0795 0.095 8 +0 0.425 0.33 0.115 0.3265 0.1315 0.077 0.103 6 +0 0.425 0.34 0.1 0.3515 0.1625 0.082 0.094 7 +0 0.43 0.32 0.1 0.3465 0.1635 0.08 0.09 7 +0 0.44 0.34 0.1 0.407 0.209 0.0735 0.103 7 +0 0.44 0.335 0.115 0.4215 0.173 0.0765 0.113 7 +0 0.46 0.345 0.11 0.3755 0.1525 0.058 0.125 7 +0 0.46 0.37 0.12 0.5335 0.2645 0.108 0.1345 6 +0 0.465 0.355 0.105 0.442 0.2085 0.0975 0.1185 7 +0 0.475 0.365 0.1 0.1315 0.2025 0.0875 0.123 7 +0 0.475 0.375 0.115 0.5205 0.233 0.119 0.1455 7 +0 0.485 0.375 0.13 0.5535 0.266 0.112 0.157 8 +0 0.49 0.375 0.125 0.5445 0.279 0.115 0.13 8 +1 0.49 0.38 0.11 0.554 0.2935 0.1005 0.15 8 +0 0.495 0.38 0.12 0.512 0.233 0.1205 0.136 7 +0 0.5 0.39 0.125 0.583 0.294 0.132 0.1605 8 +1 0.5 0.38 0.12 0.5765 0.273 0.135 0.145 9 +1 0.505 0.4 0.135 0.723 0.377 0.149 0.178 7 +0 0.51 0.395 0.155 0.5395 0.2465 0.1085 0.167 8 +0 0.51 0.385 0.15 0.625 0.3095 0.119 0.1725 8 +0 0.515 0.4 0.125 0.5925 0.265 0.1175 0.168 9 +0 0.52 0.395 0.135 0.633 0.2985 0.1295 0.175 9 +-1 0.545 0.43 0.14 0.832 0.4355 0.17 0.201 9 +1 0.545 0.42 0.145 0.778 0.3745 0.1545 0.205 7 +1 0.545 0.42 0.12 0.7865 0.403 0.185 0.17 7 +-1 0.545 0.4 0.14 0.778 0.368 0.215 0.18 9 +0 0.55 0.42 0.13 0.636 0.294 0.144 0.1755 8 +-1 0.55 0.44 0.135 0.8435 0.434 0.1995 0.185 8 +0 0.555 0.425 0.13 0.648 0.2835 0.133 0.2105 8 +1 0.565 0.43 0.13 0.784 0.3495 0.1885 0.213 9 +-1 0.57 0.45 0.18 0.908 0.4015 0.217 0.255 9 +1 0.57 0.45 0.135 1.02 0.546 0.204 0.25 9 +-1 0.57 0.43 0.16 0.811 0.3875 0.159 0.2285 9 +-1 0.575 0.48 0.15 0.897 0.4235 0.1905 0.248 8 +1 0.58 0.455 0.13 0.852 0.41 0.1725 0.225 8 +-1 0.585 0.45 0.15 0.938 0.467 0.203 0.225 7 +-1 0.585 0.435 0.14 0.6955 0.3085 0.129 0.2245 8 +1 0.59 0.47 0.15 0.861 0.413 0.164 0.249 8 +1 0.59 0.46 0.14 1.004 0.496 0.2165 0.26 9 +-1 0.59 0.46 0.16 1.0115 0.445 0.2615 0.2565 8 +-1 0.595 0.465 0.15 1.1005 0.5415 0.166 0.265 8 +1 0.595 0.47 0.165 1.108 0.4915 0.2325 0.3345 9 +1 0.595 0.46 0.14 0.852 0.4215 0.2255 0.227 9 +1 0.6 0.49 0.21 1.9875 1.005 0.419 0.491 10 +-1 0.605 0.48 0.15 1.079 0.4505 0.2835 0.293 10 +-1 0.615 0.475 0.17 1.055 0.543 0.246 0.2345 9 +1 0.615 0.45 0.15 1.198 0.707 0.2095 0.2505 7 +-1 0.615 0.47 0.155 1.084 0.5885 0.209 0.246 9 +1 0.615 0.475 0.175 1.103 0.4635 0.3095 0.2725 10 +1 0.62 0.49 0.155 1.1 0.505 0.2475 0.31 9 +1 0.62 0.48 0.15 1.1015 0.4965 0.243 0.305 10 +1 0.625 0.495 0.185 1.3835 0.7105 0.3005 0.345 11 +-1 0.625 0.49 0.155 1.115 0.484 0.277 0.3095 9 +1 0.625 0.48 0.145 1.085 0.4645 0.2445 0.327 10 +1 0.63 0.505 0.15 1.3165 0.6325 0.2465 0.37 11 +1 0.63 0.51 0.175 1.3415 0.6575 0.262 0.375 10 +1 0.63 0.465 0.15 1.027 0.537 0.188 0.176 8 +1 0.645 0.515 0.16 1.1845 0.506 0.311 0.335 9 +1 0.645 0.48 0.15 1.192 0.6055 0.2595 0.285 9 +-1 0.645 0.52 0.18 1.285 0.5775 0.352 0.317 9 +1 0.65 0.515 0.125 1.1805 0.5235 0.283 0.3275 9 +1 0.65 0.52 0.175 1.2655 0.615 0.2775 0.336 9 +-1 0.65 0.535 0.175 1.2895 0.6095 0.2765 0.344 10 +1 0.65 0.51 0.155 1.407 0.7215 0.298 0.335 9 +-1 0.65 0.49 0.155 1.122 0.545 0.228 0.3055 9 +1 0.66 0.515 0.165 1.4465 0.694 0.298 0.3755 10 +-1 0.665 0.505 0.165 1.349 0.5985 0.3175 0.36 9 +1 0.67 0.5 0.2 1.269 0.576 0.2985 0.351 11 +1 0.67 0.51 0.18 1.68 0.926 0.2975 0.3935 13 +-1 0.675 0.55 0.19 1.551 0.7105 0.3685 0.412 13 +1 0.68 0.52 0.165 1.4775 0.724 0.279 0.406 11 +1 0.68 0.53 0.18 1.529 0.7635 0.3115 0.4025 11 +1 0.7 0.525 0.175 1.7585 0.8745 0.3615 0.47 10 +1 0.7 0.55 0.2 1.523 0.693 0.306 0.4405 13 +-1 0.725 0.53 0.19 1.7315 0.83 0.398 0.405 11 +1 0.725 0.55 0.2 1.51 0.8735 0.4265 0.5085 9 +1 0.735 0.57 0.175 1.88 0.9095 0.387 0.488 11 +-1 0.74 0.575 0.22 2.012 0.8915 0.5265 0.471 12 +1 0.75 0.555 0.215 2.201 1.0615 0.5235 0.5285 11 +0 0.19 0.14 0.03 0.0315 0.0125 0.005 0.0105 3 +0 0.21 0.15 0.045 0.04 0.0135 0.008 0.0105 4 +0 0.25 0.175 0.06 0.0635 0.0275 0.008 0.02 4 +0 0.29 0.215 0.065 0.0985 0.0425 0.021 0.031 5 +0 0.335 0.25 0.08 0.167 0.0675 0.0325 0.0575 6 +0 0.34 0.245 0.085 0.2015 0.1005 0.038 0.053 6 +0 0.345 0.255 0.095 0.183 0.075 0.0385 0.06 6 +0 0.355 0.255 0.08 0.187 0.078 0.0505 0.058 7 +0 0.36 0.26 0.08 0.1795 0.074 0.0315 0.06 5 +0 0.37 0.275 0.09 0.2065 0.096 0.0395 0.058 7 +0 0.375 0.29 0.14 0.3 0.14 0.0625 0.0825 8 +0 0.375 0.275 0.095 0.2295 0.095 0.0545 0.066 7 +0 0.385 0.3 0.125 0.343 0.1705 0.0735 0.081 7 +0 0.385 0.285 0.085 0.244 0.1215 0.0445 0.068 8 +0 0.395 0.32 0.1 0.3075 0.149 0.0535 0.09 8 +0 0.4 0.305 0.1 0.3415 0.176 0.0625 0.0865 7 +0 0.405 0.305 0.1 0.271 0.0965 0.061 0.091 7 +0 0.405 0.31 0.11 0.91 0.416 0.2075 0.0995 8 +0 0.405 0.305 0.1 0.268 0.1145 0.053 0.085 7 +0 0.405 0.3 0.09 0.2885 0.138 0.0635 0.0765 6 +0 0.41 0.315 0.1 0.3 0.124 0.0575 0.1 8 +0 0.41 0.325 0.11 0.326 0.1325 0.075 0.101 8 +0 0.415 0.335 0.1 0.358 0.169 0.067 0.105 7 +0 0.42 0.325 0.115 0.314 0.1295 0.0635 0.1 8 +0 0.42 0.315 0.11 0.4025 0.1855 0.083 0.1015 8 +0 0.43 0.34 0.11 0.3645 0.159 0.0855 0.105 7 +0 0.445 0.36 0.11 0.4235 0.182 0.0765 0.14 9 +1 0.45 0.325 0.115 0.4305 0.2235 0.0785 0.1155 8 +0 0.45 0.335 0.095 0.3505 0.1615 0.0625 0.1185 7 +0 0.455 0.34 0.115 0.486 0.261 0.0655 0.1315 8 +0 0.46 0.35 0.1 0.471 0.252 0.077 0.123 8 +0 0.46 0.345 0.105 0.415 0.187 0.087 0.11 8 +0 0.475 0.355 0.115 0.5195 0.279 0.088 0.1325 7 +1 0.48 0.375 0.12 0.5895 0.2535 0.128 0.172 11 +0 0.485 0.38 0.125 0.5215 0.2215 0.118 0.16 8 +0 0.485 0.365 0.14 0.4475 0.1895 0.0925 0.2305 8 +0 0.49 0.365 0.125 0.5585 0.252 0.126 0.1615 10 +0 0.505 0.385 0.125 0.596 0.245 0.097 0.21 9 +0 0.505 0.38 0.135 0.5385 0.2645 0.095 0.165 9 +0 0.51 0.385 0.145 0.7665 0.3985 0.14 0.1805 8 +-1 0.515 0.395 0.135 0.516 0.2015 0.132 0.162 9 +1 0.515 0.41 0.14 0.7355 0.3065 0.137 0.2 7 +0 0.515 0.39 0.11 0.531 0.2415 0.098 0.1615 8 +0 0.525 0.385 0.13 0.607 0.2355 0.125 0.195 8 +-1 0.525 0.415 0.15 0.7055 0.329 0.147 0.199 10 +0 0.525 0.4 0.13 0.6445 0.345 0.1285 0.2 8 +0 0.525 0.375 0.12 0.6315 0.3045 0.114 0.19 9 +1 0.535 0.43 0.155 0.7845 0.3285 0.169 0.245 10 +-1 0.545 0.44 0.15 0.9475 0.366 0.239 0.275 8 +0 0.55 0.43 0.145 0.712 0.3025 0.152 0.225 10 +0 0.55 0.425 0.145 0.89 0.4325 0.171 0.236 10 +0 0.55 0.42 0.155 0.912 0.495 0.1805 0.205 9 +0 0.55 0.425 0.135 0.656 0.257 0.17 0.203 10 +0 0.55 0.465 0.15 0.936 0.481 0.174 0.2435 9 +0 0.555 0.435 0.145 0.6975 0.262 0.1575 0.24 11 +-1 0.555 0.445 0.175 1.1465 0.551 0.244 0.2785 8 +0 0.56 0.44 0.14 0.825 0.402 0.139 0.245 10 +0 0.56 0.435 0.135 0.72 0.329 0.103 0.251 11 +0 0.565 0.43 0.15 0.8215 0.332 0.1685 0.29 11 +-1 0.57 0.445 0.155 1.017 0.5265 0.2025 0.265 10 +-1 0.575 0.435 0.155 0.8975 0.4115 0.2325 0.23 9 +1 0.58 0.44 0.175 1.2255 0.5405 0.2705 0.3265 10 +-1 0.58 0.465 0.145 0.9865 0.47 0.2155 0.25 11 +-1 0.58 0.425 0.15 0.844 0.3645 0.185 0.2705 9 +0 0.585 0.46 0.145 0.8465 0.339 0.167 0.295 10 +1 0.585 0.465 0.165 0.885 0.4025 0.1625 0.274 10 +0 0.585 0.42 0.145 0.6735 0.2895 0.1345 0.22 9 +-1 0.585 0.455 0.13 0.8755 0.411 0.2065 0.225 8 +1 0.59 0.47 0.145 0.9235 0.4545 0.173 0.254 9 +1 0.59 0.475 0.14 0.977 0.4625 0.2025 0.275 10 +1 0.595 0.475 0.14 1.0305 0.4925 0.217 0.278 10 +1 0.6 0.48 0.09 1.05 0.457 0.2685 0.28 8 +1 0.6 0.495 0.185 1.1145 0.5055 0.2635 0.367 11 +1 0.6 0.45 0.145 0.877 0.4325 0.155 0.24 9 +1 0.6 0.51 0.185 1.285 0.6095 0.2745 0.315 9 +1 0.61 0.48 0.185 1.3065 0.6895 0.2915 0.29 10 +-1 0.61 0.45 0.13 0.8725 0.389 0.1715 0.272 11 +-1 0.615 0.46 0.15 1.0265 0.4935 0.201 0.2745 10 +-1 0.62 0.465 0.14 1.1605 0.6005 0.2195 0.307 9 +-1 0.62 0.48 0.165 1.0125 0.5325 0.4365 0.324 10 +1 0.625 0.5 0.14 1.096 0.5445 0.2165 0.295 10 +1 0.625 0.49 0.165 1.205 0.5175 0.3105 0.3465 10 +1 0.63 0.505 0.175 1.221 0.555 0.252 0.34 12 +-1 0.63 0.475 0.155 1.0005 0.452 0.252 0.265 10 +1 0.63 0.47 0.15 1.1355 0.539 0.2325 0.3115 12 +1 0.63 0.525 0.195 1.3135 0.4935 0.2565 0.465 10 +1 0.64 0.505 0.155 1.1955 0.5565 0.211 0.346 11 +1 0.64 0.485 0.15 1.098 0.5195 0.222 0.3175 10 +1 0.64 0.495 0.17 1.139 0.5395 0.282 0.285 10 +-1 0.64 0.495 0.17 1.2265 0.49 0.377 0.2875 11 +1 0.64 0.515 0.08 1.042 0.515 0.1755 0.175 10 +1 0.65 0.52 0.155 1.368 0.6185 0.288 0.365 9 +1 0.65 0.51 0.175 1.446 0.6485 0.2705 0.45 12 +-1 0.66 0.505 0.19 1.4045 0.6255 0.3375 0.3745 9 +-1 0.66 0.525 0.2 1.463 0.6525 0.2995 0.422 11 +-1 0.675 0.525 0.17 1.711 0.8365 0.352 0.475 9 +1 0.7 0.54 0.205 1.74 0.7885 0.373 0.4865 13 +-1 0.705 0.54 0.205 1.757 0.8265 0.417 0.461 9 +1 0.71 0.565 0.2 1.601 0.706 0.321 0.45 11 +1 0.72 0.55 0.205 2.165 1.1055 0.525 0.404 10 +1 0.725 0.57 0.19 2.3305 1.253 0.541 0.52 9 +0 0.24 0.17 0.05 0.0545 0.0205 0.016 0.0155 5 +0 0.255 0.195 0.055 0.0725 0.0285 0.017 0.021 4 +0 0.275 0.2 0.055 0.0925 0.038 0.021 0.026 4 +0 0.32 0.235 0.09 0.183 0.098 0.0335 0.042 7 +0 0.325 0.24 0.075 0.1525 0.072 0.0645 0.043 6 +0 0.33 0.225 0.075 0.187 0.0945 0.0395 0.0425 7 +0 0.36 0.27 0.09 0.232 0.12 0.0435 0.056 8 +0 0.375 0.265 0.095 0.196 0.085 0.042 0.0585 5 +0 0.375 0.285 0.09 0.2545 0.119 0.0595 0.0675 6 +0 0.39 0.29 0.09 0.2625 0.117 0.054 0.077 7 +0 0.45 0.335 0.105 0.362 0.1575 0.0795 0.1095 7 +0 0.455 0.35 0.105 0.4445 0.213 0.107 0.1115 7 +0 0.46 0.365 0.115 0.511 0.2365 0.118 0.123 7 +0 0.495 0.375 0.12 0.589 0.3075 0.1215 0.1405 8 +1 0.5 0.365 0.13 0.5945 0.309 0.1085 0.1535 9 +0 0.5 0.375 0.12 0.529 0.2235 0.123 0.16 8 +1 0.52 0.4 0.105 0.872 0.4515 0.1615 0.1985 9 +0 0.52 0.395 0.145 0.77 0.424 0.142 0.1895 7 +-1 0.525 0.43 0.135 0.8435 0.4325 0.18 0.1815 9 +1 0.535 0.405 0.14 0.818 0.402 0.1715 0.189 7 +-1 0.54 0.42 0.14 0.8035 0.38 0.1805 0.21 9 +-1 0.54 0.415 0.15 0.8115 0.3875 0.1875 0.2035 9 +-1 0.57 0.425 0.13 0.782 0.3695 0.1745 0.1965 8 +1 0.57 0.42 0.14 0.8745 0.416 0.165 0.25 8 +1 0.58 0.445 0.16 0.984 0.49 0.201 0.27 9 +-1 0.58 0.445 0.135 0.95 0.484 0.182 0.2325 8 +1 0.59 0.47 0.155 1.1735 0.6245 0.233 0.2595 9 +-1 0.59 0.455 0.15 0.976 0.465 0.2055 0.2765 10 +1 0.59 0.485 0.155 1.0785 0.4535 0.2435 0.31 9 +1 0.595 0.435 0.16 1.057 0.4255 0.224 0.31 9 +1 0.6 0.475 0.175 1.11 0.5105 0.256 0.285 9 +1 0.6 0.45 0.16 1.142 0.539 0.225 0.307 10 +1 0.605 0.475 0.19 1.1255 0.59 0.247 0.26 10 +-1 0.62 0.48 0.17 1.1045 0.535 0.25 0.287 10 +1 0.625 0.475 0.175 1.3405 0.656 0.283 0.337 10 +1 0.625 0.5 0.13 1.082 0.5785 0.2045 0.25 8 +-1 0.625 0.485 0.16 1.254 0.591 0.259 0.3485 9 +1 0.63 0.49 0.165 1.2005 0.575 0.273 0.294 10 +1 0.63 0.485 0.16 1.243 0.623 0.275 0.3 10 +-1 0.635 0.51 0.185 1.286 0.526 0.295 0.4105 12 +-1 0.645 0.49 0.16 1.1665 0.4935 0.3155 0.299 9 +-1 0.645 0.49 0.16 1.144 0.5015 0.289 0.319 8 +-1 0.65 0.525 0.19 1.385 0.8875 0.3095 0.405 11 +-1 0.655 0.515 0.155 1.309 0.524 0.346 0.385 11 +-1 0.655 0.515 0.17 1.527 0.8485 0.2635 0.331 11 +1 0.665 0.515 0.19 1.6385 0.831 0.3575 0.371 11 +1 0.695 0.54 0.195 1.691 0.768 0.363 0.4755 11 +-1 0.72 0.565 0.18 1.719 0.8465 0.407 0.3875 11 +-1 0.72 0.55 0.18 1.52 0.637 0.325 0.435 10 +-1 0.72 0.565 0.17 1.613 0.723 0.3255 0.4945 12 +1 0.735 0.57 0.21 2.2355 1.1705 0.463 0.5315 10 +1 0.74 0.595 0.19 2.3235 1.1495 0.5115 0.505 11 +0 0.31 0.23 0.07 0.1245 0.0505 0.0265 0.038 6 +0 0.315 0.235 0.075 0.1285 0.051 0.028 0.0405 4 +0 0.32 0.205 0.08 0.181 0.088 0.034 0.0495 5 +0 0.325 0.25 0.075 0.1585 0.075 0.0305 0.0455 6 +0 0.335 0.26 0.09 0.1965 0.0875 0.041 0.056 7 +0 0.37 0.28 0.085 0.198 0.0805 0.0455 0.058 5 +0 0.37 0.27 0.09 0.1855 0.07 0.0425 0.065 7 +0 0.375 0.28 0.085 0.2145 0.0855 0.0485 0.072 7 +0 0.4 0.315 0.09 0.3245 0.151 0.073 0.088 8 +0 0.41 0.305 0.095 0.2625 0.1 0.0515 0.09 6 +0 0.425 0.34 0.1 0.371 0.15 0.0865 0.115 8 +0 0.435 0.335 0.095 0.298 0.109 0.058 0.115 7 +0 0.445 0.31 0.09 0.336 0.1555 0.09 0.0855 7 +0 0.46 0.36 0.14 0.447 0.161 0.087 0.16 9 +-1 0.465 0.35 0.11 0.4085 0.165 0.102 0.131 8 +0 0.47 0.385 0.13 0.587 0.264 0.117 0.174 8 +0 0.475 0.375 0.11 0.494 0.211 0.109 0.1545 8 +0 0.495 0.375 0.12 0.614 0.2855 0.1365 0.161 8 +0 0.5 0.39 0.13 0.5075 0.2115 0.104 0.1755 9 +0 0.5 0.37 0.12 0.5445 0.249 0.1065 0.152 8 +0 0.505 0.425 0.125 0.6115 0.245 0.1375 0.2 9 +0 0.505 0.4 0.125 0.5605 0.2255 0.1435 0.17 8 +1 0.505 0.365 0.115 0.521 0.25 0.096 0.15 8 +0 0.51 0.4 0.145 0.5775 0.231 0.143 0.177 9 +0 0.51 0.4 0.125 0.5935 0.239 0.13 0.204 8 +0 0.52 0.4 0.11 0.597 0.2935 0.1155 0.16 8 +1 0.52 0.465 0.15 0.9505 0.456 0.199 0.255 8 +0 0.53 0.38 0.125 0.616 0.292 0.113 0.185 8 +1 0.53 0.405 0.15 0.8315 0.352 0.187 0.2525 10 +-1 0.535 0.445 0.125 0.8725 0.417 0.199 0.24 8 +0 0.54 0.425 0.13 0.8155 0.3675 0.1365 0.246 11 +0 0.54 0.415 0.11 0.619 0.2755 0.15 0.1765 10 +0 0.545 0.43 0.13 0.7595 0.358 0.153 0.2055 8 +0 0.545 0.43 0.15 0.742 0.3525 0.158 0.208 10 +0 0.55 0.435 0.165 0.804 0.34 0.194 0.244 8 +0 0.55 0.425 0.13 0.664 0.2695 0.163 0.21 8 +-1 0.55 0.435 0.14 0.745 0.347 0.174 0.2265 9 +0 0.56 0.43 0.13 0.728 0.3355 0.1435 0.2175 8 +0 0.56 0.435 0.13 0.777 0.354 0.173 0.222 9 +-1 0.575 0.425 0.15 0.8765 0.455 0.18 0.228 8 +0 0.575 0.455 0.16 0.9895 0.495 0.195 0.246 9 +1 0.575 0.45 0.165 0.9655 0.498 0.19 0.23 8 +1 0.58 0.465 0.15 0.9065 0.371 0.1965 0.29 8 +1 0.58 0.46 0.15 1.049 0.5205 0.1935 0.305 10 +-1 0.58 0.45 0.17 0.9705 0.4615 0.232 0.248 9 +-1 0.58 0.45 0.15 0.92 0.393 0.212 0.2895 9 +1 0.58 0.445 0.15 0.9525 0.4315 0.1945 0.287 11 +-1 0.58 0.44 0.125 0.7855 0.363 0.1955 0.195 11 +0 0.585 0.45 0.135 0.855 0.3795 0.187 0.26 9 +1 0.59 0.5 0.15 1.142 0.485 0.265 0.345 9 +0 0.59 0.46 0.125 0.755 0.334 0.15 0.238 9 +0 0.59 0.475 0.145 0.9745 0.4675 0.207 0.259 10 +1 0.595 0.47 0.155 1.2015 0.492 0.3865 0.265 10 +1 0.595 0.46 0.17 1.1295 0.57 0.2555 0.265 10 +0 0.6 0.445 0.135 0.9205 0.445 0.2035 0.253 9 +-1 0.6 0.48 0.17 1.056 0.4575 0.2435 0.3135 10 +1 0.6 0.45 0.195 1.34 0.617 0.3255 0.3605 10 +-1 0.6 0.45 0.15 0.9625 0.4375 0.2225 0.2775 9 +1 0.6 0.465 0.165 1.0475 0.465 0.2345 0.315 11 +-1 0.605 0.495 0.17 1.0915 0.4365 0.2715 0.335 13 +1 0.605 0.49 0.18 1.167 0.457 0.29 0.3745 9 +0 0.605 0.48 0.155 0.9995 0.425 0.1985 0.3 10 +0 0.61 0.425 0.155 1.0485 0.507 0.1955 0.274 11 +-1 0.61 0.47 0.195 1.2735 0.469 0.3315 0.398 12 +1 0.61 0.48 0.14 1.0625 0.516 0.225 0.2915 11 +0 0.61 0.49 0.16 1.1545 0.5865 0.2385 0.2915 11 +-1 0.615 0.475 0.175 1.194 0.559 0.259 0.3165 11 +-1 0.615 0.515 0.135 1.1215 0.545 0.2305 0.29 9 +1 0.615 0.455 0.15 0.9335 0.382 0.247 0.2615 10 +-1 0.615 0.495 0.165 1.198 0.5415 0.2865 0.3185 10 +-1 0.62 0.475 0.15 0.9545 0.455 0.1865 0.277 9 +1 0.62 0.475 0.195 1.3585 0.5935 0.3365 0.3745 10 +1 0.625 0.495 0.175 1.2075 0.531 0.281 0.3525 11 +1 0.625 0.515 0.165 1.217 0.667 0.2065 0.3115 10 +-1 0.625 0.5 0.16 1.217 0.5725 0.207 0.355 11 +-1 0.625 0.49 0.145 0.92 0.437 0.1735 0.28 10 +1 0.625 0.49 0.12 0.8765 0.456 0.18 0.233 10 +-1 0.63 0.48 0.165 1.2615 0.5505 0.277 0.3885 10 +1 0.63 0.53 0.18 1.2795 0.618 0.256 0.315 9 +-1 0.63 0.485 0.185 1.167 0.548 0.2485 0.34 10 +1 0.63 0.51 0.17 1.1885 0.4915 0.3065 0.348 7 +-1 0.635 0.485 0.19 1.3765 0.634 0.2885 0.406 11 +1 0.635 0.52 0.175 1.292 0.6 0.269 0.367 11 +1 0.635 0.485 0.18 1.1795 0.4785 0.2775 0.355 10 +-1 0.635 0.5 0.19 1.29 0.593 0.3045 0.352 8 +1 0.635 0.515 0.16 1.2075 0.5385 0.282 0.345 11 +1 0.64 0.505 0.18 1.297 0.59 0.3125 0.363 11 +1 0.64 0.575 0.175 1.4585 0.625 0.266 0.4395 11 +-1 0.645 0.485 0.15 1.151 0.5935 0.2315 0.293 12 +-1 0.645 0.52 0.17 1.197 0.526 0.2925 0.317 11 +1 0.645 0.495 0.19 1.539 0.6115 0.408 0.445 12 +1 0.65 0.52 0.195 1.676 0.693 0.44 0.47 15 +-1 0.65 0.565 0.2 1.6645 0.753 0.367 0.43 12 +-1 0.655 0.5 0.205 1.528 0.6215 0.3725 0.4535 11 +-1 0.655 0.515 0.2 1.494 0.7255 0.309 0.405 12 +-1 0.66 0.525 0.16 1.277 0.4975 0.319 0.394 13 +-1 0.66 0.525 0.18 1.5965 0.7765 0.397 0.3605 10 +-1 0.665 0.51 0.175 1.3805 0.675 0.2985 0.325 10 +0 0.67 0.485 0.175 1.2565 0.5355 0.322 0.386 9 +-1 0.67 0.525 0.19 1.527 0.5755 0.353 0.44 12 +1 0.67 0.525 0.17 1.4005 0.715 0.3025 0.387 9 +1 0.67 0.525 0.195 1.4405 0.6595 0.2675 0.425 9 +1 0.67 0.54 0.175 1.482 0.739 0.2925 0.365 10 +1 0.68 0.515 0.16 1.2345 0.618 0.2625 0.325 11 +-1 0.68 0.505 0.17 1.3435 0.657 0.297 0.355 12 +1 0.685 0.505 0.19 1.533 0.667 0.4055 0.41 10 +1 0.69 0.515 0.18 1.8445 0.9815 0.4655 0.341 13 +1 0.715 0.55 0.175 1.825 0.938 0.3805 0.44 11 +1 0.72 0.58 0.19 2.0885 0.9955 0.478 0.5305 13 +1 0.735 0.59 0.205 2.087 0.909 0.474 0.625 12 +1 0.745 0.575 0.2 1.884 0.954 0.336 0.495 12 +0 0.32 0.215 0.095 0.305 0.14 0.067 0.0885 6 +0 0.43 0.345 0.115 0.4295 0.212 0.108 0.109 8 +0 0.43 0.33 0.1 0.449 0.254 0.0825 0.097 6 +1 0.485 0.365 0.155 1.029 0.4235 0.2285 0.313 8 +1 0.49 0.355 0.155 0.981 0.465 0.2015 0.2505 8 +0 0.5 0.37 0.115 0.5745 0.306 0.112 0.141 7 +-1 0.505 0.38 0.13 0.693 0.391 0.1195 0.1515 8 +-1 0.51 0.37 0.21 1.183 0.508 0.292 0.343 9 +-1 0.525 0.41 0.135 0.7905 0.4065 0.198 0.177 8 +-1 0.535 0.4 0.15 1.224 0.618 0.275 0.2875 10 +0 0.535 0.4 0.135 0.775 0.368 0.208 0.2055 8 +1 0.535 0.405 0.175 1.2705 0.548 0.3265 0.337 13 +1 0.555 0.405 0.19 1.406 0.6115 0.342 0.389 10 +1 0.555 0.425 0.15 0.873 0.4625 0.1845 0.1965 9 +1 0.56 0.425 0.135 0.9415 0.509 0.2015 0.1975 9 +-1 0.59 0.44 0.14 1.007 0.4775 0.2105 0.2925 9 +1 0.595 0.485 0.15 1.0835 0.5305 0.231 0.276 8 +0 0.595 0.43 0.165 0.9845 0.4525 0.207 0.2725 8 +-1 0.595 0.43 0.21 1.5245 0.653 0.396 0.41 11 +1 0.61 0.475 0.175 1.024 0.409 0.261 0.322 9 +1 0.61 0.485 0.17 1.281 0.597 0.3035 0.33 9 +-1 0.62 0.5 0.17 1.148 0.5475 0.22 0.3315 10 +-1 0.625 0.49 0.11 1.136 0.5265 0.1915 0.2925 9 +-1 0.635 0.51 0.17 1.2235 0.532 0.271 0.354 9 +-1 0.635 0.525 0.18 1.3695 0.634 0.318 0.363 11 +1 0.64 0.485 0.16 1.006 0.456 0.2245 0.2835 9 +1 0.64 0.495 0.165 1.307 0.678 0.292 0.266 11 +1 0.645 0.505 0.185 1.463 0.592 0.3905 0.416 10 +-1 0.655 0.505 0.175 1.2905 0.6205 0.2965 0.326 10 +-1 0.67 0.515 0.17 1.4265 0.6605 0.3395 0.37 11 +1 0.68 0.54 0.21 1.7885 0.8345 0.408 0.437 13 +1 0.7 0.545 0.185 1.6135 0.75 0.4035 0.3685 11 +1 0.73 0.585 0.225 2.2305 1.2395 0.422 0.563 14 +-1 0.75 0.615 0.205 2.2635 0.821 0.423 0.726 12 +0 0.255 0.185 0.065 0.074 0.0305 0.0165 0.02 4 +0 0.375 0.26 0.08 0.2075 0.09 0.0415 0.07 6 +0 0.375 0.285 0.09 0.237 0.106 0.0395 0.08 8 +0 0.39 0.3 0.1 0.2665 0.1105 0.059 0.084 7 +0 0.39 0.28 0.09 0.215 0.0845 0.034 0.079 8 +0 0.395 0.3 0.09 0.253 0.1155 0.05 0.075 6 +0 0.42 0.32 0.11 0.309 0.115 0.0645 0.0945 6 +0 0.435 0.335 0.105 0.3535 0.156 0.05 0.1135 7 +0 0.435 0.325 0.105 0.335 0.136 0.065 0.115 8 +0 0.44 0.32 0.105 0.3875 0.1755 0.074 0.12 9 +0 0.45 0.33 0.115 0.365 0.14 0.0825 0.1245 8 +0 0.45 0.34 0.125 0.4045 0.171 0.07 0.1345 8 +0 0.455 0.355 0.105 0.372 0.138 0.0765 0.135 9 +0 0.46 0.37 0.11 0.3965 0.1485 0.0855 0.1455 8 +0 0.47 0.375 0.125 0.5225 0.2265 0.104 0.162 8 +0 0.475 0.375 0.11 0.456 0.182 0.099 0.16 9 +0 0.495 0.33 0.1 0.44 0.177 0.095 0.15 7 +0 0.495 0.375 0.115 0.507 0.241 0.103 0.15 8 +0 0.5 0.38 0.135 0.5285 0.226 0.123 0.209 8 +0 0.515 0.385 0.125 0.572 0.237 0.1435 0.165 7 +0 0.52 0.41 0.14 0.6625 0.2775 0.1555 0.196 11 +0 0.52 0.395 0.115 0.6445 0.3155 0.1245 0.186 11 +0 0.525 0.4 0.11 0.6275 0.3015 0.126 0.18 8 +0 0.535 0.42 0.145 0.6885 0.273 0.1515 0.237 9 +1 0.535 0.41 0.12 0.6835 0.3125 0.1655 0.159 8 +1 0.54 0.42 0.19 0.6855 0.293 0.163 0.38 10 +0 0.55 0.405 0.15 0.6755 0.3015 0.1465 0.21 10 +0 0.55 0.445 0.145 0.783 0.3045 0.157 0.265 11 +1 0.56 0.45 0.145 0.894 0.3885 0.2095 0.264 9 +0 0.565 0.44 0.135 0.768 0.3305 0.1385 0.2475 9 +1 0.57 0.45 0.145 0.95 0.4005 0.2235 0.2845 10 +-1 0.57 0.47 0.14 0.871 0.385 0.211 0.2315 10 +1 0.575 0.47 0.15 0.9785 0.4505 0.196 0.276 9 +0 0.575 0.43 0.13 0.7425 0.2895 0.2005 0.22 8 +1 0.575 0.445 0.14 0.737 0.325 0.1405 0.237 10 +0 0.575 0.445 0.16 0.9175 0.45 0.1935 0.24 9 +-1 0.58 0.435 0.155 0.8785 0.425 0.1685 0.2425 10 +1 0.585 0.45 0.175 1.1275 0.4925 0.262 0.335 11 +1 0.59 0.435 0.165 0.9765 0.4525 0.2395 0.235 9 +0 0.59 0.47 0.145 0.974 0.453 0.236 0.289 8 +1 0.59 0.405 0.15 0.853 0.326 0.2615 0.245 9 +1 0.595 0.47 0.175 0.991 0.382 0.2395 0.5 12 +1 0.595 0.48 0.14 0.9125 0.4095 0.1825 0.289 9 +-1 0.595 0.46 0.16 0.921 0.4005 0.2025 0.2875 9 +-1 0.6 0.45 0.14 0.869 0.3425 0.195 0.291 11 +1 0.6 0.45 0.15 0.8665 0.3695 0.1955 0.255 12 +-1 0.61 0.495 0.16 1.089 0.469 0.198 0.384 11 +1 0.615 0.485 0.215 0.9615 0.422 0.176 0.29 11 +1 0.615 0.49 0.17 1.145 0.4915 0.208 0.343 13 +0 0.62 0.475 0.16 0.907 0.371 0.167 0.3075 11 +-1 0.625 0.515 0.155 1.1635 0.4875 0.259 0.355 11 +1 0.63 0.515 0.175 1.1955 0.492 0.247 0.37 11 +1 0.63 0.495 0.18 1.31 0.495 0.295 0.4695 10 +-1 0.635 0.505 0.165 1.251 0.577 0.227 0.3825 11 +-1 0.635 0.49 0.155 1.145 0.4775 0.3035 0.3155 9 +1 0.635 0.5 0.18 1.154 0.4405 0.2315 0.387 9 +-1 0.64 0.485 0.145 1.1335 0.5525 0.2505 0.3015 11 +-1 0.64 0.5 0.15 1.2015 0.559 0.231 0.3355 9 +1 0.65 0.505 0.17 1.5595 0.695 0.3515 0.395 11 +1 0.65 0.51 0.175 1.3165 0.6345 0.2605 0.364 12 +1 0.655 0.54 0.165 1.403 0.6955 0.2385 0.42 11 +-1 0.655 0.49 0.16 1.204 0.5455 0.2615 0.3225 9 +-1 0.655 0.455 0.17 1.2895 0.587 0.3165 0.3415 11 +-1 0.66 0.53 0.18 1.5175 0.7765 0.302 0.401 10 +1 0.665 0.525 0.155 1.3575 0.5325 0.3045 0.4485 10 +1 0.675 0.52 0.145 1.3645 0.557 0.3405 0.385 11 +-1 0.68 0.52 0.185 1.494 0.615 0.3935 0.406 11 +-1 0.68 0.56 0.195 1.664 0.58 0.3855 0.545 11 +1 0.685 0.51 0.165 1.545 0.686 0.3775 0.4055 10 +-1 0.695 0.535 0.2 1.5855 0.667 0.334 0.471 11 +-1 0.7 0.555 0.22 1.666 0.647 0.4285 0.455 11 +1 0.71 0.56 0.175 1.724 0.566 0.4575 0.4625 13 +-1 0.73 0.55 0.205 1.908 0.5415 0.3565 0.5965 14 +-1 0.755 0.575 0.2 2.073 1.0135 0.4655 0.48 11 +0 0.225 0.17 0.05 0.0515 0.019 0.012 0.017 4 +0 0.23 0.17 0.05 0.057 0.026 0.013 0.016 5 +0 0.255 0.185 0.06 0.0925 0.039 0.021 0.025 6 +0 0.355 0.27 0.075 0.204 0.3045 0.046 0.0595 7 +0 0.425 0.31 0.095 0.3075 0.139 0.0745 0.093 7 +0 0.425 0.32 0.085 0.262 0.1235 0.067 0.0725 8 +1 0.455 0.35 0.11 0.458 0.2 0.111 0.1305 8 +1 0.46 0.355 0.14 0.491 0.207 0.115 0.174 10 +1 0.495 0.38 0.12 0.474 0.197 0.1065 0.1545 10 +1 0.51 0.395 0.125 0.5805 0.244 0.1335 0.188 11 +-1 0.52 0.43 0.15 0.728 0.302 0.1575 0.235 11 +1 0.525 0.4 0.13 0.622 0.2655 0.147 0.184 9 +1 0.53 0.415 0.12 0.706 0.3355 0.1635 0.1345 9 +-1 0.53 0.395 0.115 0.5685 0.249 0.1375 0.161 9 +1 0.545 0.435 0.145 0.9385 0.3685 0.1245 0.345 11 +-1 0.55 0.43 0.15 0.655 0.2635 0.122 0.221 8 +1 0.575 0.48 0.15 0.9465 0.4355 0.2605 0.2505 9 +1 0.58 0.43 0.125 0.9115 0.446 0.2075 0.121 10 +1 0.595 0.455 0.145 0.942 0.43 0.182 0.277 11 +1 0.6 0.465 0.18 1.193 0.5145 0.315 0.3055 8 +1 0.645 0.5 0.18 1.461 0.5985 0.2425 0.439 11 +1 0.66 0.525 0.2 1.489 0.6065 0.3795 0.421 10 +0 0.29 0.215 0.06 0.1115 0.053 0.0185 0.032 5 +0 0.3 0.22 0.065 0.1235 0.059 0.026 0.0315 5 +0 0.37 0.275 0.1 0.2815 0.1505 0.0505 0.068 5 +0 0.375 0.285 0.08 0.226 0.0975 0.04 0.0725 7 +0 0.38 0.29 0.085 0.2285 0.088 0.0465 0.075 7 +0 0.395 0.3 0.12 0.2995 0.1265 0.068 0.0895 8 +0 0.41 0.325 0.105 0.361 0.1605 0.0665 0.103 8 +0 0.415 0.32 0.115 0.3045 0.1215 0.0735 0.094 7 +0 0.425 0.325 0.105 0.3975 0.1815 0.081 0.1175 7 +0 0.44 0.34 0.1 0.379 0.1725 0.0815 0.101 7 +0 0.44 0.34 0.12 0.4995 0.2965 0.0945 0.1185 6 +1 0.465 0.405 0.135 0.7775 0.436 0.1715 0.1455 10 +-1 0.47 0.36 0.1 0.4705 0.1635 0.089 0.1385 8 +1 0.51 0.415 0.145 0.751 0.3295 0.1835 0.203 8 +-1 0.525 0.4 0.135 0.714 0.318 0.138 0.208 10 +-1 0.525 0.4 0.13 0.6995 0.3115 0.131 0.223 9 +-1 0.55 0.425 0.14 0.952 0.4895 0.1945 0.2185 7 +1 0.56 0.42 0.15 0.8755 0.44 0.1965 0.2315 8 +1 0.575 0.45 0.135 0.9215 0.354 0.209 0.2365 9 +-1 0.575 0.45 0.135 0.8285 0.362 0.1655 0.236 10 +1 0.585 0.46 0.15 1.206 0.581 0.216 0.323 10 +1 0.615 0.495 0.155 1.2865 0.435 0.293 0.3245 11 +-1 0.62 0.485 0.155 1.1945 0.5105 0.271 0.352 9 +-1 0.63 0.495 0.19 1.1655 0.536 0.2115 0.1625 10 +-1 0.63 0.49 0.17 1.2155 0.4625 0.2045 0.3105 10 +1 0.67 0.515 0.165 1.1735 0.526 0.285 0.316 11 +1 0.675 0.505 0.16 1.532 0.74 0.357 0.3815 11 +-1 0.685 0.53 0.17 1.5105 0.7385 0.3525 0.3725 10 +-1 0.485 0.39 0.1 0.5565 0.2215 0.1155 0.185 9 +1 0.46 0.36 0.125 0.547 0.2165 0.1105 0.19 8 +1 0.46 0.35 0.125 0.5165 0.1885 0.1145 0.185 9 +1 0.535 0.42 0.125 0.764 0.312 0.1505 0.265 11 +1 0.465 0.36 0.105 0.488 0.188 0.0845 0.19 10 +1 0.51 0.4 0.14 0.6905 0.259 0.151 0.23 10 +0 0.335 0.26 0.09 0.1835 0.078 0.024 0.065 11 +1 0.55 0.425 0.16 0.97 0.2885 0.139 0.48 20 +0 0.18 0.135 0.08 0.033 0.0145 0.007 0.01 5 +0 0.215 0.165 0.055 0.059 0.0265 0.0125 0.0185 5 +0 0.2 0.15 0.04 0.046 0.021 0.007 0.0065 4 +-1 0.625 0.48 0.2 1.3235 0.6075 0.3055 0.355 9 +1 0.55 0.42 0.17 0.8465 0.336 0.2405 0.245 13 +1 0.585 0.45 0.15 1.047 0.4315 0.276 0.315 14 +-1 0.645 0.5 0.18 1.2785 0.5345 0.2995 0.345 13 +-1 0.71 0.53 0.195 1.8745 0.6755 0.4065 0.6855 12 +-1 0.7 0.54 0.215 1.978 0.6675 0.3125 0.71 24 +-1 0.655 0.505 0.165 1.367 0.5835 0.3515 0.396 10 +-1 0.665 0.5 0.175 1.742 0.595 0.3025 0.725 21 +-1 0.47 0.375 0.105 0.513 0.232 0.142 0.13 11 +1 0.425 0.335 0.1 0.4085 0.1755 0.092 0.135 9 +1 0.54 0.41 0.13 0.56 0.2375 0.1065 0.175 7 +1 0.505 0.395 0.125 0.635 0.29 0.1555 0.175 9 +1 0.535 0.44 0.165 0.875 0.279 0.18 0.3 10 +-1 0.43 0.35 0.09 0.397 0.1575 0.089 0.12 9 +1 0.55 0.435 0.11 0.806 0.3415 0.203 0.215 9 +-1 0.34 0.255 0.085 0.204 0.097 0.021 0.05 6 +0 0.275 0.2 0.065 0.1165 0.0565 0.013 0.035 7 +-1 0.335 0.22 0.07 0.17 0.076 0.0365 0.05 6 +1 0.64 0.49 0.14 1.194 0.4445 0.238 0.375 15 +-1 0.55 0.44 0.125 0.765 0.33 0.2125 0.245 9 +-1 0.64 0.475 0.19 1.151 0.4365 0.281 0.3805 13 +-1 0.545 0.41 0.115 0.6765 0.29 0.158 0.22 9 +-1 0.64 0.54 0.175 1.571 0.627 0.271 0.475 18 +1 0.605 0.49 0.155 1.153 0.503 0.2505 0.295 15 +1 0.605 0.47 0.115 1.114 0.3925 0.291 0.31 15 +1 0.56 0.45 0.155 0.9125 0.3595 0.271 0.35 10 +-1 0.57 0.465 0.155 0.872 0.3245 0.239 0.285 14 +1 0.525 0.405 0.16 0.792 0.316 0.1455 0.28 13 +-1 0.505 0.405 0.18 0.606 0.239 0.1235 0.18 11 +1 0.35 0.265 0.09 0.2265 0.0995 0.0575 0.065 6 +1 0.45 0.355 0.12 0.3955 0.147 0.0765 0.145 9 +0 0.51 0.405 0.12 0.61 0.229 0.131 0.235 11 +-1 0.49 0.38 0.13 0.539 0.229 0.1355 0.165 12 +-1 0.505 0.41 0.135 0.657 0.291 0.133 0.195 15 +1 0.38 0.3 0.1 0.2505 0.106 0.0535 0.0775 8 +0 0.27 0.195 0.07 0.102 0.045 0.0135 0.034 8 +-1 0.37 0.295 0.1 0.2685 0.1165 0.056 0.0835 7 +1 0.5 0.385 0.135 0.551 0.2245 0.0715 0.206 11 +1 0.645 0.505 0.165 1.307 0.4335 0.262 0.52 10 +1 0.565 0.44 0.115 0.9185 0.404 0.1785 0.29 11 +-1 0.67 0.545 0.175 1.707 0.6995 0.387 0.575 13 +-1 0.59 0.415 0.15 0.8805 0.3645 0.234 0.235 11 +-1 0.47 0.36 0.11 0.4965 0.237 0.127 0.13 6 +-1 0.51 0.385 0.135 0.632 0.282 0.145 0.17 8 +1 0.72 0.575 0.23 2.2695 0.8835 0.3985 0.665 16 +1 0.55 0.405 0.15 0.9235 0.412 0.2135 0.24 7 +0 0.2 0.145 0.025 0.0345 0.011 0.0075 0.01 5 +1 0.65 0.515 0.18 1.3315 0.5665 0.347 0.405 13 +-1 0.525 0.405 0.115 0.72 0.3105 0.1915 0.2 14 +1 0.565 0.435 0.185 1.032 0.354 0.2045 0.31 20 +-1 0.61 0.47 0.16 1.017 0.426 0.2255 0.32 12 +-1 0.545 0.405 0.175 0.98 0.2585 0.207 0.38 18 +0 0.325 0.245 0.075 0.1495 0.0605 0.033 0.045 5 +0 0.31 0.235 0.075 0.1515 0.056 0.0315 0.05 7 +1 0.45 0.335 0.14 0.478 0.1865 0.115 0.16 11 +-1 0.49 0.38 0.155 0.578 0.2395 0.1255 0.18 9 +-1 0.505 0.405 0.16 0.6835 0.271 0.145 0.215 10 +-1 0.385 0.3 0.1 0.2725 0.1115 0.057 0.08 6 +-1 0.62 0.485 0.22 1.511 0.5095 0.284 0.51 17 +-1 0.635 0.505 0.185 1.3035 0.501 0.295 0.41 17 +-1 0.665 0.53 0.185 1.3955 0.456 0.3205 0.49 15 +1 0.335 0.265 0.095 0.1975 0.0795 0.0375 0.07 9 +0 0.295 0.215 0.075 0.116 0.037 0.0295 0.04 8 +0 0.48 0.38 0.125 0.523 0.2105 0.1045 0.175 15 +0 0.32 0.25 0.08 0.1565 0.057 0.034 0.06 9 +0 0.43 0.34 0.125 0.384 0.1375 0.061 0.146 14 +1 0.565 0.45 0.14 1.0055 0.3785 0.244 0.265 12 +-1 0.6 0.48 0.165 1.1345 0.4535 0.27 0.335 10 +-1 0.585 0.46 0.17 1.0835 0.3745 0.326 0.325 14 +-1 0.555 0.42 0.14 0.868 0.33 0.243 0.21 13 +-1 0.57 0.495 0.16 1.0915 0.452 0.275 0.315 14 +-1 0.62 0.485 0.175 1.271 0.531 0.3075 0.37 11 +1 0.63 0.51 0.19 1.4985 0.4125 0.3075 0.545 16 +1 0.425 0.34 0.12 0.388 0.149 0.087 0.125 10 +-1 0.64 0.505 0.19 1.2355 0.4435 0.3105 0.365 14 +1 0.675 0.525 0.175 1.402 0.483 0.3205 0.465 16 +1 0.5 0.4 0.145 0.6025 0.216 0.138 0.21 11 +1 0.385 0.305 0.09 0.2775 0.109 0.0515 0.1 9 +1 0.52 0.435 0.195 0.973 0.2985 0.2135 0.355 18 +1 0.52 0.415 0.175 0.753 0.258 0.171 0.255 8 +1 0.64 0.525 0.2 1.3765 0.44 0.3075 0.47 16 +0 0.44 0.35 0.12 0.375 0.1425 0.0965 0.115 9 +-1 0.42 0.32 0.13 0.4135 0.1645 0.106 0.119 10 +-1 0.45 0.35 0.135 0.56 0.231 0.137 0.145 13 +0 0.42 0.325 0.125 0.3915 0.1575 0.1025 0.115 9 +-1 0.64 0.505 0.19 1.2765 0.4835 0.328 0.4 12 +1 0.57 0.455 0.15 0.96 0.387 0.2385 0.275 11 +1 0.41 0.325 0.12 0.3745 0.158 0.081 0.125 12 +1 0.485 0.41 0.15 0.696 0.2405 0.1625 0.265 13 +-1 0.61 0.48 0.19 1.2955 0.5215 0.3225 0.365 12 +-1 0.59 0.485 0.205 1.2315 0.4525 0.238 0.42 13 +1 0.665 0.535 0.155 1.383 0.596 0.2565 0.485 14 +0 0.345 0.285 0.1 0.2225 0.0865 0.058 0.075 8 +1 0.635 0.51 0.155 1.156 0.428 0.289 0.315 18 +1 0.695 0.53 0.15 1.477 0.6375 0.3025 0.43 14 +-1 0.69 0.54 0.185 1.5715 0.6935 0.318 0.47 15 +1 0.555 0.435 0.135 0.858 0.377 0.1585 0.29 15 +1 0.65 0.525 0.19 1.4995 0.6265 0.4005 0.395 14 +1 0.635 0.48 0.19 1.467 0.5825 0.303 0.42 15 +-1 0.655 0.51 0.16 1.092 0.396 0.2825 0.37 14 +-1 0.69 0.555 0.205 1.8165 0.7785 0.4395 0.515 19 +-1 0.695 0.55 0.16 1.6365 0.694 0.3005 0.44 13 +1 0.55 0.435 0.16 0.906 0.342 0.219 0.295 13 +-1 0.61 0.495 0.19 1.213 0.464 0.306 0.365 15 +1 0.595 0.5 0.165 1.06 0.402 0.28 0.275 11 +1 0.3 0.24 0.09 0.161 0.0725 0.039 0.05 6 +-1 0.435 0.35 0.125 0.459 0.197 0.1145 0.145 9 +0 0.455 0.375 0.125 0.533 0.233 0.106 0.185 8 +1 0.48 0.38 0.13 0.6175 0.3 0.142 0.175 12 +0 0.43 0.35 0.105 0.366 0.1705 0.0855 0.11 6 +-1 0.435 0.35 0.105 0.4195 0.194 0.1005 0.13 7 +0 0.3 0.23 0.075 0.15 0.0605 0.042 0.045 5 +-1 0.575 0.48 0.15 0.8745 0.375 0.193 0.29 12 +1 0.505 0.385 0.11 0.655 0.3185 0.15 0.185 9 +1 0.455 0.375 0.125 0.484 0.2155 0.102 0.165 7 +1 0.64 0.505 0.165 1.4435 0.6145 0.3035 0.39 18 +-1 0.56 0.435 0.125 0.8775 0.3345 0.2145 0.29 13 +-1 0.645 0.52 0.19 1.3105 0.58 0.288 0.37 12 +-1 0.595 0.485 0.145 1.2515 0.5035 0.2925 0.33 14 +1 0.565 0.45 0.115 0.9085 0.398 0.197 0.29 17 +-1 0.655 0.5 0.14 1.1705 0.5405 0.3175 0.285 12 +1 0.48 0.38 0.135 0.528 0.2 0.1395 0.16 14 +-1 0.495 0.385 0.135 0.6625 0.3005 0.1635 0.185 11 +-1 0.4 0.335 0.115 0.4335 0.2105 0.1205 0.12 10 +1 0.41 0.31 0.125 0.3595 0.1415 0.0885 0.115 11 +-1 0.595 0.465 0.145 1.107 0.402 0.2415 0.31 12 +-1 0.625 0.475 0.13 0.8595 0.3195 0.1775 0.24 13 +1 0.52 0.425 0.155 0.7735 0.297 0.123 0.255 17 +1 0.465 0.36 0.125 0.4365 0.169 0.1075 0.145 11 +-1 0.475 0.375 0.14 0.501 0.192 0.1175 0.175 13 +-1 0.5 0.405 0.14 0.6735 0.265 0.124 0.25 18 +1 0.46 0.355 0.11 0.415 0.215 0.082 0.13 12 +1 0.485 0.385 0.125 0.4775 0.2 0.0785 0.17 12 +-1 0.465 0.39 0.14 0.5555 0.213 0.1075 0.215 15 +1 0.525 0.415 0.16 0.6445 0.26 0.1575 0.22 12 +-1 0.655 0.53 0.19 1.428 0.493 0.318 0.565 18 +1 0.69 0.54 0.185 1.6195 0.533 0.353 0.555 24 +1 0.55 0.45 0.17 0.81 0.317 0.157 0.22 11 +-1 0.58 0.475 0.165 1.0385 0.414 0.26 0.305 13 +-1 0.59 0.475 0.155 0.9715 0.371 0.235 0.28 11 +1 0.565 0.44 0.155 0.868 0.348 0.217 0.26 11 +-1 0.665 0.57 0.185 1.522 0.6965 0.3025 0.405 13 +-1 0.62 0.51 0.175 1.1255 0.4985 0.227 0.315 14 +1 0.55 0.46 0.13 0.7085 0.305 0.1455 0.205 12 +-1 0.605 0.475 0.145 1.0185 0.4695 0.225 0.27 15 +1 0.535 0.42 0.16 0.72 0.275 0.164 0.225 15 +-1 0.51 0.395 0.12 0.6175 0.262 0.122 0.193 12 +1 0.53 0.405 0.13 0.738 0.2845 0.17 0.193 9 +-1 0.495 0.375 0.15 0.597 0.2615 0.135 0.178 11 +1 0.575 0.455 0.185 1.156 0.5525 0.243 0.295 13 +-1 0.63 0.5 0.16 1.22 0.4905 0.3 0.345 14 +1 0.59 0.45 0.12 0.7485 0.3345 0.1315 0.22 14 +-1 0.605 0.485 0.165 1.0735 0.437 0.205 0.33 14 +1 0.645 0.5 0.19 1.229 0.524 0.278 0.395 17 +-1 0.62 0.5 0.175 1.146 0.477 0.23 0.39 13 +1 0.605 0.485 0.175 1.145 0.4325 0.27 0.405 16 +-1 0.615 0.5 0.205 1.1055 0.4445 0.227 0.39 16 +-1 0.66 0.525 0.19 1.67 0.6525 0.4875 0.49 11 +-1 0.71 0.575 0.175 1.555 0.6465 0.3705 0.52 15 +-1 0.565 0.45 0.185 0.9285 0.302 0.1805 0.265 12 +-1 0.57 0.435 0.14 0.8085 0.3235 0.183 0.22 16 +0 0.6 0.445 0.175 1.057 0.383 0.216 0.355 16 +0 0.41 0.3 0.115 0.2595 0.097 0.0515 0.08 10 +-1 0.45 0.325 0.135 0.438 0.1805 0.1165 0.11 9 +1 0.275 0.2 0.08 0.099 0.037 0.024 0.03 5 +0 0.485 0.355 0.12 0.5085 0.21 0.122 0.135 9 +-1 0.62 0.485 0.165 1.166 0.483 0.238 0.355 13 +-1 0.48 0.38 0.135 0.507 0.1915 0.1365 0.155 12 +-1 0.505 0.41 0.15 0.6345 0.243 0.1335 0.215 17 +1 0.4 0.31 0.11 0.314 0.138 0.057 0.1 11 +0 0.45 0.355 0.115 0.4385 0.184 0.108 0.1125 11 +1 0.35 0.26 0.09 0.195 0.0745 0.041 0.0655 9 +1 0.44 0.35 0.14 0.451 0.171 0.0705 0.184 16 +1 0.265 0.2 0.065 0.084 0.034 0.0105 0.03 7 +1 0.165 0.125 0.04 0.0245 0.0095 0.0045 0.008 4 +-1 0.705 0.555 0.2 1.4685 0.4715 0.3235 0.52 19 +-1 0.535 0.425 0.155 0.7765 0.302 0.1565 0.25 16 +0 0.49 0.385 0.14 0.5425 0.198 0.127 0.175 11 +-1 0.48 0.37 0.13 0.5885 0.2475 0.1505 0.1595 15 +-1 0.395 0.3 0.105 0.3375 0.1435 0.0755 0.098 12 +0 0.375 0.28 0.1 0.2565 0.1165 0.0585 0.0725 12 +1 0.345 0.265 0.09 0.163 0.0615 0.037 0.0485 10 +0 0.55 0.415 0.135 0.8095 0.2985 0.2015 0.28 12 +0 0.635 0.48 0.2 1.3655 0.6255 0.2595 0.425 16 +0 0.575 0.475 0.17 0.967 0.3775 0.284 0.275 13 +-1 0.545 0.435 0.15 0.6855 0.2905 0.145 0.225 10 +-1 0.385 0.305 0.125 0.314 0.146 0.0555 0.08 10 +-1 0.51 0.34 0.18 0.7005 0.312 0.165 0.2 11 +0 0.44 0.34 0.125 0.4895 0.1735 0.0875 0.2 13 +0 0.45 0.36 0.125 0.45 0.191 0.0865 0.145 12 +0 0.39 0.3 0.105 0.259 0.0955 0.038 0.085 8 +-1 0.425 0.325 0.135 0.382 0.1465 0.079 0.14 12 +-1 0.45 0.35 0.125 0.4435 0.185 0.09 0.145 11 +0 0.66 0.525 0.18 1.6935 0.6025 0.4005 0.42 15 +-1 0.685 0.525 0.175 1.71 0.5415 0.309 0.58 16 +-1 0.585 0.475 0.185 0.8575 0.3465 0.1785 0.275 12 +0 0.54 0.435 0.145 0.97 0.4285 0.22 0.264 17 +-1 0.49 0.39 0.135 0.59 0.215 0.125 0.1845 12 +1 0.43 0.33 0.095 0.34 0.1315 0.085 0.112 14 +-1 0.455 0.365 0.11 0.385 0.166 0.046 0.1345 13 +0 0.495 0.38 0.145 0.515 0.175 0.098 0.212 13 +-1 0.48 0.38 0.145 0.59 0.232 0.141 0.23 12 +0 0.47 0.4 0.16 0.51 0.1615 0.073 0.198 14 +1 0.415 0.32 0.1 0.3005 0.1215 0.0575 0.104 11 +0 0.49 0.385 0.115 0.683 0.3265 0.1615 0.165 13 +0 0.47 0.375 0.105 0.468 0.1665 0.108 0.17 10 +0 0.445 0.345 0.13 0.4075 0.1365 0.0645 0.18 11 +-1 0.51 0.38 0.13 0.584 0.224 0.1355 0.185 13 +-1 0.52 0.405 0.145 0.829 0.3535 0.1685 0.205 15 +0 0.475 0.365 0.14 0.4545 0.171 0.118 0.158 8 +-1 0.455 0.36 0.11 0.4385 0.206 0.098 0.125 10 +0 0.435 0.34 0.11 0.407 0.1685 0.073 0.13 10 +0 0.39 0.3 0.1 0.3085 0.1385 0.0735 0.085 6 +0 0.375 0.285 0.1 0.239 0.105 0.0555 0.07 8 +1 0.285 0.215 0.075 0.106 0.0415 0.023 0.035 5 +0 0.58 0.445 0.17 1.178 0.3935 0.2165 0.315 20 +-1 0.58 0.44 0.175 1.073 0.4005 0.2345 0.335 19 +1 0.41 0.315 0.095 0.306 0.121 0.0735 0.09 9 +1 0.41 0.3 0.1 0.301 0.124 0.069 0.09 9 +0 0.54 0.405 0.15 0.7585 0.307 0.2075 0.19 10 +1 0.33 0.245 0.085 0.171 0.0655 0.0365 0.055 11 +0 0.44 0.31 0.115 0.3625 0.134 0.082 0.12 11 +1 0.28 0.21 0.065 0.0905 0.035 0.02 0.03 5 +0 0.59 0.465 0.195 1.0885 0.3685 0.187 0.375 17 +0 0.61 0.48 0.165 1.097 0.4215 0.264 0.335 13 +0 0.61 0.46 0.17 1.278 0.41 0.257 0.37 17 +1 0.455 0.345 0.125 0.44 0.169 0.1065 0.135 12 +1 0.33 0.235 0.09 0.163 0.0615 0.034 0.055 10 +0 0.44 0.33 0.135 0.522 0.17 0.0905 0.195 16 +1 0.54 0.405 0.155 0.9715 0.3225 0.194 0.29 19 +-1 0.475 0.375 0.125 0.588 0.237 0.1715 0.155 10 +-1 0.46 0.33 0.15 0.5325 0.2085 0.1805 0.125 10 +0 0.31 0.235 0.09 0.127 0.048 0.031 0.04 6 +0 0.255 0.19 0.07 0.0815 0.028 0.016 0.031 5 +1 0.335 0.255 0.075 0.1635 0.0615 0.0345 0.057 8 +0 0.295 0.21 0.08 0.1 0.038 0.026 0.031 8 +0 0.19 0.13 0.045 0.0265 0.009 0.005 0.009 5 +1 0.545 0.435 0.165 0.9955 0.3245 0.2665 0.325 19 +1 0.495 0.4 0.12 0.6605 0.2605 0.161 0.19 15 +1 0.5 0.375 0.13 0.721 0.3055 0.1725 0.22 14 +-1 0.305 0.225 0.07 0.1485 0.0585 0.0335 0.045 7 +-1 0.475 0.35 0.115 0.487 0.194 0.1455 0.125 13 +1 0.515 0.4 0.125 0.955 0.341 0.2535 0.26 13 +1 0.545 0.41 0.145 0.873 0.3035 0.196 0.31 18 +1 0.74 0.535 0.185 1.65 0.734 0.4505 0.335 13 +1 0.565 0.465 0.15 1.1285 0.377 0.3525 0.33 16 +1 0.56 0.44 0.16 1.1115 0.5035 0.2785 0.26 10 +1 0.545 0.42 0.125 0.9745 0.353 0.174 0.305 13 +1 0.645 0.515 0.185 1.4605 0.5835 0.3155 0.41 19 +1 0.575 0.435 0.13 1.0105 0.368 0.222 0.32 10 +1 0.62 0.48 0.16 1.0765 0.412 0.253 0.3 13 +-1 0.605 0.45 0.165 1.2225 0.357 0.202 0.385 13 +1 0.605 0.475 0.16 1.616 0.5495 0.332 0.34 18 +-1 0.475 0.375 0.15 0.559 0.1955 0.1215 0.1945 12 +1 0.365 0.285 0.085 0.2205 0.0855 0.0515 0.07 9 +-1 0.46 0.35 0.115 0.44 0.19 0.1025 0.13 8 +1 0.53 0.43 0.135 0.879 0.28 0.2165 0.25 10 +1 0.48 0.395 0.15 0.6815 0.2145 0.1405 0.2495 18 +1 0.455 0.345 0.15 0.5795 0.1685 0.125 0.215 13 +0 0.35 0.265 0.11 0.209 0.066 0.059 0.075 9 +1 0.37 0.28 0.105 0.224 0.0815 0.0575 0.075 8 +0 0.34 0.25 0.075 0.1765 0.0785 0.0405 0.05 7 +0 0.35 0.28 0.075 0.196 0.082 0.04 0.064 8 +0 0.35 0.265 0.08 0.192 0.081 0.0465 0.053 6 +0 0.39 0.315 0.09 0.3095 0.147 0.05 0.09 7 +0 0.395 0.31 0.095 0.313 0.131 0.072 0.093 7 +0 0.415 0.31 0.105 0.3595 0.167 0.083 0.0915 6 +0 0.43 0.32 0.1 0.3855 0.192 0.0745 0.1 7 +0 0.48 0.355 0.115 0.5785 0.25 0.106 0.184 8 +1 0.49 0.395 0.12 0.674 0.3325 0.1235 0.185 9 +-1 0.49 0.37 0.105 0.5265 0.249 0.1005 0.148 7 +-1 0.56 0.465 0.16 1.0315 0.432 0.2025 0.337 9 +1 0.56 0.45 0.14 0.9 0.472 0.182 0.218 7 +1 0.58 0.46 0.15 1.0165 0.491 0.221 0.265 9 +-1 0.58 0.48 0.18 1.2495 0.4945 0.27 0.371 8 +1 0.59 0.47 0.135 1.1685 0.539 0.279 0.28 8 +-1 0.595 0.475 0.165 1.148 0.444 0.214 0.37 10 +1 0.6 0.475 0.15 1.089 0.5195 0.223 0.292 11 +1 0.61 0.47 0.155 1.0325 0.497 0.2175 0.2785 9 +-1 0.63 0.475 0.15 1.172 0.536 0.254 0.316 11 +1 0.64 0.51 0.17 1.3715 0.567 0.307 0.409 10 +-1 0.65 0.545 0.185 1.5055 0.6565 0.341 0.43 10 +1 0.71 0.55 0.2 1.9045 0.882 0.44 0.5 13 +1 0.74 0.605 0.2 2.4925 1.1455 0.575 0.5235 13 +0 0.25 0.18 0.065 0.0805 0.0345 0.0185 0.0215 4 +0 0.28 0.21 0.065 0.111 0.0425 0.0285 0.03 6 +0 0.325 0.24 0.075 0.152 0.065 0.0305 0.045 6 +0 0.35 0.265 0.095 0.199 0.073 0.049 0.06 5 +0 0.36 0.27 0.09 0.219 0.097 0.0405 0.065 6 +0 0.365 0.27 0.105 0.2155 0.0915 0.0475 0.063 6 +0 0.37 0.28 0.09 0.2565 0.1255 0.0645 0.0645 6 +0 0.375 0.285 0.09 0.257 0.1045 0.062 0.075 7 +0 0.38 0.275 0.095 0.2505 0.0945 0.0655 0.075 6 +0 0.395 0.3 0.09 0.279 0.134 0.049 0.075 8 +0 0.43 0.335 0.105 0.378 0.188 0.0785 0.09 6 +0 0.44 0.35 0.125 0.456 0.21 0.0955 0.131 8 +0 0.465 0.37 0.1 0.5055 0.234 0.11 0.14 7 +-1 0.465 0.355 0.115 0.4705 0.1955 0.118 0.126 7 +1 0.48 0.37 0.13 0.643 0.349 0.1155 0.135 8 +0 0.485 0.37 0.1 0.513 0.219 0.1075 0.13 7 +-1 0.49 0.4 0.115 0.569 0.256 0.1325 0.145 9 +0 0.495 0.4 0.145 0.578 0.2545 0.1305 0.1645 8 +0 0.5 0.385 0.11 0.596 0.3015 0.104 0.151 8 +-1 0.505 0.39 0.12 0.5725 0.2555 0.1325 0.146 8 +1 0.52 0.39 0.12 0.6435 0.2885 0.157 0.161 7 +1 0.52 0.395 0.125 0.8115 0.4035 0.166 0.2 7 +-1 0.525 0.44 0.125 0.7115 0.3205 0.159 0.1915 7 +1 0.55 0.44 0.155 0.9155 0.3645 0.195 0.25 8 +-1 0.555 0.44 0.145 0.8815 0.43 0.1975 0.2155 8 +-1 0.555 0.42 0.11 0.931 0.4445 0.171 0.225 8 +-1 0.575 0.46 0.165 1.065 0.4985 0.2145 0.2815 8 +1 0.6 0.475 0.155 1.1385 0.502 0.2295 0.31 9 +-1 0.61 0.48 0.16 1.234 0.598 0.238 0.315 12 +-1 0.61 0.495 0.175 1.2635 0.53 0.315 0.3455 10 +-1 0.61 0.47 0.16 1.0745 0.4925 0.236 0.29 8 +1 0.615 0.505 0.19 1.403 0.6715 0.2925 0.365 8 +1 0.62 0.485 0.165 1.1325 0.5235 0.2505 0.2825 9 +-1 0.625 0.495 0.16 1.1115 0.4495 0.2825 0.345 11 +-1 0.625 0.47 0.17 1.255 0.525 0.2415 0.405 10 +1 0.625 0.485 0.17 1.437 0.5855 0.293 0.475 11 +1 0.635 0.495 0.155 1.3635 0.583 0.2985 0.295 10 +-1 0.64 0.48 0.195 1.1435 0.4915 0.2345 0.353 9 +1 0.64 0.5 0.17 1.4545 0.642 0.3575 0.354 9 +1 0.66 0.525 0.18 1.478 0.5815 0.381 0.372 10 +-1 0.665 0.52 0.165 1.6885 0.7295 0.407 0.4265 11 +-1 0.715 0.585 0.23 2.0725 0.8655 0.4095 0.565 10 +1 0.72 0.565 0.2 1.787 0.718 0.385 0.529 11 +-1 0.725 0.58 0.185 1.523 0.8045 0.3595 0.4375 9 +0 0.165 0.12 0.05 0.021 0.0075 0.0045 0.014 3 +0 0.21 0.15 0.055 0.0455 0.02 0.0065 0.013 4 +0 0.355 0.265 0.085 0.2435 0.122 0.0525 0.06 6 +0 0.4 0.315 0.085 0.2675 0.116 0.0585 0.0765 6 +0 0.4 0.29 0.1 0.258 0.104 0.059 0.0815 7 +0 0.4 0.3 0.11 0.2985 0.1375 0.071 0.075 6 +0 0.435 0.335 0.11 0.411 0.2025 0.0945 0.1 7 +0 0.44 0.33 0.11 0.38 0.197 0.079 0.09 7 +0 0.45 0.34 0.105 0.4385 0.21 0.0925 0.12 8 +0 0.465 0.345 0.105 0.4015 0.242 0.0345 0.109 6 +0 0.47 0.355 0.145 0.4485 0.156 0.102 0.123 7 +0 0.47 0.355 0.115 0.4155 0.167 0.084 0.139 7 +0 0.475 0.42 0.16 0.7095 0.35 0.1505 0.1845 8 +0 0.485 0.37 0.115 0.637 0.38 0.1335 0.128 7 +-1 0.505 0.475 0.16 1.1155 0.509 0.239 0.3065 8 +0 0.51 0.405 0.13 0.599 0.3065 0.1155 0.1485 8 +0 0.52 0.38 0.13 0.5345 0.2375 0.122 0.1535 8 +-1 0.53 0.42 0.14 0.627 0.2905 0.1165 0.183 8 +1 0.535 0.42 0.16 0.7465 0.348 0.1515 0.2185 10 +1 0.55 0.44 0.16 0.985 0.4645 0.201 0.27 8 +1 0.555 0.44 0.145 0.85 0.4165 0.1685 0.23 8 +1 0.555 0.44 0.15 0.838 0.4155 0.146 0.23 8 +-1 0.555 0.43 0.135 0.812 0.4055 0.163 0.2215 9 +1 0.56 0.415 0.13 0.7615 0.3695 0.17 0.1955 8 +1 0.575 0.44 0.145 0.87 0.3945 0.2195 0.225 8 +-1 0.585 0.45 0.145 0.9835 0.4845 0.242 0.22 9 +1 0.59 0.46 0.145 0.929 0.38 0.24 0.255 10 +-1 0.595 0.47 0.165 1.0155 0.491 0.1905 0.289 9 +1 0.6 0.41 0.145 0.939 0.4475 0.196 0.268 8 +1 0.6 0.475 0.16 1.164 0.5045 0.2635 0.335 12 +1 0.61 0.47 0.175 1.214 0.5315 0.2835 0.325 10 +-1 0.615 0.49 0.19 1.1345 0.4695 0.257 0.348 11 +-1 0.62 0.51 0.18 1.233 0.592 0.274 0.322 10 +1 0.625 0.495 0.18 1.0815 0.4715 0.254 0.3135 10 +1 0.625 0.47 0.175 1.179 0.605 0.258 0.271 9 +-1 0.64 0.5 0.165 1.1635 0.554 0.239 0.32 11 +-1 0.64 0.475 0.175 1.1545 0.4865 0.341 0.288 9 +-1 0.645 0.52 0.175 1.3345 0.667 0.2665 0.355 10 +1 0.65 0.505 0.18 1.469 0.7115 0.3335 0.38 9 +1 0.655 0.52 0.18 1.492 0.7185 0.36 0.355 11 +-1 0.655 0.54 0.175 1.5585 0.7285 0.402 0.385 11 +-1 0.66 0.5 0.175 1.3275 0.556 0.2805 0.4085 9 +1 0.67 0.525 0.18 1.6615 0.8005 0.3645 0.43 10 +-1 0.69 0.525 0.19 1.492 0.6425 0.3905 0.42 12 +-1 0.7 0.575 0.2 1.7365 0.7755 0.3965 0.461 11 +-1 0.7 0.56 0.175 1.6605 0.8605 0.3275 0.398 11 +1 0.71 0.57 0.195 1.348 0.8985 0.4435 0.4535 11 +1 0.715 0.545 0.18 1.7405 0.871 0.347 0.449 10 +-1 0.72 0.545 0.185 1.7185 0.7925 0.401 0.468 11 +0 0.215 0.15 0.055 0.041 0.015 0.009 0.0125 3 +0 0.24 0.185 0.06 0.0655 0.0295 0.0005 0.02 4 +0 0.26 0.205 0.07 0.097 0.0415 0.019 0.0305 4 +0 0.32 0.24 0.085 0.131 0.0615 0.0265 0.038 6 +0 0.33 0.23 0.085 0.1695 0.079 0.026 0.0505 6 +0 0.335 0.26 0.085 0.192 0.097 0.03 0.054 6 +0 0.35 0.26 0.09 0.1765 0.072 0.0355 0.0575 7 +0 0.35 0.265 0.085 0.1735 0.0775 0.034 0.056 6 +0 0.36 0.265 0.075 0.1785 0.0785 0.035 0.054 6 +0 0.36 0.265 0.09 0.2055 0.096 0.037 0.0585 7 +0 0.365 0.275 0.09 0.2345 0.108 0.051 0.0625 7 +0 0.38 0.285 0.09 0.2305 0.1005 0.039 0.0775 7 +0 0.4 0.31 0.115 0.314 0.1545 0.0595 0.087 6 +0 0.4 0.315 0.09 0.33 0.151 0.068 0.08 6 +0 0.4 0.265 0.1 0.2775 0.1245 0.0605 0.08 9 +0 0.425 0.325 0.11 0.405 0.1695 0.092 0.1065 8 +0 0.43 0.325 0.105 0.309 0.119 0.08 0.098 6 +1 0.435 0.335 0.11 0.4385 0.2075 0.0715 0.1315 7 +0 0.435 0.34 0.12 0.396 0.1775 0.081 0.125 8 +0 0.445 0.355 0.095 0.3615 0.1415 0.0785 0.12 8 +0 0.45 0.35 0.11 0.514 0.253 0.1045 0.14 8 +0 0.455 0.435 0.11 0.4265 0.195 0.09 0.1205 8 +0 0.46 0.34 0.09 0.384 0.1795 0.068 0.11 8 +0 0.475 0.355 0.125 0.4865 0.2155 0.1105 0.142 9 +0 0.475 0.36 0.135 0.4355 0.196 0.0925 0.125 8 +0 0.475 0.35 0.115 0.498 0.2375 0.099 0.14 7 +0 0.48 0.355 0.125 0.494 0.2385 0.0835 0.15 9 +-1 0.495 0.37 0.12 0.594 0.28 0.11 0.1375 7 +0 0.5 0.365 0.125 0.528 0.229 0.103 0.1645 9 +1 0.505 0.39 0.115 0.5585 0.2575 0.119 0.1535 8 +0 0.515 0.4 0.135 0.636 0.3055 0.1215 0.1855 9 +0 0.525 0.39 0.105 0.567 0.2875 0.1075 0.16 8 +0 0.53 0.405 0.13 0.6615 0.2945 0.1395 0.19 9 +0 0.53 0.42 0.13 0.658 0.296 0.1245 0.198 8 +1 0.535 0.415 0.135 0.78 0.3165 0.169 0.2365 8 +0 0.535 0.41 0.13 0.6075 0.268 0.1225 0.1975 9 +0 0.54 0.41 0.135 0.7025 0.31 0.177 0.2 8 +0 0.55 0.425 0.155 0.8725 0.412 0.187 0.2425 10 +-1 0.565 0.45 0.175 1.2365 0.5305 0.2455 0.308 10 +1 0.57 0.47 0.155 1.186 0.6355 0.2315 0.277 10 +0 0.57 0.42 0.13 0.7745 0.3535 0.1505 0.2365 9 +-1 0.57 0.42 0.16 0.8875 0.4315 0.1915 0.223 8 +0 0.575 0.455 0.155 0.8725 0.349 0.2095 0.285 8 +0 0.575 0.44 0.125 0.8515 0.4555 0.1715 0.1965 9 +-1 0.575 0.475 0.16 0.895 0.3605 0.221 0.271 9 +1 0.575 0.45 0.155 0.886 0.3605 0.211 0.2575 9 +0 0.58 0.46 0.14 0.9265 0.4135 0.1845 0.27 10 +0 0.58 0.46 0.14 0.8295 0.3915 0.165 0.238 10 +0 0.58 0.47 0.15 0.907 0.444 0.1855 0.2445 11 +1 0.58 0.47 0.165 1.041 0.54 0.166 0.279 9 +-1 0.585 0.465 0.165 0.9355 0.4035 0.2275 0.259 9 +-1 0.585 0.46 0.165 1.058 0.486 0.25 0.294 9 +-1 0.595 0.465 0.145 0.7955 0.3425 0.1795 0.2425 10 +-1 0.6 0.47 0.17 1.0805 0.4995 0.2245 0.3205 9 +1 0.6 0.47 0.15 0.928 0.4225 0.183 0.275 8 +-1 0.6 0.475 0.155 1.059 0.441 0.19 0.39 11 +1 0.6 0.475 0.23 1.157 0.522 0.2235 0.36 11 +-1 0.6 0.475 0.17 1.088 0.4905 0.2475 0.31 10 +-1 0.6 0.485 0.145 0.776 0.3545 0.1585 0.239 9 +-1 0.62 0.48 0.165 1.043 0.4835 0.221 0.31 10 +1 0.625 0.48 0.16 1.1415 0.5795 0.2145 0.29 9 +-1 0.625 0.475 0.16 1.3335 0.605 0.2875 0.319 10 +-1 0.625 0.5 0.175 1.273 0.564 0.302 0.374 9 +1 0.625 0.49 0.165 1.1835 0.517 0.2375 0.39 11 +1 0.625 0.485 0.16 1.2135 0.631 0.2235 0.302 9 +0 0.63 0.465 0.15 1.0315 0.4265 0.24 0.325 11 +1 0.635 0.495 0.17 1.3695 0.657 0.3055 0.365 10 +1 0.65 0.515 0.185 1.3745 0.75 0.1805 0.369 12 +1 0.65 0.515 0.18 1.463 0.658 0.3135 0.4115 11 +-1 0.65 0.52 0.195 1.6275 0.689 0.3905 0.432 11 +-1 0.65 0.475 0.165 1.3875 0.58 0.3485 0.3095 9 +1 0.655 0.525 0.16 1.46 0.686 0.311 0.405 11 +-1 0.655 0.53 0.165 1.2835 0.583 0.1255 0.4 8 +-1 0.66 0.5 0.155 1.3765 0.6485 0.288 0.335 12 +1 0.66 0.515 0.2 1.6465 0.749 0.422 0.401 11 +1 0.675 0.515 0.145 1.265 0.6025 0.299 0.325 10 +1 0.685 0.53 0.17 1.56 0.647 0.383 0.465 11 +1 0.715 0.52 0.18 1.6 0.708 0.3525 0.445 12 +1 0.735 0.555 0.22 2.333 1.2395 0.3645 0.6195 12 +0 0.175 0.125 0.04 0.028 0.0095 0.008 0.009 4 +0 0.37 0.285 0.095 0.226 0.1135 0.0515 0.0675 8 +0 0.395 0.3 0.09 0.2855 0.1385 0.0625 0.077 5 +0 0.42 0.325 0.11 0.325 0.1245 0.0755 0.1025 7 +0 0.455 0.37 0.11 0.514 0.2385 0.1235 0.126 8 +0 0.495 0.375 0.115 0.5755 0.31 0.1145 0.1395 8 +-1 0.51 0.375 0.11 0.5805 0.2865 0.118 0.148 7 +1 0.515 0.39 0.14 0.678 0.341 0.1325 0.119 8 +1 0.545 0.43 0.155 0.8035 0.409 0.144 0.228 7 +-1 0.555 0.405 0.12 0.913 0.4585 0.196 0.2065 9 +1 0.58 0.45 0.16 0.8675 0.3935 0.221 0.215 9 +-1 0.59 0.465 0.17 1.0425 0.4635 0.24 0.27 10 +1 0.6 0.46 0.18 1.14 0.423 0.2575 0.365 10 +-1 0.61 0.49 0.17 1.3475 0.7045 0.25 0.3045 11 +1 0.615 0.475 0.155 1.0735 0.4375 0.2585 0.31 11 +1 0.615 0.475 0.19 1.4335 0.7315 0.305 0.3285 9 +1 0.615 0.495 0.2 1.304 0.5795 0.3115 0.371 14 +1 0.62 0.46 0.16 0.9505 0.4915 0.2 0.228 9 +1 0.63 0.515 0.17 1.385 0.6355 0.2955 0.38 11 +-1 0.64 0.5 0.17 1.12 0.4955 0.2645 0.32 12 +-1 0.64 0.5 0.17 1.2645 0.565 0.3375 0.315 9 +-1 0.655 0.455 0.17 1.275 0.583 0.303 0.333 8 +1 0.655 0.505 0.165 1.27 0.6035 0.262 0.335 10 +1 0.66 0.53 0.175 1.583 0.7395 0.3505 0.405 10 +-1 0.665 0.5 0.175 1.4355 0.643 0.345 0.37 9 +-1 0.67 0.525 0.195 1.42 0.573 0.368 0.3905 10 +1 0.69 0.53 0.19 1.5955 0.678 0.331 0.48 10 +1 0.715 0.525 0.2 1.89 0.95 0.436 0.4305 10 +-1 0.735 0.565 0.225 2.037 0.87 0.5145 0.5675 13 +0 0.27 0.205 0.05 0.084 0.03 0.0185 0.029 6 +0 0.285 0.225 0.07 0.1005 0.0425 0.0185 0.035 7 +0 0.295 0.22 0.085 0.1285 0.0585 0.027 0.0365 5 +0 0.3 0.225 0.075 0.1345 0.057 0.028 0.044 5 +0 0.3 0.22 0.065 0.1195 0.052 0.0155 0.035 5 +0 0.36 0.265 0.085 0.1895 0.0725 0.0515 0.055 6 +0 0.37 0.275 0.095 0.257 0.1015 0.055 0.0825 6 +0 0.39 0.29 0.09 0.2745 0.135 0.0455 0.078 8 +0 0.435 0.325 0.1 0.342 0.1335 0.0835 0.105 6 +0 0.44 0.34 0.105 0.344 0.123 0.081 0.125 8 +0 0.44 0.32 0.095 0.3275 0.1495 0.059 0.1 8 +0 0.445 0.345 0.12 0.4035 0.169 0.0825 0.13 7 +0 0.465 0.37 0.115 0.4075 0.1515 0.0935 0.1455 9 +0 0.465 0.355 0.12 0.4975 0.2375 0.099 0.14 8 +0 0.47 0.345 0.12 0.3685 0.1525 0.0615 0.125 8 +0 0.475 0.365 0.105 0.4175 0.1645 0.099 0.127 7 +0 0.475 0.335 0.1 0.4425 0.1895 0.086 0.135 9 +0 0.475 0.35 0.125 0.4225 0.1905 0.079 0.1355 9 +0 0.485 0.365 0.125 0.426 0.163 0.0965 0.151 8 +0 0.49 0.39 0.12 0.511 0.2205 0.103 0.1745 9 +0 0.515 0.405 0.13 0.573 0.213 0.134 0.195 9 +0 0.52 0.415 0.14 0.6385 0.2945 0.1405 0.171 8 +0 0.525 0.405 0.125 0.657 0.2985 0.1505 0.168 10 +-1 0.525 0.425 0.14 0.8735 0.4205 0.182 0.2225 10 +0 0.53 0.425 0.13 0.781 0.3905 0.2005 0.215 9 +0 0.53 0.42 0.14 0.6765 0.256 0.1855 0.208 9 +1 0.53 0.41 0.125 0.769 0.346 0.173 0.215 9 +0 0.53 0.395 0.125 0.6235 0.2975 0.108 0.195 11 +1 0.535 0.405 0.14 0.7315 0.336 0.156 0.19 7 +0 0.535 0.45 0.155 0.8075 0.3655 0.148 0.2595 10 +1 0.545 0.41 0.14 0.737 0.349 0.15 0.212 9 +-1 0.545 0.41 0.125 0.654 0.2945 0.1315 0.205 10 +0 0.55 0.415 0.15 0.7915 0.3535 0.176 0.236 10 +0 0.55 0.45 0.14 0.753 0.3445 0.1325 0.24 8 +0 0.55 0.4 0.135 0.717 0.3315 0.1495 0.221 9 +0 0.555 0.43 0.15 0.783 0.345 0.1755 0.247 9 +0 0.575 0.45 0.145 0.872 0.4675 0.18 0.217 9 +0 0.575 0.44 0.15 0.983 0.486 0.215 0.239 8 +-1 0.585 0.42 0.155 1.034 0.437 0.2225 0.32 11 +-1 0.585 0.465 0.145 0.9855 0.4325 0.2145 0.2845 10 +0 0.585 0.46 0.14 0.7635 0.326 0.153 0.265 9 +1 0.59 0.465 0.135 0.9895 0.4235 0.199 0.28 8 +0 0.595 0.47 0.135 0.9365 0.434 0.184 0.287 10 +-1 0.595 0.44 0.135 0.964 0.5005 0.1715 0.2575 10 +-1 0.595 0.46 0.155 1.0455 0.4565 0.24 0.3085 10 +-1 0.595 0.45 0.165 1.081 0.49 0.2525 0.279 12 +1 0.6 0.47 0.16 1.012 0.441 0.2015 0.305 10 +-1 0.6 0.5 0.16 1.122 0.5095 0.256 0.309 10 +1 0.605 0.49 0.165 1.1245 0.492 0.222 0.3555 11 +-1 0.605 0.49 0.15 1.1345 0.4305 0.2525 0.35 10 +1 0.61 0.45 0.19 1.0805 0.517 0.2495 0.2935 10 +-1 0.61 0.495 0.165 1.0835 0.4525 0.273 0.317 9 +1 0.615 0.47 0.175 1.242 0.5675 0.287 0.317 11 +1 0.62 0.5 0.18 1.3915 0.726 0.2795 0.332 11 +1 0.62 0.525 0.155 1.085 0.454 0.1965 0.35 10 +0 0.62 0.47 0.155 0.966 0.447 0.171 0.284 11 +1 0.62 0.48 0.165 1.0855 0.481 0.2575 0.305 10 +-1 0.625 0.485 0.135 1.3025 0.61 0.2675 0.3605 14 +0 0.625 0.485 0.16 1.15 0.5255 0.257 0.3315 11 +0 0.63 0.49 0.17 1.217 0.5515 0.212 0.31 11 +-1 0.63 0.505 0.195 1.306 0.516 0.3305 0.375 9 +1 0.64 0.5 0.175 1.273 0.5065 0.2925 0.405 13 +1 0.645 0.51 0.19 1.4865 0.6445 0.296 0.425 12 +1 0.65 0.52 0.17 1.3655 0.6155 0.2885 0.36 11 +1 0.65 0.495 0.17 1.276 0.6215 0.2305 0.399 11 +1 0.65 0.495 0.16 1.2075 0.55 0.2695 0.32 10 +-1 0.65 0.52 0.195 1.281 0.5985 0.246 0.3825 10 +1 0.65 0.525 0.205 1.4275 0.69 0.306 0.4355 13 +1 0.65 0.51 0.175 1.155 0.4955 0.2025 0.385 12 +-1 0.65 0.51 0.175 1.35 0.575 0.3155 0.3885 10 +1 0.65 0.525 0.19 1.3685 0.5975 0.296 0.4 11 +-1 0.66 0.53 0.17 1.431 0.622 0.309 0.398 10 +1 0.66 0.51 0.18 1.261 0.5 0.2335 0.339 10 +-1 0.665 0.54 0.195 1.764 0.8505 0.3615 0.47 11 +-1 0.67 0.51 0.155 1.278 0.5605 0.3045 0.358 11 +1 0.67 0.54 0.195 1.217 0.532 0.2735 0.3315 11 +-1 0.67 0.54 0.2 1.46 0.6435 0.328 0.4165 9 +-1 0.675 0.535 0.185 1.5575 0.7035 0.402 0.4 11 +1 0.675 0.51 0.17 1.527 0.809 0.318 0.341 11 +-1 0.675 0.53 0.195 1.4985 0.62 0.375 0.425 9 +1 0.685 0.55 0.19 1.885 0.89 0.41 0.4895 10 +1 0.685 0.535 0.175 1.432 0.637 0.247 0.46 11 +1 0.705 0.55 0.21 1.4385 0.655 0.3255 0.462 11 +-1 0.705 0.53 0.17 1.564 0.612 0.394 0.44 10 +1 0.71 0.555 0.175 2.14 1.2455 0.3725 0.434 11 +-1 0.725 0.56 0.185 1.792 0.873 0.367 0.435 11 +1 0.78 0.6 0.21 2.548 1.1945 0.5745 0.6745 11 +0 0.235 0.13 0.075 0.1585 0.0685 0.037 0.0465 5 +0 0.35 0.25 0.1 0.4015 0.1725 0.063 0.1255 7 +0 0.36 0.25 0.115 0.465 0.21 0.1055 0.128 7 +0 0.38 0.28 0.095 0.2885 0.165 0.0435 0.067 7 +-1 0.38 0.32 0.115 0.6475 0.323 0.1325 0.164 7 +1 0.43 0.31 0.13 0.6485 0.2735 0.163 0.184 9 +0 0.465 0.36 0.105 0.452 0.22 0.159 0.1035 9 +0 0.47 0.355 0.12 0.4915 0.1765 0.1125 0.1325 9 +-1 0.485 0.365 0.15 0.9145 0.4145 0.199 0.273 7 +1 0.495 0.375 0.155 0.976 0.45 0.2285 0.2475 9 +0 0.5 0.395 0.145 0.7865 0.332 0.1815 0.2455 8 +1 0.505 0.4 0.15 0.775 0.3445 0.157 0.185 7 +0 0.51 0.375 0.15 0.8415 0.3845 0.156 0.255 10 +1 0.51 0.38 0.135 0.681 0.3435 0.142 0.17 9 +1 0.515 0.37 0.115 0.6145 0.3415 0.155 0.146 9 +-1 0.55 0.415 0.18 1.1655 0.502 0.301 0.311 9 +-1 0.575 0.42 0.19 1.764 0.914 0.377 0.4095 10 +1 0.605 0.455 0.16 1.1215 0.533 0.273 0.271 10 +1 0.615 0.505 0.165 1.167 0.4895 0.2955 0.345 10 +1 0.615 0.475 0.15 1.0375 0.476 0.2325 0.283 9 +1 0.625 0.48 0.18 1.223 0.565 0.2975 0.3375 10 +1 0.625 0.47 0.15 1.124 0.556 0.2315 0.287 9 +-1 0.635 0.505 0.17 1.2635 0.512 0.322 0.355 9 +-1 0.65 0.525 0.165 1.238 0.647 0.2485 0.3005 9 +-1 0.65 0.5 0.17 1.4045 0.694 0.318 0.3235 11 +-1 0.67 0.525 0.195 1.37 0.6065 0.2955 0.407 12 +-1 0.695 0.525 0.205 1.8185 0.819 0.4025 0.4525 13 +-1 0.705 0.555 0.195 1.7525 0.7105 0.4215 0.516 12 +0 0.275 0.205 0.065 0.101 0.041 0.021 0.034 5 +0 0.285 0.205 0.07 0.106 0.039 0.0285 0.034 5 +0 0.36 0.265 0.085 0.1865 0.0675 0.037 0.0615 7 +0 0.385 0.29 0.1 0.2575 0.1 0.061 0.086 6 +0 0.4 0.315 0.1 0.3225 0.143 0.0735 0.091 6 +0 0.43 0.33 0.095 0.32 0.118 0.065 0.123 7 +0 0.435 0.375 0.11 0.4155 0.17 0.076 0.145 8 +0 0.45 0.335 0.115 0.3935 0.195 0.071 0.11 7 +0 0.475 0.355 0.135 0.4775 0.2145 0.09 0.1435 8 +0 0.475 0.36 0.11 0.452 0.191 0.099 0.13 8 +0 0.485 0.37 0.14 0.5065 0.2425 0.088 0.1465 8 +0 0.51 0.395 0.105 0.5525 0.234 0.127 0.165 8 +0 0.515 0.39 0.12 0.565 0.235 0.135 0.179 9 +0 0.52 0.41 0.14 0.699 0.3395 0.129 0.1945 10 +0 0.525 0.4 0.14 0.6055 0.2605 0.108 0.21 9 +1 0.53 0.425 0.155 0.7905 0.307 0.171 0.2595 9 +1 0.53 0.425 0.13 0.702 0.2975 0.1395 0.22 9 +1 0.53 0.42 0.135 0.675 0.294 0.156 0.1825 10 +0 0.53 0.395 0.115 0.475 0.2025 0.101 0.148 8 +0 0.53 0.41 0.15 0.612 0.2435 0.1525 0.1895 11 +0 0.535 0.4 0.145 0.705 0.3065 0.1365 0.22 10 +0 0.535 0.45 0.135 0.728 0.2845 0.1845 0.265 9 +-1 0.555 0.44 0.14 0.846 0.346 0.1715 0.2735 10 +1 0.555 0.46 0.16 0.86 0.3345 0.1935 0.275 10 +1 0.56 0.465 0.145 0.8875 0.3345 0.22 0.2695 9 +-1 0.56 0.43 0.145 0.898 0.3895 0.2325 0.245 9 +0 0.565 0.43 0.125 0.6545 0.2815 0.139 0.21 9 +0 0.575 0.45 0.145 0.795 0.364 0.1505 0.26 10 +1 0.575 0.465 0.12 1.0535 0.516 0.2185 0.235 9 +-1 0.575 0.46 0.15 0.927 0.333 0.207 0.2985 9 +0 0.58 0.42 0.14 0.701 0.3285 0.102 0.2255 9 +1 0.58 0.45 0.155 0.8275 0.321 0.1975 0.2445 8 +-1 0.585 0.42 0.155 0.9845 0.442 0.2155 0.2875 13 +1 0.585 0.47 0.145 0.9565 0.4025 0.2365 0.265 9 +0 0.59 0.45 0.125 0.86 0.437 0.1515 0.245 9 +1 0.595 0.48 0.185 1.1785 0.526 0.2975 0.314 10 +1 0.615 0.48 0.185 1.2205 0.4985 0.315 0.33 10 +1 0.615 0.455 0.13 0.9685 0.49 0.182 0.2655 10 +-1 0.62 0.5 0.175 1.107 0.4895 0.24 0.343 11 +0 0.62 0.48 0.18 1.1305 0.5285 0.2655 0.306 12 +1 0.62 0.48 0.155 1.2555 0.527 0.374 0.3175 11 +1 0.625 0.495 0.155 1.177 0.5055 0.278 0.345 9 +1 0.625 0.5 0.185 1.2425 0.5995 0.248 0.335 10 +1 0.63 0.49 0.16 1.09 0.407 0.224 0.354 12 +-1 0.63 0.475 0.15 1.072 0.433 0.2975 0.315 8 +-1 0.645 0.51 0.155 1.129 0.5015 0.24 0.342 10 +-1 0.65 0.505 0.175 1.2075 0.5105 0.262 0.39 10 +-1 0.65 0.495 0.175 1.227 0.528 0.258 0.37 11 +-1 0.655 0.52 0.175 1.472 0.6275 0.27 0.45 13 +-1 0.665 0.525 0.18 1.5785 0.678 0.229 0.456 14 +1 0.67 0.52 0.175 1.4755 0.6275 0.379 0.374 10 +1 0.675 0.54 0.175 1.5545 0.6645 0.278 0.512 12 +-1 0.675 0.54 0.21 1.593 0.686 0.318 0.45 11 +1 0.695 0.58 0.2 1.8995 0.675 0.478 0.5295 13 +-1 0.695 0.535 0.175 1.361 0.5465 0.2815 0.465 10 +-1 0.705 0.56 0.17 1.4575 0.607 0.318 0.44 11 +1 0.74 0.58 0.205 2.381 0.8155 0.4695 0.488 12 +0 0.205 0.155 0.045 0.0495 0.0235 0.011 0.014 3 +0 0.305 0.23 0.075 0.1455 0.0595 0.0305 0.05 6 +0 0.32 0.23 0.06 0.129 0.0615 0.0275 0.0355 7 +0 0.355 0.27 0.1 0.2255 0.11 0.042 0.064 7 +1 0.425 0.305 0.11 0.359 0.173 0.0875 0.0975 9 +0 0.425 0.31 0.095 0.3505 0.1645 0.071 0.1 8 +-1 0.45 0.365 0.115 0.5885 0.318 0.121 0.1325 8 +1 0.515 0.385 0.13 0.623 0.2855 0.1285 0.175 10 +-1 0.52 0.375 0.135 0.5375 0.221 0.117 0.17 8 +0 0.525 0.4 0.125 0.5655 0.2435 0.119 0.175 8 +1 0.555 0.445 0.13 0.8625 0.4225 0.155 0.24 9 +-1 0.61 0.49 0.17 1.137 0.4605 0.2825 0.344 12 +0 0.35 0.26 0.095 0.221 0.0985 0.043 0.07 8 +0 0.38 0.275 0.095 0.2425 0.106 0.0485 0.21 6 +0 0.46 0.34 0.1 0.386 0.1805 0.0875 0.0965 8 +1 0.465 0.355 0.12 0.5315 0.2725 0.097 0.1395 8 +1 0.475 0.385 0.12 0.562 0.289 0.0905 0.153 8 +1 0.565 0.445 0.14 0.836 0.406 0.1605 0.2245 9 +1 0.57 0.45 0.14 0.9275 0.477 0.1605 0.2515 8 +1 0.57 0.44 0.145 0.8815 0.3605 0.1955 0.2735 10 +1 0.595 0.46 0.155 1.03 0.4275 0.207 0.3305 10 +-1 0.605 0.48 0.175 1.1685 0.4815 0.2305 0.356 9 +-1 0.615 0.455 0.135 1.059 0.4735 0.263 0.274 9 +1 0.62 0.46 0.17 1.127 0.535 0.2635 0.296 7 +1 0.625 0.47 0.17 1.1665 0.4605 0.2565 0.3945 11 +-1 0.68 0.52 0.185 1.541 0.5985 0.395 0.4575 10 +1 0.68 0.54 0.195 1.7825 0.5565 0.3235 0.4285 11 +1 0.68 0.52 0.175 1.543 0.7525 0.351 0.374 11 +-1 0.71 0.555 0.17 1.47 0.5375 0.38 0.431 12 +1 0.5 0.385 0.12 0.6335 0.2305 0.125 0.235 14 +-1 0.545 0.42 0.175 0.754 0.256 0.1775 0.275 10 +-1 0.46 0.365 0.115 0.4485 0.165 0.083 0.17 14 +1 0.535 0.41 0.15 0.8105 0.345 0.187 0.24 11 +1 0.335 0.26 0.075 0.22 0.0855 0.04 0.085 6 +-1 0.425 0.35 0.1 0.4425 0.175 0.0755 0.175 7 +1 0.41 0.325 0.1 0.3555 0.146 0.072 0.105 9 +0 0.17 0.105 0.035 0.034 0.012 0.0085 0.005 4 +0 0.335 0.25 0.095 0.185 0.0795 0.0495 0.055 8 +1 0.52 0.425 0.125 0.79 0.372 0.205 0.19 8 +-1 0.53 0.41 0.145 0.8255 0.375 0.204 0.245 9 +1 0.5 0.42 0.125 0.62 0.255 0.15 0.205 11 +-1 0.615 0.475 0.145 0.9525 0.3915 0.195 0.32 9 +1 0.575 0.45 0.16 0.955 0.44 0.1685 0.27 16 +1 0.57 0.45 0.155 0.91 0.326 0.1895 0.355 14 +1 0.455 0.35 0.105 0.416 0.1625 0.097 0.145 11 +0 0.37 0.275 0.085 0.2045 0.096 0.056 0.08 6 +1 0.445 0.37 0.125 0.515 0.2495 0.087 0.159 9 +-1 0.675 0.535 0.22 1.604 0.6175 0.4255 0.453 14 +1 0.385 0.3 0.115 0.3435 0.1645 0.085 0.1025 6 +-1 0.375 0.295 0.11 0.3005 0.1255 0.0575 0.1035 7 +1 0.56 0.44 0.13 0.8255 0.2425 0.202 0.285 10 +1 0.55 0.41 0.15 0.785 0.282 0.186 0.275 12 +-1 0.57 0.465 0.155 0.9685 0.446 0.261 0.255 9 +-1 0.485 0.4 0.155 0.731 0.236 0.183 0.255 11 +1 0.41 0.335 0.115 0.4405 0.19 0.085 0.135 8 +0 0.335 0.255 0.085 0.1785 0.071 0.0405 0.055 9 +1 0.655 0.515 0.2 1.373 0.443 0.3375 0.49 16 +-1 0.565 0.45 0.165 0.9765 0.322 0.244 0.37 12 +-1 0.57 0.44 0.19 1.018 0.447 0.207 0.265 9 +-1 0.55 0.465 0.15 1.082 0.3575 0.194 0.19 14 +-1 0.63 0.475 0.175 1.423 0.4155 0.3385 0.49 14 +1 0.475 0.37 0.125 0.655 0.266 0.1725 0.185 10 +-1 0.655 0.5 0.18 1.4155 0.508 0.314 0.445 18 +0 0.32 0.235 0.065 0.1385 0.058 0.0225 0.05 5 +1 0.525 0.395 0.165 0.782 0.285 0.1405 0.285 19 +-1 0.525 0.43 0.165 0.717 0.289 0.1745 0.195 10 +-1 0.5 0.39 0.13 0.6355 0.2505 0.1635 0.195 15 +-1 0.44 0.34 0.135 0.3975 0.1505 0.0945 0.135 8 +-1 0.49 0.385 0.16 0.656 0.2455 0.171 0.205 9 +1 0.545 0.44 0.165 0.744 0.2875 0.204 0.25 15 +-1 0.45 0.36 0.11 0.447 0.203 0.082 0.13 12 +-1 0.515 0.4 0.115 0.578 0.191 0.1445 0.17 9 +0 0.33 0.25 0.075 0.1405 0.056 0.035 0.05 5 +-1 0.525 0.41 0.15 0.708 0.274 0.151 0.25 12 +1 0.295 0.225 0.09 0.1385 0.048 0.046 0.05 9 +1 0.545 0.45 0.16 0.8615 0.2925 0.1545 0.365 16 +-1 0.645 0.5 0.225 1.626 0.587 0.4055 0.41 15 +1 0.45 0.355 0.115 0.478 0.18 0.1185 0.155 10 +-1 0.61 0.49 0.17 1.1775 0.5655 0.2385 0.295 15 +0 0.38 0.3 0.1 0.286 0.1305 0.056 0.09 7 +-1 0.565 0.455 0.13 1.058 0.439 0.2645 0.3 10 +-1 0.67 0.545 0.16 1.5415 0.5985 0.2565 0.495 15 +1 0.54 0.425 0.12 0.817 0.2945 0.153 0.195 10 +0 0.29 0.225 0.075 0.152 0.071 0.059 0.045 9 +0 0.41 0.33 0.105 0.335 0.1525 0.074 0.11 7 +-1 0.46 0.375 0.12 0.4915 0.2205 0.088 0.17 7 +-1 0.56 0.44 0.155 0.9705 0.4315 0.263 0.255 9 +-1 0.575 0.45 0.1 0.9315 0.431 0.222 0.235 12 +1 0.62 0.5 0.2 1.221 0.4605 0.263 0.43 12 +1 0.515 0.4 0.14 0.7365 0.2955 0.184 0.185 16 +-1 0.56 0.46 0.18 0.97 0.342 0.196 0.355 12 +-1 0.5 0.4 0.15 0.8085 0.273 0.112 0.295 13 +0 0.435 0.355 0.125 0.4075 0.1535 0.074 0.165 9 +1 0.495 0.38 0.135 0.6295 0.263 0.1425 0.215 12 +-1 0.595 0.5 0.18 1.053 0.4405 0.192 0.39 13 +1 0.76 0.575 0.19 1.829 0.7035 0.386 0.56 14 +-1 0.615 0.5 0.165 1.1765 0.488 0.244 0.345 17 +-1 0.565 0.46 0.15 0.8765 0.3455 0.1925 0.275 10 +0 0.14 0.105 0.035 0.0145 0.005 0.0035 0.005 4 +1 0.445 0.345 0.14 0.476 0.2055 0.1015 0.1085 15 +-1 0.525 0.43 0.125 0.813 0.3315 0.166 0.1775 12 +0 0.16 0.12 0.02 0.018 0.0075 0.0045 0.005 4 +1 0.635 0.48 0.235 1.064 0.413 0.228 0.36 16 +1 0.575 0.47 0.165 0.853 0.292 0.179 0.35 16 +1 0.38 0.27 0.095 0.219 0.0835 0.0515 0.07 6 +1 0.245 0.18 0.065 0.0635 0.0245 0.0135 0.02 4 +0 0.48 0.39 0.15 0.6275 0.276 0.134 0.185 13 +0 0.455 0.365 0.135 0.441 0.1515 0.1165 0.145 9 +-1 0.455 0.375 0.125 0.458 0.1985 0.111 0.12 10 +1 0.455 0.355 0.135 0.4745 0.1865 0.0935 0.168 13 +0 0.355 0.27 0.1 0.216 0.083 0.037 0.075 10 +0 0.52 0.405 0.14 0.6765 0.2865 0.146 0.205 15 +0 0.54 0.4 0.145 0.757 0.315 0.181 0.215 11 +0 0.52 0.39 0.14 0.7325 0.2415 0.144 0.26 19 +0 0.56 0.445 0.165 1.0285 0.4535 0.253 0.275 11 +-1 0.52 0.41 0.16 0.712 0.2845 0.153 0.225 10 +0 0.615 0.46 0.19 1.066 0.4335 0.226 0.33 13 +-1 0.645 0.49 0.19 1.3065 0.479 0.3565 0.345 18 +0 0.565 0.43 0.135 0.8545 0.321 0.1775 0.275 11 +1 0.295 0.23 0.085 0.125 0.042 0.0285 0.043 8 +1 0.375 0.28 0.095 0.2225 0.0875 0.043 0.08 10 +0 0.525 0.4 0.14 0.6955 0.2405 0.16 0.253 10 +1 0.395 0.28 0.08 0.266 0.0995 0.066 0.09 12 +-1 0.5 0.4 0.165 0.7105 0.27 0.1455 0.225 20 +-1 0.47 0.35 0.115 0.487 0.1955 0.127 0.155 8 +0 0.58 0.42 0.16 0.728 0.2725 0.19 0.19 14 +0 0.5 0.38 0.155 0.6675 0.2745 0.156 0.18 12 +0 0.725 0.55 0.22 2.0495 0.7735 0.4405 0.655 10 +-1 0.65 0.515 0.215 1.498 0.564 0.323 0.425 16 +-1 0.67 0.535 0.185 1.597 0.6275 0.35 0.47 21 +0 0.55 0.44 0.165 0.8605 0.312 0.169 0.3 17 +-1 0.49 0.37 0.115 0.541 0.171 0.1175 0.185 11 +0 0.235 0.18 0.06 0.058 0.022 0.0145 0.018 6 +0 0.235 0.175 0.08 0.0645 0.0215 0.0175 0.0215 5 +1 0.52 0.41 0.115 0.77 0.263 0.157 0.26 11 +-1 0.475 0.4 0.115 0.541 0.186 0.1025 0.21 13 +1 0.53 0.425 0.11 0.739 0.237 0.161 0.295 13 +-1 0.35 0.275 0.065 0.205 0.0745 0.0465 0.07 10 +1 0.555 0.42 0.145 0.8695 0.3075 0.2575 0.25 14 +1 0.505 0.39 0.105 0.6555 0.2595 0.18 0.19 11 +-1 0.54 0.44 0.16 1.0905 0.391 0.2295 0.355 15 +-1 0.525 0.4 0.115 0.6295 0.2555 0.144 0.18 11 +1 0.55 0.45 0.175 1.0985 0.3765 0.215 0.4 14 +1 0.55 0.44 0.16 0.991 0.348 0.168 0.375 20 +0 0.235 0.175 0.065 0.0615 0.0205 0.02 0.019 6 +1 0.525 0.41 0.165 0.8005 0.2635 0.1985 0.25 13 +1 0.475 0.365 0.14 0.6175 0.202 0.1445 0.19 16 +-1 0.53 0.4 0.165 0.772 0.2855 0.1975 0.23 12 +-1 0.525 0.415 0.15 0.7155 0.2355 0.171 0.27 13 +-1 0.53 0.425 0.13 0.717 0.2115 0.166 0.255 13 +-1 0.465 0.39 0.11 0.6355 0.1815 0.157 0.225 13 +0 0.315 0.235 0.08 0.18 0.08 0.045 0.047 5 +0 0.465 0.355 0.12 0.5805 0.255 0.0915 0.184 8 +1 0.485 0.385 0.105 0.556 0.296 0.104 0.133 7 +0 0.49 0.385 0.12 0.591 0.271 0.1125 0.1775 9 +-1 0.515 0.395 0.14 0.686 0.281 0.1255 0.22 12 +-1 0.555 0.44 0.155 1.016 0.4935 0.1855 0.263 10 +-1 0.61 0.5 0.18 1.438 0.5185 0.3735 0.3345 9 +-1 0.68 0.55 0.19 1.807 0.8225 0.3655 0.515 11 +1 0.69 0.55 0.195 1.777 0.769 0.38 0.4305 11 +1 0.695 0.55 0.205 2.173 1.133 0.4665 0.496 10 +-1 0.72 0.575 0.195 2.1505 1.0745 0.382 0.585 10 +0 0.27 0.205 0.075 0.118 0.059 0.031 0.0305 4 +0 0.27 0.19 0.06 0.099 0.0445 0.017 0.03 5 +0 0.295 0.22 0.07 0.1365 0.0575 0.0295 0.035 6 +0 0.295 0.22 0.065 0.1295 0.052 0.028 0.035 6 +0 0.315 0.23 0.07 0.164 0.0625 0.04 0.045 6 +0 0.375 0.29 0.095 0.2875 0.123 0.0605 0.08 6 +0 0.38 0.3 0.09 0.277 0.1655 0.0625 0.082 6 +0 0.385 0.285 0.09 0.248 0.0935 0.066 0.07 6 +0 0.4 0.295 0.095 0.252 0.1105 0.0575 0.066 6 +1 0.415 0.315 0.12 0.4015 0.199 0.087 0.097 8 +0 0.415 0.33 0.1 0.3905 0.1925 0.0755 0.1025 7 +0 0.42 0.32 0.115 0.409 0.2055 0.0935 0.105 8 +0 0.44 0.33 0.135 0.4095 0.163 0.1005 0.119 6 +0 0.45 0.35 0.135 0.494 0.2205 0.0945 0.1405 7 +0 0.475 0.35 0.12 0.4905 0.2035 0.13 0.135 7 +1 0.485 0.39 0.12 0.599 0.251 0.1345 0.169 8 +1 0.495 0.375 0.115 0.6245 0.282 0.143 0.155 6 +-1 0.525 0.41 0.115 0.7745 0.416 0.163 0.18 7 +1 0.565 0.455 0.15 0.9795 0.444 0.205 0.275 8 +0 0.58 0.435 0.15 0.8915 0.363 0.1925 0.2515 6 +-1 0.585 0.45 0.125 0.874 0.3545 0.2075 0.225 6 +1 0.6 0.465 0.155 1.262 0.6245 0.2455 0.33 10 +1 0.63 0.48 0.185 1.21 0.53 0.2555 0.322 11 +-1 0.645 0.525 0.17 1.37 0.6135 0.283 0.34 10 +-1 0.655 0.545 0.185 1.759 0.6865 0.313 0.547 11 +1 0.665 0.515 0.165 1.3855 0.621 0.302 0.3445 8 +-1 0.67 0.52 0.195 1.8065 0.758 0.3735 0.5055 11 +1 0.67 0.51 0.2 1.5945 0.6705 0.3845 0.4505 10 +1 0.685 0.51 0.18 1.4545 0.6315 0.3105 0.3725 9 +1 0.7 0.6 0.23 2.003 0.8105 0.4045 0.5755 10 +1 0.72 0.6 0.235 2.2385 0.984 0.411 0.621 12 +0 0.185 0.135 0.045 0.032 0.011 0.0065 0.01 4 +0 0.245 0.175 0.055 0.0785 0.04 0.018 0.02 5 +0 0.315 0.23 0 0.134 0.0575 0.0285 0.3505 6 +0 0.36 0.27 0.09 0.2075 0.098 0.039 0.062 6 +0 0.375 0.28 0.08 0.2235 0.115 0.043 0.055 6 +0 0.415 0.31 0.095 0.34 0.181 0.057 0.083 6 +0 0.455 0.35 0.135 0.5365 0.2855 0.0855 0.1325 7 +0 0.48 0.35 0.105 0.635 0.352 0.127 0.135 6 +0 0.485 0.375 0.125 0.562 0.2505 0.1345 0.1525 8 +0 0.51 0.39 0.125 0.597 0.293 0.1265 0.1555 8 +1 0.52 0.395 0.125 0.5815 0.2565 0.1265 0.17 10 +-1 0.555 0.43 0.14 0.7545 0.3525 0.1835 0.2015 9 +1 0.585 0.465 0.15 0.98 0.4315 0.2545 0.247 9 +-1 0.585 0.46 0.15 1.0035 0.503 0.2105 0.2515 11 +1 0.585 0.455 0.155 1.133 0.5515 0.223 0.305 12 +1 0.61 0.49 0.16 1.146 0.597 0.246 0.265 8 +1 0.61 0.475 0.15 1.142 0.62 0.237 0.245 9 +1 0.615 0.53 0.17 1.12 0.5775 0.2095 0.286 9 +-1 0.62 0.465 0.14 1.011 0.479 0.2385 0.255 8 +1 0.625 0.505 0.175 1.131 0.5425 0.2265 0.323 8 +1 0.625 0.48 0.175 1.065 0.4865 0.259 0.285 10 +1 0.635 0.48 0.145 1.181 0.665 0.229 0.225 10 +-1 0.64 0.525 0.175 1.382 0.646 0.3115 0.37 9 +1 0.66 0.505 0.19 1.4385 0.6775 0.285 0.178 11 +1 0.66 0.485 0.155 1.2275 0.61 0.274 0.3 8 +1 0.66 0.515 0.155 1.4415 0.7055 0.3555 0.335 10 +-1 0.68 0.55 0.175 1.473 0.713 0.282 0.4295 11 +-1 0.69 0.58 0.195 1.658 0.708 0.3615 0.4715 10 +1 0.72 0.545 0.195 1.7475 0.8215 0.383 0.4705 11 +0 0.275 0.2 0.07 0.096 0.037 0.0225 0.03 6 +0 0.33 0.245 0.065 0.1445 0.058 0.032 0.0505 6 +0 0.33 0.26 0.085 0.1965 0.0915 0.0425 0.055 7 +0 0.365 0.28 0.09 0.196 0.0865 0.036 0.0605 7 +0 0.365 0.27 0.09 0.2155 0.1005 0.049 0.0655 6 +0 0.42 0.31 0.1 0.2805 0.1125 0.0615 0.0925 8 +0 0.435 0.335 0.11 0.334 0.1355 0.0775 0.0965 7 +0 0.435 0.325 0.1 0.366 0.174 0.0725 0.109 7 +0 0.44 0.325 0.11 0.4965 0.258 0.1195 0.1075 8 +0 0.485 0.365 0.09 0.651 0.3165 0.132 0.18 8 +0 0.495 0.385 0.125 0.5125 0.2075 0.1155 0.172 10 +1 0.51 0.405 0.125 0.6925 0.327 0.155 0.1805 7 +0 0.52 0.41 0.14 0.5995 0.242 0.1375 0.182 11 +0 0.54 0.42 0.14 0.74 0.3595 0.159 0.1985 8 +0 0.54 0.415 0.155 0.702 0.322 0.167 0.19 10 +0 0.55 0.445 0.125 0.672 0.288 0.1365 0.21 11 +0 0.56 0.44 0.155 0.811 0.3685 0.178 0.235 11 +-1 0.575 0.45 0.12 0.9585 0.447 0.169 0.275 12 +0 0.575 0.45 0.15 0.858 0.449 0.166 0.215 10 +-1 0.575 0.46 0.165 0.9575 0.4815 0.1945 0.236 10 +-1 0.58 0.46 0.135 0.926 0.4025 0.208 0.275 8 +-1 0.58 0.425 0.155 0.873 0.3615 0.249 0.239 10 +1 0.59 0.45 0.16 0.998 0.445 0.214 0.301 9 +1 0.6 0.46 0.155 0.6655 0.285 0.149 0.269 11 +1 0.62 0.485 0.145 1.003 0.4655 0.2195 0.28 11 +-1 0.625 0.495 0.16 1.234 0.6335 0.192 0.35 13 +1 0.625 0.495 0.155 1.025 0.46 0.1945 0.34 9 +1 0.625 0.495 0.175 1.2935 0.5805 0.317 0.355 9 +1 0.625 0.5 0.175 1.0565 0.4615 0.258 0.305 10 +1 0.625 0.47 0.145 1.7855 0.675 0.247 0.3245 13 +-1 0.625 0.485 0.165 1.2255 0.5075 0.296 0.36 10 +-1 0.635 0.5 0.18 1.2565 0.539 0.292 0.35 10 +-1 0.645 0.5 0.15 1.159 0.4675 0.3355 0.31 9 +1 0.645 0.51 0.165 1.403 0.5755 0.2515 0.4545 11 +-1 0.69 0.535 0.185 1.826 0.797 0.409 0.499 11 +-1 0.695 0.56 0.185 1.7715 0.8195 0.331 0.437 10 +1 0.515 0.39 0.12 0.6125 0.302 0.1365 0.1415 8 +0 0.545 0.405 0.13 0.658 0.327 0.1445 0.174 8 +1 0.62 0.465 0.145 0.911 0.375 0.2145 0.278 10 +1 0.63 0.49 0.15 1.1955 0.5845 0.257 0.3 9 +-1 0.63 0.515 0.16 1.336 0.553 0.3205 0.35 11 +-1 0.64 0.49 0.18 1.36 0.653 0.347 0.305 9 +0 0.37 0.275 0.08 0.2325 0.093 0.056 0.072 6 +0 0.395 0.31 0.085 0.317 0.153 0.0505 0.0935 7 +0 0.4 0.3 0.115 0.318 0.1335 0.0725 0.0935 6 +0 0.41 0.305 0.1 0.2645 0.1 0.0655 0.085 7 +0 0.455 0.335 0.105 0.4055 0.175 0.092 0.1185 8 +0 0.48 0.335 0.125 0.524 0.246 0.1095 0.145 7 +0 0.485 0.375 0.11 0.464 0.2015 0.09 0.149 8 +0 0.5 0.36 0.12 0.439 0.1875 0.1055 0.1305 8 +0 0.515 0.395 0.125 0.5805 0.2365 0.1075 0.19 9 +0 0.52 0.4 0.14 0.622 0.278 0.1455 0.169 8 +1 0.545 0.45 0.15 0.7805 0.3795 0.1625 0.216 8 +0 0.545 0.43 0.14 0.772 0.289 0.19 0.2615 8 +0 0.55 0.435 0.125 0.741 0.348 0.1585 0.206 9 +1 0.55 0.43 0.18 0.8265 0.4405 0.159 0.225 10 +1 0.55 0.385 0.13 0.7275 0.343 0.1625 0.19 8 +0 0.555 0.43 0.125 0.7005 0.3395 0.1355 0.2095 8 +1 0.56 0.45 0.145 0.9355 0.425 0.1645 0.2725 11 +0 0.565 0.465 0.15 1.1815 0.581 0.2215 0.3095 9 +1 0.57 0.445 0.16 1.0145 0.516 0.164 0.3 10 +-1 0.575 0.48 0.17 1.1 0.506 0.2485 0.31 10 +1 0.585 0.51 0.16 1.218 0.639 0.241 0.3 11 +1 0.59 0.45 0.155 0.874 0.369 0.2135 0.24 8 +0 0.595 0.475 0.155 0.984 0.4865 0.184 0.2755 10 +1 0.6 0.47 0.13 1.0105 0.423 0.219 0.298 9 +1 0.61 0.365 0.155 1.0765 0.488 0.249 0.27 9 +1 0.615 0.475 0.205 1.337 0.5995 0.2815 0.37 11 +1 0.625 0.5 0.18 1.3705 0.645 0.303 0.3705 12 +-1 0.625 0.49 0.19 1.7015 0.7465 0.4105 0.3855 11 +1 0.63 0.485 0.18 1.2435 0.5175 0.308 0.37 11 +1 0.63 0.53 0.175 1.4135 0.667 0.2945 0.3555 13 +-1 0.635 0.485 0.155 1.073 0.467 0.1975 0.35 11 +-1 0.635 0.5 0.175 1.477 0.684 0.3005 0.39 12 +1 0.635 0.5 0.18 1.2915 0.594 0.2695 0.37 9 +-1 0.65 0.495 0.16 1.3105 0.577 0.3315 0.355 9 +1 0.67 0.525 0.18 1.4915 0.728 0.343 0.381 9 +-1 0.675 0.52 0.175 1.494 0.7365 0.3055 0.37 9 +-1 0.675 0.51 0.15 1.1965 0.475 0.304 0.386 11 +1 0.68 0.545 0.185 1.672 0.7075 0.364 0.48 11 +1 0.7 0.545 0.215 1.9125 0.8825 0.4385 0.506 10 +-1 0.71 0.545 0.175 1.907 0.8725 0.4565 0.475 11 +-1 0.715 0.565 0.18 1.79 0.844 0.3535 0.5385 9 +-1 0.72 0.59 0.205 1.7495 0.7755 0.4225 0.48 11 +0 0.42 0.305 0.1 0.3415 0.1645 0.0775 0.086 7 +0 0.48 0.35 0.1 0.519 0.2365 0.1275 0.126 7 +1 0.48 0.365 0.13 0.5305 0.2405 0.127 0.139 8 +1 0.51 0.41 0.155 1.2825 0.569 0.291 0.3795 9 +0 0.515 0.4 0.14 0.7165 0.3495 0.1595 0.1785 8 +-1 0.56 0.42 0.18 1.6645 0.7755 0.35 0.4525 9 +0 0.56 0.42 0.14 0.837 0.414 0.214 0.2 8 +-1 0.57 0.45 0.15 0.9645 0.531 0.189 0.209 9 +-1 0.605 0.465 0.155 1.1 0.547 0.2665 0.2585 10 +1 0.625 0.48 0.16 1.2415 0.6575 0.2625 0.2785 9 +-1 0.64 0.505 0.175 1.3185 0.6185 0.302 0.3315 9 +1 0.65 0.525 0.185 1.3455 0.586 0.278 0.3865 9 +0 0.3 0.215 0.05 0.1185 0.048 0.0225 0.042 4 +1 0.35 0.265 0.09 0.197 0.073 0.0365 0.077 7 +0 0.455 0.35 0.13 0.4725 0.215 0.0745 0.15 9 +0 0.46 0.365 0.11 0.4495 0.1755 0.102 0.15 8 +0 0.49 0.375 0.115 0.557 0.2275 0.1335 0.1765 8 +0 0.5 0.385 0.12 0.516 0.197 0.1305 0.165 8 +0 0.54 0.415 0.135 0.709 0.3195 0.174 0.185 9 +1 0.55 0.42 0.145 0.7385 0.321 0.1485 0.252 11 +0 0.55 0.445 0.11 0.7935 0.378 0.142 0.26 10 +1 0.555 0.435 0.145 0.9205 0.404 0.2275 0.255 8 +0 0.57 0.425 0.14 0.7655 0.331 0.14 0.24 10 +1 0.58 0.45 0.14 0.824 0.3465 0.1765 0.263 10 +0 0.58 0.425 0.145 0.83 0.379 0.1605 0.2575 11 +0 0.585 0.47 0.17 0.985 0.3695 0.2395 0.315 10 +1 0.585 0.45 0.15 0.997 0.4055 0.283 0.251 11 +-1 0.595 0.455 0.14 0.914 0.3895 0.2225 0.271 9 +-1 0.6 0.5 0.17 1.13 0.4405 0.267 0.335 11 +-1 0.615 0.495 0.155 1.0805 0.52 0.19 0.32 9 +1 0.63 0.505 0.155 1.105 0.492 0.226 0.325 11 +1 0.63 0.49 0.155 1.229 0.535 0.29 0.335 11 +-1 0.635 0.495 0.175 1.2355 0.5205 0.3085 0.347 10 +-1 0.645 0.535 0.19 1.2395 0.468 0.2385 0.424 10 +-1 0.65 0.505 0.165 1.357 0.5725 0.281 0.43 11 +1 0.655 0.525 0.18 1.402 0.624 0.2935 0.365 13 +-1 0.655 0.5 0.22 1.359 0.642 0.3255 0.405 13 +1 0.67 0.535 0.19 1.669 0.7465 0.2935 0.508 11 +1 0.67 0.525 0.2 1.7405 0.6205 0.297 0.657 11 +1 0.695 0.53 0.21 1.51 0.664 0.4095 0.385 10 +1 0.695 0.55 0.195 1.6645 0.727 0.36 0.445 11 +1 0.77 0.605 0.175 2.0505 0.8005 0.526 0.355 11 +0 0.28 0.215 0.07 0.124 0.063 0.0215 0.03 6 +0 0.33 0.23 0.08 0.14 0.0565 0.0365 0.046 7 +0 0.35 0.25 0.075 0.1695 0.0835 0.0355 0.041 6 +0 0.37 0.28 0.09 0.218 0.0995 0.0545 0.0615 7 +0 0.43 0.315 0.115 0.384 0.1885 0.0715 0.11 8 +0 0.435 0.33 0.095 0.393 0.219 0.075 0.0885 6 +0 0.44 0.35 0.11 0.3805 0.1575 0.0895 0.115 6 +1 0.475 0.37 0.11 0.4895 0.2185 0.107 0.146 8 +1 0.475 0.36 0.14 0.5135 0.241 0.1045 0.155 8 +0 0.48 0.355 0.11 0.4495 0.201 0.089 0.14 8 +-1 0.56 0.44 0.135 0.8025 0.35 0.1615 0.259 9 +-1 0.585 0.475 0.165 1.053 0.458 0.217 0.3 11 +-1 0.585 0.455 0.17 0.9945 0.4255 0.263 0.2845 11 +1 0.385 0.255 0.1 0.3175 0.137 0.068 0.092 8 +0 0.39 0.31 0.085 0.344 0.181 0.0695 0.079 7 +0 0.39 0.29 0.1 0.2845 0.1255 0.0635 0.081 7 +0 0.405 0.3 0.085 0.3035 0.15 0.0505 0.088 7 +0 0.475 0.365 0.115 0.499 0.232 0.0885 0.156 10 +1 0.5 0.38 0.125 0.577 0.269 0.1265 0.1535 9 +-1 0.515 0.4 0.125 0.615 0.2865 0.123 0.1765 8 +1 0.52 0.385 0.165 0.791 0.375 0.18 0.1815 10 +1 0.55 0.43 0.13 0.8395 0.3155 0.1955 0.2405 10 +1 0.56 0.43 0.155 0.8675 0.4 0.172 0.229 8 +-1 0.565 0.45 0.165 0.887 0.37 0.239 0.249 11 +1 0.59 0.44 0.135 0.966 0.439 0.2145 0.2605 10 +1 0.6 0.475 0.205 1.176 0.5255 0.2875 0.308 9 +-1 0.625 0.485 0.15 1.0945 0.531 0.261 0.296 10 +1 0.71 0.555 0.195 1.9485 0.9455 0.3765 0.495 12 diff --git a/regression/ex0.txt b/regression/ex0.txt new file mode 100644 index 0000000..c84b0cd --- /dev/null +++ b/regression/ex0.txt @@ -0,0 +1,200 @@ +1.000000 0.067732 3.176513 +1.000000 0.427810 3.816464 +1.000000 0.995731 4.550095 +1.000000 0.738336 4.256571 +1.000000 0.981083 4.560815 +1.000000 0.526171 3.929515 +1.000000 0.378887 3.526170 +1.000000 0.033859 3.156393 +1.000000 0.132791 3.110301 +1.000000 0.138306 3.149813 +1.000000 0.247809 3.476346 +1.000000 0.648270 4.119688 +1.000000 0.731209 4.282233 +1.000000 0.236833 3.486582 +1.000000 0.969788 4.655492 +1.000000 0.607492 3.965162 +1.000000 0.358622 3.514900 +1.000000 0.147846 3.125947 +1.000000 0.637820 4.094115 +1.000000 0.230372 3.476039 +1.000000 0.070237 3.210610 +1.000000 0.067154 3.190612 +1.000000 0.925577 4.631504 +1.000000 0.717733 4.295890 +1.000000 0.015371 3.085028 +1.000000 0.335070 3.448080 +1.000000 0.040486 3.167440 +1.000000 0.212575 3.364266 +1.000000 0.617218 3.993482 +1.000000 0.541196 3.891471 +1.000000 0.045353 3.143259 +1.000000 0.126762 3.114204 +1.000000 0.556486 3.851484 +1.000000 0.901144 4.621899 +1.000000 0.958476 4.580768 +1.000000 0.274561 3.620992 +1.000000 0.394396 3.580501 +1.000000 0.872480 4.618706 +1.000000 0.409932 3.676867 +1.000000 0.908969 4.641845 +1.000000 0.166819 3.175939 +1.000000 0.665016 4.264980 +1.000000 0.263727 3.558448 +1.000000 0.231214 3.436632 +1.000000 0.552928 3.831052 +1.000000 0.047744 3.182853 +1.000000 0.365746 3.498906 +1.000000 0.495002 3.946833 +1.000000 0.493466 3.900583 +1.000000 0.792101 4.238522 +1.000000 0.769660 4.233080 +1.000000 0.251821 3.521557 +1.000000 0.181951 3.203344 +1.000000 0.808177 4.278105 +1.000000 0.334116 3.555705 +1.000000 0.338630 3.502661 +1.000000 0.452584 3.859776 +1.000000 0.694770 4.275956 +1.000000 0.590902 3.916191 +1.000000 0.307928 3.587961 +1.000000 0.148364 3.183004 +1.000000 0.702180 4.225236 +1.000000 0.721544 4.231083 +1.000000 0.666886 4.240544 +1.000000 0.124931 3.222372 +1.000000 0.618286 4.021445 +1.000000 0.381086 3.567479 +1.000000 0.385643 3.562580 +1.000000 0.777175 4.262059 +1.000000 0.116089 3.208813 +1.000000 0.115487 3.169825 +1.000000 0.663510 4.193949 +1.000000 0.254884 3.491678 +1.000000 0.993888 4.533306 +1.000000 0.295434 3.550108 +1.000000 0.952523 4.636427 +1.000000 0.307047 3.557078 +1.000000 0.277261 3.552874 +1.000000 0.279101 3.494159 +1.000000 0.175724 3.206828 +1.000000 0.156383 3.195266 +1.000000 0.733165 4.221292 +1.000000 0.848142 4.413372 +1.000000 0.771184 4.184347 +1.000000 0.429492 3.742878 +1.000000 0.162176 3.201878 +1.000000 0.917064 4.648964 +1.000000 0.315044 3.510117 +1.000000 0.201473 3.274434 +1.000000 0.297038 3.579622 +1.000000 0.336647 3.489244 +1.000000 0.666109 4.237386 +1.000000 0.583888 3.913749 +1.000000 0.085031 3.228990 +1.000000 0.687006 4.286286 +1.000000 0.949655 4.628614 +1.000000 0.189912 3.239536 +1.000000 0.844027 4.457997 +1.000000 0.333288 3.513384 +1.000000 0.427035 3.729674 +1.000000 0.466369 3.834274 +1.000000 0.550659 3.811155 +1.000000 0.278213 3.598316 +1.000000 0.918769 4.692514 +1.000000 0.886555 4.604859 +1.000000 0.569488 3.864912 +1.000000 0.066379 3.184236 +1.000000 0.335751 3.500796 +1.000000 0.426863 3.743365 +1.000000 0.395746 3.622905 +1.000000 0.694221 4.310796 +1.000000 0.272760 3.583357 +1.000000 0.503495 3.901852 +1.000000 0.067119 3.233521 +1.000000 0.038326 3.105266 +1.000000 0.599122 3.865544 +1.000000 0.947054 4.628625 +1.000000 0.671279 4.231213 +1.000000 0.434811 3.791149 +1.000000 0.509381 3.968271 +1.000000 0.749442 4.253910 +1.000000 0.058014 3.194710 +1.000000 0.482978 3.996503 +1.000000 0.466776 3.904358 +1.000000 0.357767 3.503976 +1.000000 0.949123 4.557545 +1.000000 0.417320 3.699876 +1.000000 0.920461 4.613614 +1.000000 0.156433 3.140401 +1.000000 0.656662 4.206717 +1.000000 0.616418 3.969524 +1.000000 0.853428 4.476096 +1.000000 0.133295 3.136528 +1.000000 0.693007 4.279071 +1.000000 0.178449 3.200603 +1.000000 0.199526 3.299012 +1.000000 0.073224 3.209873 +1.000000 0.286515 3.632942 +1.000000 0.182026 3.248361 +1.000000 0.621523 3.995783 +1.000000 0.344584 3.563262 +1.000000 0.398556 3.649712 +1.000000 0.480369 3.951845 +1.000000 0.153350 3.145031 +1.000000 0.171846 3.181577 +1.000000 0.867082 4.637087 +1.000000 0.223855 3.404964 +1.000000 0.528301 3.873188 +1.000000 0.890192 4.633648 +1.000000 0.106352 3.154768 +1.000000 0.917886 4.623637 +1.000000 0.014855 3.078132 +1.000000 0.567682 3.913596 +1.000000 0.068854 3.221817 +1.000000 0.603535 3.938071 +1.000000 0.532050 3.880822 +1.000000 0.651362 4.176436 +1.000000 0.901225 4.648161 +1.000000 0.204337 3.332312 +1.000000 0.696081 4.240614 +1.000000 0.963924 4.532224 +1.000000 0.981390 4.557105 +1.000000 0.987911 4.610072 +1.000000 0.990947 4.636569 +1.000000 0.736021 4.229813 +1.000000 0.253574 3.500860 +1.000000 0.674722 4.245514 +1.000000 0.939368 4.605182 +1.000000 0.235419 3.454340 +1.000000 0.110521 3.180775 +1.000000 0.218023 3.380820 +1.000000 0.869778 4.565020 +1.000000 0.196830 3.279973 +1.000000 0.958178 4.554241 +1.000000 0.972673 4.633520 +1.000000 0.745797 4.281037 +1.000000 0.445674 3.844426 +1.000000 0.470557 3.891601 +1.000000 0.549236 3.849728 +1.000000 0.335691 3.492215 +1.000000 0.884739 4.592374 +1.000000 0.918916 4.632025 +1.000000 0.441815 3.756750 +1.000000 0.116598 3.133555 +1.000000 0.359274 3.567919 +1.000000 0.814811 4.363382 +1.000000 0.387125 3.560165 +1.000000 0.982243 4.564305 +1.000000 0.780880 4.215055 +1.000000 0.652565 4.174999 +1.000000 0.870030 4.586640 +1.000000 0.604755 3.960008 +1.000000 0.255212 3.529963 +1.000000 0.730546 4.213412 +1.000000 0.493829 3.908685 +1.000000 0.257017 3.585821 +1.000000 0.833735 4.374394 +1.000000 0.070095 3.213817 +1.000000 0.527070 3.952681 +1.000000 0.116163 3.129283 diff --git a/regression/lego.py b/regression/lego.py new file mode 100755 index 0000000..e020f9f --- /dev/null +++ b/regression/lego.py @@ -0,0 +1,282 @@ +#!/usr/bin/env python3 +# -*-coding:utf-8 -*- +import numpy as np +from bs4 import BeautifulSoup +import random + +def scrapePage(retX, retY, inFile, yr, numPce, origPrc): + """ + 函数说明:从页面读取数据,生成retX和retY列表 + Parameters: + retX - 数据X + retY - 数据Y + inFile - HTML文件 + yr - 年份 + numPce - 乐高部件数目 + origPrc - 原价 + Returns: + 无 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + # 打开并读取HTML文件 + with open(inFile, encoding='utf-8') as f: + html = f.read() + soup = BeautifulSoup(html) + + i = 1 + # 根据HTML页面结构进行解析 + currentRow = soup.find_all('table', r = "%d" % i) + + while(len(currentRow) != 0): + currentRow = soup.find_all('table', r = "%d" % i) + title = currentRow[0].find_all('a')[1].text + lwrTitle = title.lower() + # 查找是否有全新标签 + if (lwrTitle.find('new') > -1) or (lwrTitle.find('nisb') > -1): + newFlag = 1.0 + else: + newFlag = 0.0 + + # 查找是否已经标志出售,我们只收集已出售的数据 + soldUnicde = currentRow[0].find_all('td')[3].find_all('span') + if len(soldUnicde) == 0: + print("商品 #%d 没有出售" % i) + else: + # 解析页面获取当前价格 + soldPrice = currentRow[0].find_all('td')[4] + priceStr = soldPrice.text + priceStr = priceStr.replace('$','') + priceStr = priceStr.replace(',','') + if len(soldPrice) > 1: + priceStr = priceStr.replace('Free shipping', '') + sellingPrice = float(priceStr) + + # 去掉不完整的套装价格 + if sellingPrice > origPrc * 0.5: + print("%d\t%d\t%d\t%f\t%f" % (yr, numPce, newFlag, origPrc, sellingPrice)) + retX.append([yr, numPce, newFlag, origPrc]) + retY.append(sellingPrice) + i += 1 + currentRow = soup.find_all('table', r = "%d" % i) + +def ridgeRegres(xMat, yMat, lam = 0.2): + """ + 函数说明:岭回归 + Parameters: + xMat - x数据集 + yMat - y数据集 + lam - 缩减系数 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-20 + """ + xTx = xMat.T * xMat + denom = xTx + np.eye(np.shape(xMat)[1]) * lam + if np.linalg.det(denom) == 0.0: + print("矩阵为奇异矩阵,不能求逆") + return + ws = denom.I * (xMat.T * yMat) + return ws + +def setDataCollect(retX, retY): + """ + 函数说明:依次读取六种乐高套装的数据,并生成数据矩阵 + Parameters: + 无 + Returns: + 无 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + scrapePage(retX, retY, './lego/lego8288.html', 2006, 800, 49.99) #2006年的乐高8288,部件数目800,原价49.99 + scrapePage(retX, retY, './lego/lego10030.html', 2002, 3096, 269.99) #2002年的乐高10030,部件数目3096,原价269.99 + scrapePage(retX, retY, './lego/lego10179.html', 2007, 5195, 499.99) #2007年的乐高10179,部件数目5195,原价499.99 + scrapePage(retX, retY, './lego/lego10181.html', 2007, 3428, 199.99) #2007年的乐高10181,部件数目3428,原价199.99 + scrapePage(retX, retY, './lego/lego10189.html', 2008, 5922, 299.99) #2008年的乐高10189,部件数目5922,原价299.99 + scrapePage(retX, retY, './lego/lego10196.html', 2009, 3263, 249.99) #2009年的乐高10196,部件数目3263,原价249.99 + +def regularize(xMat, yMat): + """ + 函数说明:数据标准化 + Parameters: + xMat - x数据集 + yMat - y数据集 + Returns: + inxMat - 标准化后的x数据集 + inyMat - 标准化后的y数据集 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + inxMat = xMat.copy() #数据拷贝 + inyMat = yMat.copy() + yMean = np.mean(yMat, 0) #行与行操作,求均值 + inyMat = yMat - yMean #数据减去均值 + inMeans = np.mean(inxMat, 0) #行与行操作,求均值 + inVar = np.var(inxMat, 0) #行与行操作,求方差 + # print(inxMat) + print(inMeans) + # print(inVar) + inxMat = (inxMat - inMeans) / inVar #数据减去均值除以方差实现标准化 + return inxMat, inyMat + +def rssError(yArr,yHatArr): + """ + 函数说明:计算平方误差 + Parameters: + yArr - 预测值 + yHatArr - 真实值 + Returns: + + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + return ((yArr-yHatArr)**2).sum() + +def standRegres(xArr,yArr): + """ + 函数说明:计算回归系数w + Parameters: + xArr - x数据集 + yArr - y数据集 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-12 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T + xTx = xMat.T * xMat #根据文中推导的公示计算回归系数 + if np.linalg.det(xTx) == 0.0: + print("矩阵为奇异矩阵,不能求逆") + return + ws = xTx.I * (xMat.T*yMat) + return ws + +def crossValidation(xArr, yArr, numVal = 10): + """ + 函数说明:交叉验证岭回归 + Parameters: + xArr - x数据集 + yArr - y数据集 + numVal - 交叉验证次数 + Returns: + wMat - 回归系数矩阵 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-20 + """ + m = len(yArr) #统计样本个数 + indexList = list(range(m)) #生成索引值列表 + errorMat = np.zeros((numVal,30)) #create error mat 30columns numVal rows + for i in range(numVal): #交叉验证numVal次 + trainX = []; trainY = [] #训练集 + testX = []; testY = [] #测试集 + random.shuffle(indexList) #打乱次序 + for j in range(m): #划分数据集:90%训练集,10%测试集 + if j < m * 0.9: + trainX.append(xArr[indexList[j]]) + trainY.append(yArr[indexList[j]]) + else: + testX.append(xArr[indexList[j]]) + testY.append(yArr[indexList[j]]) + wMat = ridgeTest(trainX, trainY) #获得30个不同lambda下的岭回归系数 + for k in range(30): #遍历所有的岭回归系数 + matTestX = np.mat(testX); matTrainX = np.mat(trainX) #测试集 + meanTrain = np.mean(matTrainX,0) #测试集均值 + varTrain = np.var(matTrainX,0) #测试集方差 + matTestX = (matTestX - meanTrain) / varTrain #测试集标准化 + yEst = matTestX * np.mat(wMat[k,:]).T + np.mean(trainY) #根据ws预测y值 + errorMat[i, k] = rssError(yEst.T.A, np.array(testY)) #统计误差 + meanErrors = np.mean(errorMat,0) #计算每次交叉验证的平均误差 + minMean = float(min(meanErrors)) #找到最小误差 + bestWeights = wMat[np.nonzero(meanErrors == minMean)] #找到最佳回归系数 + + xMat = np.mat(xArr); yMat = np.mat(yArr).T + meanX = np.mean(xMat,0); varX = np.var(xMat,0) + unReg = bestWeights / varX #数据经过标准化,因此需要还原 + print('%f%+f*年份%+f*部件数量%+f*是否为全新%+f*原价' % ((-1 * np.sum(np.multiply(meanX,unReg)) + np.mean(yMat)), unReg[0,0], unReg[0,1], unReg[0,2], unReg[0,3])) + +def ridgeTest(xArr, yArr): + """ + 函数说明:岭回归测试 + Parameters: + xMat - x数据集 + yMat - y数据集 + Returns: + wMat - 回归系数矩阵 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-20 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T + #数据标准化 + yMean = np.mean(yMat, axis = 0) #行与行操作,求均值 + yMat = yMat - yMean #数据减去均值 + xMeans = np.mean(xMat, axis = 0) #行与行操作,求均值 + xVar = np.var(xMat, axis = 0) #行与行操作,求方差 + xMat = (xMat - xMeans) / xVar #数据减去均值除以方差实现标准化 + numTestPts = 30 #30个不同的lambda测试 + wMat = np.zeros((numTestPts, np.shape(xMat)[1])) #初始回归系数矩阵 + for i in range(numTestPts): #改变lambda计算回归系数 + ws = ridgeRegres(xMat, yMat, np.exp(i - 10)) #lambda以e的指数变化,最初是一个非常小的数, + wMat[i, :] = ws.T #计算回归系数矩阵 + return wMat + +def useStandRegres(): + """ + 函数说明:使用简单的线性回归 + Parameters: + 无 + Returns: + 无 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-12 + """ + lgX = [] + lgY = [] + setDataCollect(lgX, lgY) + data_num, features_num = np.shape(lgX) + lgX1 = np.mat(np.ones((data_num, features_num + 1))) + lgX1[:, 1:5] = np.mat(lgX) + ws = standRegres(lgX1, lgY) + print('%f%+f*年份%+f*部件数量%+f*是否为全新%+f*原价' % (ws[0],ws[1],ws[2],ws[3],ws[4])) + +def usesklearn(): + """ + 函数说明:使用sklearn + Parameters: + 无 + Returns: + 无 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-08 + """ + from sklearn import linear_model + reg = linear_model.Ridge(alpha = .5) + lgX = [] + lgY = [] + setDataCollect(lgX, lgY) + reg.fit(lgX, lgY) + print('%f%+f*年份%+f*部件数量%+f*是否为全新%+f*原价' % (reg.intercept_, reg.coef_[0], reg.coef_[1], reg.coef_[2], reg.coef_[3])) + +if __name__ == '__main__': + usesklearn() diff --git a/regression/lego/lego10030.html b/regression/lego/lego10030.html new file mode 100644 index 0000000..92024fe --- /dev/null +++ b/regression/lego/lego10030.html @@ -0,0 +1,55 @@ +lego star destroyer 10030 items - Get great deals on Star Wars, lego star destroyer items on eBay.com! +
+ +
+
+
+
Skip to main content
Hi, pbharrin! (Sign out)You're Invited! Join eBay Bucks.
Advanced

11 results found for lego star destroyer 10030

Save search
Preferences: Completed listings See only active listings | Edit preferences | Clear preferences
+
+
+

Distance

Please enter valid zipcode.
Please select a valid popular city.
Please enter valid zipcode or select a valid popular city.
Within miles of ZIP
+
+
+
+
+
+
View as:
Sort by:
You have specified additional options in Advanced Search.
Item image
 
1 Bid
Sold
$699.99
Free shipping
End Date:Jan-26 20:12
Item image
 
12 Bids
Sold
$602.00End Date:Jan-26 16:05
Item image
 
22 Bids
Sold
$515.00End Date:Jan-24 14:33
Item image
Used - Rare
 
2 Bids
Sold
$510.00End Date:Jan-24 08:44
Item image
 
1 Bid
Sold
$375.00End Date:Jan-23 12:36
Item image
 
Buy It Now
Sold
$1,050.00End Date:Jan-21 07:49
Item image
Expedited shipping available
 
26 Bids
Sold
$740.00End Date:Jan-17 20:08
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
31 Bids
Sold
$759.00End Date:Jan-17 16:27
Item image
One-day shipping available
 
6 Bids
Sold
$730.00
Free shipping
End Date:Jan-15 12:39
Item image
 
Best Offer
Sold
$750.00End Date:Jan-14 01:40
Item image
 
0 Bids$30.00End Date:Jan-13 19:12
1 item found from eBay international sellers
Item image
Location: United Kingdom
 
0 Bids$63.76End Date:Jan-16 12:43
+
+
+
This page was last updated: Jan-28 11:31. Number of bids and bid amounts may be slightly out of date. See each listing for international shipping options and costs.
+
+
+
+
Popular products
No suggestions
\ No newline at end of file diff --git a/regression/lego/lego10179.html b/regression/lego/lego10179.html new file mode 100644 index 0000000..4407610 --- /dev/null +++ b/regression/lego/lego10179.html @@ -0,0 +1,55 @@ +lego falcon 10179 items - Get great deals on Toys Hobbies, lego 10179 items on eBay.com! +
+ +
+
+
+
Skip to main content
Hi, pbharrin! (Sign out)You're Invited! Join eBay Bucks.
Advanced

27 results found for lego falcon 10179

Save search
Preferences: Completed listings See only active listings | Edit preferences | Clear preferences
+
+
+

Distance

Please enter valid zipcode.
Please select a valid popular city.
Please enter valid zipcode or select a valid popular city.
Within miles of ZIP
+
+
+
+
+
+
View as:
Sort by:
Item image
 
7 Bids
Sold
$910.00End Date:Jan-27 19:30
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$1,199.99End Date:Jan-24 11:58
Item image
 
9 Bids
Sold
$811.88End Date:Jan-24 08:36
Item image
 
Best Offer
$1,138.00
Free shipping
End Date:Jan-23 19:40
Item image
 
15 Bids
Sold
$1,324.79End Date:Jan-23 13:13
Item image
 
Buy It Now
Sold
$850.00
Free shipping
End Date:Jan-22 21:04
Item image
 
Buy It Now
Sold
$800.00
Free shipping
End Date:Jan-22 21:03
Item image
 
4 Bids
Sold
$810.00End Date:Jan-22 12:55
Item image
 
Buy It Now
Sold
$1,075.00End Date:Jan-22 05:28
Item image
Not in US E-mail me to see if box can be mailed to you
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
1 Bid
Sold
$1,050.00
Free shipping
End Date:Jan-21 21:15
Item image
Expedited shipping available
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$1,199.99End Date:Jan-21 16:22
Item image
 
Best Offer
Sold
$1,342.31End Date:Jan-21 14:47
Item image
 
Buy It Now
Sold
$1,000.00End Date:Jan-21 03:08
Item image
2 SEALED SETS WITH FREE SHIPPING WITH BUY IT NOW RETIRE
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$1,780.00
Free shipping
End Date:Jan-20 13:57
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$750.00End Date:Jan-19 09:22
Item image
 
Buy It Now$1,050.00End Date:Jan-17 18:19
Item image
 
11 Bids
Sold
$2,204.99End Date:Jan-17 15:46
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellersBuy It Now$1,099.99End Date:Jan-16 18:24
Item image
GUARANTEED XMAS DELIVERY IN US IF PURCHASED BY 12/20
One-day shipping available
 
Best Offer
Sold
$925.00End Date:Jan-16 15:12
Item image
 
9 Bids
Sold
$860.00End Date:Jan-15 19:58
Item image
 
Buy It Now$1,675.00End Date:Jan-15 19:16
Item image
 
Buy It Now$9.99End Date:Jan-15 09:17
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$1,199.99
Free shipping
End Date:Jan-14 01:04
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$1,099.99
Free shipping
End Date:Jan-13 16:48
Item image
Expedited shipping available
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$1,149.99End Date:Jan-13 14:46
Item image
 
Buy It Now
Sold
$800.00
Free shipping
End Date:Jan-13 14:13
Item image
 
Buy It Now
Sold
$850.00
Free shipping
End Date:Jan-13 09:50
1 item found from eBay international sellers
Item image
Location: United Kingdom
 
20 Bids
Sold
$1,343.74End Date:Jan-23 13:13
+
+
+
Amounts shown in italicized text are for items listed in currency other than U.S. dollars and are approximate conversions to U.S. dollars based upon Bloomberg's conversion rates. For more recent exchange rates, please use the Universal Currency Converter.

This page was last updated: Jan-28 08:08. Number of bids and bid amounts may be slightly out of date. See each listing for international shipping options and costs.
+
+
+
+
Popular products
No suggestions
\ No newline at end of file diff --git a/regression/lego/lego10181.html b/regression/lego/lego10181.html new file mode 100644 index 0000000..511540d --- /dev/null +++ b/regression/lego/lego10181.html @@ -0,0 +1,55 @@ +lego 10143 items - Get great deals on Star Wars, lego 10030 items on eBay.com! +
+ +
+
+
+
Skip to main content
Hi, pbharrin! (Sign out)You're Invited! Join eBay Bucks.
Advanced

7 results found for lego 10143

Save search
Preferences: Completed listings See only active listings | Edit preferences | Clear preferences
+
+
+

Distance

Please enter valid zipcode.
Please select a valid popular city.
Please enter valid zipcode or select a valid popular city.
Within miles of ZIP
+
+
+
+
+
+
View as:
Sort by:
You have specified additional options in Advanced Search.
+
+
+
This page was last updated: Jan-28 11:30. Number of bids and bid amounts may be slightly out of date. See each listing for international shipping options and costs.
+
+
+
+
Popular products
No suggestions
\ No newline at end of file diff --git a/regression/lego/lego10189.html b/regression/lego/lego10189.html new file mode 100644 index 0000000..edc5062 --- /dev/null +++ b/regression/lego/lego10189.html @@ -0,0 +1,55 @@ +lego taj mahal items - Get great deals on Sets, lego eiffel tower items on eBay.com! +
+ +
+
+
+
Skip to main content
Hi, pbharrin! (Sign out)You're Invited! Join eBay Bucks.
Advanced

16 results found for lego taj mahal

Save search
Preferences: Completed listings See only active listings | Edit preferences | Clear preferences
+
+
+

Distance

Please enter valid zipcode.
Please select a valid popular city.
Please enter valid zipcode or select a valid popular city.
Within miles of ZIP
+
+
+
+
+
+
View as:
Sort by:
You have specified additional options in Advanced Search.
Item image
 
5 Bids
Sold
$530.00
Free shipping
End Date:Jan-26 12:56
Item image
 
Buy It Now
$549.95
Free shipping
End Date:Jan-25 21:16
Item image
 
Buy It Now
Sold
$599.95End Date:Jan-25 18:18
Item image
 
18 Bids
Sold
$510.00End Date:Jan-23 19:05
Item image
 
8 Bids
Sold
$423.00End Date:Jan-23 07:41
Item image
 
Buy It Now
$599.95
Free shipping
End Date:Jan-22 21:13
Item image
 
0 Bids
Buy It Now
$449.99
$500.00
End Date:Jan-22 14:44
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$599.99End Date:Jan-21 18:13
Item image
Next Day Shipping Available Guaranteed
One-day shipping available
 
Buy It Now$550.00End Date:Jan-21 16:48
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$589.99
Free shipping
End Date:Jan-21 04:29
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$569.99
Free shipping
End Date:Jan-20 16:06
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$529.99End Date:Jan-20 14:11
Item image
 
1 Bid
Sold
$500.00End Date:Jan-17 16:49
Item image
 
Buy It Now
Sold
$549.95End Date:Jan-16 18:38
Item image
 
1 Bid
Sold
$300.00End Date:Jan-16 00:38
Item image
 
0 Bids
Buy It Now
$569.00
$629.00
Free shipping
End Date:Jan-15 19:40
1 item found from eBay international sellers
Item image
Location: Netherlands
 
Buy It Now
Sold
$637.52End Date:Jan-23 13:22
+
+
+
This page was last updated: Jan-28 11:32. Number of bids and bid amounts may be slightly out of date. See each listing for international shipping options and costs.
+
+
+
+
Popular products
No suggestions
\ No newline at end of file diff --git a/regression/lego/lego10196.html b/regression/lego/lego10196.html new file mode 100644 index 0000000..524593c --- /dev/null +++ b/regression/lego/lego10196.html @@ -0,0 +1,55 @@ +lego 10196 items - Get great deals on lego 10197, lego 10195 items on eBay.com! +
+ +
+
+
+
Skip to main content
Hi, pbharrin! (Sign out)You're Invited! Join eBay Bucks.
Advanced

13 results found for lego 10196

Save search
Preferences: Completed listings See only active listings | Edit preferences | Clear preferences
+
+
+

Distance

Please enter valid zipcode.
Please select a valid popular city.
Please enter valid zipcode or select a valid popular city.
Within miles of ZIP
+
+
+
+
+
+
View as:
Sort by:
You have specified additional options in Advanced Search.
Are you looking for... items near New York, New York?
Item image
 
3 Bids
Sold
$380.00End Date:Jan-26 20:22
Item image
 
1 Bid
Sold
$399.00End Date:Jan-24 18:03
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$427.99End Date:Jan-24 03:32
Item image
 
22 Bids
Sold
$360.00End Date:Jan-23 20:07
Item image
 
0 Bids
Buy It Now
$450.00
$550.00
End Date:Jan-23 19:21
Item image
 
Buy It Now$489.00End Date:Jan-23 17:31
Item image
FedEx 2-day shipping!!
 
1 Bid
Sold
$399.00End Date:Jan-22 11:43
Item image
 
Buy It Now
Sold
$399.95
Free shipping
End Date:Jan-21 05:51
Item image
 
Get fast shipping and excellent service when you buy from eBay Top-rated sellers
Buy It Now
Sold
$499.99End Date:Jan-19 00:26
Item image
 
Buy It Now
$459.95
Free shipping
End Date:Jan-18 16:10
Item image
 
1 Bid
Sold
$399.95
Free shipping
End Date:Jan-17 15:40
Item image
 
Buy It Now
$459.95
Free shipping
End Date:Jan-15 14:26
Item image
 
12 Bids
Sold
$331.51End Date:Jan-15 12:29
+
+
+
This page was last updated: Jan-28 17:54. Number of bids and bid amounts may be slightly out of date. See each listing for international shipping options and costs.
+
+
+
+
Popular products
No suggestions
\ No newline at end of file diff --git a/regression/lego/lego8288.html b/regression/lego/lego8288.html new file mode 100644 index 0000000..6d4dae3 --- /dev/null +++ b/regression/lego/lego8288.html @@ -0,0 +1,43 @@ +lego 8288 items - Get great deals on Technic, lego 8421 items on eBay.com! +
+ +
+
+
+
Skip to main content
Hi, pbharrin! (Sign out)You're Invited! Join eBay Bucks.
Advanced

5 results found for lego 8288

Save search
Preferences: Completed listings See only active listings | Edit preferences | Clear preferences
+
+
+

Distance

Please enter valid zipcode.
Please select a valid popular city.
Please enter valid zipcode or select a valid popular city.
Within miles of ZIP
+
+
+
+
+
+
View as:
Sort by:
You have specified additional options in Advanced Search.
+
+
+
This page was last updated: Jan-28 11:24. Number of bids and bid amounts may be slightly out of date. See each listing for international shipping options and costs.
+
+
+
+
Popular products
No suggestions
\ No newline at end of file diff --git a/regression/log_regres.py b/regression/log_regres.py new file mode 100755 index 0000000..25d2297 --- /dev/null +++ b/regression/log_regres.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python2 +# -*- coding:utf-8 -*- +import numpy as np +import matplotlib.pyplot as plt + + +# 加载数据 +def loadDataSet(): + dataMat = [] + labelMat = [] + fr = open('testSet.txt') + for line in fr.readlines(): + lineArr = line.strip().split() + dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) + labelMat.append(int(lineArr[2])) + fr.close() + + return dataMat, labelMat + + +# sigmoid 激活函数 +def sigmoid(intX): + return 1.0 / (1 + np.exp(-intX)) + + +# 梯度上升算法 +def gradAscent(dataMatIn, classLabels): + dataMatrix = np.mat(dataMatIn) + labelMat = np.mat(classLabels).transpose() + m, n = np.shape(dataMatrix) + alpha = 0.001 + maxCycles = 500 + weights = np.ones((n, 1)) + for k in range(maxCycles): + h = sigmoid(dataMatrix * weights) + error = labelMat - h + weights = weights + alpha * dataMatrix.transpose() * error + + return weights.getA() + + +def plotBeastFit(weights): + dataMat, labelMat = loadDataSet() + dataArr = np.array(dataMat) + n = np.shape(dataArr)[0] + xcord1 = [] + xcord2 = [] + ycode1 = [] + ycode2 = [] + for i in range(n): + if int(labelMat[i]) == 1: + xcord1.append(dataArr[i, 1]) + ycode1.append(dataArr[i, 2]) + else: + xcord2.append(dataArr[i, 1]) + ycode2.append(dataArr[i, 2]) + + fig = plt.figure() + ax = fig.add_subplot(111) + ax.scatter(xcord1, ycode1, s=20, c='red', marker='s', alpha=0.5) + ax.scatter(xcord2, ycode2, s=20, c='green', alpha=0.5) + x = np.arange(-3.0, 3.0, 0.1) + y = (-weights[0] - weights[1] * x) / weights[2] + ax.plot(x, y) + plt.title('BestFit') + plt.xlabel('X1') + plt.ylabel('X2') + plt.show() + + +# 随机梯度上升算法 +def stocGradAscent0(dataMatrix, classLabels): + m, n = np.shape(dataMatrix) + alpha = 0.01 + weights = np.ones(n) + for i in range(m): + h = sigmoid(sum(dataMatrix[i] * weights)) + error = classLabels[i] - h + weights = weights + alpha * error * dataMatrix[i] + + return weights + + +# 优化后的梯度上升算法 +def stocGradAscent1(dataMatrix, classLabels, numIter=150): + m, n = np.shape(dataMatrix) + weights = np.ones(n) + for j in range(numIter): + dataIndex = range(m) + for i in range(m): + # alpha 每次都需要调整 + alpha = 4 / (1.0 + j + i) + 0.01 + # 随机选取跟新 + rangeIndex = int(np.random.uniform(0, len(dataIndex))) + h = sigmoid(sum(dataMatrix[rangeIndex] * weights)) + error = classLabels[rangeIndex] - h + weights = weights + alpha * error * dataMatrix[rangeIndex] + + return weights + + +if __name__ == '__main__': + dataMat, labelMat = loadDataSet() + # weights = gradAscent(dataMat, labelMat) + # weights = stocGradAscent0(np.array(dataMat), labelMat) + weights = stocGradAscent1(np.array(dataMat), labelMat) + plotBeastFit(weights) diff --git a/regression/multiple.csv b/regression/multiple.csv new file mode 100644 index 0000000..54c5904 --- /dev/null +++ b/regression/multiple.csv @@ -0,0 +1,10 @@ +100,4,9.3 +50,3,4.8 +100,4,8.9 +100,2,6.5 +50,2,4.2 +80,2,6.2 +75,3,7.4 +65,4,6.0 +90,3,7.6 +90,2,6.1 \ No newline at end of file diff --git a/regression/multipleDummy.csv b/regression/multipleDummy.csv new file mode 100644 index 0000000..f04253b --- /dev/null +++ b/regression/multipleDummy.csv @@ -0,0 +1,13 @@ +100,4,0,1,0,9.3 +50,3,1,0,0,4.8 +100,4,0,1,0,8.9 +100,2,0,0,1,6.5 +50,2,0,0,1,4.2 +80,2,0,1,0,6.2 +75,3,0,1,0,7.4 +65,4,1,0,0,6.0 +90,3,1,0,0,7.6 +100,4,0,1,0,9.3 +50,3,1,0,0,4.8 +100,4,0,1,0,8.9 +100,2,0,0,1,6.5 diff --git a/regression/regression.py b/regression/regression.py new file mode 100755 index 0000000..1d8b6d7 --- /dev/null +++ b/regression/regression.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 +# -*-coding:utf-8 -*- +from matplotlib.font_manager import FontProperties +import matplotlib.pyplot as plt +import numpy as np + +def loadDataSet(fileName): + """ + 函数说明:加载数据 + Parameters: + fileName - 文件名 + Returns: + xArr - x数据集 + yArr - y数据集 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-20 + """ + numFeat = len(open(fileName).readline().split('\t')) - 1 + xArr = []; yArr = [] + fr = open(fileName) + for line in fr.readlines(): + lineArr =[] + curLine = line.strip().split('\t') + for i in range(numFeat): + lineArr.append(float(curLine[i])) + xArr.append(lineArr) + yArr.append(float(curLine[-1])) + return xArr, yArr + +def ridgeRegres(xMat, yMat, lam = 0.2): + """ + 函数说明:岭回归 + Parameters: + xMat - x数据集 + yMat - y数据集 + lam - 缩减系数 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-20 + """ + xTx = xMat.T * xMat + denom = xTx + np.eye(np.shape(xMat)[1]) * lam + if np.linalg.det(denom) == 0.0: + print("矩阵为奇异矩阵,不能求逆") + return + ws = denom.I * (xMat.T * yMat) + return ws + +def ridgeTest(xArr, yArr): + """ + 函数说明:岭回归测试 + Parameters: + xMat - x数据集 + yMat - y数据集 + Returns: + wMat - 回归系数矩阵 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-20 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T + #数据标准化 + yMean = np.mean(yMat, axis = 0) #行与行操作,求均值 + yMat = yMat - yMean #数据减去均值 + xMeans = np.mean(xMat, axis = 0) #行与行操作,求均值 + xVar = np.var(xMat, axis = 0) #行与行操作,求方差 + xMat = (xMat - xMeans) / xVar #数据减去均值除以方差实现标准化 + numTestPts = 30 #30个不同的lambda测试 + wMat = np.zeros((numTestPts, np.shape(xMat)[1])) #初始回归系数矩阵 + for i in range(numTestPts): #改变lambda计算回归系数 + ws = ridgeRegres(xMat, yMat, np.exp(i - 10)) #lambda以e的指数变化,最初是一个非常小的数, + wMat[i, :] = ws.T #计算回归系数矩阵 + return wMat + +def plotwMat(): + """ + 函数说明:绘制岭回归系数矩阵 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-20 + """ + #font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) + abX, abY = loadDataSet('abalone.txt') + redgeWeights = ridgeTest(abX, abY) + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot(redgeWeights) + ax_title_text = ax.set_title(u'log(lambada) and regession') + ax_xlabel_text = ax.set_xlabel(u'log(lambada)') + ax_ylabel_text = ax.set_ylabel(u'regression') + plt.setp(ax_title_text, size = 20, weight = 'bold', color = 'red') + plt.setp(ax_xlabel_text, size = 10, weight = 'bold', color = 'black') + plt.setp(ax_ylabel_text, size = 10, weight = 'bold', color = 'black') + plt.show() + + +def regularize(xMat, yMat): + """ + 函数说明:数据标准化 + Parameters: + xMat - x数据集 + yMat - y数据集 + Returns: + inxMat - 标准化后的x数据集 + inyMat - 标准化后的y数据集 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + inxMat = xMat.copy() #数据拷贝 + inyMat = yMat.copy() + yMean = np.mean(yMat, 0) #行与行操作,求均值 + inyMat = yMat - yMean #数据减去均值 + inMeans = np.mean(inxMat, 0) #行与行操作,求均值 + inVar = np.var(inxMat, 0) #行与行操作,求方差 + inxMat = (inxMat - inMeans) / inVar #数据减去均值除以方差实现标准化 + return inxMat, inyMat + +def rssError(yArr,yHatArr): + """ + 函数说明:计算平方误差 + Parameters: + yArr - 预测值 + yHatArr - 真实值 + Returns: + + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + return ((yArr-yHatArr)**2).sum() + +def stageWise(xArr, yArr, eps = 0.01, numIt = 100): + """ + 函数说明:前向逐步线性回归 + Parameters: + xArr - x输入数据 + yArr - y预测数据 + eps - 每次迭代需要调整的步长 + numIt - 迭代次数 + Returns: + returnMat - numIt次迭代的回归系数矩阵 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T #数据集 + xMat, yMat = regularize(xMat, yMat) #数据标准化 + m, n = np.shape(xMat) + returnMat = np.zeros((numIt, n)) #初始化numIt次迭代的回归系数矩阵 + ws = np.zeros((n, 1)) #初始化回归系数矩阵 + wsTest = ws.copy() + wsMax = ws.copy() + for i in range(numIt): #迭代numIt次 + # print(ws.T) #打印当前回归系数矩阵 + lowestError = float('inf'); #正无穷 + for j in range(n): #遍历每个特征的回归系数 + for sign in [-1, 1]: + wsTest = ws.copy() + wsTest[j] += eps * sign #微调回归系数 + yTest = xMat * wsTest #计算预测值 + rssE = rssError(yMat.A, yTest.A) #计算平方误差 + if rssE < lowestError: #如果误差更小,则更新当前的最佳回归系数 + lowestError = rssE + wsMax = wsTest + ws = wsMax.copy() + returnMat[i,:] = ws.T #记录numIt次迭代的回归系数矩阵 + return returnMat + +def plotstageWiseMat(): + """ + 函数说明:绘制岭回归系数矩阵 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-12-03 + """ + #font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) + xArr, yArr = loadDataSet('abalone.txt') + returnMat = stageWise(xArr, yArr, 0.005, 1000) + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot(returnMat) + ax_title_text = ax.set_title(u'front regression') + ax_xlabel_text = ax.set_xlabel(u'regression') + ax_ylabel_text = ax.set_ylabel(u'regression coefficient') + plt.setp(ax_title_text, size = 15, weight = 'bold', color = 'red') + plt.setp(ax_xlabel_text, size = 10, weight = 'bold', color = 'black') + plt.setp(ax_ylabel_text, size = 10, weight = 'bold', color = 'black') + plt.show() + + +if __name__ == '__main__': + plotstageWiseMat() diff --git a/regression/regression_old.py b/regression/regression_old.py new file mode 100755 index 0000000..4605299 --- /dev/null +++ b/regression/regression_old.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +# -*- coding:utf-8 -*- +from matplotlib.font_manager import FontProperties +import matplotlib.pyplot as plt +import numpy as np + +def loadDataSet(fileName): + """ + 函数说明:加载数据 + Parameters: + fileName - 文件名 + Returns: + xArr - x数据集 + yArr - y数据集 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-12 + """ + numFeat = len(open(fileName).readline().split('\t')) - 1 + xArr = []; yArr = [] + fr = open(fileName) + for line in fr.readlines(): + lineArr =[] + curLine = line.strip().split('\t') + for i in range(numFeat): + lineArr.append(float(curLine[i])) + xArr.append(lineArr) + yArr.append(float(curLine[-1])) + return xArr, yArr + +def standRegres(xArr,yArr): + """ + 函数说明:计算回归系数w + Parameters: + xArr - x数据集 + yArr - y数据集 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-12 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T + xTx = xMat.T * xMat #根据文中推导的公示计算回归系数 + if np.linalg.det(xTx) == 0.0: + print("矩阵为奇异矩阵,不能求逆") + return + ws = xTx.I * (xMat.T*yMat) + return ws + + +def plotDataSet(): + """ + 函数说明:绘制数据集 + Parameters: + 无 + Returns: + 无 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-12 + """ + xArr, yArr = loadDataSet('ex0.txt') #加载数据集 + n = len(xArr) #数据个数 + xcord = []; ycord = [] #样本点 + for i in range(n): + xcord.append(xArr[i][1]); ycord.append(yArr[i]) #样本点 + fig = plt.figure() + ax = fig.add_subplot(111) #添加subplot + ax.scatter(xcord, ycord, s = 20, c = 'blue',alpha = .5) #绘制样本点 + plt.title('DataSet') #绘制title + plt.xlabel('X') + plt.show() + +def plotRegression(): + """ + 函数说明:绘制回归曲线和数据点 + Parameters: + 无 + Returns: + 无 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-12 + """ + xArr, yArr = loadDataSet('ex0.txt') #加载数据集 + ws = standRegres(xArr, yArr) #计算回归系数 + xMat = np.mat(xArr) #创建xMat矩阵 + yMat = np.mat(yArr) #创建yMat矩阵 + xCopy = xMat.copy() #深拷贝xMat矩阵 + xCopy.sort(0) #排序 + yHat = xCopy * ws #计算对应的y值 + fig = plt.figure() + ax = fig.add_subplot(111) #添加subplot + ax.plot(xCopy[:, 1], yHat, c = 'red') #绘制回归曲线 + ax.scatter(xMat[:,1].flatten().A[0], yMat.flatten().A[0], s = 20, c = 'blue',alpha = .5) #绘制样本点 + plt.title('DataSet') #绘制title + plt.xlabel('X') + plt.show() + +def plotlwlrRegression(): + """ + 函数说明:绘制多条局部加权回归曲线 + Parameters: + 无 + Returns: + 无 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-15 + """ + #font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) + xArr, yArr = loadDataSet('ex0.txt') #加载数据集 + yHat_1 = lwlrTest(xArr, xArr, yArr, 1.0) #根据局部加权线性回归计算yHat + yHat_2 = lwlrTest(xArr, xArr, yArr, 0.01) #根据局部加权线性回归计算yHat + yHat_3 = lwlrTest(xArr, xArr, yArr, 0.003) #根据局部加权线性回归计算yHat + xMat = np.mat(xArr) #创建xMat矩阵 + yMat = np.mat(yArr) #创建yMat矩阵 + srtInd = xMat[:, 1].argsort(0) #排序,返回索引值 + xSort = xMat[srtInd][:,0,:] + fig, axs = plt.subplots(nrows=3, ncols=1,sharex=False, sharey=False, figsize=(10,8)) + + axs[0].plot(xSort[:, 1], yHat_1[srtInd], c = 'red') #绘制回归曲线 + axs[1].plot(xSort[:, 1], yHat_2[srtInd], c = 'red') #绘制回归曲线 + axs[2].plot(xSort[:, 1], yHat_3[srtInd], c = 'red') #绘制回归曲线 + axs[0].scatter(xMat[:,1].flatten().A[0], yMat.flatten().A[0], s = 20, c = 'blue', alpha = .5) #绘制样本点 + axs[1].scatter(xMat[:,1].flatten().A[0], yMat.flatten().A[0], s = 20, c = 'blue', alpha = .5) #绘制样本点 + axs[2].scatter(xMat[:,1].flatten().A[0], yMat.flatten().A[0], s = 20, c = 'blue', alpha = .5) #绘制样本点 + + #设置标题,x轴label,y轴label + axs0_title_text = axs[0].set_title(u'Locally weighted regression curve,k=1.0') + axs1_title_text = axs[1].set_title(u'Locally weighted regression curve,k=0.01') + axs2_title_text = axs[2].set_title(u'Locally weighted regression curve,k=0.003') + + plt.setp(axs0_title_text, size=8, weight='bold', color='red') + plt.setp(axs1_title_text, size=8, weight='bold', color='red') + plt.setp(axs2_title_text, size=8, weight='bold', color='red') + + plt.xlabel('X') + plt.show() + +def lwlr(testPoint, xArr, yArr, k = 1.0): + """ + 函数说明:使用局部加权线性回归计算回归系数w + Parameters: + testPoint - 测试样本点 + xArr - x数据集 + yArr - y数据集 + k - 高斯核的k,自定义参数 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-15 + """ + xMat = np.mat(xArr); yMat = np.mat(yArr).T + m = np.shape(xMat)[0] + weights = np.mat(np.eye((m))) #创建权重对角矩阵 + for j in range(m): #遍历数据集计算每个样本的权重 + diffMat = testPoint - xMat[j, :] + weights[j, j] = np.exp(diffMat * diffMat.T/(-2.0 * k**2)) + xTx = xMat.T * (weights * xMat) + if np.linalg.det(xTx) == 0.0: + print("矩阵为奇异矩阵,不能求逆") + return + ws = xTx.I * (xMat.T * (weights * yMat)) #计算回归系数 + return testPoint * ws + +def lwlrTest(testArr, xArr, yArr, k=1.0): + """ + 函数说明:局部加权线性回归测试 + Parameters: + testArr - 测试数据集 + xArr - x数据集 + yArr - y数据集 + k - 高斯核的k,自定义参数 + Returns: + ws - 回归系数 + Website: + http://www.cuijiahua.com/ + Modify: + 2017-11-15 + """ + m = np.shape(testArr)[0] #计算测试数据集大小 + yHat = np.zeros(m) + for i in range(m): #对每个样本点进行预测 + yHat[i] = lwlr(testArr[i],xArr,yArr,k) + return yHat + + +if __name__ == '__main__': + plotlwlrRegression() diff --git a/regression/testSet.txt b/regression/testSet.txt new file mode 100644 index 0000000..f2f9024 --- /dev/null +++ b/regression/testSet.txt @@ -0,0 +1,100 @@ +-0.017612 14.053064 0 +-1.395634 4.662541 1 +-0.752157 6.538620 0 +-1.322371 7.152853 0 +0.423363 11.054677 0 +0.406704 7.067335 1 +0.667394 12.741452 0 +-2.460150 6.866805 1 +0.569411 9.548755 0 +-0.026632 10.427743 0 +0.850433 6.920334 1 +1.347183 13.175500 0 +1.176813 3.167020 1 +-1.781871 9.097953 0 +-0.566606 5.749003 1 +0.931635 1.589505 1 +-0.024205 6.151823 1 +-0.036453 2.690988 1 +-0.196949 0.444165 1 +1.014459 5.754399 1 +1.985298 3.230619 1 +-1.693453 -0.557540 1 +-0.576525 11.778922 0 +-0.346811 -1.678730 1 +-2.124484 2.672471 1 +1.217916 9.597015 0 +-0.733928 9.098687 0 +-3.642001 -1.618087 1 +0.315985 3.523953 1 +1.416614 9.619232 0 +-0.386323 3.989286 1 +0.556921 8.294984 1 +1.224863 11.587360 0 +-1.347803 -2.406051 1 +1.196604 4.951851 1 +0.275221 9.543647 0 +0.470575 9.332488 0 +-1.889567 9.542662 0 +-1.527893 12.150579 0 +-1.185247 11.309318 0 +-0.445678 3.297303 1 +1.042222 6.105155 1 +-0.618787 10.320986 0 +1.152083 0.548467 1 +0.828534 2.676045 1 +-1.237728 10.549033 0 +-0.683565 -2.166125 1 +0.229456 5.921938 1 +-0.959885 11.555336 0 +0.492911 10.993324 0 +0.184992 8.721488 0 +-0.355715 10.325976 0 +-0.397822 8.058397 0 +0.824839 13.730343 0 +1.507278 5.027866 1 +0.099671 6.835839 1 +-0.344008 10.717485 0 +1.785928 7.718645 1 +-0.918801 11.560217 0 +-0.364009 4.747300 1 +-0.841722 4.119083 1 +0.490426 1.960539 1 +-0.007194 9.075792 0 +0.356107 12.447863 0 +0.342578 12.281162 0 +-0.810823 -1.466018 1 +2.530777 6.476801 1 +1.296683 11.607559 0 +0.475487 12.040035 0 +-0.783277 11.009725 0 +0.074798 11.023650 0 +-1.337472 0.468339 1 +-0.102781 13.763651 0 +-0.147324 2.874846 1 +0.518389 9.887035 0 +1.015399 7.571882 0 +-1.658086 -0.027255 1 +1.319944 2.171228 1 +2.056216 5.019981 1 +-0.851633 4.375691 1 +-1.510047 6.061992 0 +-1.076637 -3.181888 1 +1.821096 10.283990 0 +3.010150 8.401766 1 +-1.099458 1.688274 1 +-0.834872 -1.733869 1 +-0.846637 3.849075 1 +1.400102 12.628781 0 +1.752842 5.468166 1 +0.078557 0.059736 1 +0.089392 -0.715300 1 +1.825662 12.693808 0 +0.197445 9.744638 0 +0.126117 0.922311 1 +-0.679797 1.220530 1 +0.677983 2.556666 1 +0.761349 10.693862 0 +-2.168791 0.143632 1 +1.388610 9.341997 0 +0.317029 14.739025 0 diff --git a/regression/线性模型.md b/regression/线性模型.md new file mode 100644 index 0000000..81bee61 --- /dev/null +++ b/regression/线性模型.md @@ -0,0 +1,96 @@ +# 线性回归 +线性回归问题就是试图学到一个线性模型尽可能准确地预测新样本的输出值,例如:通过历年的人口数据预测2017年人口数量。 + +有时这些输入的属性值并不能直接被我们的学习模型所用,需要进行相应的处理,对于连续值的属性,一般都可以被学习器所用,有时 +会根据具体的情形作相应的预处理,例如:归一化等;对于离散值的属性,可作下面的处理: +- 若属性值之间存在“序关系”,则可以将其转化为连续值,例如:身高属性分为“高”“中等”“矮”,可转化为数值:{1, 0.5, 0}。 +- 若属性值之间不存在“序关系”,则通常将其转化为向量的形式,例如:性别属性分为“男”“女”,可转化为二维向量:{(1,0),(0,1)}。 + + +(1) 当输入属性只有一个的时候,就是最简单的情形,也就是我们高中时最熟悉的“最小二乘法”(Euclidean distance),首先计算出每个样 +本预测值与真实值之间的误差并求和,通过最小化均方误差MSE,使用求偏导等于零的方法计算出拟合直线y=wx+b的两个参数w和b,计算 +过程如下图所示: +![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/1.png) + +(2) 当输入属性有多个的时候,例如对于一个样本有d个属性{(x1,x2...xd),y},则y=wx+b需要写成:
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/2.png)
+通常对于多元问题,常常使用矩阵的形式来表示数据。在本问题中,将具有m个样本的数据集表示成矩阵X,将系数w与b合并成一个列向 +量,这样每个样本的预测值以及所有样本的均方误差最小化就可以写成下面的形式:
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/4.png)
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/3.png)
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/5.png)
+ +同样地,我们使用最小二乘法对w和b进行估计,令均方误差的求导等于0,需要注意的是,当一个矩阵的行列式不等于0时,我们才可能 +对其求逆,因此对于下式,我们需要考虑矩阵(X的转置*X)的行列式是否为0,若不为0,则可以求出其解,若为0,则需要使用其它的 +方法进行计算,书中提到了引入正则化
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/6.png)
+ +另一方面,有时像上面这种原始的线性回归可能并不能满足需求,例如:y值并不是线性变化,而是在指数尺度上变化。这时我们可以采 +用线性模型来逼近y的衍生物,例如lny,这时衍生的线性模型如下所示,实际上就是相当于将指数曲线投影在一条直线上,如下图所示:
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/7.png)
+ +更一般地,考虑所有y的衍生物的情形,就得到了“广义的线性模型”(generalized linear model),其中,g(*)称为联系函数(link +function)。
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/8.png)
+ +# 对数几率函数 +回归就是通过输入的属性值得到一个预测值,利用上述广义线性模型的特征,是否可以通过一个联系函数,将预测值转化为离散值从而 +进行分类呢?线性几率回归正是研究这样的问题。对数几率引入了一个对数几率函数(logistic function),将预测值投影到0-1之间, +从而将线性回归问题转化为二分类问题。
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/9.png)
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/10.png)
+ +若将y看做样本为正例的概率,(1-y)看做样本为反例的概率,则上式实际上使用线性回归模型的预测结果器逼近真实标记的对数几率。 +因此这个模型称为“对数几率回归”(logistic regression),也有一些书籍称之为“逻辑回归”。下面使用最大似然估计的方法来计算出 +w和b两个参数的取值,下面只列出求解的思路,不列出具体的计算过程。
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/11.png)
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/12.png)
+ +# 线性判别分析 +线性判别分析(Linear Discriminant Analysis,简称LDA),其基本思想是:将训练样本投影到一条直线上,使得同类的样例尽可能近, +不同类的样例尽可能远。如图所示:
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/13.png)
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/14.png)
+想让同类样本点的投影点尽可能接近,不同类样本点投影之间尽可能远,即:让各类的协方差之和尽可能小,不用类之间中心的距离尽 +可能大。基于这样的考虑,LDA定义了两个散度矩阵。
+- 类内散度矩阵(within-class scatter matrix) +![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/15.png)
+- 类间散度矩阵(between-class scaltter matrix)
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/20170415112712139.png)
+因此得到了LDA的最大化目标:“广义瑞利商”(generalized Rayleigh quotient)。
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/20170415112712138.png)
+ +从而分类问题转化为最优化求解w的问题,当求解出w后,对新的样本进行分类时,只需将该样本点投影到这条直线上,根据与各个类别 +的中心值进行比较,从而判定出新样本与哪个类别距离最近。求解w的方法如下所示,使用的方法为λ乘子。
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/20170415112712140.png)
+若将w看做一个投影矩阵,类似PCA的思想,则LDA可将样本投影到N-1维空间(N为类簇数),投影的过程使用了类别信息(标记信息), +因此LDA也常被视为一种经典的监督降维技术。 + +# 多分类学习(不太明白) + +现实中我们经常遇到不只两个类别的分类问题,即多分类问题,在这种情形下,我们常常运用“拆分”的策略,通过多个二分类学习器来解 +决多分类问题,即将多分类问题拆解为多个二分类问题,训练出多个二分类学习器,最后将多个分类结果进行集成得出结论。最为经典的 +拆分策略有三种:“一对一”(OvO)、“一对其余”(OvR)和“多对多”(MvM),核心思想与示意图如下所示。 + +- OvO:给定数据集D,假定其中有N个真实类别,将这N个类别进行两两配对(一个正类/一个反类),从而产生N(N-1)/2个二分类学习 + 器,在测试阶段,将新样本放入所有的二分类学习器中测试,得出N(N-1)个结果,最终通过投票产生最终的分类结果。 +- OvM:给定数据集D,假定其中有N个真实类别,每次取出一个类作为正类,剩余的所有类别作为一个新的反类,从而产生N个二分类学 + 习器,在测试阶段,得出N个结果,若仅有一个学习器预测为正类,则对应的类标作为最终分类结果。 +- MvM:给定数据集D,假定其中有N个真实类别,每次取若干个类作为正类,若干个类作为反类(通过ECOC码给出,编码),若进行了M次 + 划分,则生成了M个二分类学习器,在测试阶段(解码),得出M个结果组成一个新的码,最终通过计算海明/欧式距离选择距离最小的 + 类别作为最终分类结果。 + +![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/20170415112712141.png)
+![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/20170415112712142.png)
+ +# 类别不平衡问题(不太明白) + +类别不平衡(class-imbanlance)就是指分类问题中不同类别的训练样本相差悬殊的情况,例如正例有900个,而反例只有100个,这个时 +候我们就需要进行相应的处理来平衡这个问题。常见的做法有三种: + +- 在训练样本较多的类别中进行“欠采样”(undersampling),比如从正例中采出100个,常见的算法有:EasyEnsemble。 +- 在训练样本较少的类别中进行“过采样”(oversampling),例如通过对反例中的数据进行插值,来产生额外的反例,常见的算法有SMOTE。 +- 直接基于原数据集进行学习,对预测值进行“再缩放”处理。其中再缩放也是代价敏感学习的基础。 + +![一元线性](http://index.zeekling.cn/gogsPics/ml/regression/20170415112712143.png)
+ diff --git a/rl/README.md b/rl/README.md new file mode 100644 index 0000000..1053fc5 --- /dev/null +++ b/rl/README.md @@ -0,0 +1,57 @@ +# 强化学习 + +[强化学习详解讲解](https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/) + +## 强化学习的特点 + +- 基本是以一个闭环形式 +- 不会直接指示哪种行为 +- 一系列的actions和奖励信号都会影响之后较长时间 + +## 定义 +它主要包含四个元素,agent,环境状态,行动,奖励, 强化学习的目标就是获得最多的累计奖励。 +我们列举几个形象的例子: 小孩想要走路,但在这之前,他需要先站起来,站起来之后还要保持平衡,接下来还要先迈出一条腿,是左 +腿还是右腿,迈出一步后还要迈出下一步。 小孩就是 agent,他试图通过采取行动(即行走)来操纵环境(行走的表面),并且从一个 +状态转变到另一个状态(即他走的每一步),当他完成任务的子任务(即走了几步)时,孩子得到奖励(给巧克力吃),并且当他不能 +走路时,就不会给巧克力。 + +![pic](http://www.zeekling.cn/gogsPics/ml/rl/1.png) + +上图中agent代表自身,如果是自动驾驶,agent就是车;无人驾驶的action就是车左转、右转或刹车等等,它无时无刻都在与环境产生交 +互,action会反馈给环境,进而改变环境; + +反馈又两种方式: +- 做的好(reward)即正反馈 +- 做得不好(punishment惩罚)即负反馈 + +Agent可能做得好,也可能做的不好,环境始终都会给它反馈,agent会尽量去做对自身有利的决策,通过反反复复这样的一个循环, +agent会越来越做的好,就像孩子在成长过程中会逐渐明辨是非,这就是强化学习。 + +## 强化学习和监督式学习、非监督式学习的区别 + +当前的机器学习算法可以分为3种:有监督的学习(Supervised Learning)、无监督的学习(Unsupervised Learning)和强化学习 +(Reinforcement Learning),结构图如下所示: + +![pic](http://www.zeekling.cn/gogsPics/ml/rl/2.png) + +### 强化学习和监督式学习的区别 + +监督式学习就好比你在学习的时候,有一个导师在旁边指点,他知道怎么是对的怎么是错的,但在很多实际问题中,例如 chess,go, +这种有成千上万种组合方式的情况,不可能有一个导师知道所有可能的结果。 + +而这时,强化学习会在没有任何标签的情况下,通过先尝试做出一些行为得到一个结果,通过这个结果是对还是错的反馈,调整之前的行 +为,就这样不断的调整,算法能够学习到在什么样的情况下选择什么样的行为可以得到最好的结果。 + + +## 强化学习主要有哪些算法 + +强化学习不需要监督信号,可以在模型未知的环境中平衡探索和利用, 其主要算法有蒙特卡罗强化学习, 时间差分(temporal difference: +TD)学习, 策略梯度等。典型的深度强化学习算法特点及性能比较如下图所示: + +![pic](http://www.zeekling.cn/gogsPics/ml/rl/3.png) + +除了上述深度强化学习算法,还有深度迁移强化学习、分层深度强化学习、深度记忆强化学习以及多智能体强化学习等算法。 + + + + diff --git a/sitmap-generator.py b/sitmap-generator.py new file mode 100755 index 0000000..1214b95 --- /dev/null +++ b/sitmap-generator.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import os +from xml.dom.minidom import Document +import time + + +html_path = '_book' +http_path = 'http://www.zeekling.cn/book/ml' +site_map_name = 'ml.xml' + + +def dirlist(path, all_file): + file_list = os.listdir(path) + for file_name in file_list: + file_path = os.path.join(path, file_name) + if os.path.isdir(file_path): + if str(file_path).endswith('gitbook'): + continue + all_file.append(file_path + '/') + dirlist(file_path, all_file) + else: + all_file.append(file_path) + + return all_file + + +def write_xml(url_paths): + doc = Document() + doc.encoding = 'UTF-8' + url_set = doc.createElement('urlset') + doc.appendChild(url_set) + url_set.setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9') + date_str = time.strftime('%Y-%m-%d', time.localtime()) + for url_path in url_paths: + url = doc.createElement('url') + url_set.appendChild(url) + loc = doc.createElement('loc') + loc_value = doc.createTextNode(url_path) + loc.appendChild(loc_value) + changefreq = doc.createElement('changefreq') + freq_value = doc.createTextNode('weekly') + changefreq.appendChild(freq_value) + priority = doc.createElement('priority') + prio_value = doc.createTextNode('0.8') + priority.appendChild(prio_value) + lastmod = doc.createElement('lastmod') + mode_value = doc.createTextNode(date_str) + lastmod.appendChild(mode_value) + url.appendChild(loc) + url.appendChild(changefreq) + url.appendChild(priority) + url.appendChild(lastmod) + path = os.getcwd() + '/' + site_map_name + f = open(path, 'w') + f.write(doc.toprettyxml(indent=' ')) + f.close() + + +if __name__ == '__main__': + pwd = os.getcwd() + '/' + html_path + all_file = [] + all_file = dirlist(pwd, all_file) + all_html_file = [] + for file_name in all_file: + file_name = str(file_name) + if file_name.endswith('.html') or file_name.endswith('/'): + html_name = file_name.replace(pwd, http_path) + all_html_file.append(html_name) + + write_xml(all_html_file) + diff --git a/svm/README.md b/svm/README.md new file mode 100644 index 0000000..80812dc --- /dev/null +++ b/svm/README.md @@ -0,0 +1,13 @@ +# 支持向量机 + +## 相关数学知识 +1. [核函数](https://www.jianshu.com/p/a3d9f75546b3) +2. [凸优化](https://blog.csdn.net/qq_39422642/article/details/78816637) https://blog.csdn.net/qq_39422642/article/details/78816637 + +## 线性可区分和线性不可区分 + + +## 超平面 +![超平面公式](http://index.zeekling.cn/gogsPics/ml/supportVectorMachine/20170817153338491.png) + + diff --git a/svm/svm-digits.py b/svm/svm-digits.py new file mode 100755 index 0000000..c19ee6b --- /dev/null +++ b/svm/svm-digits.py @@ -0,0 +1,329 @@ +# -*-coding:utf-8 -*- +import matplotlib.pyplot as plt +import numpy as np +import random + +""" +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-10-03 +""" + +class optStruct: + """ + 数据结构,维护所有需要操作的值 + Parameters: + dataMatIn - 数据矩阵 + classLabels - 数据标签 + C - 松弛变量 + toler - 容错率 + kTup - 包含核函数信息的元组,第一个参数存放核函数类别,第二个参数存放必要的核函数需要用到的参数 + """ + def __init__(self, dataMatIn, classLabels, C, toler, kTup): + self.X = dataMatIn #数据矩阵 + self.labelMat = classLabels #数据标签 + self.C = C #松弛变量 + self.tol = toler #容错率 + self.m = np.shape(dataMatIn)[0] #数据矩阵行数 + self.alphas = np.mat(np.zeros((self.m,1))) #根据矩阵行数初始化alpha参数为0 + self.b = 0 #初始化b参数为0 + self.eCache = np.mat(np.zeros((self.m,2))) #根据矩阵行数初始化虎误差缓存,第一列为是否有效的标志位,第二列为实际的误差E的值。 + self.K = np.mat(np.zeros((self.m,self.m))) #初始化核K + for i in range(self.m): #计算所有数据的核K + self.K[:,i] = kernelTrans(self.X, self.X[i,:], kTup) + +def kernelTrans(X, A, kTup): + """ + 通过核函数将数据转换更高维的空间 + Parameters: + X - 数据矩阵 + A - 单个数据的向量 + kTup - 包含核函数信息的元组 + Returns: + K - 计算的核K + """ + m,n = np.shape(X) + K = np.mat(np.zeros((m,1))) + if kTup[0] == 'lin': K = X * A.T #线性核函数,只进行内积。 + elif kTup[0] == 'rbf': #高斯核函数,根据高斯核函数公式进行计算 + for j in range(m): + deltaRow = X[j,:] - A + K[j] = deltaRow*deltaRow.T + K = np.exp(K/(-1*kTup[1]**2)) #计算高斯核K + else: raise NameError('核函数无法识别') + return K #返回计算的核K + +def loadDataSet(fileName): + """ + 读取数据 + Parameters: + fileName - 文件名 + Returns: + dataMat - 数据矩阵 + labelMat - 数据标签 + """ + dataMat = []; labelMat = [] + fr = open(fileName) + for line in fr.readlines(): #逐行读取,滤除空格等 + lineArr = line.strip().split('\t') + dataMat.append([float(lineArr[0]), float(lineArr[1])]) #添加数据 + labelMat.append(float(lineArr[2])) #添加标签 + return dataMat,labelMat + +def calcEk(oS, k): + """ + 计算误差 + Parameters: + oS - 数据结构 + k - 标号为k的数据 + Returns: + Ek - 标号为k的数据误差 + """ + fXk = float(np.multiply(oS.alphas,oS.labelMat).T*oS.K[:,k] + oS.b) + Ek = fXk - float(oS.labelMat[k]) + return Ek + +def selectJrand(i, m): + """ + 函数说明:随机选择alpha_j的索引值 + + Parameters: + i - alpha_i的索引值 + m - alpha参数个数 + Returns: + j - alpha_j的索引值 + """ + j = i #选择一个不等于i的j + while (j == i): + j = int(random.uniform(0, m)) + return j + +def selectJ(i, oS, Ei): + """ + 内循环启发方式2 + Parameters: + i - 标号为i的数据的索引值 + oS - 数据结构 + Ei - 标号为i的数据误差 + Returns: + j, maxK - 标号为j或maxK的数据的索引值 + Ej - 标号为j的数据误差 + """ + maxK = -1; maxDeltaE = 0; Ej = 0 #初始化 + oS.eCache[i] = [1,Ei] #根据Ei更新误差缓存 + validEcacheList = np.nonzero(oS.eCache[:,0].A)[0] #返回误差不为0的数据的索引值 + if (len(validEcacheList)) > 1: #有不为0的误差 + for k in validEcacheList: #遍历,找到最大的Ek + if k == i: continue #不计算i,浪费时间 + Ek = calcEk(oS, k) #计算Ek + deltaE = abs(Ei - Ek) #计算|Ei-Ek| + if (deltaE > maxDeltaE): #找到maxDeltaE + maxK = k; maxDeltaE = deltaE; Ej = Ek + return maxK, Ej #返回maxK,Ej + else: #没有不为0的误差 + j = selectJrand(i, oS.m) #随机选择alpha_j的索引值 + Ej = calcEk(oS, j) #计算Ej + return j, Ej #j,Ej + +def updateEk(oS, k): + """ + 计算Ek,并更新误差缓存 + Parameters: + oS - 数据结构 + k - 标号为k的数据的索引值 + Returns: + 无 + """ + Ek = calcEk(oS, k) #计算Ek + oS.eCache[k] = [1,Ek] #更新误差缓存 + + +def clipAlpha(aj,H,L): + """ + 修剪alpha_j + Parameters: + aj - alpha_j的值 + H - alpha上限 + L - alpha下限 + Returns: + aj - 修剪后的alpah_j的值 + """ + if aj > H: + aj = H + if L > aj: + aj = L + return aj + +def innerL(i, oS): + """ + 优化的SMO算法 + Parameters: + i - 标号为i的数据的索引值 + oS - 数据结构 + Returns: + 1 - 有任意一对alpha值发生变化 + 0 - 没有任意一对alpha值发生变化或变化太小 + """ + #步骤1:计算误差Ei + Ei = calcEk(oS, i) + #优化alpha,设定一定的容错率。 + if ((oS.labelMat[i] * Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or ((oS.labelMat[i] * Ei > oS.tol) and (oS.alphas[i] > 0)): + #使用内循环启发方式2选择alpha_j,并计算Ej + j,Ej = selectJ(i, oS, Ei) + #保存更新前的aplpha值,使用深拷贝 + alphaIold = oS.alphas[i].copy(); alphaJold = oS.alphas[j].copy(); + #步骤2:计算上下界L和H + if (oS.labelMat[i] != oS.labelMat[j]): + L = max(0, oS.alphas[j] - oS.alphas[i]) + H = min(oS.C, oS.C + oS.alphas[j] - oS.alphas[i]) + else: + L = max(0, oS.alphas[j] + oS.alphas[i] - oS.C) + H = min(oS.C, oS.alphas[j] + oS.alphas[i]) + if L == H: + print("L==H") + return 0 + #步骤3:计算eta + eta = 2.0 * oS.K[i,j] - oS.K[i,i] - oS.K[j,j] + if eta >= 0: + print("eta>=0") + return 0 + #步骤4:更新alpha_j + oS.alphas[j] -= oS.labelMat[j] * (Ei - Ej)/eta + #步骤5:修剪alpha_j + oS.alphas[j] = clipAlpha(oS.alphas[j],H,L) + #更新Ej至误差缓存 + updateEk(oS, j) + if (abs(oS.alphas[j] - alphaJold) < 0.00001): + print("alpha_j变化太小") + return 0 + #步骤6:更新alpha_i + oS.alphas[i] += oS.labelMat[j]*oS.labelMat[i]*(alphaJold - oS.alphas[j]) + #更新Ei至误差缓存 + updateEk(oS, i) + #步骤7:更新b_1和b_2 + b1 = oS.b - Ei- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.K[i,i] - oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.K[i,j] + b2 = oS.b - Ej- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.K[i,j]- oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.K[j,j] + #步骤8:根据b_1和b_2更新b + if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]): oS.b = b1 + elif (0 < oS.alphas[j]) and (oS.C > oS.alphas[j]): oS.b = b2 + else: oS.b = (b1 + b2)/2.0 + return 1 + else: + return 0 + +def smoP(dataMatIn, classLabels, C, toler, maxIter, kTup = ('lin',0)): + """ + 完整的线性SMO算法 + Parameters: + dataMatIn - 数据矩阵 + classLabels - 数据标签 + C - 松弛变量 + toler - 容错率 + maxIter - 最大迭代次数 + kTup - 包含核函数信息的元组 + Returns: + oS.b - SMO算法计算的b + oS.alphas - SMO算法计算的alphas + """ + oS = optStruct(np.mat(dataMatIn), np.mat(classLabels).transpose(), C, toler, kTup) #初始化数据结构 + iter = 0 #初始化当前迭代次数 + entireSet = True; alphaPairsChanged = 0 + while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)): #遍历整个数据集都alpha也没有更新或者超过最大迭代次数,则退出循环 + alphaPairsChanged = 0 + if entireSet: #遍历整个数据集 + for i in range(oS.m): + alphaPairsChanged += innerL(i,oS) #使用优化的SMO算法 + print("全样本遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged)) + iter += 1 + else: #遍历非边界值 + nonBoundIs = np.nonzero((oS.alphas.A > 0) * (oS.alphas.A < C))[0] #遍历不在边界0和C的alpha + for i in nonBoundIs: + alphaPairsChanged += innerL(i,oS) + print("非边界遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged)) + iter += 1 + if entireSet: #遍历一次后改为非边界遍历 + entireSet = False + elif (alphaPairsChanged == 0): #如果alpha没有更新,计算全样本遍历 + entireSet = True + print("迭代次数: %d" % iter) + return oS.b,oS.alphas #返回SMO算法计算的b和alphas + + +def img2vector(filename): + """ + 将32x32的二进制图像转换为1x1024向量。 + Parameters: + filename - 文件名 + Returns: + returnVect - 返回的二进制图像的1x1024向量 + """ + returnVect = np.zeros((1,1024)) + fr = open(filename) + for i in range(32): + lineStr = fr.readline() + for j in range(32): + returnVect[0,32*i+j] = int(lineStr[j]) + return returnVect + +def loadImages(dirName): + """ + 加载图片 + Parameters: + dirName - 文件夹的名字 + Returns: + trainingMat - 数据矩阵 + hwLabels - 数据标签 + """ + from os import listdir + hwLabels = [] + trainingFileList = listdir(dirName) + m = len(trainingFileList) + trainingMat = np.zeros((m,1024)) + for i in range(m): + fileNameStr = trainingFileList[i] + fileStr = fileNameStr.split('.')[0] + classNumStr = int(fileStr.split('_')[0]) + if classNumStr == 9: hwLabels.append(-1) + else: hwLabels.append(1) + trainingMat[i,:] = img2vector('%s/%s' % (dirName, fileNameStr)) + return trainingMat, hwLabels + +def testDigits(kTup=('rbf', 10)): + """ + 测试函数 + Parameters: + kTup - 包含核函数信息的元组 + Returns: + 无 + """ + dataArr,labelArr = loadImages('trainingDigits') + b,alphas = smoP(dataArr, labelArr, 200, 0.0001, 10, kTup) + datMat = np.mat(dataArr); labelMat = np.mat(labelArr).transpose() + svInd = np.nonzero(alphas.A>0)[0] + sVs=datMat[svInd] + labelSV = labelMat[svInd]; + print("支持向量个数:%d" % np.shape(sVs)[0]) + m,n = np.shape(datMat) + errorCount = 0 + for i in range(m): + kernelEval = kernelTrans(sVs,datMat[i,:],kTup) + predict=kernelEval.T * np.multiply(labelSV,alphas[svInd]) + b + if np.sign(predict) != np.sign(labelArr[i]): errorCount += 1 + print("训练集错误率: %.2f%%" % (float(errorCount)/m)) + dataArr,labelArr = loadImages('testDigits') + errorCount = 0 + datMat = np.mat(dataArr); labelMat = np.mat(labelArr).transpose() + m,n = np.shape(datMat) + for i in range(m): + kernelEval = kernelTrans(sVs,datMat[i,:],kTup) + predict=kernelEval.T * np.multiply(labelSV,alphas[svInd]) + b + if np.sign(predict) != np.sign(labelArr[i]): errorCount += 1 + print("测试集错误率: %.2f%%" % (float(errorCount)/m)) + +if __name__ == '__main__': + testDigits() \ No newline at end of file diff --git a/svm/svm-simple.py b/svm/svm-simple.py new file mode 100755 index 0000000..982e151 --- /dev/null +++ b/svm/svm-simple.py @@ -0,0 +1,270 @@ +# -*- coding:UTF-8 -*- +import matplotlib.pyplot as plt +import numpy as np +import random + +""" +函数说明:读取数据 + +Parameters: + fileName - 文件名 +Returns: + dataMat - 数据矩阵 + labelMat - 数据标签 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-21 +""" +def loadDataSet(fileName): + dataMat = []; labelMat = [] + fr = open(fileName) + for line in fr.readlines(): #逐行读取,滤除空格等 + lineArr = line.strip().split('\t') + dataMat.append([float(lineArr[0]), float(lineArr[1])]) #添加数据 + labelMat.append(float(lineArr[2])) #添加标签 + return dataMat,labelMat + + +""" +函数说明:随机选择alpha + +Parameters: + i - alpha_i的索引值 + m - alpha参数个数 +Returns: + j - alpha_j的索引值 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-21 +""" +def selectJrand(i, m): + j = i #选择一个不等于i的j + while (j == i): + j = int(random.uniform(0, m)) + return j + +""" +函数说明:修剪alpha + +Parameters: + aj - alpha_j值 + H - alpha上限 + L - alpha下限 +Returns: + aj - alpah值 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-21 +""" +def clipAlpha(aj,H,L): + if aj > H: + aj = H + if L > aj: + aj = L + return aj + +""" +函数说明:数据可视化 + +Parameters: + dataMat - 数据矩阵 + labelMat - 数据标签 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-21 +""" +def showDataSet(dataMat, labelMat): + data_plus = [] #正样本 + data_minus = [] #负样本 + for i in range(len(dataMat)): + if labelMat[i] > 0: + data_plus.append(dataMat[i]) + else: + data_minus.append(dataMat[i]) + data_plus_np = np.array(data_plus) #转换为numpy矩阵 + data_minus_np = np.array(data_minus) #转换为numpy矩阵 + plt.scatter(np.transpose(data_plus_np)[0], np.transpose(data_plus_np)[1]) #正样本散点图 + plt.scatter(np.transpose(data_minus_np)[0], np.transpose(data_minus_np)[1]) #负样本散点图 + plt.show() + + +""" +函数说明:简化版SMO算法 + +Parameters: + dataMatIn - 数据矩阵 + classLabels - 数据标签 + C - 松弛变量 + toler - 容错率 + maxIter - 最大迭代次数 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-23 +""" +def smoSimple(dataMatIn, classLabels, C, toler, maxIter): + #转换为numpy的mat存储 + dataMatrix = np.mat(dataMatIn); labelMat = np.mat(classLabels).transpose() + #初始化b参数,统计dataMatrix的维度 + b = 0; m,n = np.shape(dataMatrix) + #初始化alpha参数,设为0 + alphas = np.mat(np.zeros((m,1))) + #初始化迭代次数 + iter_num = 0 + #最多迭代matIter次 + while (iter_num < maxIter): + alphaPairsChanged = 0 + for i in range(m): + #步骤1:计算误差Ei + fXi = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[i,:].T)) + b + Ei = fXi - float(labelMat[i]) + #优化alpha,设定一定的容错率。 + if ((labelMat[i]*Ei < -toler) and (alphas[i] < C)) or ((labelMat[i]*Ei > toler) and (alphas[i] > 0)): + #随机选择另一个与alpha_i成对优化的alpha_j + j = selectJrand(i,m) + #步骤1:计算误差Ej + fXj = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[j,:].T)) + b + Ej = fXj - float(labelMat[j]) + #保存更新前的aplpha值,使用深拷贝 + alphaIold = alphas[i].copy(); alphaJold = alphas[j].copy(); + #步骤2:计算上下界L和H + if (labelMat[i] != labelMat[j]): + L = max(0, alphas[j] - alphas[i]) + H = min(C, C + alphas[j] - alphas[i]) + else: + L = max(0, alphas[j] + alphas[i] - C) + H = min(C, alphas[j] + alphas[i]) + if L==H: print("L==H"); continue + #步骤3:计算eta + eta = 2.0 * dataMatrix[i,:]*dataMatrix[j,:].T - dataMatrix[i,:]*dataMatrix[i,:].T - dataMatrix[j,:]*dataMatrix[j,:].T + if eta >= 0: print("eta>=0"); continue + #步骤4:更新alpha_j + alphas[j] -= labelMat[j]*(Ei - Ej)/eta + #步骤5:修剪alpha_j + alphas[j] = clipAlpha(alphas[j],H,L) + if (abs(alphas[j] - alphaJold) < 0.00001): print("alpha_j变化太小"); continue + #步骤6:更新alpha_i + alphas[i] += labelMat[j]*labelMat[i]*(alphaJold - alphas[j]) + #步骤7:更新b_1和b_2 + b1 = b - Ei- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i,:]*dataMatrix[i,:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[i,:]*dataMatrix[j,:].T + b2 = b - Ej- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i,:]*dataMatrix[j,:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[j,:]*dataMatrix[j,:].T + #步骤8:根据b_1和b_2更新b + if (0 < alphas[i]) and (C > alphas[i]): b = b1 + elif (0 < alphas[j]) and (C > alphas[j]): b = b2 + else: b = (b1 + b2)/2.0 + #统计优化次数 + alphaPairsChanged += 1 + #打印统计信息 + print("第%d次迭代 样本:%d, alpha优化次数:%d" % (iter_num,i,alphaPairsChanged)) + #更新迭代次数 + if (alphaPairsChanged == 0): iter_num += 1 + else: iter_num = 0 + print("迭代次数: %d" % iter_num) + return b,alphas + +""" +函数说明:分类结果可视化 + +Parameters: + dataMat - 数据矩阵 + w - 直线法向量 + b - 直线解决 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-23 +""" +def showClassifer(dataMat, w, b): + #绘制样本点 + data_plus = [] #正样本 + data_minus = [] #负样本 + for i in range(len(dataMat)): + if labelMat[i] > 0: + data_plus.append(dataMat[i]) + else: + data_minus.append(dataMat[i]) + data_plus_np = np.array(data_plus) #转换为numpy矩阵 + data_minus_np = np.array(data_minus) #转换为numpy矩阵 + plt.scatter(np.transpose(data_plus_np)[0], np.transpose(data_plus_np)[1], s=30, alpha=0.7) #正样本散点图 + plt.scatter(np.transpose(data_minus_np)[0], np.transpose(data_minus_np)[1], s=30, alpha=0.7) #负样本散点图 + #绘制直线 + x1 = max(dataMat)[0] + x2 = min(dataMat)[0] + a1, a2 = w + b = float(b) + a1 = float(a1[0]) + a2 = float(a2[0]) + y1, y2 = (-b- a1*x1)/a2, (-b - a1*x2)/a2 + plt.plot([x1, x2], [y1, y2]) + #找出支持向量点 + for i, alpha in enumerate(alphas): + if abs(alpha) > 0: + x, y = dataMat[i] + plt.scatter([x], [y], s=150, c='none', alpha=0.7, linewidth=1.5, edgecolor='red') + plt.show() + + +""" +函数说明:计算w + +Parameters: + dataMat - 数据矩阵 + labelMat - 数据标签 + alphas - alphas值 +Returns: + 无 +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-09-23 +""" +def get_w(dataMat, labelMat, alphas): + alphas, dataMat, labelMat = np.array(alphas), np.array(dataMat), np.array(labelMat) + w = np.dot((np.tile(labelMat.reshape(1, -1).T, (1, 2)) * dataMat).T, alphas) + return w.tolist() + + +if __name__ == '__main__': + dataMat, labelMat = loadDataSet('testSet.txt') + b,alphas = smoSimple(dataMat, labelMat, 0.6, 0.001, 40) + w = get_w(dataMat, labelMat, alphas) + showClassifer(dataMat, w, b) + diff --git a/svm/svm-smo.py b/svm/svm-smo.py new file mode 100755 index 0000000..0130b88 --- /dev/null +++ b/svm/svm-smo.py @@ -0,0 +1,291 @@ +# -*-coding:utf-8 -*- +import matplotlib.pyplot as plt +import numpy as np +import random + +""" +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-10-03 +""" + +class optStruct: + """ + 数据结构,维护所有需要操作的值 + Parameters: + dataMatIn - 数据矩阵 + classLabels - 数据标签 + C - 松弛变量 + toler - 容错率 + """ + def __init__(self, dataMatIn, classLabels, C, toler): + self.X = dataMatIn #数据矩阵 + self.labelMat = classLabels #数据标签 + self.C = C #松弛变量 + self.tol = toler #容错率 + self.m = np.shape(dataMatIn)[0] #数据矩阵行数 + self.alphas = np.mat(np.zeros((self.m,1))) #根据矩阵行数初始化alpha参数为0 + self.b = 0 #初始化b参数为0 + self.eCache = np.mat(np.zeros((self.m,2))) #根据矩阵行数初始化虎误差缓存,第一列为是否有效的标志位,第二列为实际的误差E的值。 + +def loadDataSet(fileName): + """ + 读取数据 + Parameters: + fileName - 文件名 + Returns: + dataMat - 数据矩阵 + labelMat - 数据标签 + """ + dataMat = []; labelMat = [] + fr = open(fileName) + for line in fr.readlines(): #逐行读取,滤除空格等 + lineArr = line.strip().split('\t') + dataMat.append([float(lineArr[0]), float(lineArr[1])]) #添加数据 + labelMat.append(float(lineArr[2])) #添加标签 + return dataMat,labelMat + +def calcEk(oS, k): + """ + 计算误差 + Parameters: + oS - 数据结构 + k - 标号为k的数据 + Returns: + Ek - 标号为k的数据误差 + """ + fXk = float(np.multiply(oS.alphas,oS.labelMat).T*(oS.X*oS.X[k,:].T) + oS.b) + Ek = fXk - float(oS.labelMat[k]) + return Ek + +def selectJrand(i, m): + """ + 函数说明:随机选择alpha_j的索引值 + + Parameters: + i - alpha_i的索引值 + m - alpha参数个数 + Returns: + j - alpha_j的索引值 + """ + j = i #选择一个不等于i的j + while (j == i): + j = int(random.uniform(0, m)) + return j + +def selectJ(i, oS, Ei): + """ + 内循环启发方式2 + Parameters: + i - 标号为i的数据的索引值 + oS - 数据结构 + Ei - 标号为i的数据误差 + Returns: + j, maxK - 标号为j或maxK的数据的索引值 + Ej - 标号为j的数据误差 + """ + maxK = -1; maxDeltaE = 0; Ej = 0 #初始化 + oS.eCache[i] = [1,Ei] #根据Ei更新误差缓存 + validEcacheList = np.nonzero(oS.eCache[:,0].A)[0] #返回误差不为0的数据的索引值 + if (len(validEcacheList)) > 1: #有不为0的误差 + for k in validEcacheList: #遍历,找到最大的Ek + if k == i: continue #不计算i,浪费时间 + Ek = calcEk(oS, k) #计算Ek + deltaE = abs(Ei - Ek) #计算|Ei-Ek| + if (deltaE > maxDeltaE): #找到maxDeltaE + maxK = k; maxDeltaE = deltaE; Ej = Ek + return maxK, Ej #返回maxK,Ej + else: #没有不为0的误差 + j = selectJrand(i, oS.m) #随机选择alpha_j的索引值 + Ej = calcEk(oS, j) #计算Ej + return j, Ej #j,Ej + +def updateEk(oS, k): + """ + 计算Ek,并更新误差缓存 + Parameters: + oS - 数据结构 + k - 标号为k的数据的索引值 + Returns: + 无 + """ + Ek = calcEk(oS, k) #计算Ek + oS.eCache[k] = [1,Ek] #更新误差缓存 + + +def clipAlpha(aj,H,L): + """ + 修剪alpha_j + Parameters: + aj - alpha_j的值 + H - alpha上限 + L - alpha下限 + Returns: + aj - 修剪后的alpah_j的值 + """ + if aj > H: + aj = H + if L > aj: + aj = L + return aj + +def innerL(i, oS): + """ + 优化的SMO算法 + Parameters: + i - 标号为i的数据的索引值 + oS - 数据结构 + Returns: + 1 - 有任意一对alpha值发生变化 + 0 - 没有任意一对alpha值发生变化或变化太小 + """ + #步骤1:计算误差Ei + Ei = calcEk(oS, i) + #优化alpha,设定一定的容错率。 + if ((oS.labelMat[i] * Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or ((oS.labelMat[i] * Ei > oS.tol) and (oS.alphas[i] > 0)): + #使用内循环启发方式2选择alpha_j,并计算Ej + j,Ej = selectJ(i, oS, Ei) + #保存更新前的aplpha值,使用深拷贝 + alphaIold = oS.alphas[i].copy(); alphaJold = oS.alphas[j].copy(); + #步骤2:计算上下界L和H + if (oS.labelMat[i] != oS.labelMat[j]): + L = max(0, oS.alphas[j] - oS.alphas[i]) + H = min(oS.C, oS.C + oS.alphas[j] - oS.alphas[i]) + else: + L = max(0, oS.alphas[j] + oS.alphas[i] - oS.C) + H = min(oS.C, oS.alphas[j] + oS.alphas[i]) + if L == H: + print("L==H") + return 0 + #步骤3:计算eta + eta = 2.0 * oS.X[i,:] * oS.X[j,:].T - oS.X[i,:] * oS.X[i,:].T - oS.X[j,:] * oS.X[j,:].T + if eta >= 0: + print("eta>=0") + return 0 + #步骤4:更新alpha_j + oS.alphas[j] -= oS.labelMat[j] * (Ei - Ej)/eta + #步骤5:修剪alpha_j + oS.alphas[j] = clipAlpha(oS.alphas[j],H,L) + #更新Ej至误差缓存 + updateEk(oS, j) + if (abs(oS.alphas[j] - alphaJold) < 0.00001): + print("alpha_j变化太小") + return 0 + #步骤6:更新alpha_i + oS.alphas[i] += oS.labelMat[j]*oS.labelMat[i]*(alphaJold - oS.alphas[j]) + #更新Ei至误差缓存 + updateEk(oS, i) + #步骤7:更新b_1和b_2 + b1 = oS.b - Ei- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.X[i,:]*oS.X[i,:].T - oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.X[i,:]*oS.X[j,:].T + b2 = oS.b - Ej- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.X[i,:]*oS.X[j,:].T - oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.X[j,:]*oS.X[j,:].T + #步骤8:根据b_1和b_2更新b + if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]): oS.b = b1 + elif (0 < oS.alphas[j]) and (oS.C > oS.alphas[j]): oS.b = b2 + else: oS.b = (b1 + b2)/2.0 + return 1 + else: + return 0 + +def smoP(dataMatIn, classLabels, C, toler, maxIter): + """ + 完整的线性SMO算法 + Parameters: + dataMatIn - 数据矩阵 + classLabels - 数据标签 + C - 松弛变量 + toler - 容错率 + maxIter - 最大迭代次数 + Returns: + oS.b - SMO算法计算的b + oS.alphas - SMO算法计算的alphas + """ + oS = optStruct(np.mat(dataMatIn), np.mat(classLabels).transpose(), C, toler) #初始化数据结构 + iter = 0 #初始化当前迭代次数 + entireSet = True; alphaPairsChanged = 0 + while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)): #遍历整个数据集都alpha也没有更新或者超过最大迭代次数,则退出循环 + alphaPairsChanged = 0 + if entireSet: #遍历整个数据集 + for i in range(oS.m): + alphaPairsChanged += innerL(i,oS) #使用优化的SMO算法 + print("全样本遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged)) + iter += 1 + else: #遍历非边界值 + nonBoundIs = np.nonzero((oS.alphas.A > 0) * (oS.alphas.A < C))[0] #遍历不在边界0和C的alpha + for i in nonBoundIs: + alphaPairsChanged += innerL(i,oS) + print("非边界遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged)) + iter += 1 + if entireSet: #遍历一次后改为非边界遍历 + entireSet = False + elif (alphaPairsChanged == 0): #如果alpha没有更新,计算全样本遍历 + entireSet = True + print("迭代次数: %d" % iter) + return oS.b,oS.alphas #返回SMO算法计算的b和alphas + + +def showClassifer(dataMat, classLabels, w, b): + """ + 分类结果可视化 + Parameters: + dataMat - 数据矩阵 + w - 直线法向量 + b - 直线解决 + Returns: + 无 + """ + #绘制样本点 + data_plus = [] #正样本 + data_minus = [] #负样本 + for i in range(len(dataMat)): + if classLabels[i] > 0: + data_plus.append(dataMat[i]) + else: + data_minus.append(dataMat[i]) + data_plus_np = np.array(data_plus) #转换为numpy矩阵 + data_minus_np = np.array(data_minus) #转换为numpy矩阵 + plt.scatter(np.transpose(data_plus_np)[0], np.transpose(data_plus_np)[1], s=30, alpha=0.7) #正样本散点图 + plt.scatter(np.transpose(data_minus_np)[0], np.transpose(data_minus_np)[1], s=30, alpha=0.7) #负样本散点图 + #绘制直线 + x1 = max(dataMat)[0] + x2 = min(dataMat)[0] + a1, a2 = w + b = float(b) + a1 = float(a1[0]) + a2 = float(a2[0]) + y1, y2 = (-b- a1*x1)/a2, (-b - a1*x2)/a2 + plt.plot([x1, x2], [y1, y2]) + #找出支持向量点 + for i, alpha in enumerate(alphas): + if alpha > 0: + x, y = dataMat[i] + plt.scatter([x], [y], s=150, c='none', alpha=0.7, linewidth=1.5, edgecolor='red') + plt.show() + + +def calcWs(alphas,dataArr,classLabels): + """ + 计算w + Parameters: + dataArr - 数据矩阵 + classLabels - 数据标签 + alphas - alphas值 + Returns: + w - 计算得到的w + """ + X = np.mat(dataArr); labelMat = np.mat(classLabels).transpose() + m,n = np.shape(X) + w = np.zeros((n,1)) + for i in range(m): + w += np.multiply(alphas[i]*labelMat[i],X[i,:].T) + return w + +if __name__ == '__main__': + dataArr, classLabels = loadDataSet('testSet.txt') + b, alphas = smoP(dataArr, classLabels, 0.6, 0.001, 40) + w = calcWs(alphas,dataArr, classLabels) + showClassifer(dataArr, classLabels, w, b) diff --git a/svm/svm-svc.py b/svm/svm-svc.py new file mode 100755 index 0000000..2db1673 --- /dev/null +++ b/svm/svm-svc.py @@ -0,0 +1,91 @@ +# -*- coding: UTF-8 -*- +import numpy as np +import operator +from os import listdir +from sklearn.svm import SVC + +""" +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-10-04 +""" + +def img2vector(filename): + """ + 将32x32的二进制图像转换为1x1024向量。 + Parameters: + filename - 文件名 + Returns: + returnVect - 返回的二进制图像的1x1024向量 + """ + #创建1x1024零向量 + returnVect = np.zeros((1, 1024)) + #打开文件 + fr = open(filename) + #按行读取 + for i in range(32): + #读一行数据 + lineStr = fr.readline() + #每一行的前32个元素依次添加到returnVect中 + for j in range(32): + returnVect[0, 32*i+j] = int(lineStr[j]) + #返回转换后的1x1024向量 + return returnVect + +def handwritingClassTest(): + """ + 手写数字分类测试 + Parameters: + 无 + Returns: + 无 + """ + #测试集的Labels + hwLabels = [] + #返回trainingDigits目录下的文件名 + trainingFileList = listdir('trainingDigits') + #返回文件夹下文件的个数 + m = len(trainingFileList) + #初始化训练的Mat矩阵,测试集 + trainingMat = np.zeros((m, 1024)) + #从文件名中解析出训练集的类别 + for i in range(m): + #获得文件的名字 + fileNameStr = trainingFileList[i] + #获得分类的数字 + classNumber = int(fileNameStr.split('_')[0]) + #将获得的类别添加到hwLabels中 + hwLabels.append(classNumber) + #将每一个文件的1x1024数据存储到trainingMat矩阵中 + trainingMat[i,:] = img2vector('trainingDigits/%s' % (fileNameStr)) + clf = SVC(C=200,kernel='rbf') + clf.fit(trainingMat,hwLabels) + #返回testDigits目录下的文件列表 + testFileList = listdir('testDigits') + #错误检测计数 + errorCount = 0.0 + #测试数据的数量 + mTest = len(testFileList) + #从文件中解析出测试集的类别并进行分类测试 + for i in range(mTest): + #获得文件的名字 + fileNameStr = testFileList[i] + #获得分类的数字 + classNumber = int(fileNameStr.split('_')[0]) + #获得测试集的1x1024向量,用于训练 + vectorUnderTest = img2vector('testDigits/%s' % (fileNameStr)) + #获得预测结果 + # classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3) + classifierResult = clf.predict(vectorUnderTest) + print("分类返回结果为%d\t真实结果为%d" % (classifierResult, classNumber)) + if(classifierResult != classNumber): + errorCount += 1.0 + print("总共错了%d个数据\n错误率为%f%%" % (errorCount, errorCount/mTest * 100)) + +if __name__ == '__main__': + handwritingClassTest() \ No newline at end of file diff --git a/svm/svmMLiA.py b/svm/svmMLiA.py new file mode 100755 index 0000000..82cba1d --- /dev/null +++ b/svm/svmMLiA.py @@ -0,0 +1,313 @@ +# -*-coding:utf-8 -*- +import matplotlib.pyplot as plt +import numpy as np +import random + +""" +Author: + Jack Cui +Blog: + http://blog.csdn.net/c406495762 +Zhihu: + https://www.zhihu.com/people/Jack--Cui/ +Modify: + 2017-10-03 +""" + +class optStruct: + """ + 数据结构,维护所有需要操作的值 + Parameters: + dataMatIn - 数据矩阵 + classLabels - 数据标签 + C - 松弛变量 + toler - 容错率 + kTup - 包含核函数信息的元组,第一个参数存放核函数类别,第二个参数存放必要的核函数需要用到的参数 + """ + def __init__(self, dataMatIn, classLabels, C, toler, kTup): + self.X = dataMatIn #数据矩阵 + self.labelMat = classLabels #数据标签 + self.C = C #松弛变量 + self.tol = toler #容错率 + self.m = np.shape(dataMatIn)[0] #数据矩阵行数 + self.alphas = np.mat(np.zeros((self.m,1))) #根据矩阵行数初始化alpha参数为0 + self.b = 0 #初始化b参数为0 + self.eCache = np.mat(np.zeros((self.m,2))) #根据矩阵行数初始化虎误差缓存,第一列为是否有效的标志位,第二列为实际的误差E的值。 + self.K = np.mat(np.zeros((self.m,self.m))) #初始化核K + for i in range(self.m): #计算所有数据的核K + self.K[:,i] = kernelTrans(self.X, self.X[i,:], kTup) + +def kernelTrans(X, A, kTup): + """ + 通过核函数将数据转换更高维的空间 + Parameters: + X - 数据矩阵 + A - 单个数据的向量 + kTup - 包含核函数信息的元组 + Returns: + K - 计算的核K + """ + m,n = np.shape(X) + K = np.mat(np.zeros((m,1))) + if kTup[0] == 'lin': K = X * A.T #线性核函数,只进行内积。 + elif kTup[0] == 'rbf': #高斯核函数,根据高斯核函数公式进行计算 + for j in range(m): + deltaRow = X[j,:] - A + K[j] = deltaRow*deltaRow.T + K = np.exp(K/(-1*kTup[1]**2)) #计算高斯核K + else: raise NameError('核函数无法识别') + return K #返回计算的核K + +def loadDataSet(fileName): + """ + 读取数据 + Parameters: + fileName - 文件名 + Returns: + dataMat - 数据矩阵 + labelMat - 数据标签 + """ + dataMat = []; labelMat = [] + fr = open(fileName) + for line in fr.readlines(): #逐行读取,滤除空格等 + lineArr = line.strip().split('\t') + dataMat.append([float(lineArr[0]), float(lineArr[1])]) #添加数据 + labelMat.append(float(lineArr[2])) #添加标签 + return dataMat,labelMat + +def calcEk(oS, k): + """ + 计算误差 + Parameters: + oS - 数据结构 + k - 标号为k的数据 + Returns: + Ek - 标号为k的数据误差 + """ + fXk = float(np.multiply(oS.alphas,oS.labelMat).T*oS.K[:,k] + oS.b) + Ek = fXk - float(oS.labelMat[k]) + return Ek + +def selectJrand(i, m): + """ + 函数说明:随机选择alpha_j的索引值 + + Parameters: + i - alpha_i的索引值 + m - alpha参数个数 + Returns: + j - alpha_j的索引值 + """ + j = i #选择一个不等于i的j + while (j == i): + j = int(random.uniform(0, m)) + return j + +def selectJ(i, oS, Ei): + """ + 内循环启发方式2 + Parameters: + i - 标号为i的数据的索引值 + oS - 数据结构 + Ei - 标号为i的数据误差 + Returns: + j, maxK - 标号为j或maxK的数据的索引值 + Ej - 标号为j的数据误差 + """ + maxK = -1; maxDeltaE = 0; Ej = 0 #初始化 + oS.eCache[i] = [1,Ei] #根据Ei更新误差缓存 + validEcacheList = np.nonzero(oS.eCache[:,0].A)[0] #返回误差不为0的数据的索引值 + if (len(validEcacheList)) > 1: #有不为0的误差 + for k in validEcacheList: #遍历,找到最大的Ek + if k == i: continue #不计算i,浪费时间 + Ek = calcEk(oS, k) #计算Ek + deltaE = abs(Ei - Ek) #计算|Ei-Ek| + if (deltaE > maxDeltaE): #找到maxDeltaE + maxK = k; maxDeltaE = deltaE; Ej = Ek + return maxK, Ej #返回maxK,Ej + else: #没有不为0的误差 + j = selectJrand(i, oS.m) #随机选择alpha_j的索引值 + Ej = calcEk(oS, j) #计算Ej + return j, Ej #j,Ej + +def updateEk(oS, k): + """ + 计算Ek,并更新误差缓存 + Parameters: + oS - 数据结构 + k - 标号为k的数据的索引值 + Returns: + 无 + """ + Ek = calcEk(oS, k) #计算Ek + oS.eCache[k] = [1,Ek] #更新误差缓存 + + +def clipAlpha(aj,H,L): + """ + 修剪alpha_j + Parameters: + aj - alpha_j的值 + H - alpha上限 + L - alpha下限 + Returns: + aj - 修剪后的alpah_j的值 + """ + if aj > H: + aj = H + if L > aj: + aj = L + return aj + +def innerL(i, oS): + """ + 优化的SMO算法 + Parameters: + i - 标号为i的数据的索引值 + oS - 数据结构 + Returns: + 1 - 有任意一对alpha值发生变化 + 0 - 没有任意一对alpha值发生变化或变化太小 + """ + #步骤1:计算误差Ei + Ei = calcEk(oS, i) + #优化alpha,设定一定的容错率。 + if ((oS.labelMat[i] * Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or ((oS.labelMat[i] * Ei > oS.tol) and (oS.alphas[i] > 0)): + #使用内循环启发方式2选择alpha_j,并计算Ej + j,Ej = selectJ(i, oS, Ei) + #保存更新前的aplpha值,使用深拷贝 + alphaIold = oS.alphas[i].copy(); alphaJold = oS.alphas[j].copy(); + #步骤2:计算上下界L和H + if (oS.labelMat[i] != oS.labelMat[j]): + L = max(0, oS.alphas[j] - oS.alphas[i]) + H = min(oS.C, oS.C + oS.alphas[j] - oS.alphas[i]) + else: + L = max(0, oS.alphas[j] + oS.alphas[i] - oS.C) + H = min(oS.C, oS.alphas[j] + oS.alphas[i]) + if L == H: + print("L==H") + return 0 + #步骤3:计算eta + eta = 2.0 * oS.K[i,j] - oS.K[i,i] - oS.K[j,j] + if eta >= 0: + print("eta>=0") + return 0 + #步骤4:更新alpha_j + oS.alphas[j] -= oS.labelMat[j] * (Ei - Ej)/eta + #步骤5:修剪alpha_j + oS.alphas[j] = clipAlpha(oS.alphas[j],H,L) + #更新Ej至误差缓存 + updateEk(oS, j) + if (abs(oS.alphas[j] - alphaJold) < 0.00001): + print("alpha_j变化太小") + return 0 + #步骤6:更新alpha_i + oS.alphas[i] += oS.labelMat[j]*oS.labelMat[i]*(alphaJold - oS.alphas[j]) + #更新Ei至误差缓存 + updateEk(oS, i) + #步骤7:更新b_1和b_2 + b1 = oS.b - Ei- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.K[i,i] - oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.K[i,j] + b2 = oS.b - Ej- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.K[i,j]- oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.K[j,j] + #步骤8:根据b_1和b_2更新b + if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]): oS.b = b1 + elif (0 < oS.alphas[j]) and (oS.C > oS.alphas[j]): oS.b = b2 + else: oS.b = (b1 + b2)/2.0 + return 1 + else: + return 0 + +def smoP(dataMatIn, classLabels, C, toler, maxIter, kTup = ('lin',0)): + """ + 完整的线性SMO算法 + Parameters: + dataMatIn - 数据矩阵 + classLabels - 数据标签 + C - 松弛变量 + toler - 容错率 + maxIter - 最大迭代次数 + kTup - 包含核函数信息的元组 + Returns: + oS.b - SMO算法计算的b + oS.alphas - SMO算法计算的alphas + """ + oS = optStruct(np.mat(dataMatIn), np.mat(classLabels).transpose(), C, toler, kTup) #初始化数据结构 + iter = 0 #初始化当前迭代次数 + entireSet = True; alphaPairsChanged = 0 + while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)): #遍历整个数据集都alpha也没有更新或者超过最大迭代次数,则退出循环 + alphaPairsChanged = 0 + if entireSet: #遍历整个数据集 + for i in range(oS.m): + alphaPairsChanged += innerL(i,oS) #使用优化的SMO算法 + print("全样本遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged)) + iter += 1 + else: #遍历非边界值 + nonBoundIs = np.nonzero((oS.alphas.A > 0) * (oS.alphas.A < C))[0] #遍历不在边界0和C的alpha + for i in nonBoundIs: + alphaPairsChanged += innerL(i,oS) + print("非边界遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged)) + iter += 1 + if entireSet: #遍历一次后改为非边界遍历 + entireSet = False + elif (alphaPairsChanged == 0): #如果alpha没有更新,计算全样本遍历 + entireSet = True + print("迭代次数: %d" % iter) + return oS.b,oS.alphas #返回SMO算法计算的b和alphas + + +def testRbf(k1 = 1.3): + """ + 测试函数 + Parameters: + k1 - 使用高斯核函数的时候表示到达率 + Returns: + 无 + """ + dataArr,labelArr = loadDataSet('testSetRBF.txt') #加载训练集 + b,alphas = smoP(dataArr, labelArr, 200, 0.0001, 100, ('rbf', k1)) #根据训练集计算b和alphas + datMat = np.mat(dataArr); labelMat = np.mat(labelArr).transpose() + svInd = np.nonzero(alphas.A > 0)[0] #获得支持向量 + sVs = datMat[svInd] + labelSV = labelMat[svInd]; + print("支持向量个数:%d" % np.shape(sVs)[0]) + m,n = np.shape(datMat) + errorCount = 0 + for i in range(m): + kernelEval = kernelTrans(sVs,datMat[i,:],('rbf', k1)) #计算各个点的核 + predict = kernelEval.T * np.multiply(labelSV,alphas[svInd]) + b #根据支持向量的点,计算超平面,返回预测结果 + if np.sign(predict) != np.sign(labelArr[i]): errorCount += 1 #返回数组中各元素的正负符号,用1和-1表示,并统计错误个数 + print("训练集错误率: %.2f%%" % ((float(errorCount)/m)*100)) #打印错误率 + dataArr,labelArr = loadDataSet('testSetRBF2.txt') #加载测试集 + errorCount = 0 + datMat = np.mat(dataArr); labelMat = np.mat(labelArr).transpose() + m,n = np.shape(datMat) + for i in range(m): + kernelEval = kernelTrans(sVs,datMat[i,:],('rbf', k1)) #计算各个点的核 + predict=kernelEval.T * np.multiply(labelSV,alphas[svInd]) + b #根据支持向量的点,计算超平面,返回预测结果 + if np.sign(predict) != np.sign(labelArr[i]): errorCount += 1 #返回数组中各元素的正负符号,用1和-1表示,并统计错误个数 + print("测试集错误率: %.2f%%" % ((float(errorCount)/m)*100)) #打印错误率 + + +def showDataSet(dataMat, labelMat): + """ + 数据可视化 + Parameters: + dataMat - 数据矩阵 + labelMat - 数据标签 + Returns: + 无 + """ + data_plus = [] #正样本 + data_minus = [] #负样本 + for i in range(len(dataMat)): + if labelMat[i] > 0: + data_plus.append(dataMat[i]) + else: + data_minus.append(dataMat[i]) + data_plus_np = np.array(data_plus) #转换为numpy矩阵 + data_minus_np = np.array(data_minus) #转换为numpy矩阵 + plt.scatter(np.transpose(data_plus_np)[0], np.transpose(data_plus_np)[1]) #正样本散点图 + plt.scatter(np.transpose(data_minus_np)[0], np.transpose(data_minus_np)[1]) #负样本散点图 + plt.show() + +if __name__ == '__main__': + testRbf() \ No newline at end of file diff --git a/svm/testSet.txt b/svm/testSet.txt new file mode 100644 index 0000000..538931e --- /dev/null +++ b/svm/testSet.txt @@ -0,0 +1,100 @@ +3.542485 1.977398 -1 +3.018896 2.556416 -1 +7.551510 -1.580030 1 +2.114999 -0.004466 -1 +8.127113 1.274372 1 +7.108772 -0.986906 1 +8.610639 2.046708 1 +2.326297 0.265213 -1 +3.634009 1.730537 -1 +0.341367 -0.894998 -1 +3.125951 0.293251 -1 +2.123252 -0.783563 -1 +0.887835 -2.797792 -1 +7.139979 -2.329896 1 +1.696414 -1.212496 -1 +8.117032 0.623493 1 +8.497162 -0.266649 1 +4.658191 3.507396 -1 +8.197181 1.545132 1 +1.208047 0.213100 -1 +1.928486 -0.321870 -1 +2.175808 -0.014527 -1 +7.886608 0.461755 1 +3.223038 -0.552392 -1 +3.628502 2.190585 -1 +7.407860 -0.121961 1 +7.286357 0.251077 1 +2.301095 -0.533988 -1 +-0.232542 -0.547690 -1 +3.457096 -0.082216 -1 +3.023938 -0.057392 -1 +8.015003 0.885325 1 +8.991748 0.923154 1 +7.916831 -1.781735 1 +7.616862 -0.217958 1 +2.450939 0.744967 -1 +7.270337 -2.507834 1 +1.749721 -0.961902 -1 +1.803111 -0.176349 -1 +8.804461 3.044301 1 +1.231257 -0.568573 -1 +2.074915 1.410550 -1 +-0.743036 -1.736103 -1 +3.536555 3.964960 -1 +8.410143 0.025606 1 +7.382988 -0.478764 1 +6.960661 -0.245353 1 +8.234460 0.701868 1 +8.168618 -0.903835 1 +1.534187 -0.622492 -1 +9.229518 2.066088 1 +7.886242 0.191813 1 +2.893743 -1.643468 -1 +1.870457 -1.040420 -1 +5.286862 -2.358286 1 +6.080573 0.418886 1 +2.544314 1.714165 -1 +6.016004 -3.753712 1 +0.926310 -0.564359 -1 +0.870296 -0.109952 -1 +2.369345 1.375695 -1 +1.363782 -0.254082 -1 +7.279460 -0.189572 1 +1.896005 0.515080 -1 +8.102154 -0.603875 1 +2.529893 0.662657 -1 +1.963874 -0.365233 -1 +8.132048 0.785914 1 +8.245938 0.372366 1 +6.543888 0.433164 1 +-0.236713 -5.766721 -1 +8.112593 0.295839 1 +9.803425 1.495167 1 +1.497407 -0.552916 -1 +1.336267 -1.632889 -1 +9.205805 -0.586480 1 +1.966279 -1.840439 -1 +8.398012 1.584918 1 +7.239953 -1.764292 1 +7.556201 0.241185 1 +9.015509 0.345019 1 +8.266085 -0.230977 1 +8.545620 2.788799 1 +9.295969 1.346332 1 +2.404234 0.570278 -1 +2.037772 0.021919 -1 +1.727631 -0.453143 -1 +1.979395 -0.050773 -1 +8.092288 -1.372433 1 +1.667645 0.239204 -1 +9.854303 1.365116 1 +7.921057 -1.327587 1 +8.500757 1.492372 1 +1.339746 -0.291183 -1 +3.107511 0.758367 -1 +2.609525 0.902979 -1 +3.263585 1.367898 -1 +2.912122 -0.202359 -1 +1.731786 0.589096 -1 +2.387003 1.573131 -1 diff --git a/svm/testSetRBF.txt b/svm/testSetRBF.txt new file mode 100644 index 0000000..bf5f979 --- /dev/null +++ b/svm/testSetRBF.txt @@ -0,0 +1,100 @@ +-0.214824 0.662756 -1.000000 +-0.061569 -0.091875 1.000000 +0.406933 0.648055 -1.000000 +0.223650 0.130142 1.000000 +0.231317 0.766906 -1.000000 +-0.748800 -0.531637 -1.000000 +-0.557789 0.375797 -1.000000 +0.207123 -0.019463 1.000000 +0.286462 0.719470 -1.000000 +0.195300 -0.179039 1.000000 +-0.152696 -0.153030 1.000000 +0.384471 0.653336 -1.000000 +-0.117280 -0.153217 1.000000 +-0.238076 0.000583 1.000000 +-0.413576 0.145681 1.000000 +0.490767 -0.680029 -1.000000 +0.199894 -0.199381 1.000000 +-0.356048 0.537960 -1.000000 +-0.392868 -0.125261 1.000000 +0.353588 -0.070617 1.000000 +0.020984 0.925720 -1.000000 +-0.475167 -0.346247 -1.000000 +0.074952 0.042783 1.000000 +0.394164 -0.058217 1.000000 +0.663418 0.436525 -1.000000 +0.402158 0.577744 -1.000000 +-0.449349 -0.038074 1.000000 +0.619080 -0.088188 -1.000000 +0.268066 -0.071621 1.000000 +-0.015165 0.359326 1.000000 +0.539368 -0.374972 -1.000000 +-0.319153 0.629673 -1.000000 +0.694424 0.641180 -1.000000 +0.079522 0.193198 1.000000 +0.253289 -0.285861 1.000000 +-0.035558 -0.010086 1.000000 +-0.403483 0.474466 -1.000000 +-0.034312 0.995685 -1.000000 +-0.590657 0.438051 -1.000000 +-0.098871 -0.023953 1.000000 +-0.250001 0.141621 1.000000 +-0.012998 0.525985 -1.000000 +0.153738 0.491531 -1.000000 +0.388215 -0.656567 -1.000000 +0.049008 0.013499 1.000000 +0.068286 0.392741 1.000000 +0.747800 -0.066630 -1.000000 +0.004621 -0.042932 1.000000 +-0.701600 0.190983 -1.000000 +0.055413 -0.024380 1.000000 +0.035398 -0.333682 1.000000 +0.211795 0.024689 1.000000 +-0.045677 0.172907 1.000000 +0.595222 0.209570 -1.000000 +0.229465 0.250409 1.000000 +-0.089293 0.068198 1.000000 +0.384300 -0.176570 1.000000 +0.834912 -0.110321 -1.000000 +-0.307768 0.503038 -1.000000 +-0.777063 -0.348066 -1.000000 +0.017390 0.152441 1.000000 +-0.293382 -0.139778 1.000000 +-0.203272 0.286855 1.000000 +0.957812 -0.152444 -1.000000 +0.004609 -0.070617 1.000000 +-0.755431 0.096711 -1.000000 +-0.526487 0.547282 -1.000000 +-0.246873 0.833713 -1.000000 +0.185639 -0.066162 1.000000 +0.851934 0.456603 -1.000000 +-0.827912 0.117122 -1.000000 +0.233512 -0.106274 1.000000 +0.583671 -0.709033 -1.000000 +-0.487023 0.625140 -1.000000 +-0.448939 0.176725 1.000000 +0.155907 -0.166371 1.000000 +0.334204 0.381237 -1.000000 +0.081536 -0.106212 1.000000 +0.227222 0.527437 -1.000000 +0.759290 0.330720 -1.000000 +0.204177 -0.023516 1.000000 +0.577939 0.403784 -1.000000 +-0.568534 0.442948 -1.000000 +-0.011520 0.021165 1.000000 +0.875720 0.422476 -1.000000 +0.297885 -0.632874 -1.000000 +-0.015821 0.031226 1.000000 +0.541359 -0.205969 -1.000000 +-0.689946 -0.508674 -1.000000 +-0.343049 0.841653 -1.000000 +0.523902 -0.436156 -1.000000 +0.249281 -0.711840 -1.000000 +0.193449 0.574598 -1.000000 +-0.257542 -0.753885 -1.000000 +-0.021605 0.158080 1.000000 +0.601559 -0.727041 -1.000000 +-0.791603 0.095651 -1.000000 +-0.908298 -0.053376 -1.000000 +0.122020 0.850966 -1.000000 +-0.725568 -0.292022 -1.000000 diff --git a/svm/testSetRBF2.txt b/svm/testSetRBF2.txt new file mode 100644 index 0000000..ac7145f --- /dev/null +++ b/svm/testSetRBF2.txt @@ -0,0 +1,100 @@ +0.676771 -0.486687 -1.000000 +0.008473 0.186070 1.000000 +-0.727789 0.594062 -1.000000 +0.112367 0.287852 1.000000 +0.383633 -0.038068 1.000000 +-0.927138 -0.032633 -1.000000 +-0.842803 -0.423115 -1.000000 +-0.003677 -0.367338 1.000000 +0.443211 -0.698469 -1.000000 +-0.473835 0.005233 1.000000 +0.616741 0.590841 -1.000000 +0.557463 -0.373461 -1.000000 +-0.498535 -0.223231 -1.000000 +-0.246744 0.276413 1.000000 +-0.761980 -0.244188 -1.000000 +0.641594 -0.479861 -1.000000 +-0.659140 0.529830 -1.000000 +-0.054873 -0.238900 1.000000 +-0.089644 -0.244683 1.000000 +-0.431576 -0.481538 -1.000000 +-0.099535 0.728679 -1.000000 +-0.188428 0.156443 1.000000 +0.267051 0.318101 1.000000 +0.222114 -0.528887 -1.000000 +0.030369 0.113317 1.000000 +0.392321 0.026089 1.000000 +0.298871 -0.915427 -1.000000 +-0.034581 -0.133887 1.000000 +0.405956 0.206980 1.000000 +0.144902 -0.605762 -1.000000 +0.274362 -0.401338 1.000000 +0.397998 -0.780144 -1.000000 +0.037863 0.155137 1.000000 +-0.010363 -0.004170 1.000000 +0.506519 0.486619 -1.000000 +0.000082 -0.020625 1.000000 +0.057761 -0.155140 1.000000 +0.027748 -0.553763 -1.000000 +-0.413363 -0.746830 -1.000000 +0.081500 -0.014264 1.000000 +0.047137 -0.491271 1.000000 +-0.267459 0.024770 1.000000 +-0.148288 -0.532471 -1.000000 +-0.225559 -0.201622 1.000000 +0.772360 -0.518986 -1.000000 +-0.440670 0.688739 -1.000000 +0.329064 -0.095349 1.000000 +0.970170 -0.010671 -1.000000 +-0.689447 -0.318722 -1.000000 +-0.465493 -0.227468 -1.000000 +-0.049370 0.405711 1.000000 +-0.166117 0.274807 1.000000 +0.054483 0.012643 1.000000 +0.021389 0.076125 1.000000 +-0.104404 -0.914042 -1.000000 +0.294487 0.440886 -1.000000 +0.107915 -0.493703 -1.000000 +0.076311 0.438860 1.000000 +0.370593 -0.728737 -1.000000 +0.409890 0.306851 -1.000000 +0.285445 0.474399 -1.000000 +-0.870134 -0.161685 -1.000000 +-0.654144 -0.675129 -1.000000 +0.285278 -0.767310 -1.000000 +0.049548 -0.000907 1.000000 +0.030014 -0.093265 1.000000 +-0.128859 0.278865 1.000000 +0.307463 0.085667 1.000000 +0.023440 0.298638 1.000000 +0.053920 0.235344 1.000000 +0.059675 0.533339 -1.000000 +0.817125 0.016536 -1.000000 +-0.108771 0.477254 1.000000 +-0.118106 0.017284 1.000000 +0.288339 0.195457 1.000000 +0.567309 -0.200203 -1.000000 +-0.202446 0.409387 1.000000 +-0.330769 -0.240797 1.000000 +-0.422377 0.480683 -1.000000 +-0.295269 0.326017 1.000000 +0.261132 0.046478 1.000000 +-0.492244 -0.319998 -1.000000 +-0.384419 0.099170 1.000000 +0.101882 -0.781145 -1.000000 +0.234592 -0.383446 1.000000 +-0.020478 -0.901833 -1.000000 +0.328449 0.186633 1.000000 +-0.150059 -0.409158 1.000000 +-0.155876 -0.843413 -1.000000 +-0.098134 -0.136786 1.000000 +0.110575 -0.197205 1.000000 +0.219021 0.054347 1.000000 +0.030152 0.251682 1.000000 +0.033447 -0.122824 1.000000 +-0.686225 -0.020779 -1.000000 +-0.911211 -0.262011 -1.000000 +0.572557 0.377526 -1.000000 +-0.073647 -0.519163 -1.000000 +-0.281830 -0.797236 -1.000000 +-0.555263 0.126232 -1.000000 diff --git a/targetDetection/README.md b/targetDetection/README.md new file mode 100644 index 0000000..569bbff --- /dev/null +++ b/targetDetection/README.md @@ -0,0 +1,38 @@ +# 目标检测 + +## 基本概念 +计算机视觉中关于图像识别有四大类任务: +1. 分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。 +2. 定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。 +3. 检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个目标的的位置并且知道目标物是什么。 +4. 分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。 + +![pic](http://index.zeekling.cn/gogsPics/ml/targetDection/1.png) + +## 目标检测算法分类 +![pic](http://index.zeekling.cn/gogsPics/ml/targetDection/2.png) +### Two stage目标检测算法 +先进行区域生成(region proposal,RP)(一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。 + +任务:特征提取—>生成RP—>分类/定位回归。 + +常见的two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。 + +#### R-CNN +> **标题**:《Rich feature hierarchies for accurate object detection and semantic segmentation》
+> **时间**:2014
+> **出版源**:CVPR 2014 + +主要链接: +1. **arXiv**:[http://arxiv.org/abs/1311.2524 ](http://arxiv.org/abs/1311.2524) +2. **github(caffe)**:[https://github.com/rbgirshick/rcnn ](https://github.com/rbgirshick/rcnn) + + +### 2.One stage目标检测算法 +不用RP,直接在网络中提取特征来预测物体分类和位置。 + +任务:特征提取—>分类/定位回归。 + +常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。 + +