Python机器学习(十六)KNN原理与代码实现

Posted 大码王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python机器学习(十六)KNN原理与代码实现相关的知识,希望对你有一定的参考价值。

 

1. KNN原理

KNN(k-Nearest Neighbour):K-近邻算法,主要思想可以归结为一个成语:物以类聚

1.1 工作原理

给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k (k <= 20)个实例,这 k 个实例的多数属于某个类,

就把该输入实例分为这个类。

https://www.cnblogs.com/ybjourney/p/4702562.html给出的例子很形象,这里借用一下。

如下图,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,

如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。

          

由此也说明了KNN算法的结果很大程度取决于K的选择。

1.2 欧氏距离公式

计算两个向量点xA和xB之间的距离

               

 

1.3 分类决策规则(如多数表决)

           

 决定  类别  为指示函数,即当  时  为 1,否则  为0。

1.4 算法流程

对未知类别属性的数据集中的每个点依次执行以下操作:

1. 计算已知类别数据集中的点与当前点之间的距离;

2. 按照距离递增次序排序;

3. 选取与当前点距离最小的 k 个点;

4. 确定前 k 个点所在类别的出现频率;

5. 返回前 k 个点出现频率最高的类别作为当前点的预测分类;

2. 代码实现

python3.6

每个方法的作用,以及每行代码的作用,同样我都做了详细的注解。

希望大家最好自己能实现一下,特别是在运算时 list,array,matrix之间的关系以及运用场景,

只有在你自己实现时,才能理清这三者的作用以及关系。

2.1 输入数据

datingTestSet2.txt :约会网站数据(三种类型:不喜欢的人,魅力一般的人,极具魅力的人)

复制代码
   1 40920    8.326976    0.953952    3
   2 14488    7.153469    1.673904    2
   3 26052    1.441871    0.805124    1
   4 75136    13.147394    0.428964    1
   5 38344    1.669788    0.134296    1
   6 72993    10.141740    1.032955    1
   7 35948    6.830792    1.213192    3
   8 42666    13.276369    0.543880    3
   9 67497    8.631577    0.749278    1
  10 35483    12.273169    1.508053    3
  11 50242    3.723498    0.831917    1
  12 63275    8.385879    1.669485    1
  13 5569    4.875435    0.728658    2
  14 51052    4.680098    0.625224    1
  15 77372    15.299570    0.331351    1
  16 43673    1.889461    0.191283    1
  17 61364    7.516754    1.269164    1
  18 69673    14.239195    0.261333    1
  19 15669    0.000000    1.250185    2
  20 28488    10.528555    1.304844    3
  21 6487    3.540265    0.822483    2
  22 37708    2.991551    0.833920    1
  23 22620    5.297865    0.638306    2
  24 28782    6.593803    0.187108    3
  25 19739    2.816760    1.686209    2
  26 36788    12.458258    0.649617    3
  27 5741    0.000000    1.656418    2
  28 28567    9.968648    0.731232    3
  29 6808    1.364838    0.640103    2
  30 41611    0.230453    1.151996    1
  31 36661    11.865402    0.882810    3
  32 43605    0.120460    1.352013    1
  33 15360    8.545204    1.340429    3
  34 63796    5.856649    0.160006    1
  35 10743    9.665618    0.778626    2
  36 70808    9.778763    1.084103    1
  37 72011    4.932976    0.632026    1
  38 5914    2.216246    0.587095    2
  39 14851    14.305636    0.632317    3
  40 33553    12.591889    0.686581    3
  41 44952    3.424649    1.004504    1
  42 17934    0.000000    0.147573    2
  43 27738    8.533823    0.205324    3
  44 29290    9.829528    0.238620    3
  45 42330    11.492186    0.263499    3
  46 36429    3.570968    0.832254    1
  47 39623    1.771228    0.207612    1
  48 32404    3.513921    0.991854    1
  49 27268    4.398172    0.975024    1
  50 5477    4.276823    1.174874    2
  51 14254    5.946014    1.614244    2
  52 68613    13.798970    0.724375    1
  53 41539    10.393591    1.663724    3
  54 7917    3.007577    0.297302    2
  55 21331    1.031938    0.486174    2
  56 8338    4.751212    0.064693    2
  57 5176    3.692269    1.655113    2
  58 18983    10.448091    0.267652    3
  59 68837    10.585786    0.329557    1
  60 13438    1.604501    0.069064    2
  61 48849    3.679497    0.961466    1
  62 12285    3.795146    0.696694    2
  63 7826    2.531885    1.659173    2
  64 5565    9.733340    0.977746    2
  65 10346    6.093067    1.413798    2
  66 1823    7.712960    1.054927    2
  67 9744    11.470364    0.760461    3
  68 16857    2.886529    0.934416    2
  69 39336    10.054373    1.138351    3
  70 65230    9.972470    0.881876    1
  71 2463    2.335785    1.366145    2
  72 27353    11.375155    1.528626    3
  73 16191    0.000000    0.605619    2
  74 12258    4.126787    0.357501    2
  75 42377    6.319522    1.058602    1
  76 25607    8.680527    0.086955    3
  77 77450    14.856391    1.129823    1
  78 58732    2.454285    0.222380    1
  79 46426    7.292202    0.548607    3
  80 32688    8.745137    0.857348    3
  81 64890    8.579001    0.683048    1
  82 8554    2.507302    0.869177    2
  83 28861    11.415476    1.505466    3
  84 42050    4.838540    1.680892    1
  85 32193    10.339507    0.583646    3
  86 64895    6.573742    1.151433    1
  87 2355    6.539397    0.462065    2
  88 0    2.209159    0.723567    2
  89 70406    11.196378    0.836326    1
  90 57399    4.229595    0.128253    1
  91 41732    9.505944    0.005273    3
  92 11429    8.652725    1.348934    3
  93 75270    17.101108    0.490712    1
  94 5459    7.871839    0.717662    2
  95 73520    8.262131    1.361646    1
  96 40279    9.015635    1.658555    3
  97 21540    9.215351    0.806762    3
  98 17694    6.375007    0.033678    2
  99 22329    2.262014    1.022169    1
 100 46570    5.677110    0.709469    1
 101 42403    11.293017    0.207976    3
 102 33654    6.590043    1.353117    1
 103 9171    4.711960    0.194167    2
 104 28122    8.768099    1.108041    3
 105 34095    11.502519    0.545097    3
 106 1774    4.682812    0.578112    2
 107 40131    12.446578    0.300754    3
 108 13994    12.908384    1.657722    3
 109 77064    12.601108    0.974527    1
 110 11210    3.929456    0.025466    2
 111 6122    9.751503    1.182050    3
 112 15341    3.043767    0.888168    2
 113 44373    4.391522    0.807100    1
 114 28454    11.695276    0.679015    3
 115 63771    7.879742    0.154263    1
 116 9217    5.613163    0.933632    2
 117 69076    9.140172    0.851300    1
 118 24489    4.258644    0.206892    1
 119 16871    6.799831    1.221171    2
 120 39776    8.752758    0.484418    3
 121 5901    1.123033    1.180352    2
 122 40987    10.833248    1.585426    3
 123 7479    3.051618    0.026781    2
 124 38768    5.308409    0.030683    3
 125 4933    1.841792    0.028099    2
 126 32311    2.261978    1.605603    1
 127 26501    11.573696    1.061347    3
 128 37433    8.038764    1.083910    3
 129 23503    10.734007    0.103715    3
 130 68607    9.661909    0.350772    1
 131 27742    9.005850    0.548737    3
 132 11303    0.000000    0.539131    2
 133 0    5.757140    1.062373    2
 134 32729    9.164656    1.624565    3
 135 24619    1.318340    1.436243    1
 136 42414    14.075597    0.695934    3
 137 20210    10.107550    1.308398    3
 138 33225    7.960293    1.219760    3
 139 54483    6.317292    0.018209    1
 140 18475    12.664194    0.595653    3
 141 33926    2.906644    0.581657    1
 142 43865    2.388241    0.913938    1
 143 26547    6.024471    0.486215    3
 144 44404    7.226764    1.255329    3
 145 16674    4.183997    1.275290    2
 146 8123    11.850211    1.096981    3
 147 42747    11.661797    1.167935    3
 148 56054    3.574967    0.494666    1
 149 10933    0.000000    0.107475    2
 150 18121    7.937657    0.904799    3
 151 11272    3.365027    1.014085    2
 152 16297    0.000000    0.367491    2
 153 28168    13.860672    1.293270    3
 154 40963    10.306714    1.211594    3
 155 31685    7.228002    0.670670    3
 156 55164    4.508740    1.036192    1
 157 17595    0.366328    0.163652    2
 158 1862    3.299444    0.575152    2
 159 57087    0.573287    0.607915    1
 160 63082    9.183738    0.012280    1
 161 51213    7.842646    1.060636    3
 162 6487    4.750964    0.558240    2
 163 4805    11.438702    1.556334    3
 164 30302    8.243063    1.122768    3
 165 68680    7.949017    0.271865    1
 166 17591    7.875477    0.227085    2
 167 74391    9.569087    0.364856    1
 168 37217    7.750103    0.869094    3
 169 42814    0.000000    1.515293    1
 170 14738    3.396030    0.633977    2
 171 19896    11.916091    0.025294    3
 172 14673    0.460758    0.689586    2
 173 32011    13.087566    0.476002    3
 174 58736    4.589016    1.672600    1
 175 54744    8.397217    1.534103    1
 176 29482    5.562772    1.689388    1
 177 27698    10.905159    0.619091    3
 178 11443    1.311441    1.169887    2
 179 56117    10.647170    0.980141    3
 180 39514    0.000000    0.481918    1
 181 26627    8.503025    0.830861    3
 182 16525    0.436880    1.395314    2
 183 24368    6.127867    1.102179    1
 184 22160    12.112492    0.359680    3
 185 6030    1.264968    1.141582    2
 186 6468    6.067568    1.327047    2
 187 22945    8.010964    1.681648    3
 188 18520    3.791084    0.304072    2
 189 34914    11.773195    1.262621    3
 190 6121    8.339588    1.443357    2
 191 38063    2.563092    1.464013    1
 192 23410    5.954216    0.953782    1
 193 35073    9.288374    0.767318    3
 194 52914    3.976796    1.043109    1
 195 16801    8.585227    1.455708    3
 196 9533    1.271946    0.796506    2
 197 16721    0.000000    0.242778    2
 198 5832    0.000000    0.089749    2
 199 44591    11.521298    0.300860    3
 200 10143    1.139447    0.415373    2
 201 21609    5.699090    1.391892    2
 202 23817    2.449378    1.322560    1
 203 15640    0.000000    1.228380    2
 204 8847    3.168365    0.053993    2
 205 50939    10.428610    1.126257    3
 206 28521    2.943070    1.446816    1
 207 32901    10.441348    0.975283    3
 208 42850    12.478764    1.628726    3
 209 13499    5.856902    0.363883    2
 210 40345    2.476420    0.096075    1
 211 43547    1.826637    0.811457    1
 212 70758    4.324451   

以上是关于Python机器学习(十六)KNN原理与代码实现的主要内容,如果未能解决你的问题,请参考以下文章

机器学习与数据挖掘系列算法之--knn的python实现

机器学习与数据挖掘系列算法之--knn的python实现

机器学习——k近邻算法原理分析与python代码实现

机器学习实战python3 K近邻(KNN)算法实现

[机器学习与scikit-learn-18]:算法-K近邻算法KNN的原理与代码实例

以❤️简单易懂❤️的语言带你搞懂有监督学习算法附Python代码详解机器学习系列之KNN篇