• 机器学习实战(一)kNN


     $k$-近邻算法(kNN)的工作原理:存在一个训练样本集,样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对于关系。输入没有标签的新数据后,将新数据的每一个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前 $k$ 个最相似的数据,这就是$k$-近邻算法中$k$的出处,通常$k$是不大于20的整数。最后,选择$k$个最相似的数据中出现次数最多的分类,作为新数据的分类。

    1.  Putting the kNN classification algorithm into action

    For every point in our dataset:
        calculate the distance between inX and the current point
        sort the distances in increasing order
        take k items with lowest distances to inX
        find the majority class among these items
        return the majority class as our prediction for the class of inX

    一个简单的例子:kNN.py

    # coding=utf-8
    from numpy import *
    import operator
    
    def createDataSet():
        group = array([[1.0,1.1], [1.0,1.0], [0,0], [0,0.1]])
        labels = ['A', 'A', 'B', 'B']
        return group, labels
    
    def classify0(inX, dataSet, labels, k):
        dataSetSize = dataSet.shape[0]
        diffMat = tile(inX, (dataSetSize,1)) - dataSet
        sqDiffMat = diffMat**2
        sqDistances = sqDiffMat.sum(axis=1)  # 按行求和
        distances = sqDistances**0.5
        sortedDistIndicies = distances.argsort() # 将索引按照距离从小到大顺序排列
        classCount={}  # 以dict形式存储
        for i in range(k):
            voteIlabel = labels[sortedDistIndicies[i]]  # 第i最靠近的样本的标签
            # dict是按照key-value的形式构成的,classCount.get(voteIlabel,0)是取出classCount中key是voteIlabel的value,如果key不存在,则定义返回0
            classCount[voteIlabel] = classCount.get(voteIlabel,0) +1
        # classCount.items()以(key, value) tuple 形式返回list
        sortedClassCount = sorted(classCount.items(),
                                  key=operator.itemgetter(1), reverse=True)
        return sortedClassCount[0][0]
    
    group, labels = createDataSet()
    label = classify0([0.2,0.2], group, labels, 3)
    print label

    createDataSet() 函数为我们准备了四个简单的训练数据。

    classify0() 函数是一个简单的$k$-近邻算法实现,函数有四个参数:待预测样本的输入特征inX,训练样本集特征集合dataSet,训练样本集标签向量labels,最近邻数目$k$

    2. Example: improving matches from a dating site with kNN

    Example: using kNN on results from a dating site
    1. Collect: Text file provided.
    2. Prepare: Parse a text file in Python.
    3. Analyze: Use Matplotlib to make 2D plots of our data.
    4. Train: Doesn’t apply to the kNN algorithm.
    5. Test: Write a function to use some portion of the data Hellen gave us as test examples. The test examples are classified against the non-test examples. If the predicted class doesn’t match the real class, we’ll count that as an error.
    6. Use: Build a simple command-line program Hellen can use to predict whether she’ll like someone based on a few inputs.

    2.1 Prepare: parsing data from a text file

    所有训练数据存放在文本文件datingTestSet.txt中,样本容量大小为1000。样本主要包含以下三种特征:

    ■ Number of frequent flyer miles earned per year
    ■ Percentage of time spent playing video games
    ■ Liters of ice cream consumed per week

    设计分类器之前,我们首先要把原始数据读入到python中。在kNN.py中创建名为file2matrix的函数,以此来处理原始数据。该函数的输入为文件名字符串,输出为训练样本矩阵和类标签向量。

    40920    8.326976    0.953952    largeDoses
    14488    7.153469    1.673904    smallDoses
    26052    1.441871    0.805124    didntLike
    75136    13.147394    0.428964    didntLike
    38344    1.669788    0.134296    didntLike
    72993    10.141740    1.032955    didntLike
    35948    6.830792    1.213192    largeDoses
    42666    13.276369    0.543880    largeDoses
    67497    8.631577    0.749278    didntLike
    35483    12.273169    1.508053    largeDoses
    50242    3.723498    0.831917    didntLike
    63275    8.385879    1.669485    didntLike
    5569    4.875435    0.728658    smallDoses
    51052    4.680098    0.625224    didntLike
    77372    15.299570    0.331351    didntLike
    43673    1.889461    0.191283    didntLike
    61364    7.516754    1.269164    didntLike
    69673    14.239195    0.261333    didntLike
    15669    0.000000    1.250185    smallDoses
    28488    10.528555    1.304844    largeDoses
    6487    3.540265    0.822483    smallDoses
    37708    2.991551    0.833920    didntLike
    22620    5.297865    0.638306    smallDoses
    28782    6.593803    0.187108    largeDoses
    19739    2.816760    1.686209    smallDoses
    36788    12.458258    0.649617    largeDoses
    5741    0.000000    1.656418    smallDoses
    28567    9.968648    0.731232    largeDoses
    6808    1.364838    0.640103    smallDoses
    41611    0.230453    1.151996    didntLike
    36661    11.865402    0.882810    largeDoses
    43605    0.120460    1.352013    didntLike
    15360    8.545204    1.340429    largeDoses
    63796    5.856649    0.160006    didntLike
    10743    9.665618    0.778626    smallDoses
    70808    9.778763    1.084103    didntLike
    72011    4.932976    0.632026    didntLike
    5914    2.216246    0.587095    smallDoses
    14851    14.305636    0.632317    largeDoses
    33553    12.591889    0.686581    largeDoses
    44952    3.424649    1.004504    didntLike
    17934    0.000000    0.147573    smallDoses
    27738    8.533823    0.205324    largeDoses
    29290    9.829528    0.238620    largeDoses
    42330    11.492186    0.263499    largeDoses
    36429    3.570968    0.832254    didntLike
    39623    1.771228    0.207612    didntLike
    32404    3.513921    0.991854    didntLike
    27268    4.398172    0.975024    didntLike
    5477    4.276823    1.174874    smallDoses
    14254    5.946014    1.614244    smallDoses
    68613    13.798970    0.724375    didntLike
    41539    10.393591    1.663724    largeDoses
    7917    3.007577    0.297302    smallDoses
    21331    1.031938    0.486174    smallDoses
    8338    4.751212    0.064693    smallDoses
    5176    3.692269    1.655113    smallDoses
    18983    10.448091    0.267652    largeDoses
    68837    10.585786    0.329557    didntLike
    13438    1.604501    0.069064    smallDoses
    48849    3.679497    0.961466    didntLike
    12285    3.795146    0.696694    smallDoses
    7826    2.531885    1.659173    smallDoses
    5565    9.733340    0.977746    smallDoses
    10346    6.093067    1.413798    smallDoses
    1823    7.712960    1.054927    smallDoses
    9744    11.470364    0.760461    largeDoses
    16857    2.886529    0.934416    smallDoses
    39336    10.054373    1.138351    largeDoses
    65230    9.972470    0.881876    didntLike
    2463    2.335785    1.366145    smallDoses
    27353    11.375155    1.528626    largeDoses
    16191    0.000000    0.605619    smallDoses
    12258    4.126787    0.357501    smallDoses
    42377    6.319522    1.058602    didntLike
    25607    8.680527    0.086955    largeDoses
    77450    14.856391    1.129823    didntLike
    58732    2.454285    0.222380    didntLike
    46426    7.292202    0.548607    largeDoses
    32688    8.745137    0.857348    largeDoses
    64890    8.579001    0.683048    didntLike
    8554    2.507302    0.869177    smallDoses
    28861    11.415476    1.505466    largeDoses
    42050    4.838540    1.680892    didntLike
    32193    10.339507    0.583646    largeDoses
    64895    6.573742    1.151433    didntLike
    2355    6.539397    0.462065    smallDoses
    0    2.209159    0.723567    smallDoses
    70406    11.196378    0.836326    didntLike
    57399    4.229595    0.128253    didntLike
    41732    9.505944    0.005273    largeDoses
    11429    8.652725    1.348934    largeDoses
    75270    17.101108    0.490712    didntLike
    5459    7.871839    0.717662    smallDoses
    73520    8.262131    1.361646    didntLike
    40279    9.015635    1.658555    largeDoses
    21540    9.215351    0.806762    largeDoses
    17694    6.375007    0.033678    smallDoses
    22329    2.262014    1.022169    didntLike
    46570    5.677110    0.709469    didntLike
    42403    11.293017    0.207976    largeDoses
    33654    6.590043    1.353117    didntLike
    9171    4.711960    0.194167    smallDoses
    28122    8.768099    1.108041    largeDoses
    34095    11.502519    0.545097    largeDoses
    1774    4.682812    0.578112    smallDoses
    40131    12.446578    0.300754    largeDoses
    13994    12.908384    1.657722    largeDoses
    77064    12.601108    0.974527    didntLike
    11210    3.929456    0.025466    smallDoses
    6122    9.751503    1.182050    largeDoses
    15341    3.043767    0.888168    smallDoses
    44373    4.391522    0.807100    didntLike
    28454    11.695276    0.679015    largeDoses
    63771    7.879742    0.154263    didntLike
    9217    5.613163    0.933632    smallDoses
    69076    9.140172    0.851300    didntLike
    24489    4.258644    0.206892    didntLike
    16871    6.799831    1.221171    smallDoses
    39776    8.752758    0.484418    largeDoses
    5901    1.123033    1.180352    smallDoses
    40987    10.833248    1.585426    largeDoses
    7479    3.051618    0.026781    smallDoses
    38768    5.308409    0.030683    largeDoses
    4933    1.841792    0.028099    smallDoses
    32311    2.261978    1.605603    didntLike
    26501    11.573696    1.061347    largeDoses
    37433    8.038764    1.083910    largeDoses
    23503    10.734007    0.103715    largeDoses
    68607    9.661909    0.350772    didntLike
    27742    9.005850    0.548737    largeDoses
    11303    0.000000    0.539131    smallDoses
    0    5.757140    1.062373    smallDoses
    32729    9.164656    1.624565    largeDoses
    24619    1.318340    1.436243    didntLike
    42414    14.075597    0.695934    largeDoses
    20210    10.107550    1.308398    largeDoses
    33225    7.960293    1.219760    largeDoses
    54483    6.317292    0.018209    didntLike
    18475    12.664194    0.595653    largeDoses
    33926    2.906644    0.581657    didntLike
    43865    2.388241    0.913938    didntLike
    26547    6.024471    0.486215    largeDoses
    44404    7.226764    1.255329    largeDoses
    16674    4.183997    1.275290    smallDoses
    8123    11.850211    1.096981    largeDoses
    42747    11.661797    1.167935    largeDoses
    56054    3.574967    0.494666    didntLike
    10933    0.000000    0.107475    smallDoses
    18121    7.937657    0.904799    largeDoses
    11272    3.365027    1.014085    smallDoses
    16297    0.000000    0.367491    smallDoses
    28168    13.860672    1.293270    largeDoses
    40963    10.306714    1.211594    largeDoses
    31685    7.228002    0.670670    largeDoses
    55164    4.508740    1.036192    didntLike
    17595    0.366328    0.163652    smallDoses
    1862    3.299444    0.575152    smallDoses
    57087    0.573287    0.607915    didntLike
    63082    9.183738    0.012280    didntLike
    51213    7.842646    1.060636    largeDoses
    6487    4.750964    0.558240    smallDoses
    4805    11.438702    1.556334    largeDoses
    30302    8.243063    1.122768    largeDoses
    68680    7.949017    0.271865    didntLike
    17591    7.875477    0.227085    smallDoses
    74391    9.569087    0.364856    didntLike
    37217    7.750103    0.869094    largeDoses
    42814    0.000000    1.515293    didntLike
    14738    3.396030    0.633977    smallDoses
    19896    11.916091    0.025294    largeDoses
    14673    0.460758    0.689586    smallDoses
    32011    13.087566    0.476002    largeDoses
    58736    4.589016    1.672600    didntLike
    54744    8.397217    1.534103    didntLike
    29482    5.562772    1.689388    didntLike
    27698    10.905159    0.619091    largeDoses
    11443    1.311441    1.169887    smallDoses
    56117    10.647170    0.980141    largeDoses
    39514    0.000000    0.481918    didntLike
    26627    8.503025    0.830861    largeDoses
    16525    0.436880    1.395314    smallDoses
    24368    6.127867    1.102179    didntLike
    22160    12.112492    0.359680    largeDoses
    6030    1.264968    1.141582    smallDoses
    6468    6.067568    1.327047    smallDoses
    22945    8.010964    1.681648    largeDoses
    18520    3.791084    0.304072    smallDoses
    34914    11.773195    1.262621    largeDoses
    6121    8.339588    1.443357    smallDoses
    38063    2.563092    1.464013    didntLike
    23410    5.954216    0.953782    didntLike
    35073    9.288374    0.767318    largeDoses
    52914    3.976796    1.043109    didntLike
    16801    8.585227    1.455708    largeDoses
    9533    1.271946    0.796506    smallDoses
    16721    0.000000    0.242778    smallDoses
    5832    0.000000    0.089749    smallDoses
    44591    11.521298    0.300860    largeDoses
    10143    1.139447    0.415373    smallDoses
    21609    5.699090    1.391892    smallDoses
    23817    2.449378    1.322560    didntLike
    15640    0.000000    1.228380    smallDoses
    8847    3.168365    0.053993    smallDoses
    50939    10.428610    1.126257    largeDoses
    28521    2.943070    1.446816    didntLike
    32901    10.441348    0.975283    largeDoses
    42850    12.478764    1.628726    largeDoses
    13499    5.856902    0.363883    smallDoses
    40345    2.476420    0.096075    didntLike
    43547    1.826637    0.811457    didntLike
    70758    4.324451    0.328235    didntLike
    19780    1.376085    1.178359    smallDoses
    44484    5.342462    0.394527    didntLike
    54462    11.835521    0.693301    largeDoses
    20085    12.423687    1.424264    largeDoses
    42291    12.161273    0.071131    largeDoses
    47550    8.148360    1.649194    largeDoses
    11938    1.531067    1.549756    smallDoses
    40699    3.200912    0.309679    didntLike
    70908    8.862691    0.530506    didntLike
    73989    6.370551    0.369350    didntLike
    11872    2.468841    0.145060    smallDoses
    48463    11.054212    0.141508    largeDoses
    15987    2.037080    0.715243    smallDoses
    70036    13.364030    0.549972    didntLike
    32967    10.249135    0.192735    largeDoses
    63249    10.464252    1.669767    didntLike
    42795    9.424574    0.013725    largeDoses
    14459    4.458902    0.268444    smallDoses
    19973    0.000000    0.575976    smallDoses
    5494    9.686082    1.029808    largeDoses
    67902    13.649402    1.052618    didntLike
    25621    13.181148    0.273014    largeDoses
    27545    3.877472    0.401600    didntLike
    58656    1.413952    0.451380    didntLike
    7327    4.248986    1.430249    smallDoses
    64555    8.779183    0.845947    didntLike
    8998    4.156252    0.097109    smallDoses
    11752    5.580018    0.158401    smallDoses
    76319    15.040440    1.366898    didntLike
    27665    12.793870    1.307323    largeDoses
    67417    3.254877    0.669546    didntLike
    21808    10.725607    0.588588    largeDoses
    15326    8.256473    0.765891    smallDoses
    20057    8.033892    1.618562    largeDoses
    79341    10.702532    0.204792    didntLike
    15636    5.062996    1.132555    smallDoses
    35602    10.772286    0.668721    largeDoses
    28544    1.892354    0.837028    didntLike
    57663    1.019966    0.372320    didntLike
    78727    15.546043    0.729742    didntLike
    68255    11.638205    0.409125    didntLike
    14964    3.427886    0.975616    smallDoses
    21835    11.246174    1.475586    largeDoses
    7487    0.000000    0.645045    smallDoses
    8700    0.000000    1.424017    smallDoses
    26226    8.242553    0.279069    largeDoses
    65899    8.700060    0.101807    didntLike
    6543    0.812344    0.260334    smallDoses
    46556    2.448235    1.176829    didntLike
    71038    13.230078    0.616147    didntLike
    47657    0.236133    0.340840    didntLike
    19600    11.155826    0.335131    largeDoses
    37422    11.029636    0.505769    largeDoses
    1363    2.901181    1.646633    smallDoses
    26535    3.924594    1.143120    didntLike
    47707    2.524806    1.292848    didntLike
    38055    3.527474    1.449158    didntLike
    6286    3.384281    0.889268    smallDoses
    10747    0.000000    1.107592    smallDoses
    44883    11.898890    0.406441    largeDoses
    56823    3.529892    1.375844    didntLike
    68086    11.442677    0.696919    didntLike
    70242    10.308145    0.422722    didntLike
    11409    8.540529    0.727373    smallDoses
    67671    7.156949    1.691682    didntLike
    61238    0.720675    0.847574    didntLike
    17774    0.229405    1.038603    smallDoses
    53376    3.399331    0.077501    didntLike
    30930    6.157239    0.580133    didntLike
    28987    1.239698    0.719989    didntLike
    13655    6.036854    0.016548    smallDoses
    7227    5.258665    0.933722    smallDoses
    40409    12.393001    1.571281    largeDoses
    13605    9.627613    0.935842    smallDoses
    26400    11.130453    0.597610    largeDoses
    13491    8.842595    0.349768    largeDoses
    30232    10.690010    1.456595    largeDoses
    43253    5.714718    1.674780    largeDoses
    55536    3.052505    1.335804    didntLike
    8807    0.000000    0.059025    smallDoses
    25783    9.945307    1.287952    largeDoses
    22812    2.719723    1.142148    didntLike
    77826    11.154055    1.608486    didntLike
    38172    2.687918    0.660836    didntLike
    31676    10.037847    0.962245    largeDoses
    74038    12.404762    1.112080    didntLike
    44738    10.237305    0.633422    largeDoses
    17410    4.745392    0.662520    smallDoses
    5688    4.639461    1.569431    smallDoses
    36642    3.149310    0.639669    didntLike
    29956    13.406875    1.639194    largeDoses
    60350    6.068668    0.881241    didntLike
    23758    9.477022    0.899002    largeDoses
    25780    3.897620    0.560201    smallDoses
    11342    5.463615    1.203677    smallDoses
    36109    3.369267    1.575043    didntLike
    14292    5.234562    0.825954    smallDoses
    11160    0.000000    0.722170    smallDoses
    23762    12.979069    0.504068    largeDoses
    39567    5.376564    0.557476    didntLike
    25647    13.527910    1.586732    largeDoses
    14814    2.196889    0.784587    smallDoses
    73590    10.691748    0.007509    didntLike
    35187    1.659242    0.447066    didntLike
    49459    8.369667    0.656697    largeDoses
    31657    13.157197    0.143248    largeDoses
    6259    8.199667    0.908508    smallDoses
    33101    4.441669    0.439381    largeDoses
    27107    9.846492    0.644523    largeDoses
    17824    0.019540    0.977949    smallDoses
    43536    8.253774    0.748700    largeDoses
    67705    6.038620    1.509646    didntLike
    35283    6.091587    1.694641    largeDoses
    71308    8.986820    1.225165    didntLike
    31054    11.508473    1.624296    largeDoses
    52387    8.807734    0.713922    largeDoses
    40328    0.000000    0.816676    didntLike
    34844    8.889202    1.665414    largeDoses
    11607    3.178117    0.542752    smallDoses
    64306    7.013795    0.139909    didntLike
    32721    9.605014    0.065254    largeDoses
    33170    1.230540    1.331674    didntLike
    37192    10.412811    0.890803    largeDoses
    13089    0.000000    0.567161    smallDoses
    66491    9.699991    0.122011    didntLike
    15941    0.000000    0.061191    smallDoses
    4272    4.455293    0.272135    smallDoses
    48812    3.020977    1.502803    didntLike
    28818    8.099278    0.216317    largeDoses
    35394    1.157764    1.603217    didntLike
    71791    10.105396    0.121067    didntLike
    40668    11.230148    0.408603    largeDoses
    39580    9.070058    0.011379    largeDoses
    11786    0.566460    0.478837    smallDoses
    19251    0.000000    0.487300    smallDoses
    56594    8.956369    1.193484    largeDoses
    54495    1.523057    0.620528    didntLike
    11844    2.749006    0.169855    smallDoses
    45465    9.235393    0.188350    largeDoses
    31033    10.555573    0.403927    largeDoses
    16633    6.956372    1.519308    smallDoses
    13887    0.636281    1.273984    smallDoses
    52603    3.574737    0.075163    didntLike
    72000    9.032486    1.461809    didntLike
    68497    5.958993    0.023012    didntLike
    35135    2.435300    1.211744    didntLike
    26397    10.539731    1.638248    largeDoses
    7313    7.646702    0.056513    smallDoses
    91273    20.919349    0.644571    didntLike
    24743    1.424726    0.838447    didntLike
    31690    6.748663    0.890223    largeDoses
    15432    2.289167    0.114881    smallDoses
    58394    5.548377    0.402238    didntLike
    33962    6.057227    0.432666    didntLike
    31442    10.828595    0.559955    largeDoses
    31044    11.318160    0.271094    largeDoses
    29938    13.265311    0.633903    largeDoses
    9875    0.000000    1.496715    smallDoses
    51542    6.517133    0.402519    largeDoses
    11878    4.934374    1.520028    smallDoses
    69241    10.151738    0.896433    didntLike
    37776    2.425781    1.559467    didntLike
    68997    9.778962    1.195498    didntLike
    67416    12.219950    0.657677    didntLike
    59225    7.394151    0.954434    didntLike
    29138    8.518535    0.742546    largeDoses
    5962    2.798700    0.662632    smallDoses
    10847    0.637930    0.617373    smallDoses
    70527    10.750490    0.097415    didntLike
    9610    0.625382    0.140969    smallDoses
    64734    10.027968    0.282787    didntLike
    25941    9.817347    0.364197    largeDoses
    2763    0.646828    1.266069    smallDoses
    55601    3.347111    0.914294    didntLike
    31128    11.816892    0.193798    largeDoses
    5181    0.000000    1.480198    smallDoses
    69982    10.945666    0.993219    didntLike
    52440    10.244706    0.280539    largeDoses
    57350    2.579801    1.149172    didntLike
    57869    2.630410    0.098869    didntLike
    56557    11.746200    1.695517    largeDoses
    42342    8.104232    1.326277    largeDoses
    15560    12.409743    0.790295    largeDoses
    34826    12.167844    1.328086    largeDoses
    8569    3.198408    0.299287    smallDoses
    77623    16.055513    0.541052    didntLike
    78184    7.138659    0.158481    didntLike
    7036    4.831041    0.761419    smallDoses
    69616    10.082890    1.373611    didntLike
    21546    10.066867    0.788470    largeDoses
    36715    8.129538    0.329913    largeDoses
    20522    3.012463    1.138108    smallDoses
    42349    3.720391    0.845974    didntLike
    9037    0.773493    1.148256    smallDoses
    26728    10.962941    1.037324    largeDoses
    587    0.177621    0.162614    smallDoses
    48915    3.085853    0.967899    didntLike
    9824    8.426781    0.202558    smallDoses
    4135    1.825927    1.128347    smallDoses
    9666    2.185155    1.010173    smallDoses
    59333    7.184595    1.261338    didntLike
    36198    0.000000    0.116525    didntLike
    34909    8.901752    1.033527    largeDoses
    47516    2.451497    1.358795    didntLike
    55807    3.213631    0.432044    didntLike
    14036    3.974739    0.723929    smallDoses
    42856    9.601306    0.619232    largeDoses
    64007    8.363897    0.445341    didntLike
    59428    6.381484    1.365019    didntLike
    13730    0.000000    1.403914    smallDoses
    41740    9.609836    1.438105    largeDoses
    63546    9.904741    0.985862    didntLike
    30417    7.185807    1.489102    largeDoses
    69636    5.466703    1.216571    didntLike
    64660    0.000000    0.915898    didntLike
    14883    4.575443    0.535671    smallDoses
    7965    3.277076    1.010868    smallDoses
    68620    10.246623    1.239634    didntLike
    8738    2.341735    1.060235    smallDoses
    7544    3.201046    0.498843    smallDoses
    6377    6.066013    0.120927    smallDoses
    36842    8.829379    0.895657    largeDoses
    81046    15.833048    1.568245    didntLike
    67736    13.516711    1.220153    didntLike
    32492    0.664284    1.116755    didntLike
    39299    6.325139    0.605109    largeDoses
    77289    8.677499    0.344373    didntLike
    33835    8.188005    0.964896    largeDoses
    71890    9.414263    0.384030    didntLike
    32054    9.196547    1.138253    largeDoses
    38579    10.202968    0.452363    largeDoses
    55984    2.119439    1.481661    didntLike
    72694    13.635078    0.858314    didntLike
    42299    0.083443    0.701669    didntLike
    26635    9.149096    1.051446    largeDoses
    8579    1.933803    1.374388    smallDoses
    37302    14.115544    0.676198    largeDoses
    22878    8.933736    0.943352    largeDoses
    4364    2.661254    0.946117    smallDoses
    4985    0.988432    1.305027    smallDoses
    37068    2.063741    1.125946    didntLike
    41137    2.220590    0.690754    didntLike
    67759    6.424849    0.806641    didntLike
    11831    1.156153    1.613674    smallDoses
    34502    3.032720    0.601847    didntLike
    4088    3.076828    0.952089    smallDoses
    15199    0.000000    0.318105    smallDoses
    17309    7.750480    0.554015    largeDoses
    42816    10.958135    1.482500    largeDoses
    43751    10.222018    0.488678    largeDoses
    58335    2.367988    0.435741    didntLike
    75039    7.686054    1.381455    didntLike
    42878    11.464879    1.481589    largeDoses
    42770    11.075735    0.089726    largeDoses
    8848    3.543989    0.345853    smallDoses
    31340    8.123889    1.282880    largeDoses
    41413    4.331769    0.754467    largeDoses
    12731    0.120865    1.211961    smallDoses
    22447    6.116109    0.701523    largeDoses
    33564    7.474534    0.505790    largeDoses
    48907    8.819454    0.649292    largeDoses
    8762    6.802144    0.615284    smallDoses
    46696    12.666325    0.931960    largeDoses
    36851    8.636180    0.399333    largeDoses
    67639    11.730991    1.289833    didntLike
    171    8.132449    0.039062    smallDoses
    26674    10.296589    1.496144    largeDoses
    8739    7.583906    1.005764    smallDoses
    66668    9.777806    0.496377    didntLike
    68732    8.833546    0.513876    didntLike
    69995    4.907899    1.518036    didntLike
    82008    8.362736    1.285939    didntLike
    25054    9.084726    1.606312    largeDoses
    33085    14.164141    0.560970    largeDoses
    41379    9.080683    0.989920    largeDoses
    39417    6.522767    0.038548    largeDoses
    12556    3.690342    0.462281    smallDoses
    39432    3.563706    0.242019    didntLike
    38010    1.065870    1.141569    didntLike
    69306    6.683796    1.456317    didntLike
    38000    1.712874    0.243945    didntLike
    46321    13.109929    1.280111    largeDoses
    66293    11.327910    0.780977    didntLike
    22730    4.545711    1.233254    didntLike
    5952    3.367889    0.468104    smallDoses
    72308    8.326224    0.567347    didntLike
    60338    8.978339    1.442034    didntLike
    13301    5.655826    1.582159    smallDoses
    27884    8.855312    0.570684    largeDoses
    11188    6.649568    0.544233    smallDoses
    56796    3.966325    0.850410    didntLike
    8571    1.924045    1.664782    smallDoses
    4914    6.004812    0.280369    smallDoses
    10784    0.000000    0.375849    smallDoses
    39296    9.923018    0.092192    largeDoses
    13113    2.389084    0.119284    smallDoses
    70204    13.663189    0.133251    didntLike
    46813    11.434976    0.321216    largeDoses
    11697    0.358270    1.292858    smallDoses
    44183    9.598873    0.223524    largeDoses
    2225    6.375275    0.608040    smallDoses
    29066    11.580532    0.458401    largeDoses
    4245    5.319324    1.598070    smallDoses
    34379    4.324031    1.603481    didntLike
    44441    2.358370    1.273204    didntLike
    2022    0.000000    1.182708    smallDoses
    26866    12.824376    0.890411    largeDoses
    57070    1.587247    1.456982    didntLike
    32932    8.510324    1.520683    largeDoses
    51967    10.428884    1.187734    largeDoses
    44432    8.346618    0.042318    largeDoses
    67066    7.541444    0.809226    didntLike
    17262    2.540946    1.583286    smallDoses
    79728    9.473047    0.692513    didntLike
    14259    0.352284    0.474080    smallDoses
    6122    0.000000    0.589826    smallDoses
    76879    12.405171    0.567201    didntLike
    11426    4.126775    0.871452    smallDoses
    2493    0.034087    0.335848    smallDoses
    19910    1.177634    0.075106    smallDoses
    10939    0.000000    0.479996    smallDoses
    17716    0.994909    0.611135    smallDoses
    31390    11.053664    1.180117    largeDoses
    20375    0.000000    1.679729    smallDoses
    26309    2.495011    1.459589    didntLike
    33484    11.516831    0.001156    largeDoses
    45944    9.213215    0.797743    largeDoses
    4249    5.332865    0.109288    smallDoses
    6089    0.000000    1.689771    smallDoses
    7513    0.000000    1.126053    smallDoses
    27862    12.640062    1.690903    largeDoses
    39038    2.693142    1.317518    didntLike
    19218    3.328969    0.268271    smallDoses
    62911    7.193166    1.117456    didntLike
    77758    6.615512    1.521012    didntLike
    27940    8.000567    0.835341    largeDoses
    2194    4.017541    0.512104    smallDoses
    37072    13.245859    0.927465    largeDoses
    15585    5.970616    0.813624    smallDoses
    25577    11.668719    0.886902    largeDoses
    8777    4.283237    1.272728    smallDoses
    29016    10.742963    0.971401    largeDoses
    21910    12.326672    1.592608    largeDoses
    12916    0.000000    0.344622    smallDoses
    10976    0.000000    0.922846    smallDoses
    79065    10.602095    0.573686    didntLike
    36759    10.861859    1.155054    largeDoses
    50011    1.229094    1.638690    didntLike
    1155    0.410392    1.313401    smallDoses
    71600    14.552711    0.616162    didntLike
    30817    14.178043    0.616313    largeDoses
    54559    14.136260    0.362388    didntLike
    29764    0.093534    1.207194    didntLike
    69100    10.929021    0.403110    didntLike
    47324    11.432919    0.825959    largeDoses
    73199    9.134527    0.586846    didntLike
    44461    5.071432    1.421420    didntLike
    45617    11.460254    1.541749    largeDoses
    28221    11.620039    1.103553    largeDoses
    7091    4.022079    0.207307    smallDoses
    6110    3.057842    1.631262    smallDoses
    79016    7.782169    0.404385    didntLike
    18289    7.981741    0.929789    largeDoses
    43679    4.601363    0.268326    didntLike
    22075    2.595564    1.115375    didntLike
    23535    10.049077    0.391045    largeDoses
    25301    3.265444    1.572970    smallDoses
    32256    11.780282    1.511014    largeDoses
    36951    3.075975    0.286284    didntLike
    31290    1.795307    0.194343    didntLike
    38953    11.106979    0.202415    largeDoses
    35257    5.994413    0.800021    didntLike
    25847    9.706062    1.012182    largeDoses
    32680    10.582992    0.836025    largeDoses
    62018    7.038266    1.458979    didntLike
    9074    0.023771    0.015314    smallDoses
    33004    12.823982    0.676371    largeDoses
    44588    3.617770    0.493483    didntLike
    32565    8.346684    0.253317    largeDoses
    38563    6.104317    0.099207    didntLike
    75668    16.207776    0.584973    didntLike
    9069    6.401969    1.691873    smallDoses
    53395    2.298696    0.559757    didntLike
    28631    7.661515    0.055981    largeDoses
    71036    6.353608    1.645301    didntLike
    71142    10.442780    0.335870    didntLike
    37653    3.834509    1.346121    didntLike
    76839    10.998587    0.584555    didntLike
    9916    2.695935    1.512111    smallDoses
    38889    3.356646    0.324230    didntLike
    39075    14.677836    0.793183    largeDoses
    48071    1.551934    0.130902    didntLike
    7275    2.464739    0.223502    smallDoses
    41804    1.533216    1.007481    didntLike
    35665    12.473921    0.162910    largeDoses
    67956    6.491596    0.032576    didntLike
    41892    10.506276    1.510747    largeDoses
    38844    4.380388    0.748506    didntLike
    74197    13.670988    1.687944    didntLike
    14201    8.317599    0.390409    smallDoses
    3908    0.000000    0.556245    smallDoses
    2459    0.000000    0.290218    smallDoses
    32027    10.095799    1.188148    largeDoses
    12870    0.860695    1.482632    smallDoses
    9880    1.557564    0.711278    smallDoses
    72784    10.072779    0.756030    didntLike
    17521    0.000000    0.431468    smallDoses
    50283    7.140817    0.883813    largeDoses
    33536    11.384548    1.438307    largeDoses
    9452    3.214568    1.083536    smallDoses
    37457    11.720655    0.301636    largeDoses
    17724    6.374475    1.475925    largeDoses
    43869    5.749684    0.198875    largeDoses
    264    3.871808    0.552602    smallDoses
    25736    8.336309    0.636238    largeDoses
    39584    9.710442    1.503735    largeDoses
    31246    1.532611    1.433898    didntLike
    49567    9.785785    0.984614    largeDoses
    7052    2.633627    1.097866    smallDoses
    35493    9.238935    0.494701    largeDoses
    10986    1.205656    1.398803    smallDoses
    49508    3.124909    1.670121    didntLike
    5734    7.935489    1.585044    smallDoses
    65479    12.746636    1.560352    didntLike
    77268    10.732563    0.545321    didntLike
    28490    3.977403    0.766103    didntLike
    13546    4.194426    0.450663    smallDoses
    37166    9.610286    0.142912    largeDoses
    16381    4.797555    1.260455    smallDoses
    10848    1.615279    0.093002    smallDoses
    35405    4.614771    1.027105    didntLike
    15917    0.000000    1.369726    smallDoses
    6131    0.608457    0.512220    smallDoses
    67432    6.558239    0.667579    didntLike
    30354    12.315116    0.197068    largeDoses
    69696    7.014973    1.494616    didntLike
    33481    8.822304    1.194177    largeDoses
    43075    10.086796    0.570455    largeDoses
    38343    7.241614    1.661627    largeDoses
    14318    4.602395    1.511768    smallDoses
    5367    7.434921    0.079792    smallDoses
    37894    10.467570    1.595418    largeDoses
    36172    9.948127    0.003663    largeDoses
    40123    2.478529    1.568987    didntLike
    10976    5.938545    0.878540    smallDoses
    12705    0.000000    0.948004    smallDoses
    12495    5.559181    1.357926    smallDoses
    35681    9.776654    0.535966    largeDoses
    46202    3.092056    0.490906    didntLike
    11505    0.000000    1.623311    smallDoses
    22834    4.459495    0.538867    didntLike
    49901    8.334306    1.646600    largeDoses
    71932    11.226654    0.384686    didntLike
    13279    3.904737    1.597294    smallDoses
    49112    7.038205    1.211329    largeDoses
    77129    9.836120    1.054340    didntLike
    37447    1.990976    0.378081    didntLike
    62397    9.005302    0.485385    didntLike
    0    1.772510    1.039873    smallDoses
    15476    0.458674    0.819560    smallDoses
    40625    10.003919    0.231658    largeDoses
    36706    0.520807    1.476008    didntLike
    28580    10.678214    1.431837    largeDoses
    25862    4.425992    1.363842    didntLike
    63488    12.035355    0.831222    didntLike
    33944    10.606732    1.253858    largeDoses
    30099    1.568653    0.684264    didntLike
    13725    2.545434    0.024271    smallDoses
    36768    10.264062    0.982593    largeDoses
    64656    9.866276    0.685218    didntLike
    14927    0.142704    0.057455    smallDoses
    43231    9.853270    1.521432    largeDoses
    66087    6.596604    1.653574    didntLike
    19806    2.602287    1.321481    smallDoses
    41081    10.411776    0.664168    largeDoses
    10277    7.083449    0.622589    smallDoses
    7014    2.080068    1.254441    smallDoses
    17275    0.522844    1.622458    smallDoses
    31600    10.362000    1.544827    largeDoses
    59956    3.412967    1.035410    didntLike
    42181    6.796548    1.112153    largeDoses
    51743    4.092035    0.075804    didntLike
    5194    2.763811    1.564325    smallDoses
    30832    12.547439    1.402443    largeDoses
    7976    5.708052    1.596152    smallDoses
    14602    4.558025    0.375806    smallDoses
    41571    11.642307    0.438553    largeDoses
    55028    3.222443    0.121399    didntLike
    5837    4.736156    0.029871    smallDoses
    39808    10.839526    0.836323    largeDoses
    20944    4.194791    0.235483    smallDoses
    22146    14.936259    0.888582    largeDoses
    42169    3.310699    1.521855    didntLike
    7010    2.971931    0.034321    smallDoses
    3807    9.261667    0.537807    smallDoses
    29241    7.791833    1.111416    largeDoses
    52696    1.480470    1.028750    didntLike
    42545    3.677287    0.244167    didntLike
    24437    2.202967    1.370399    didntLike
    16037    5.796735    0.935893    smallDoses
    8493    3.063333    0.144089    smallDoses
    68080    11.233094    0.492487    didntLike
    59016    1.965570    0.005697    didntLike
    11810    8.616719    0.137419    smallDoses
    68630    6.609989    1.083505    didntLike
    7629    1.712639    1.086297    smallDoses
    71992    10.117445    1.299319    didntLike
    13398    0.000000    1.104178    smallDoses
    26241    9.824777    1.346821    largeDoses
    11160    1.653089    0.980949    smallDoses
    76701    18.178822    1.473671    didntLike
    32174    6.781126    0.885340    largeDoses
    45043    8.206750    1.549223    largeDoses
    42173    10.081853    1.376745    largeDoses
    69801    6.288742    0.112799    didntLike
    41737    3.695937    1.543589    didntLike
    46979    6.726151    1.069380    largeDoses
    79267    12.969999    1.568223    didntLike
    4615    2.661390    1.531933    smallDoses
    32907    7.072764    1.117386    largeDoses
    37444    9.123366    1.318988    largeDoses
    569    3.743946    1.039546    smallDoses
    8723    2.341300    0.219361    smallDoses
    6024    0.541913    0.592348    smallDoses
    52252    2.310828    1.436753    didntLike
    8358    6.226597    1.427316    smallDoses
    26166    7.277876    0.489252    largeDoses
    18471    0.000000    0.389459    smallDoses
    3386    7.218221    1.098828    smallDoses
    41544    8.777129    1.111464    largeDoses
    10480    2.813428    0.819419    smallDoses
    5894    2.268766    1.412130    smallDoses
    7273    6.283627    0.571292    smallDoses
    22272    7.520081    1.626868    largeDoses
    31369    11.739225    0.027138    largeDoses
    10708    3.746883    0.877350    smallDoses
    69364    12.089835    0.521631    didntLike
    37760    12.310404    0.259339    largeDoses
    13004    0.000000    0.671355    smallDoses
    37885    2.728800    0.331502    didntLike
    52555    10.814342    0.607652    largeDoses
    38997    12.170268    0.844205    largeDoses
    69698    6.698371    0.240084    didntLike
    11783    3.632672    1.643479    smallDoses
    47636    10.059991    0.892361    largeDoses
    15744    1.887674    0.756162    smallDoses
    69058    8.229125    0.195886    didntLike
    33057    7.817082    0.476102    largeDoses
    28681    12.277230    0.076805    largeDoses
    34042    10.055337    1.115778    largeDoses
    29928    3.596002    1.485952    didntLike
    9734    2.755530    1.420655    smallDoses
    7344    7.780991    0.513048    smallDoses
    7387    0.093705    0.391834    smallDoses
    33957    8.481567    0.520078    largeDoses
    9936    3.865584    0.110062    smallDoses
    36094    9.683709    0.779984    largeDoses
    39835    10.617255    1.359970    largeDoses
    64486    7.203216    1.624762    didntLike
    0    7.601414    1.215605    smallDoses
    39539    1.386107    1.417070    didntLike
    66972    9.129253    0.594089    didntLike
    15029    1.363447    0.620841    smallDoses
    44909    3.181399    0.359329    didntLike
    38183    13.365414    0.217011    largeDoses
    37372    4.207717    1.289767    didntLike
    0    4.088395    0.870075    smallDoses
    17786    3.327371    1.142505    smallDoses
    39055    1.303323    1.235650    didntLike
    37045    7.999279    1.581763    largeDoses
    6435    2.217488    0.864536    smallDoses
    72265    7.751808    0.192451    didntLike
    28152    14.149305    1.591532    largeDoses
    25931    8.765721    0.152808    largeDoses
    7538    3.408996    0.184896    smallDoses
    1315    1.251021    0.112340    smallDoses
    12292    6.160619    1.537165    smallDoses
    49248    1.034538    1.585162    didntLike
    9025    0.000000    1.034635    smallDoses
    13438    2.355051    0.542603    smallDoses
    69683    6.614543    0.153771    didntLike
    25374    10.245062    1.450903    largeDoses
    55264    3.467074    1.231019    didntLike
    38324    7.487678    1.572293    largeDoses
    69643    4.624115    1.185192    didntLike
    44058    8.995957    1.436479    largeDoses
    41316    11.564476    0.007195    largeDoses
    29119    3.440948    0.078331    didntLike
    51656    1.673603    0.732746    didntLike
    3030    4.719341    0.699755    smallDoses
    35695    10.304798    1.576488    largeDoses
    1537    2.086915    1.199312    smallDoses
    9083    6.338220    1.131305    smallDoses
    47744    8.254926    0.710694    largeDoses
    71372    16.067108    0.974142    didntLike
    37980    1.723201    0.310488    didntLike
    42385    3.785045    0.876904    didntLike
    22687    2.557561    0.123738    didntLike
    39512    9.852220    1.095171    largeDoses
    11885    3.679147    1.557205    smallDoses
    4944    9.789681    0.852971    smallDoses
    73230    14.958998    0.526707    didntLike
    17585    11.182148    1.288459    largeDoses
    68737    7.528533    1.657487    didntLike
    13818    5.253802    1.378603    smallDoses
    31662    13.946752    1.426657    largeDoses
    86686    15.557263    1.430029    didntLike
    43214    12.483550    0.688513    largeDoses
    24091    2.317302    1.411137    didntLike
    52544    10.069724    0.766119    largeDoses
    61861    5.792231    1.615483    didntLike
    47903    4.138435    0.475994    didntLike
    37190    12.929517    0.304378    largeDoses
    6013    9.378238    0.307392    smallDoses
    27223    8.361362    1.643204    largeDoses
    69027    7.939406    1.325042    didntLike
    78642    10.735384    0.705788    didntLike
    30254    11.592723    0.286188    largeDoses
    21704    10.098356    0.704748    largeDoses
    34985    9.299025    0.545337    largeDoses
    31316    11.158297    0.218067    largeDoses
    76368    16.143900    0.558388    didntLike
    27953    10.971700    1.221787    largeDoses
    152    0.000000    0.681478    smallDoses
    9146    3.178961    1.292692    smallDoses
    75346    17.625350    0.339926    didntLike
    26376    1.995833    0.267826    didntLike
    35255    10.640467    0.416181    largeDoses
    19198    9.628339    0.985462    largeDoses
    12518    4.662664    0.495403    smallDoses
    25453    5.754047    1.382742    smallDoses
    12530    0.000000    0.037146    smallDoses
    62230    9.334332    0.198118    didntLike
    9517    3.846162    0.619968    smallDoses
    71161    10.685084    0.678179    didntLike
    1593    4.752134    0.359205    smallDoses
    33794    0.697630    0.966786    didntLike
    39710    10.365836    0.505898    largeDoses
    16941    0.461478    0.352865    smallDoses
    69209    11.339537    1.068740    didntLike
    4446    5.420280    0.127310    smallDoses
    9347    3.469955    1.619947    smallDoses
    55635    8.517067    0.994858    largeDoses
    65889    8.306512    0.413690    didntLike
    10753    2.628690    0.444320    smallDoses
    7055    0.000000    0.802985    smallDoses
    7905    0.000000    1.170397    smallDoses
    53447    7.298767    1.582346    largeDoses
    9194    7.331319    1.277988    smallDoses
    61914    9.392269    0.151617    didntLike
    15630    5.541201    1.180596    smallDoses
    79194    15.149460    0.537540    didntLike
    12268    5.515189    0.250562    smallDoses
    33682    7.728898    0.920494    largeDoses
    26080    11.318785    1.510979    largeDoses
    19119    3.574709    1.531514    smallDoses
    30902    7.350965    0.026332    largeDoses
    63039    7.122363    1.630177    didntLike
    51136    1.828412    1.013702    didntLike
    35262    10.117989    1.156862    largeDoses
    42776    11.309897    0.086291    largeDoses
    64191    8.342034    1.388569    didntLike
    15436    0.241714    0.715577    smallDoses
    14402    10.482619    1.694972    smallDoses
    6341    9.289510    1.428879    smallDoses
    14113    4.269419    0.134181    smallDoses
    6390    0.000000    0.189456    smallDoses
    8794    0.817119    0.143668    smallDoses
    43432    1.508394    0.652651    didntLike
    38334    9.359918    0.052262    largeDoses
    34068    10.052333    0.550423    largeDoses
    30819    11.111660    0.989159    largeDoses
    22239    11.265971    0.724054    largeDoses
    28725    10.383830    0.254836    largeDoses
    57071    3.878569    1.377983    didntLike
    72420    13.679237    0.025346    didntLike
    28294    10.526846    0.781569    largeDoses
    9896    0.000000    0.924198    smallDoses
    65821    4.106727    1.085669    didntLike
    7645    8.118856    1.470686    smallDoses
    71289    7.796874    0.052336    didntLike
    5128    2.789669    1.093070    smallDoses
    13711    6.226962    0.287251    smallDoses
    22240    10.169548    1.660104    largeDoses
    15092    0.000000    1.370549    smallDoses
    5017    7.513353    0.137348    smallDoses
    10141    8.240793    0.099735    smallDoses
    35570    14.612797    1.247390    largeDoses
    46893    3.562976    0.445386    didntLike
    8178    3.230482    1.331698    smallDoses
    55783    3.612548    1.551911    didntLike
    1148    0.000000    0.332365    smallDoses
    10062    3.931299    0.487577    smallDoses
    74124    14.752342    1.155160    didntLike
    66603    10.261887    1.628085    didntLike
    11893    2.787266    1.570402    smallDoses
    50908    15.112319    1.324132    largeDoses
    39891    5.184553    0.223382    largeDoses
    65915    3.868359    0.128078    didntLike
    65678    3.507965    0.028904    didntLike
    62996    11.019254    0.427554    didntLike
    36851    3.812387    0.655245    didntLike
    36669    11.056784    0.378725    largeDoses
    38876    8.826880    1.002328    largeDoses
    26878    11.173861    1.478244    largeDoses
    46246    11.506465    0.421993    largeDoses
    12761    7.798138    0.147917    largeDoses
    35282    10.155081    1.370039    largeDoses
    68306    10.645275    0.693453    didntLike
    31262    9.663200    1.521541    largeDoses
    34754    10.790404    1.312679    largeDoses
    13408    2.810534    0.219962    smallDoses
    30365    9.825999    1.388500    largeDoses
    10709    1.421316    0.677603    smallDoses
    24332    11.123219    0.809107    largeDoses
    45517    13.402206    0.661524    largeDoses
    6178    1.212255    0.836807    smallDoses
    10639    1.568446    1.297469    smallDoses
    29613    3.343473    1.312266    didntLike
    22392    5.400155    0.193494    didntLike
    51126    3.818754    0.590905    didntLike
    53644    7.973845    0.307364    largeDoses
    51417    9.078824    0.734876    largeDoses
    24859    0.153467    0.766619    didntLike
    61732    8.325167    0.028479    didntLike
    71128    7.092089    1.216733    didntLike
    27276    5.192485    1.094409    largeDoses
    30453    10.340791    1.087721    largeDoses
    18670    2.077169    1.019775    smallDoses
    70600    10.151966    0.993105    didntLike
    12683    0.046826    0.809614    smallDoses
    81597    11.221874    1.395015    didntLike
    69959    14.497963    1.019254    didntLike
    8124    3.554508    0.533462    smallDoses
    18867    3.522673    0.086725    smallDoses
    80886    14.531655    0.380172    didntLike
    55895    3.027528    0.885457    didntLike
    31587    1.845967    0.488985    didntLike
    10591    10.226164    0.804403    largeDoses
    70096    10.965926    1.212328    didntLike
    53151    2.129921    1.477378    didntLike
    11992    0.000000    1.606849    smallDoses
    33114    9.489005    0.827814    largeDoses
    7413    0.000000    1.020797    smallDoses
    10583    0.000000    1.270167    smallDoses
    58668    6.556676    0.055183    didntLike
    35018    9.959588    0.060020    largeDoses
    70843    7.436056    1.479856    didntLike
    14011    0.404888    0.459517    smallDoses
    35015    9.952942    1.650279    largeDoses
    70839    15.600252    0.021935    didntLike
    3024    2.723846    0.387455    smallDoses
    5526    0.513866    1.323448    smallDoses
    5113    0.000000    0.861859    smallDoses
    20851    7.280602    1.438470    smallDoses
    40999    9.161978    1.110180    largeDoses
    15823    0.991725    0.730979    smallDoses
    35432    7.398380    0.684218    largeDoses
    53711    12.149747    1.389088    largeDoses
    64371    9.149678    0.874905    didntLike
    9289    9.666576    1.370330    smallDoses
    60613    3.620110    0.287767    didntLike
    18338    5.238800    1.253646    smallDoses
    22845    14.715782    1.503758    largeDoses
    74676    14.445740    1.211160    didntLike
    34143    13.609528    0.364240    largeDoses
    14153    3.141585    0.424280    smallDoses
    9327    0.000000    0.120947    smallDoses
    18991    0.454750    1.033280    smallDoses
    9193    0.510310    0.016395    smallDoses
    2285    3.864171    0.616349    smallDoses
    9493    6.724021    0.563044    smallDoses
    2371    4.289375    0.012563    smallDoses
    13963    0.000000    1.437030    smallDoses
    2299    3.733617    0.698269    smallDoses
    5262    2.002589    1.380184    smallDoses
    4659    2.502627    0.184223    smallDoses
    17582    6.382129    0.876581    smallDoses
    27750    8.546741    0.128706    largeDoses
    9868    2.694977    0.432818    smallDoses
    18333    3.951256    0.333300    smallDoses
    3780    9.856183    0.329181    smallDoses
    18190    2.068962    0.429927    smallDoses
    11145    3.410627    0.631838    smallDoses
    68846    9.974715    0.669787    didntLike
    26575    10.650102    0.866627    largeDoses
    48111    9.134528    0.728045    largeDoses
    43757    7.882601    1.332446    largeDoses
    View Code

    这里我们还需要先把标签替换成数字型的以便识别,largeDoses -> 3, smallDoses -> 2, didntLike -> 1

    def file2matrix(filename):
        fr = open(filename)
        arrayOLines = fr.readlines()
        numberOfLines = len(arrayOLines)
        returnMat = zeros((numberOfLines,3))
        classLabelVector = []
        index = 0;
        for line in arrayOLines:
            line = line.strip() # 去掉所有的回车符
            listFromLine = line.split('	') # 按照tab字符分割成list
            returnMat[index,:] = listFromLine[0:3]
            # 我们必须明确地将标签值转换成整型,否则python语言会将其当做字符串处理
            classLabelVector.append(int(listFromLine[-1]))
            index += 1
        return returnMat, classLabelVector

    接下来我们可以采用图形化的方式直观的展示数据。

    2.2 Analyze: creating scatter plots with Matplotlib

    我们在cmd中定位到源码所在路径,然后绘制原始数据的散点图:

    >>> import kNN
    >>> datingDataMat, datingLabels = kNN.file2matrix('datingTestSet2.txt')
    >>> import matplotlib
    >>> import matplotlib.pyplot as plt
    >>> fig = plt.figure()
    >>> ax = fig.add_subplot(111)
    >>> ax.scatter(datingDataMat[:,1], datingDataMat[:,2])
    >>> plt.show()

    由于没有使用样本分类的label,我们很难从上图看到任何有用的数据模式信息。为了更好的理解数据信息,我们可以使用色彩或者其他记号来区别标记

    datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')
    from matplotlib.font_manager import FontProperties
    import matplotlib.pyplot as plt
    zhfont1 = FontProperties(fname='C:WindowsFontssimkai.ttf',size=16)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*array(datingLabels), 15.0*array(datingLabels))
    plt.xlabel(u'玩游戏所耗时间百分比', fontproperties=zhfont1)
    plt.ylabel(u'每周消费的冰淇淋公升数', fontproperties=zhfont1)
    plt.show()

     2.3 Prepare: normalizing numeric values

    newValue = (oldValue-min)/(max-min)
    def autoNorm(dataSet):
        minVals = dataSet.min(0)  # 比较每行获得特征矩阵最小值
        maxVals = dataSet.max(0)  # 比较每行获得特征矩阵最大值
        ranges = maxVals - minVals
        normDataSet = zeros(shape(dataSet))
        m = dataSet.shape[0]     # 特征向量行数
        normDataSet = dataSet - tile(minVals, (m,1)) # tile函数将变量内容复制成dataSet同样大小的矩阵
        normDataSet = normDataSet/tile(ranges, (m,1))
        return normDataSet, ranges, minVals

    2.4 Test: testing the classifier as a whole program

    机器学习算法一个很重要的工作就是评估算法的正确率,通常我们只提供已有数据的90%作为训练样本来训练分类器,而使用其余的10%数据去测试分类器,检测分类器的正确率。

    这里我们可以随机选择这10%的测试样本,也可以顺序选择。

    最终我们可以选择错误率来检测分类器的性能。

    def datingClassTest():
        hoRatio = 0.10 # 测试集所占比例
        datingDataMat, datingLabels = file2matrix('datingTestSet2.txt') # 读入样本集
        normMat ,ranges, minVals = autoNorm(datingDataMat) # 特征归一化
        m = normMat.shape[0]
        numTestVecs = int(m*hoRatio)
        errorCount = 0.0
        # 对于每个测试样本,测试结果,并统计错误次数
        for i in range(numTestVecs):
            classifierResult = classify0(normMat[i,:], normMat[numTestVecs:m,:], datingLabels[numTestVecs:m], 3)
            print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i])
            if classifierResult != datingLabels[i]:
                errorCount += 1.0
        print "the total error rate is: %f" % (errorCount/float(numTestVecs))

    2.5 Use: putting together a useful system

    def classifyPerson():
        resultList = ['not at all', 'in small doses', 'in large doses']
        percentTats = float(raw_input("percentage of time spent playing video games?"))
        ffMiles = float(raw_input("ferquent fliter miles earned per year?"))
        iceCream = float(raw_input("liters of ice cream consumed per year?"))
        datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')  # 读入样本集
        normMat, ranges, minVals = autoNorm(datingDataMat)  # 特征归一化
        inArr = array([ffMiles, percentTats, iceCream]) # 预测样本特征
        classifierResult = classify0((inArr-minVals)/ranges, normMat, datingLabels, 3)
        print "You will probably like the person: ", resultList[classifierResult-1]

    到此为止,一个简单的约会对象匹配算法就完成了!


    3. Example: a handwriting recognition system

    3.1 Prepare: converting images into test vectors

    为了简单起见,这里构造的系统只能识别数字0-9。需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小:宽高是32像素$ imes$32像素的黑白图像。尽管采用文本格式存储图形不能有效地利用内存空间,但是为了方便理解,我们还是将图像转换为文本格式。

    def img2vector(filename):
        returnVect = 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
    
    testVector = img2vector('testDigits/0_13.txt')
    print testVector[0,0:31]

    这样我们就可以借助于之前的kNN算法代码测试了

    Test: kNN on handwritten digits

    from os import listdir
    def handwritingClasstest():
        hwLabels = []
        trainingFileList = listdir('trainingDigits') # 获得路径下所有文件名
        m = len(trainingFileList) # 训练样本数
        trainingMat = zeros((m,1024))
        for i in range(m):
            fileNameStr = trainingFileList[i]
            fileStr = fileNameStr.split('.')[0]
            classNumStr = int(fileStr.split('_')[0]) # 训练样本标签
            hwLabels.append(classNumStr)
            trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr) # 读取样本
        testFileList = listdir('testDigits')
        errorCount = 0.0
        mTest = len(testFileList) # 测试样本数
        for i in range(mTest):
            fileNameStr = testFileList[i]
            fileStr = fileNameStr.split('.')[0]
            classNumStr = int(fileStr.split('_')[0]) # 测试样本标签
            vectorUnderTest = img2vector('testDigits/%s' % fileNameStr)
            classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3) # 预测样本类别
            print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr)
            if classifierResult != classNumStr:
                errorCount += 1.0 # 统计错误分类数
        print "
    the total number of errors is: %d" % errorCount
        print "
    the total error rate is: %f" % (errorCount/mTest)
    
    handwritingClasstest()

    实际使用这个算法是,算法的执行效率并不高。因为预测时,测试样本要和所有样本做距离计算。后面我们会使用一种$k$决策树算法来节省计算开销。









  • 相关阅读:
    动态规划_leetcode70
    动态规划_leetcode64
    动态规划_leetcode63
    PHP处理base64编码字符串
    PHP解决h5页面跨域
    PHP对象转数组
    jQuery 正则
    mysql重置密码
    yii框架学习(获取插入后的id)
    nginx 之 root和alias
  • 原文地址:https://www.cnblogs.com/xuanyuyt/p/6106409.html
Copyright © 2020-2023  润新知