机器学习实战:Logistic回归(附代码)

机器学习实战:Logistic回归

本章内容

  • Sigmoid函数和Logistic回归分类器
  • 最优化理论初步
  • 梯度下降最优化算法
  • 数据中的缺失项处理

Logistic回归的一般过程

(1)收集数据:采用任意方法收集数据。
(2)准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外,结构化数据格式则最佳。
(3)分析数据:采用任意方法对数据进行分析。
(4)训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数。
(5)测试算法:一旦训练步骤完成,分类将会很快。
(6)使用算法:首先,我们需要输入一些数据,并将其转换成对应的结构化数值;接着,基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定它们属于哪个类别;在这之后,我们就可以在输出的类别上做一些其他分析工作。

本章首先阐述Logistic回归的定义,然后介绍-些最优化算法,其中包括基本的梯度上升法和一个改进的随机梯度上升法,这些最优化算法将用于分类器的训练。本章最后会给出一个Logistic回归的实例,预测一匹病马是否能被治愈。

1 基于Logistic回归和Sigmoid函数的分类

Logitic回归
优点:计算代价不高,易于理解和实现。
缺点:容易欠拟合,分类精度可能不高。
适用数据类型:数值型和标称型数据。

我们想要的函数应该是,能接受所有的输入然后预测出类别。例如,在两个类的情况下,上述函数输出0或1。或许你之前接触过具有这种性质的函数,该函数称为海维塞德阶跃函数( Heaviside step function),或者直接称为单位阶跃函数。然而,海维塞德阶跃函数的问题在于: 该函数在跳跃点上从0瞬间跳跃到1,这个瞬间跳跃过程有时很难处理。幸好,另一个函数也有类似的性质,且数学上更易处理,这就是Sigmoid函数。Sigmoid函数具体的计算公式如下:
在这里插入图片描述
图5-1给出了Sigmoid函数在不同坐标尺度下的两条曲线图。当x为0时,Sigmoid函数值为0.5。随着x的增大,对应的Sigmoid值将逼近于1;而随着x的减小,Sigmoid值将逼近于0。如果横坐标刻度足够大(图5-1下图), Sigmoid函数看起来很像一个阶跃函数。
在这里插入图片描述
因此,为了实现Logistic回归分类器,我们可以在每个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和代入Sigmoid函数中,进而得到一个范围在0~1之间的数值。任何大于0.5的数据被分入1类,小于0.5即被归入0类。所以,Logistic回归也可以被看成是一种概率估计。
确定了分类器的函数形式之后,现在的问题变成了:最佳回归系数是多少?如何确定它们的大小?这些问题将在下一节解答。

2 基于最优化方法的最佳回归系数确定

Sigmoid函数的输入记为z,由下面公式得出:
在这里插入图片描述
如果采用向量的写法,上述公式可以写成z = wTx,它表示将这两个数值向量对应元素相乘然后全部加起来即得到z值。其中的向量x是分类器的输入数据,向量w也就是我们要找到的最佳参数(系数),从而使得分类器尽可能地精确。为了寻找该最佳参数,需要用到最优化理论的一些知识。
下面首先介绍梯度上升的最优化方法,我们将学习到如何使用该方法求得数据集的最佳参数。接下来,展示如何绘制梯度上升法产生的决策边界图,该图能将梯度上升法的分类效果可视化地呈现出来。最后我们将学习随机梯度上升算法,以及如何对其进行修改以获得更好的结果。

2.1 梯度上升法

我们介绍的第一个最优化算法叫做梯度上升法。梯度上升法基于的思想是:要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻。如果梯度记为V,则函数f (x,y)的梯度由下式表示:
在这里插入图片描述
这是机器学习中最易造成混淆的一个地方,但在数学上并不难,需要做的只是牢记这些符号的意义。这个梯度意味着要沿x的方向在这里插入图片描述移动 沿y的方向移动 在这里插入图片描述。其中,函数f(x,y)必须要在待计算的点上有定义并且可微。一个具体的函数例子见图5-2。
在这里插入图片描述
图5-2中的梯度上升算法沿梯度方向移动了一步。可以看到,梯度算子总是指向函数值增长最快的方向。这里所说的是移动方向,而未提到移动量的大小。该量值称为步长,记做alpha。用向量来表示的话,梯度算法的迭代公式如下:
在这里插入图片描述
该公式将一直被迭代执行, 直至达到某个停止条件为止,比如迭代次数达到某个指定值或算法达到某个可以允许的误差范围。

梯度下降算法
你最经常听到的应该是梯度下降算法,它与这里的梯度上升算法是一样的,只是公式中的加法需要变成减法。因此,对应的公式可以写成
在这里插入图片描述
梯度上升算法用来求函数的最大值,而梯度下降算法用来求函数的最小值。

基于上面的内容,我们来看一个Logistic回归分类器的应用例子,从图5-3可以看到我们采用的数据集。
在这里插入图片描述

2.2 训练算法: 使用梯度上升找到最佳参数

图5-3中有100个样本点,每个点包含两个数值型特征: X1和X2。在此数据集上,我们将通过使用梯度上升法找到最佳回归系数,也就是拟合出Logistic回归模型的最佳参数。

梯度上升法的伪代码如下:
	每个回归系数初始化为1
	重复R次:
		计算整个数据集的梯度
		使用alpha * gradient更新回归系数的向量
		返回回归系数

下面的代码是梯度上升算法的具体实现。为了解实际效果,打开文本编辑器并创建一个名为logRegres.py的文件,输入下列代码:
程序清单5-1 Logistic 回归梯度上升优化算法

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 (1ineArr[1])])
	labe lMat : append (int (lineArr[2]))
	return dataMat,labelMat

def sigmoid(inX) :
	return 1.0/ (1+exp(- inX) )

def gradAscent (dataMatIn,classLabels) :
	➊转换为NumPy矩阵数据类型
	dataMatrix = mat,(dataMatIn)
	labelMat = mat (dlassLabels).transpose ()
	m,n = shape (dataMatrix)
	alpha = 0.001
	maxCycles = 500 
	weights = ones((n,1) )
	for k in range (maxCycles) :
		❷矩阵相乘
		h = sigmoid (dataMatrix*weights)
		error = (labelMat - h)
		weights = weights + alpha * dataMatrix.transpose()* error
	return weights

程序清单5-1的代码在开头提供了一个便利函数loadDataset(),它的主要功能是打开文本文件testSet.txt并逐行读取。每行前两个值分别是X1和X2,第三个值是数据对应的类别标签。此外,为了方便计算,该函数还将X0的值设为1.0。接下来的函数是第2节提到的函数sigmoid()。
梯度上升算法的实际工作是在函数gradAscent()里完成的,该函数有两个参数。第一个参数是dataMathIn,它是一个2维NumPy数组,每列分别代表每个不同的特征,每行则代表每个训练样本。我们现在采用的是100个样本的简单数据集,它包含了两个特征X1和X2,再加上第0维特征X0,所以dataMathln里存放的将是100x3的矩阵。在➊处,我们获得输入数据并将它们转换成NumPy矩阵。这是本书首次使用NumPy矩阵,如果你对矩阵数学不太熟悉,那么一些运算可能就会不易理解。比如,NumPy对2维数组和矩阵都提供一些操作支持, 如果混淆了数据类型和对应的操作,执行结果将与预期截然不同。对此,本书附录A给出了对NumPy矩阵的介绍。第二个参数是类别标签,它是一个1x100的行向量。为了便于矩阵运算,需要将该行向量转换为列向量,做法是将原向量转置,再将它赋值给labelMat。 接下来的代码是得到矩阵大小,再设置一些梯度上升算法所需的参数。
变量alpha是向目标移动的步长,maxCycles是迭代次数。在for循环迭代完成后,将返回训练好的回归系数。需要强调的是,在❷处的运算是矩阵运算。变量h不是一个数而是一个列向量,列向量的元素个数等于样本个数,这里是100。对应地,运算dataMatrix * weights代表的不止一次乘积计算,事实上该运算包含了300次的乘积。
最后还需说明一点,你可能对❷中公式的前两行觉得陌生。此处略去了一个简单的数学推导,我把它留给有兴趣的读者。定性地说,这里是在计算真实类别与预测类别的差值,接下来就是按照该差值的方向调整回归系数。
接下来看看实际效果,打开文本编辑器,添加程序清单5-1的代码。
在Python提示符下,敲入下面的代码:

>>> import logRegres
>>> dataArr,labelMat= logRegres.loadDataSet ()
>>> logRegres.gradAscent (dataArr,labelMat)
matrix([[ 4.12414349][ 0.48007329] ,
		[-0.6168482 ]])

2.3 分析数据: 画出决策边界

上面已经解出了一组回归系数,它确定了不同类别数据之间的分隔线。那么怎样画出该分隔线,从而使得优化的过程便于理解呢?下面将解决这个问题,打开1ogRegres.py并添加如下代码。
程序清单5-2画出数据集 和Logistic回归最佳拟合直线的函数

def plotBestFit (wei) :
	import matp1otlib.pyplot as plt
	weights = wei .getA()
	dataMat , labe1Mat=loadDataSet ()
	dataArr = array (dataMat)
	n = shape (dataArr) [0]
	xcord1 = [] ; ycord1 = []
	xcord2 = [] ; ycord2 = []
	for i in range (n) :
		if int (1abelMat[i]}== 1:
			xcord1. append (dataArr[i,1]) ; ycord1 . append (dataArr[i,2])
		else:
			xcord2 . append (dataArr[i,1]) ; ycord2 . append (dataArr{i,2])
	fig = p1t. figure ()
	ax = fig. add_ subplot (111)
	ax. scatter (xcord1, ycord1, s=30, c='red' ,marker='s')
	ax. scatter (xcord2,ycord2, s=30, c= 'green')
	x = arange(-3.03.00.1)
	➊最佳拟合直线
	y = (-weights [0] -weights[1]*x) /weights [2]
	ax.plot(x,y)
	p1t.x1abel('X1'); plt.y1abe1('X2');
	plt . show()

程序清单5-2中的代码是直接用Matplotlib画出来的。唯一要指出的是,➊处设置了sigmoid函数为0。回忆5.2节 ,0是两个分类(类别1和类别0)的分界处。因此,我们设定0= w0x0 + w1x1 + w2x2,然后解出X2和X1的关系式(即分隔线的方程,注意X0= 1)。
运行程序清单5-2的代码,在Python提示符下输入:

>>> from numpy import *
>>> reload (1ogRegres)
<module 'logRegres' from I logRegres . py'>
>>> logRegres . plotBestFit (weights .getA())

输出的结果如图5-4所示。
在这里插入图片描述
这个分类结果相当不错,从图上看只错分了两到四个点。但是,尽管例子简单且数据集很小,这个方法却需要大量的计算( 300次乘法)。因此下一节将对该算法稍作改进,从而使它可以用在真实数据集上。

2.4 训练算法: 随机梯度上升

梯度上升算法在每次更新回归系数时都需要遍历整个数据集,该方法在处理100个左右的数据集时尚可,但如果有数十亿样本和成千上万的特征,那么该方法的计算复杂度就太高了。一种改进方法是一次仅用一个样本点来更新回归系数,该方法称为随机梯度上升算法。由于可以在新样本到来时对分类器进行增量式更新,因而随机梯度上升算法是一个在线学习算法。与“在线学习”相对应,一次处理所有数据被称作是“批处理”。

随机梯度上升算法可以写成如下的伪代码:
	所有回归系数初始化为1
	对数据集中每个样本
		计算该样本的梯度
		使用alpha x gradient更新回归系数值
	返回回归系数值

以下是随机梯度上升算法的实现代码。
程序清单5-3 随机梯度上升算法

def stocGradAscent0 (dataMatrix,classLabels) :
	m,n = shape (dataMatrix)
	alpha = 0.01 .
	weights = 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

可以看到,随机梯度上升算法与梯度上升算法在代码上很相似,但也有一些区别:第一,后者的变量h和误差error都是向量,而前者则全是数值;第二,前者没有矩阵的转换过程,所有变量的数据类型都是NumPy数组。
为了验证该方法的结果,我们将程序清单5-3的代码添加到logRegres.py中,并Python提示符下输入如下命令:

>>> from numpy import*
>>> reload (logRegres)
<module 1 logRegres' from 1 1ogRegres .py'>
>>> dataArr , labelMat=logRegres . loadDataSet () .
>>> weights=logRegres . stocGradAscento (array (dataArr) , labelMat)
>>> logRegres . plotBestFit (weights)

执行完毕后将得到图5-5所示的最佳拟合直线图,该图与图5-4有-些相似之处。可以看到,拟合出来的直线效果还不错,但并不像图5-4那样完美。这里的分类器错分了三分之一的样本。
在这里插入图片描述
直接比较程序清单5-3和程序清单5-1的代码结果是不公平的,后者的结果是在整个数据集上迭代了500次才得到的。一个判断优化算法优劣的可靠方法是看它是否收敛,也就是说参数是否达到了稳定值,是否还会不断地变化?对此,我们在程序清单5-3中随机梯度上升算法上做了些修改,使其在整个数据集上运行200次。最终绘制的三个回归系数的变化情况如图5-6所示。
在这里插入图片描述
图5-6展示了随机梯度上升算法在200次迭代过程中回归系数的变化情况。其中的系数2,也就是图5-5中的X2只经过了50次迭代就达到了稳定值,但系数1和0则需要更多次的迭代。另外值得注意的是,在大的波动停止后,还有一些小的周期性波动。不难理解,产生这种现象的原因是存在一些不能正确分类的样本点(数据集并非线性可分),在每次迭代时会引发系数的剧烈改变。我们期望算法能避免来回波动,从而收敛到某个值。另外,收敛速度也需要加快。
对于图5-6存在的问题,可以通过修改程序清单5-3的随机梯度_上升算法来解决,具体代码如下。
程序清单5-4 改进的随机梯度上升算法

def stocGradAscent1 (dataMatrix, classLabels, numIter=150) :
	m,n = shape (dataMatrix)
	weights = ones (n)
	for j in range (numIter) :     dataIndex = range (m)
		for i in range (m) :
			❹alpha每次迭代时需要调整
			alpha = 4/ (1.0+j+i) +0.01
			randIndex = int (random. uni form (0, len (dataIndex)))
			❷随机选取更新
			h = sigmoid (sum (dataMatr ix [randIndex] *weights) )
			error = classLabels [randIndex] - h
			weights = weights + alpha *error*dataMatrix [randIndex]
			del (dataIndex [randIndex] )
	return weights

程序清单5-4与程序清单5-3类似,但增加了两处代码来进行改进。
第一处改进在➊处。一方面,alpha在每次迭代的时候都会调整,这会缓解图5-6上的数据波动或者高频波动。另外,虽然alpha会随着迭代次数不断减小,但永远不会减小到0,这是因为➊中还存在一个常数项。必须这样做的原因是为了保证在多次迭代之后新数据仍然具有一定的影响。如果要处理的问题是动态变化的,那么可以适当加大上述常数项,来确保新的值获得更大的回归系数。另一点值得注意的是,在降低alpha的函数中, alpha每次减少1/ (j+i) ,其中j是迭代次数,i是样本点的下标”。这样当j<<max (i)时,alpha就不是严格下降的。避免参数的严格下降也常见于模拟退火算法等其他优化算法中。
程序清单5-4第二个改进的地方在@处,这里通过随机选取样本来更新回归系数。这种方法将减少周期性的波动(如图15-6中的波动)。具体实现方法与第3章类似,这种方法每次随机从列表中选出一个值,然后从列表中删掉该值(再进行下一次迭代)。
此外,改进算法还增加了一个迭代次数作为第3个参数。如果该参数没有给定的话,算法将默认迭代150次。如果给定,那么算法将按照新的参数值进行迭代。
与stocGradAscent1 ()类似,图5-7显示了每次迭代时各个回归系数的变化情况。
在这里插入图片描述
比较图5-7和图5-6可以看到两点不同。第一点是, 图5-7中的系数没有像图5-6里那样出现周期性的波动,这归功于stocGradAscent1 ()里的样本随机选择机制;第二点是,图5-7的水平轴比图5-6短了很多,这是由于stocGradAscent1 ()可以收敛得更快。这次我们仅仅对数据集做了20次遍历,而之前的方法是500次。
下面看看在同一个数据集上的分类效果。将程序清单5-4的代码添加到logRegres.py文件中,并在Python提示符下输入:

>>> reload (logRegres )
<module ' logRegres' from ' logRegres .pY'>
>>> dataArr, labelMat= logRegres . loadDataSet ()
>>> weights=logRegres . stocGradAscent1 (array (dataArr) , labe1Mat)
>>> logRegres . plotBestFit (weights)

程序运行之后应该能看到类似图5-8的结果图。该分隔线达到了与GradientAscent()差不多的效果,但是所使用的计算量更少。
在这里插入图片描述
默认迭代次数是150,可以通过stocGradAscent()的第3个参数来对此进行修改,例如:

>>> weights=logRegres.stocGradAscent1 (array(dataArr), labelMat,500)

目前,我们已经学习了几个优化算法,但还有很多优化算法值得探讨,所幸这方面已有大量的文献可供参考。另外再说明一下, 针对给定的数据集, 读者完全可以对算法的各种参数进行调整,从而达到更好的效果。
迄今为止我们分析了回归系数的变化情况,但还没有达到本章的最终目标,即完成具体的分类任务。下一节将使用随机梯度上升算法来解决病马的生死预测问题。

3 示例: 从疝气病症预测病马的死亡率

本节将使用Logistic回归来预测患有疝病的马的存活问题。这里的数据包含368个样本和28个特征。我并非育马专家,从一些文献中了解到,疝病是描述马胃肠痛的术语。然而,这种病不一定源自马的胃肠问题,其他问题也可能引发马疝病。该数据集中包含了医院检测马疝病的一些指标,有的指标比较主观,有的指标难以测量,例如马的疼痛级别。

示例:使用Logistic回归估计马疝病的死亡率场
(1)收集数据:给定数据文件。
(2)准备数据:用Python解析文本文件并填充缺失值。
(3)分析数据:可视化并观察数据。
(4)训练算法:使用优化算法,找到最佳的系数。
(5)测试算法:为了量化回归的效果,需要观察错误率。根据错误率决定是否回退到训练 阶段,通过改变迭代的次数和步长等参数来得到更好的回归系数。
(6)使用算法:实现一个简单的命令行程序来收集马的症状并输出预测结果并非难事,这可以做为留给读者的一道习题。

另外需要说明的是,除了部分指标主观和难以测量外,该数据还存在一个问题,数据集中有30%的值是缺失的。下面将首先介绍如何处理数据集中的数据缺失问题,然后再利用Logistic回归和随机梯度上升算法来预测病马的生死。

3.1 准备数据:处埋数据中的缺失值

数据中的缺失值是个非常棘手的问题,有很多文献都致力于解决这个问题。那么,数据缺失究竟带来了什么问题?假设有100个样本和20个特征,这些数据都是机器收集回来的。若机器上的某个传感器损坏导致一个特征无效时该怎么办?此时是否要扔掉整个数据?这种情况下,另外19个特征怎么办?它们是否还可用?答案是肯定的。因为有时候数据相当昂贵,扔掉和重新获取都是不可取的,所以必须采用一些方法来解决这个问题。
下面给出了一些可选的做法:

  • 使用可用特征的均值来填补缺失值;
  • 使用特殊值来填补缺失值,如-1;
  • 忽略有缺失值的样本;
  • 使用相似样本的均值添补缺失值;
  • 使用另外的机器学习算法预测缺失值。

现在,我们对下一节要用的数据集进行预处理,使其可以顺利地使用分类算法。在预处理阶段需要做两件事:第一, 所有的缺失值必须用一个实数值来替换,因为我们使用的NumPy数据类型不允许包含缺失值。这里选择实数0来替换所有缺失值,恰好能适用于Logstic回归。这样做的直觉在于,我们需要的是一个在更新时不会影响系数的值。回归系数的更新公式如下:

weights = weights + alpha * error *dataMatrix [randIndex]

如果dataMatrix的某特征对应值为0,那么该特征的系数将不做更新,即:

weights = weights 

另外,由于sigmoid(0)=0.5, 即它对结果的预测不具有任何倾向性,因此上述做法也不会对误差项造成任何影响。基于上述原因,将缺失值用代替既可以保留现有数据,也不需要对优化算法进行修改。此外,该数据集中的特征取值一般不为0,因此在某种意义上说它也满足“特殊值”这个要求。
预处理中做的第二件事是,如果在测试数据集中发现了一条数据的类别标签已经缺失,那么我们的简单做法是将该条数据丢弃。这是因为类别标签与特征不同,很难确定采用某个合适的值来替换。采用Logistic回归进行分类时这种做法是合理的,而如果采用类似kNN的方法就可能不太可行。
原始的数据集经过预处理之后保存成两个文件: horseColicTest.txt和horseColicTraining.txt。如果想对原始数据和预处理后的数据做个比较,可以在http://archive.ics.uci.edu/ml/datasets/Horse+Colic浏览这些数据。
现在我们有一个“干净”可用的数据集和一个不错的优化算法,下面将把这些部分融合在一起训练出一个分类器,然后利用该分类器来预测病马的生死问题。

3.2 测试算法: 用Logistic回归进行分类

本章前面几节介绍了优化算法,但目前为止还没有在分类上做任何实际尝试。使用Logistic回归方法进行分类并不需要做很多工作,所需做的只是把测试集上每个特征向量乘以最优化方法得来的回归系数,再将该乘积结果求和,最后输入到Sigmoid函数中即可。 如果对应的Sigmoid值大于0.5就预测类别标签为1,否则为0。
下面看看实际运行效果,打开文本编辑器并将下列代码添加到logRegres.py文件中。
程序清单5-5 Logistic回归分类函数

def classifyvector (inX,weights):
	prob = sigmoid (sum (inx*weights) )
	if prob > 0.5: return 1. 0
	else: return 0.0
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 (21) :
		1 ineArr . append (float (currLine[i]))
		trainingSet . append (lineArr)
		trainingLabels . append (float (currLine [21]) )
		trainWeights口stocGradAscent1 (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 (21) :
		lineArr . append (float (currLine[i]))
		if int (classifyVector (array (lineArr),trainWeights)) !=
			int (currLine [21]) :
			errorCount += 1
			errorRate = (f1oat (errorCount ) / numTestVec)
			print "the error rate of this test is: f"号errorRate
		return errorRate
	def multiTest() :
		numTests = 10; errorSum=0. 0
		for k in range (numTests) :
			errorSum += colicTest ()
		print "after d iterations the average error rate is:
	f"告(numTests, errorSum/ float (numTests) )

程序清单5-5的第一个函数是classi fyvector(),它以回归系数和特征向量作为输入来计算对应的Sigmoid值。 如果Sigmoid值大于0.5函数返回1,否则返回0。
接下来的函数是colicTest(),是用于打开测试集和训练集,并对数据进行格式化处理的函数。该函数首先导入训练集,同前面一样,数据的最后一列仍然是类别标签。数据最初有三个类别标签,分别代表马的三种情况:“仍存活”、 “已经死亡”和“已经安乐死”。这里为了方便,将“已经死亡”和“已经安乐死”合并成“未能存活”这个标签。数据导入之后,便可以使用函数stocGradAscent1()来计算回归系数向量。这里可以自由设定迭代的次数,例如在训练集上使用500次迭代,实验结果表明这比默认迭代150次的效果更好。在系数计算完成之后,导入测试集并计算分类错误率。整体看来,colicTest()具有完全独立的功能,多次运行得到的结果可能稍有不同,这是因为其中有随机的成分在里面。如果在stocGradAscent1()函数中回归系数已经完全收敛,那么结果才将是确定的。
最后一个函数是multiTest(),其功能是调用函数colicTest () 10次并求结果的平均值。
下面看一下实际的运行效果,在Python提示符下输入:

>>>' reload (1ogRegres)
<module ' logRegres' from ' logRegres . PY'>
>>> logRegres . multiTest ()
the error rate of this test is; 0. 358209
the error rate of this test is: 0. 432836
the error rate of this test is: 0 .373134
the error rate of this test is: 0. 298507
the error rate of this test is: 0313433
after 10 i terations the average error rate is: 0.353731

从上面的结果可以看到,10次迭代之后的平均错误率为35%。事实上,这个结果并不差,因为有30%的数据缺失。当然,如果调整colicTest ()中的迭代次数和stochGradAscent1()中的步长,平均错误率可以降到20%左右。

4 本章小结

Logitic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法来完成。在最优化算法中,最常用的就是梯度上升算法,而梯度上升算法又可以简化为随机梯度上升算法。
随机梯度上升算法与梯度上升算法的效果相当,但占用更少的计算资源。此外,随机梯度上升是一个在线算法,它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算。
机器学习的一个重要问题就是如何处理缺失数据。这个问题没有标准答案,取决于实际应用中的需求。现有一些解决方案,每种方案都各有优缺点。

【完整代码】

logRegres.py

import numpy as np
import matplotlib.pyplot as plt

# ------使用 Logistic 回归在简单数据集上的分类-----------

def load_data_set():
    """
    加载数据集
    :return:返回两个数组,普通数组
        data_arr -- 原始数据的特征
        label_arr -- 原始数据的标签,也就是每条样本对应的类别
    """
    data_arr = []
    label_arr = []
    f = open('TestSet.txt', 'r')

    for line in f.readlines():
        line_arr = line.strip().split()
        # 为了方便计算,我们将 X0 的值设为 1.0 ,也就是在每一行的开头添加一个 1.0 作为 X0
        data_arr.append([1.0, np.float(line_arr[0]), np.float(line_arr[1])])
        label_arr.append(int(line_arr[2]))
    return data_arr, label_arr

def sigmoid(x):
    # 这里其实非常有必要解释一下,会出现的错误 RuntimeWarning: overflow encountered in exp
    # 这个错误在学习阶段虽然可以忽略,但是我们至少应该知道为什么
    # 这里是因为我们输入的有的 x 实在是太小了,比如 -6000之类的,那么计算一个数字 np.exp(6000)这个结果太大了,没法表示,所以就溢出了
    # 如果是计算 np.exp(-6000),这样虽然也会溢出,但是这是下溢,就是表示成零
    # 去网上搜了很多方法,比如 使用bigfloat这个库(我竟然没有安装成功,就不尝试了,反正应该是有用的
    return 1.0 / (1 + np.exp(-x))

def grad_ascent(data_arr, class_labels):
    """
    梯度上升法,其实就是因为使用了极大似然估计
    :param data_arr: 传入的就是一个普通的数组,当然你传入一个二维的ndarray也行
    :param class_labels: class_labels 是类别标签,它是一个 1*100 的行向量。
                    为了便于矩阵计算,需要将该行向量转换为列向量,做法是将原向量转置,再将它赋值给label_mat
    :return:
    """
    # 注意一下,把原来 data_mat_in 改成data_arr,因为传进来的是一个数组,用这个比较不容易搞混
    # turn the data_arr to numpy matrix
    data_mat = np.mat(data_arr)
    # 变成矩阵之后进行转置
    label_mat = np.mat(class_labels).transpose()
    # m->数据量,样本数 n->特征数
    m, n = np.shape(data_mat)
    # 学习率,learning rate
    alpha = 0.001
    # 最大迭代次数,假装迭代这么多次就能收敛2333
    max_cycles = 500
    # 生成一个长度和特征数相同的矩阵,此处n为3 -> [[1],[1],[1]]
    # weights 代表回归系数, 此处的 ones((n,1)) 创建一个长度和特征数相同的矩阵,其中的数全部都是 1
    weights = np.ones((n, 1))
    for k in range(max_cycles):
        # 这里是点乘  m x 3 dot 3 x 1
        h = sigmoid(data_mat * weights)
        error = label_mat - h
        # 这里比较建议看一下推导,为什么这么做可以,这里已经是求导之后的
        weights = weights + alpha * data_mat.transpose() * error
    return weights

def plot_best_fit(weights):
    """
    可视化
    :param weights:
    :return:
    """
    import matplotlib.pyplot as plt
    data_mat, label_mat = load_data_set()
    data_arr = np.array(data_mat)
    n = np.shape(data_mat)[0]
    x_cord1 = []
    y_cord1 = []
    x_cord2 = []
    y_cord2 = []

    for i in range(n):
        if int(label_mat[i]) == 1:
            x_cord1.append(data_arr[i, 1])
            y_cord1.append(data_arr[i, 2])
        else:
            x_cord2.append(data_arr[i, 1])
            y_cord2.append(data_arr[i, 2])

    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(x_cord1, y_cord1, s=30, color='k', marker='^')
    ax.scatter(x_cord2, y_cord2, s=30, color='red', marker='s')
    x = np.arange(-3.0, 3.0, 0.1)
    y = (-weights[0] - weights[1] * x) / weights[2]
    """
    dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
    w0*x0+w1*x1+w2*x2=f(x)
    x0最开始就设置为1, x2就是我们画图的y值,而f(x)被我们磨合误差给算到w0,w1,w2身上去了
    所以:  w0+w1*x+w2*y=0 => y = (-w0-w1*x)/w2   
    """
    ax.plot(x, y)
    plt.xlabel('x1')
    plt.ylabel('y1')
    plt.show()

def stoc_grad_ascent0(data_mat, class_labels):
    """
    随机梯度上升,只使用一个样本点来更新回归系数
    :param data_mat: 输入数据的数据特征(除去最后一列),ndarray
    :param class_labels: 输入数据的类别标签(最后一列数据)
    :return: 得到的最佳回归系数
    """
    m, n = np.shape(data_mat)
    alpha = 0.01
    weights = np.ones(n)

    for i in range(m):
        # sum(data_mat[i]*weights)为了求 f(x)的值, f(x)=a1*x1+b2*x2+..+nn*xn,
        # 此处求出的 h 是一个具体的数值,而不是一个矩阵
        h = sigmoid(sum(data_mat[i] * weights))
        error = class_labels[i] - h
        # 还是和上面一样,这个先去看推导,再写程序
        weights = weights + alpha * error * data_mat[i]
    return weights

def stoc_grad_ascent1(data_mat, class_labels, num_iter=150):
    """
    改进版的随机梯度上升,使用随机的一个样本来更新回归系数
    :param data_mat: 输入数据的数据特征(除去最后一列),ndarray
    :param class_labels: 输入数据的类别标签(最后一列数据
    :param num_iter: 迭代次数
    :return: 得到的最佳回归系数
    """
    m, n = np.shape(data_mat)
    weights = np.ones(n)
    for j in range(num_iter):
        # 这里必须要用list,不然后面的del没法使用
        data_index = list(range(m))
        for i in range(m):
            # i和j的不断增大,导致alpha的值不断减少,但是不为0
            alpha = 4 / (1.0 + j + i) + 0.01
            # 随机产生一个 0~len()之间的一个值
            # random.uniform(x, y) 方法将随机生成下一个实数,它在[x,y]范围内,x是这个范围内的最小值,y是这个范围内的最大值。
            rand_index = int(np.random.uniform(0, len(data_index)))
            h = sigmoid(np.sum(data_mat[data_index[rand_index]] * weights))
            error = class_labels[data_index[rand_index]] - h
            weights = weights + alpha * error * data_mat[data_index[rand_index]]
            del(data_index[rand_index])

    return weights

def test():
    """
    这个函数只要就是对上面的几个算法的测试,这样就不用每次都在power shell 里面操作,不然麻烦死了
    :return:
    """
    data_arr, class_labels = load_data_set()
    # 注意,这里的grad_ascent返回的是一个 matrix, 所以要使用getA方法变成ndarray类型
    # weights = grad_ascent(data_arr, class_labels).getA()
    # weights = stoc_grad_ascent0(np.array(data_arr), class_labels)
    weights = stoc_grad_ascent1(np.array(data_arr), class_labels)
    plot_best_fit(weights)

# -------从疝气病症预测病马的死亡率------
def classify_vector(in_x, weights):
    """
    最终的分类函数,根据回归系数和特征向量来计算 Sigmoid 的值,大于0.5函数返回1,否则返回0
    :param in_x: 特征向量,features
    :param weights: 根据梯度下降/随机梯度下降 计算得到的回归系数
    :return:
    """
    # print(np.sum(in_x * weights))
    prob = sigmoid(np.sum(in_x * weights))
    if prob > 0.5:
        return 1.0
    return 0.0

def colic_test():
    """
    打开测试集和训练集,并对数据进行格式化处理,其实最主要的的部分,比如缺失值的补充(真的需要学会的),人家已经做了
    :return:
    """
    f_train = open('data/5.Logistic/HorseColicTraining.txt', 'r')
    f_test = open('data/5.Logistic/HorseColicTest.txt', 'r')
    training_set = []
    training_labels = []
    # 解析训练数据集中的数据特征和Labels
    # trainingSet 中存储训练数据集的特征,trainingLabels 存储训练数据集的样本对应的分类标签
    for line in f_train.readlines():
        curr_line = line.strip().split('\t')
        if len(curr_line) == 1:
            continue    # 这里如果就一个空的元素,则跳过本次循环
        line_arr = [float(curr_line[i]) for i in range(21)]
        training_set.append(line_arr)
        training_labels.append(float(curr_line[21]))
    # 使用 改进后的 随机梯度下降算法 求得在此数据集上的最佳回归系数 trainWeights
    train_weights = stoc_grad_ascent1(np.array(training_set), training_labels, 500)
    error_count = 0
    num_test_vec = 0.0
    # 读取 测试数据集进行测试,计算分类错误的样本条数和最终的错误率
    for line in f_test.readlines():
        num_test_vec += 1
        curr_line = line.strip().split('\t')
        if len(curr_line) == 1:
            continue    # 这里如果就一个空的元素,则跳过本次循环
        line_arr = [float(curr_line[i]) for i in range(21)]
        if int(classify_vector(np.array(line_arr), train_weights)) != int(curr_line[21]):
            error_count += 1
    error_rate = error_count / num_test_vec
    print('the error rate is {}'.format(error_rate))
    return error_rate

def multi_test():
    """
    调用 colicTest() 10次并求结果的平均值
    :return: nothing
    """
    num_tests = 10
    error_sum = 0
    for k in range(num_tests):
        error_sum += colic_test()
    print('after {} iteration the average error rate is {}'.format(num_tests, error_sum / num_tests))

if __name__ == '__main__':
    # 请依次运行下面三个函数做代码测试
    test()
    # colic_test()
    # multi_test()

在这里插入图片描述

【数据集】

TestSet.txt

-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

HorseColicTraining.txt

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

HorseColicTest.txt

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

【参考资料】

《机器学习实战》 作者: Peter Harrington;出版社: 人民邮电出版社;原作名: Machine Learning in Action;译者: 李锐 / 李鹏 / 曲亚东 / 王斌

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南有芙蕖

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值