1. 程式人生 > >機器學習之KNN原理與程式碼實現

機器學習之KNN原理與程式碼實現

                                      KNN原理與程式碼實現

KNN原理

KNN(k-Nearest Neighbour):K-近鄰演算法,主要思想可以歸結為一個成語:物以類聚

工作原理

給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的 k (k <= 20)個例項,這 k 個例項的多數屬於某個類,

就把該輸入例項分為這個類。

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

如下圖,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果K=3,由於紅色三角形所佔比例為2/3,綠色圓將被賦予紅色三角形那個類,

如果K=5,由於藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類。

          

由此也說明了KNN演算法的結果很大程度取決於K的選擇。

歐氏距離公式

計算兩個向量點xA和xB之間的距離

               

分類決策規則(如多數表決)

           

 決定  類別  為指示函式,即當  時  為 1,否則  為0。

演算法流程

對未知類別屬性的資料集中的每個點依次執行以下操作:

1. 計算已知類別資料集中的點與當前點之間的距離;

2. 按照距離遞增次序排序;

3. 選取與當前點距離最小的 k 個點;

4. 確定前 k 個點所在類別的出現頻率;

5. 返回前 k 個點出現頻率最高的類別作為當前點的預測分類;

程式碼實現

python3.6

每個方法的作用,以及每行程式碼的作用,同樣我都做了詳細的註解。

希望大家最好自己能實現一下,特別是在運算時 list,array,matrix之間的關係以及運用場景,

只有在你自己實現時,才能理清這三者的作用以及關係。

輸入資料

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 0.328235 1 213 19780 1.376085 1.178359 2 214 44484 5.342462 0.394527 1 215 54462 11.835521 0.693301 3 216 20085 12.423687 1.424264 3 217 42291 12.161273 0.071131 3 218 47550 8.148360 1.649194 3 219 11938 1.531067 1.549756 2 220 40699 3.200912 0.309679 1 221 70908 8.862691 0.530506 1 222 73989 6.370551 0.369350 1 223 11872 2.468841 0.145060 2 224 48463 11.054212 0.141508 3 225 15987 2.037080 0.715243 2 226 70036 13.364030 0.549972 1 227 32967 10.249135 0.192735 3 228 63249 10.464252 1.669767 1 229 42795 9.424574 0.013725 3 230 14459 4.458902 0.268444 2 231 19973 0.000000 0.575976 2 232 5494 9.686082 1.029808 3 233 67902 13.649402 1.052618 1 234 25621 13.181148 0.273014 3 235 27545 3.877472 0.401600 1 236 58656 1.413952 0.451380 1 237 7327 4.248986 1.430249 2 238 64555 8.779183 0.845947 1 239 8998 4.156252 0.097109 2 240 11752 5.580018 0.158401 2 241 76319 15.040440 1.366898 1 242 27665 12.793870 1.307323 3 243 67417 3.254877 0.669546 1 244 21808 10.725607 0.588588 3 245 15326 8.256473 0.765891 2 246 20057 8.033892 1.618562 3 247 79341 10.702532 0.204792 1 248 15636 5.062996 1.132555 2 249 35602 10.772286 0.668721 3 250 28544 1.892354 0.837028 1 251 57663 1.019966 0.372320 1 252 78727 15.546043 0.729742 1 253 68255 11.638205 0.409125 1 254 14964 3.427886 0.975616 2 255 21835 11.246174 1.475586 3 256 7487 0.000000 0.645045 2 257 8700 0.000000 1.424017 2 258 26226 8.242553 0.279069 3 259 65899 8.700060 0.101807 1 260 6543 0.812344 0.260334 2 261 46556 2.448235 1.176829 1 262 71038 13.230078 0.616147 1 263 47657 0.236133 0.340840 1 264 19600 11.155826 0.335131 3 265 37422 11.029636 0.505769 3 266 1363 2.901181 1.646633 2 267 26535 3.924594 1.143120 1 268 47707 2.524806 1.292848 1 269 38055 3.527474 1.449158 1 270 6286 3.384281 0.889268 2 271 10747 0.000000 1.107592 2 272