引言

  本文讨论的kNN算法是监督学习中分类方法的一种。所谓监督学习与非监督学习,是指训练数据是否有标注类别,若有则为监督学习,若否则为非监督学习。监督学习是根据输入数据(训练数据)学习一个模型,能对后来的输入做预测。在监督学习中,输入变量与输出变量可以是连续的,也可以是离散的。若输入变量与输出变量均为连续变量,则称为回归;输出变量为有限个离散变量,则称为分类;输入变量与输出变量均为变量序列,则称为标注

  有监督的分类学习

KNN算法的基本要素大致有三个:

  1、K 值的选择 (即输入新实例要取多少个训练实例点作为近邻)

  2、距离的度量 (欧氏距离,曼哈顿距离等)

  3、分类决策规则 (常用的方式是取k个近邻训练实例中类别出现次数最多者作为输入新实例的类别)

使用方式:

  K 值会对算法的结果产生重大影响。K值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,容易发生过拟合;如果 K 值较大,优点是可以减少学习的估计误差,缺点是学习的近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,是预测发生错误。在实际应用中,K 值一般选择一个较小的数值,通常采用交叉验证的方法来选择最有的 K 值。随着训练实例数目趋向于无穷和 K=1 时,误差率不会超过贝叶斯误差率的2倍,如果K也趋向于无穷,则误差率趋向于贝叶斯误差率。

  距离度量一般采用 Lp 距离,当p=2时,即为欧氏距离,在度量之前,应该将每个属性的值规范化这样有助于防止具有较大初始值域的属性比具有较小初始值域的属性的权重过大(规范)

  算法中的分类决策规则往往是多数表决,即由输入实例的 K 个最临近的训练实例中的多数类决定输入实例的类别

简述

  KNN分类算法,是理论上比较成熟的方法,也是最简单的机器学习算法之一。

  该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

  KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

  一个对于KNN算法解释最清楚的图如下所示:

  

  蓝方块和红三角均是已有分类数据,当前的任务是将绿色圆块进行分类判断,判断是属于蓝方块或者红三角。

  当然这里的分类还跟K值是有关的:

  如果K=3(实线圈),红三角占比2/3,则判断为红三角;

  如果K=5(虚线圈),蓝方块占比3/5,则判断为蓝方块。

  由此可以看出knn算法实际上根本就不用进行训练,而是直接进行计算的,训练时间为0,计算时间为训练集规模n。

  knn算法在分类时主要的不足是,当样本不平衡时,如果一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数。

*算法实现

1、函数

输入: 训练数据集 ,其中为训练实例的特征向量(i为特征值),为训练实例的类别(i为i对应的类别

输出: 新输入实例所属类别实例类别

1、根据给定的距离度量,在训练集T中找到与最近的k个点,涵盖这k个点的邻域记为上图中实体圆圈包含的数据

2、在中根据分类决策规则(如多数表决)决定所属的类别(即统计哪个类别出现的次数多,则取哪个):

          

其中I为指示函数,仅当时I(*)的值为1,否则为0.(argmax公式表示后面取值最大时,Cj的变量值,公式的目的也是求此值;i为中的值,Cj为涵盖领域存在的类别;利用求和公式∑,当Cj为C1时,i∈分别代入,得出值;i为已知数据,Cj值不断变化,求出公式的最大值,得出最终得取值

2、距离度量方式

较为常用的距离度量方式是欧式距离,定义可以使用其他更为一般的距离或闵科夫斯基(Minkowski)距离。

设特征空间为n为实数向量空间距离可定义为:

      闵科夫斯基距离

      欧氏距离,p取2

          曼哈顿距离,p取1

          p取

3、K值选择

  一般会先选择较小的k值,然后进行交叉验证选取最优的k值。k值较小时,整体模型会变得复杂,且对近邻的训练实例点较为敏感,容易出现过拟合。k值较大时,模型则会趋于简单,此时较远的训练实例点也会起到预测作用,容易出现欠拟合,特殊的,当k取N时,此时无论输入实例是什么,都会将其预测为属于训练实例中最多的类别。

4、分类决策规则

  KNN学习模型:输入

  通过学习得到决策函数:输出类别

假设分类损失函数为0-1损失函数,即分类正确时损失函数值为0,分类错误时则为1。假如给预测类别为,即;同时由式子(1)可知k邻域的样本点对学习模型的贡献度是均等的,则kNN学习模型误分类率为

  

若要最小化误分类率,则应

  

所以,最大表决规则等价于经验风险最小化。

k值得选取对kNN学习模型有着很大的影响。若k值过小,预测结果会对噪音样本点显得异常敏感。特别地,当k等于1时,kNN退化成最近邻算法,没有了显式的学习过程。若k值过大,会有较大的邻域训练样本进行预测,可以减小噪音样本点的减少;但是距离较远的训练样本点对预测结果会有贡献,以至于造成预测结果错误。下图给出k值的选取对于预测结果的影响:

  

前面提到过,k邻域的样本点对预测结果的贡献度是相等的;但距离更近的样本点应有更大的相似度,其贡献度应比距离更远的样本点大。可以加上权值进行修正,则最大表决原则变成:

  

应用案例

对data2.txt中的数据进行运算,取前10%的数据进行验证,90%的数据做训练,根据K值的不同,算出误差率,选出最佳K值;

  1. 8.326976 0.953952
  2. 7.153469 1.673904
  3. 1.441871 0.805124
  4. 13.147394 0.428964
  5. 1.669788 0.134296
  6. 10.141740 1.032955
  7. 6.830792 1.213192
  8. 13.276369 0.543880
  9. 8.631577 0.749278
  10. 12.273169 1.508053
  11. 3.723498 0.831917
  12. 8.385879 1.669485
  13. 4.875435 0.728658
  14. 4.680098 0.625224
  15. 15.299570 0.331351
  16. 1.889461 0.191283
  17. 7.516754 1.269164
  18. 14.239195 0.261333
  19. 0.000000 1.250185
  20. 10.528555 1.304844
  21. 3.540265 0.822483
  22. 2.991551 0.833920
  23. 5.297865 0.638306
  24. 6.593803 0.187108
  25. 2.816760 1.686209
  26. 12.458258 0.649617
  27. 0.000000 1.656418
  28. 9.968648 0.731232
  29. 1.364838 0.640103
  30. 0.230453 1.151996
  31. 11.865402 0.882810
  32. 0.120460 1.352013
  33. 8.545204 1.340429
  34. 5.856649 0.160006
  35. 9.665618 0.778626
  36. 9.778763 1.084103
  37. 4.932976 0.632026
  38. 2.216246 0.587095
  39. 14.305636 0.632317
  40. 12.591889 0.686581
  41. 3.424649 1.004504
  42. 0.000000 0.147573
  43. 8.533823 0.205324
  44. 9.829528 0.238620
  45. 11.492186 0.263499
  46. 3.570968 0.832254
  47. 1.771228 0.207612
  48. 3.513921 0.991854
  49. 4.398172 0.975024
  50. 4.276823 1.174874
  51. 5.946014 1.614244
  52. 13.798970 0.724375
  53. 10.393591 1.663724
  54. 3.007577 0.297302
  55. 1.031938 0.486174
  56. 4.751212 0.064693
  57. 3.692269 1.655113
  58. 10.448091 0.267652
  59. 10.585786 0.329557
  60. 1.604501 0.069064
  61. 3.679497 0.961466
  62. 3.795146 0.696694
  63. 2.531885 1.659173
  64. 9.733340 0.977746
  65. 6.093067 1.413798
  66. 7.712960 1.054927
  67. 11.470364 0.760461
  68. 2.886529 0.934416
  69. 10.054373 1.138351
  70. 9.972470 0.881876
  71. 2.335785 1.366145
  72. 11.375155 1.528626
  73. 0.000000 0.605619
  74. 4.126787 0.357501
  75. 6.319522 1.058602
  76. 8.680527 0.086955
  77. 14.856391 1.129823
  78. 2.454285 0.222380
  79. 7.292202 0.548607
  80. 8.745137 0.857348
  81. 8.579001 0.683048
  82. 2.507302 0.869177
  83. 11.415476 1.505466
  84. 4.838540 1.680892
  85. 10.339507 0.583646
  86. 6.573742 1.151433
  87. 6.539397 0.462065
  88. 2.209159 0.723567
  89. 11.196378 0.836326
  90. 4.229595 0.128253
  91. 9.505944 0.005273
  92. 8.652725 1.348934
  93. 17.101108 0.490712
  94. 7.871839 0.717662
  95. 8.262131 1.361646
  96. 9.015635 1.658555
  97. 9.215351 0.806762
  98. 6.375007 0.033678
  99. 2.262014 1.022169
  100. 5.677110 0.709469
  101. 11.293017 0.207976
  102. 6.590043 1.353117
  103. 4.711960 0.194167
  104. 8.768099 1.108041
  105. 11.502519 0.545097
  106. 4.682812 0.578112
  107. 12.446578 0.300754
  108. 12.908384 1.657722
  109. 12.601108 0.974527
  110. 3.929456 0.025466
  111. 9.751503 1.182050
  112. 3.043767 0.888168
  113. 4.391522 0.807100
  114. 11.695276 0.679015
  115. 7.879742 0.154263
  116. 5.613163 0.933632
  117. 9.140172 0.851300
  118. 4.258644 0.206892
  119. 6.799831 1.221171
  120. 8.752758 0.484418
  121. 1.123033 1.180352
  122. 10.833248 1.585426
  123. 3.051618 0.026781
  124. 5.308409 0.030683
  125. 1.841792 0.028099
  126. 2.261978 1.605603
  127. 11.573696 1.061347
  128. 8.038764 1.083910
  129. 10.734007 0.103715
  130. 9.661909 0.350772
  131. 9.005850 0.548737
  132. 0.000000 0.539131
  133. 5.757140 1.062373
  134. 9.164656 1.624565
  135. 1.318340 1.436243
  136. 14.075597 0.695934
  137. 10.107550 1.308398
  138. 7.960293 1.219760
  139. 6.317292 0.018209
  140. 12.664194 0.595653
  141. 2.906644 0.581657
  142. 2.388241 0.913938
  143. 6.024471 0.486215
  144. 7.226764 1.255329
  145. 4.183997 1.275290
  146. 11.850211 1.096981
  147. 11.661797 1.167935
  148. 3.574967 0.494666
  149. 0.000000 0.107475
  150. 7.937657 0.904799
  151. 3.365027 1.014085
  152. 0.000000 0.367491
  153. 13.860672 1.293270
  154. 10.306714 1.211594
  155. 7.228002 0.670670
  156. 4.508740 1.036192
  157. 0.366328 0.163652
  158. 3.299444 0.575152
  159. 0.573287 0.607915
  160. 9.183738 0.012280
  161. 7.842646 1.060636
  162. 4.750964 0.558240
  163. 11.438702 1.556334
  164. 8.243063 1.122768
  165. 7.949017 0.271865
  166. 7.875477 0.227085
  167. 9.569087 0.364856
  168. 7.750103 0.869094
  169. 0.000000 1.515293
  170. 3.396030 0.633977
  171. 11.916091 0.025294
  172. 0.460758 0.689586
  173. 13.087566 0.476002
  174. 4.589016 1.672600
  175. 8.397217 1.534103
  176. 5.562772 1.689388
  177. 10.905159 0.619091
  178. 1.311441 1.169887
  179. 10.647170 0.980141
  180. 0.000000 0.481918
  181. 8.503025 0.830861
  182. 0.436880 1.395314
  183. 6.127867 1.102179
  184. 12.112492 0.359680
  185. 1.264968 1.141582
  186. 6.067568 1.327047
  187. 8.010964 1.681648
  188. 3.791084 0.304072
  189. 11.773195 1.262621
  190. 8.339588 1.443357
  191. 2.563092 1.464013
  192. 5.954216 0.953782
  193. 9.288374 0.767318
  194. 3.976796 1.043109
  195. 8.585227 1.455708
  196. 1.271946 0.796506
  197. 0.000000 0.242778
  198. 0.000000 0.089749
  199. 11.521298 0.300860
  200. 1.139447 0.415373
  201. 5.699090 1.391892
  202. 2.449378 1.322560
  203. 0.000000 1.228380
  204. 3.168365 0.053993
  205. 10.428610 1.126257
  206. 2.943070 1.446816
  207. 10.441348 0.975283
  208. 12.478764 1.628726
  209. 5.856902 0.363883
  210. 2.476420 0.096075
  211. 1.826637 0.811457
  212. 4.324451 0.328235
  213. 1.376085 1.178359
  214. 5.342462 0.394527
  215. 11.835521 0.693301
  216. 12.423687 1.424264
  217. 12.161273 0.071131
  218. 8.148360 1.649194
  219. 1.531067 1.549756
  220. 3.200912 0.309679
  221. 8.862691 0.530506
  222. 6.370551 0.369350
  223. 2.468841 0.145060
  224. 11.054212 0.141508
  225. 2.037080 0.715243
  226. 13.364030 0.549972
  227. 10.249135 0.192735
  228. 10.464252 1.669767
  229. 9.424574 0.013725
  230. 4.458902 0.268444
  231. 0.000000 0.575976
  232. 9.686082 1.029808
  233. 13.649402 1.052618
  234. 13.181148 0.273014
  235. 3.877472 0.401600
  236. 1.413952 0.451380
  237. 4.248986 1.430249
  238. 8.779183 0.845947
  239. 4.156252 0.097109
  240. 5.580018 0.158401
  241. 15.040440 1.366898
  242. 12.793870 1.307323
  243. 3.254877 0.669546
  244. 10.725607 0.588588
  245. 8.256473 0.765891
  246. 8.033892 1.618562
  247. 10.702532 0.204792
  248. 5.062996 1.132555
  249. 10.772286 0.668721
  250. 1.892354 0.837028
  251. 1.019966 0.372320
  252. 15.546043 0.729742
  253. 11.638205 0.409125
  254. 3.427886 0.975616
  255. 11.246174 1.475586
  256. 0.000000 0.645045
  257. 0.000000 1.424017
  258. 8.242553 0.279069
  259. 8.700060 0.101807
  260. 0.812344 0.260334
  261. 2.448235 1.176829
  262. 13.230078 0.616147
  263. 0.236133 0.340840
  264. 11.155826 0.335131
  265. 11.029636 0.505769
  266. 2.901181 1.646633
  267. 3.924594 1.143120
  268. 2.524806 1.292848
  269. 3.527474 1.449158
  270. 3.384281 0.889268
  271. 0.000000 1.107592
  272. 11.898890 0.406441
  273. 3.529892 1.375844
  274. 11.442677 0.696919
  275. 10.308145 0.422722
  276. 8.540529 0.727373
  277. 7.156949 1.691682
  278. 0.720675 0.847574
  279. 0.229405 1.038603
  280. 3.399331 0.077501
  281. 6.157239 0.580133
  282. 1.239698 0.719989
  283. 6.036854 0.016548
  284. 5.258665 0.933722
  285. 12.393001 1.571281
  286. 9.627613 0.935842
  287. 11.130453 0.597610
  288. 8.842595 0.349768
  289. 10.690010 1.456595
  290. 5.714718 1.674780
  291. 3.052505 1.335804
  292. 0.000000 0.059025
  293. 9.945307 1.287952
  294. 2.719723 1.142148
  295. 11.154055 1.608486
  296. 2.687918 0.660836
  297. 10.037847 0.962245
  298. 12.404762 1.112080
  299. 10.237305 0.633422
  300. 4.745392 0.662520
  301. 4.639461 1.569431
  302. 3.149310 0.639669
  303. 13.406875 1.639194
  304. 6.068668 0.881241
  305. 9.477022 0.899002
  306. 3.897620 0.560201
  307. 5.463615 1.203677
  308. 3.369267 1.575043
  309. 5.234562 0.825954
  310. 0.000000 0.722170
  311. 12.979069 0.504068
  312. 5.376564 0.557476
  313. 13.527910 1.586732
  314. 2.196889 0.784587
  315. 10.691748 0.007509
  316. 1.659242 0.447066
  317. 8.369667 0.656697
  318. 13.157197 0.143248
  319. 8.199667 0.908508
  320. 4.441669 0.439381
  321. 9.846492 0.644523
  322. 0.019540 0.977949
  323. 8.253774 0.748700
  324. 6.038620 1.509646
  325. 6.091587 1.694641
  326. 8.986820 1.225165
  327. 11.508473 1.624296
  328. 8.807734 0.713922
  329. 0.000000 0.816676
  330. 8.889202 1.665414
  331. 3.178117 0.542752
  332. 7.013795 0.139909
  333. 9.605014 0.065254
  334. 1.230540 1.331674
  335. 10.412811 0.890803
  336. 0.000000 0.567161
  337. 9.699991 0.122011
  338. 0.000000 0.061191
  339. 4.455293 0.272135
  340. 3.020977 1.502803
  341. 8.099278 0.216317
  342. 1.157764 1.603217
  343. 10.105396 0.121067
  344. 11.230148 0.408603
  345. 9.070058 0.011379
  346. 0.566460 0.478837
  347. 0.000000 0.487300
  348. 8.956369 1.193484
  349. 1.523057 0.620528
  350. 2.749006 0.169855
  351. 9.235393 0.188350
  352. 10.555573 0.403927
  353. 6.956372 1.519308
  354. 0.636281 1.273984
  355. 3.574737 0.075163
  356. 9.032486 1.461809
  357. 5.958993 0.023012
  358. 2.435300 1.211744
  359. 10.539731 1.638248
  360. 7.646702 0.056513
  361. 20.919349 0.644571
  362. 1.424726 0.838447
  363. 6.748663 0.890223
  364. 2.289167 0.114881
  365. 5.548377 0.402238
  366. 6.057227 0.432666
  367. 10.828595 0.559955
  368. 11.318160 0.271094
  369. 13.265311 0.633903
  370. 0.000000 1.496715
  371. 6.517133 0.402519
  372. 4.934374 1.520028
  373. 10.151738 0.896433
  374. 2.425781 1.559467
  375. 9.778962 1.195498
  376. 12.219950 0.657677
  377. 7.394151 0.954434
  378. 8.518535 0.742546
  379. 2.798700 0.662632
  380. 0.637930 0.617373
  381. 10.750490 0.097415
  382. 0.625382 0.140969
  383. 10.027968 0.282787
  384. 9.817347 0.364197
  385. 0.646828 1.266069
  386. 3.347111 0.914294
  387. 11.816892 0.193798
  388. 0.000000 1.480198
  389. 10.945666 0.993219
  390. 10.244706 0.280539
  391. 2.579801 1.149172
  392. 2.630410 0.098869
  393. 11.746200 1.695517
  394. 8.104232 1.326277
  395. 12.409743 0.790295
  396. 12.167844 1.328086
  397. 3.198408 0.299287
  398. 16.055513 0.541052
  399. 7.138659 0.158481
  400. 4.831041 0.761419
  401. 10.082890 1.373611
  402. 10.066867 0.788470
  403. 8.129538 0.329913
  404. 3.012463 1.138108
  405. 3.720391 0.845974
  406. 0.773493 1.148256
  407. 10.962941 1.037324
  408. 0.177621 0.162614
  409. 3.085853 0.967899
  410. 8.426781 0.202558
  411. 1.825927 1.128347
  412. 2.185155 1.010173
  413. 7.184595 1.261338
  414. 0.000000 0.116525
  415. 8.901752 1.033527
  416. 2.451497 1.358795
  417. 3.213631 0.432044
  418. 3.974739 0.723929
  419. 9.601306 0.619232
  420. 8.363897 0.445341
  421. 6.381484 1.365019
  422. 0.000000 1.403914
  423. 9.609836 1.438105
  424. 9.904741 0.985862
  425. 7.185807 1.489102
  426. 5.466703 1.216571
  427. 0.000000 0.915898
  428. 4.575443 0.535671
  429. 3.277076 1.010868
  430. 10.246623 1.239634
  431. 2.341735 1.060235
  432. 3.201046 0.498843
  433. 6.066013 0.120927
  434. 8.829379 0.895657
  435. 15.833048 1.568245
  436. 13.516711 1.220153
  437. 0.664284 1.116755
  438. 6.325139 0.605109
  439. 8.677499 0.344373
  440. 8.188005 0.964896
  441. 9.414263 0.384030
  442. 9.196547 1.138253
  443. 10.202968 0.452363
  444. 2.119439 1.481661
  445. 13.635078 0.858314
  446. 0.083443 0.701669
  447. 9.149096 1.051446
  448. 1.933803 1.374388
  449. 14.115544 0.676198
  450. 8.933736 0.943352
  451. 2.661254 0.946117
  452. 0.988432 1.305027
  453. 2.063741 1.125946
  454. 2.220590 0.690754
  455. 6.424849 0.806641
  456. 1.156153 1.613674
  457. 3.032720 0.601847
  458. 3.076828 0.952089
  459. 0.000000 0.318105
  460. 7.750480 0.554015
  461. 10.958135 1.482500
  462. 10.222018 0.488678
  463. 2.367988 0.435741
  464. 7.686054 1.381455
  465. 11.464879 1.481589
  466. 11.075735 0.089726
  467. 3.543989 0.345853
  468. 8.123889 1.282880
  469. 4.331769 0.754467
  470. 0.120865 1.211961
  471. 6.116109 0.701523
  472. 7.474534 0.505790
  473. 8.819454 0.649292
  474. 6.802144 0.615284
  475. 12.666325 0.931960
  476. 8.636180 0.399333
  477. 11.730991 1.289833
  478. 8.132449 0.039062
  479. 10.296589 1.496144
  480. 7.583906 1.005764
  481. 9.777806 0.496377
  482. 8.833546 0.513876
  483. 4.907899 1.518036
  484. 8.362736 1.285939
  485. 9.084726 1.606312
  486. 14.164141 0.560970
  487. 9.080683 0.989920
  488. 6.522767 0.038548
  489. 3.690342 0.462281
  490. 3.563706 0.242019
  491. 1.065870 1.141569
  492. 6.683796 1.456317
  493. 1.712874 0.243945
  494. 13.109929 1.280111
  495. 11.327910 0.780977
  496. 4.545711 1.233254
  497. 3.367889 0.468104
  498. 8.326224 0.567347
  499. 8.978339 1.442034
  500. 5.655826 1.582159
  501. 8.855312 0.570684
  502. 6.649568 0.544233
  503. 3.966325 0.850410
  504. 1.924045 1.664782
  505. 6.004812 0.280369
  506. 0.000000 0.375849
  507. 9.923018 0.092192
  508. 2.389084 0.119284
  509. 13.663189 0.133251
  510. 11.434976 0.321216
  511. 0.358270 1.292858
  512. 9.598873 0.223524
  513. 6.375275 0.608040
  514. 11.580532 0.458401
  515. 5.319324 1.598070
  516. 4.324031 1.603481
  517. 2.358370 1.273204
  518. 0.000000 1.182708
  519. 12.824376 0.890411
  520. 1.587247 1.456982
  521. 8.510324 1.520683
  522. 10.428884 1.187734
  523. 8.346618 0.042318
  524. 7.541444 0.809226
  525. 2.540946 1.583286
  526. 9.473047 0.692513
  527. 0.352284 0.474080
  528. 0.000000 0.589826
  529. 12.405171 0.567201
  530. 4.126775 0.871452
  531. 0.034087 0.335848
  532. 1.177634 0.075106
  533. 0.000000 0.479996
  534. 0.994909 0.611135
  535. 11.053664 1.180117
  536. 0.000000 1.679729
  537. 2.495011 1.459589
  538. 11.516831 0.001156
  539. 9.213215 0.797743
  540. 5.332865 0.109288
  541. 0.000000 1.689771
  542. 0.000000 1.126053
  543. 12.640062 1.690903
  544. 2.693142 1.317518
  545. 3.328969 0.268271
  546. 7.193166 1.117456
  547. 6.615512 1.521012
  548. 8.000567 0.835341
  549. 4.017541 0.512104
  550. 13.245859 0.927465
  551. 5.970616 0.813624
  552. 11.668719 0.886902
  553. 4.283237 1.272728
  554. 10.742963 0.971401
  555. 12.326672 1.592608
  556. 0.000000 0.344622
  557. 0.000000 0.922846
  558. 10.602095 0.573686
  559. 10.861859 1.155054
  560. 1.229094 1.638690
  561. 0.410392 1.313401
  562. 14.552711 0.616162
  563. 14.178043 0.616313
  564. 14.136260 0.362388
  565. 0.093534 1.207194
  566. 10.929021 0.403110
  567. 11.432919 0.825959
  568. 9.134527 0.586846
  569. 5.071432 1.421420
  570. 11.460254 1.541749
  571. 11.620039 1.103553
  572. 4.022079 0.207307
  573. 3.057842 1.631262
  574. 7.782169 0.404385
  575. 7.981741 0.929789
  576. 4.601363 0.268326
  577. 2.595564 1.115375
  578. 10.049077 0.391045
  579. 3.265444 1.572970
  580. 11.780282 1.511014
  581. 3.075975 0.286284
  582. 1.795307 0.194343
  583. 11.106979 0.202415
  584. 5.994413 0.800021
  585. 9.706062 1.012182
  586. 10.582992 0.836025
  587. 7.038266 1.458979
  588. 0.023771 0.015314
  589. 12.823982 0.676371
  590. 3.617770 0.493483
  591. 8.346684 0.253317
  592. 6.104317 0.099207
  593. 16.207776 0.584973
  594. 6.401969 1.691873
  595. 2.298696 0.559757
  596. 7.661515 0.055981
  597. 6.353608 1.645301
  598. 10.442780 0.335870
  599. 3.834509 1.346121
  600. 10.998587 0.584555
  601. 2.695935 1.512111
  602. 3.356646 0.324230
  603. 14.677836 0.793183
  604. 1.551934 0.130902
  605. 2.464739 0.223502
  606. 1.533216 1.007481
  607. 12.473921 0.162910
  608. 6.491596 0.032576
  609. 10.506276 1.510747
  610. 4.380388 0.748506
  611. 13.670988 1.687944
  612. 8.317599 0.390409
  613. 0.000000 0.556245
  614. 0.000000 0.290218
  615. 10.095799 1.188148
  616. 0.860695 1.482632
  617. 1.557564 0.711278
  618. 10.072779 0.756030
  619. 0.000000 0.431468
  620. 7.140817 0.883813
  621. 11.384548 1.438307
  622. 3.214568 1.083536
  623. 11.720655 0.301636
  624. 6.374475 1.475925
  625. 5.749684 0.198875
  626. 3.871808 0.552602
  627. 8.336309 0.636238
  628. 9.710442 1.503735
  629. 1.532611 1.433898
  630. 9.785785 0.984614
  631. 2.633627 1.097866
  632. 9.238935 0.494701
  633. 1.205656 1.398803
  634. 3.124909 1.670121
  635. 7.935489 1.585044
  636. 12.746636 1.560352
  637. 10.732563 0.545321
  638. 3.977403 0.766103
  639. 4.194426 0.450663
  640. 9.610286 0.142912
  641. 4.797555 1.260455
  642. 1.615279 0.093002
  643. 4.614771 1.027105
  644. 0.000000 1.369726
  645. 0.608457 0.512220
  646. 6.558239 0.667579
  647. 12.315116 0.197068
  648. 7.014973 1.494616
  649. 8.822304 1.194177
  650. 10.086796 0.570455
  651. 7.241614 1.661627
  652. 4.602395 1.511768
  653. 7.434921 0.079792
  654. 10.467570 1.595418
  655. 9.948127 0.003663
  656. 2.478529 1.568987
  657. 5.938545 0.878540
  658. 0.000000 0.948004
  659. 5.559181 1.357926
  660. 9.776654 0.535966
  661. 3.092056 0.490906
  662. 0.000000 1.623311
  663. 4.459495 0.538867
  664. 8.334306 1.646600
  665. 11.226654 0.384686
  666. 3.904737 1.597294
  667. 7.038205 1.211329
  668. 9.836120 1.054340
  669. 1.990976 0.378081
  670. 9.005302 0.485385
  671. 1.772510 1.039873
  672. 0.458674 0.819560
  673. 10.003919 0.231658
  674. 0.520807 1.476008
  675. 10.678214 1.431837
  676. 4.425992 1.363842
  677. 12.035355 0.831222
  678. 10.606732 1.253858
  679. 1.568653 0.684264
  680. 2.545434 0.024271
  681. 10.264062 0.982593
  682. 9.866276 0.685218
  683. 0.142704 0.057455
  684. 9.853270 1.521432
  685. 6.596604 1.653574
  686. 2.602287 1.321481
  687. 10.411776 0.664168
  688. 7.083449 0.622589
  689. 2.080068 1.254441
  690. 0.522844 1.622458
  691. 10.362000 1.544827
  692. 3.412967 1.035410
  693. 6.796548 1.112153
  694. 4.092035 0.075804
  695. 2.763811 1.564325
  696. 12.547439 1.402443
  697. 5.708052 1.596152
  698. 4.558025 0.375806
  699. 11.642307 0.438553
  700. 3.222443 0.121399
  701. 4.736156 0.029871
  702. 10.839526 0.836323
  703. 4.194791 0.235483
  704. 14.936259 0.888582
  705. 3.310699 1.521855
  706. 2.971931 0.034321
  707. 9.261667 0.537807
  708. 7.791833 1.111416
  709. 1.480470 1.028750
  710. 3.677287 0.244167
  711. 2.202967 1.370399
  712. 5.796735 0.935893
  713. 3.063333 0.144089
  714. 11.233094 0.492487
  715. 1.965570 0.005697
  716. 8.616719 0.137419
  717. 6.609989 1.083505
  718. 1.712639 1.086297
  719. 10.117445 1.299319
  720. 0.000000 1.104178
  721. 9.824777 1.346821
  722. 1.653089 0.980949
  723. 18.178822 1.473671
  724. 6.781126 0.885340
  725. 8.206750 1.549223
  726. 10.081853 1.376745
  727. 6.288742 0.112799
  728. 3.695937 1.543589
  729. 6.726151 1.069380
  730. 12.969999 1.568223
  731. 2.661390 1.531933
  732. 7.072764 1.117386
  733. 9.123366 1.318988
  734. 3.743946 1.039546
  735. 2.341300 0.219361
  736. 0.541913 0.592348
  737. 2.310828 1.436753
  738. 6.226597 1.427316
  739. 7.277876 0.489252
  740. 0.000000 0.389459
  741. 7.218221 1.098828
  742. 8.777129 1.111464
  743. 2.813428 0.819419
  744. 2.268766 1.412130
  745. 6.283627 0.571292
  746. 7.520081 1.626868
  747. 11.739225 0.027138
  748. 3.746883 0.877350
  749. 12.089835 0.521631
  750. 12.310404 0.259339
  751. 0.000000 0.671355
  752. 2.728800 0.331502
  753. 10.814342 0.607652
  754. 12.170268 0.844205
  755. 6.698371 0.240084
  756. 3.632672 1.643479
  757. 10.059991 0.892361
  758. 1.887674 0.756162
  759. 8.229125 0.195886
  760. 7.817082 0.476102
  761. 12.277230 0.076805
  762. 10.055337 1.115778
  763. 3.596002 1.485952
  764. 2.755530 1.420655
  765. 7.780991 0.513048
  766. 0.093705 0.391834
  767. 8.481567 0.520078
  768. 3.865584 0.110062
  769. 9.683709 0.779984
  770. 10.617255 1.359970
  771. 7.203216 1.624762
  772. 7.601414 1.215605
  773. 1.386107 1.417070
  774. 9.129253 0.594089
  775. 1.363447 0.620841
  776. 3.181399 0.359329
  777. 13.365414 0.217011
  778. 4.207717 1.289767
  779. 4.088395 0.870075
  780. 3.327371 1.142505
  781. 1.303323 1.235650
  782. 7.999279 1.581763
  783. 2.217488 0.864536
  784. 7.751808 0.192451
  785. 14.149305 1.591532
  786. 8.765721 0.152808
  787. 3.408996 0.184896
  788. 1.251021 0.112340
  789. 6.160619 1.537165
  790. 1.034538 1.585162
  791. 0.000000 1.034635
  792. 2.355051 0.542603
  793. 6.614543 0.153771
  794. 10.245062 1.450903
  795. 3.467074 1.231019
  796. 7.487678 1.572293
  797. 4.624115 1.185192
  798. 8.995957 1.436479
  799. 11.564476 0.007195
  800. 3.440948 0.078331
  801. 1.673603 0.732746
  802. 4.719341 0.699755
  803. 10.304798 1.576488
  804. 2.086915 1.199312
  805. 6.338220 1.131305
  806. 8.254926 0.710694
  807. 16.067108 0.974142
  808. 1.723201 0.310488
  809. 3.785045 0.876904
  810. 2.557561 0.123738
  811. 9.852220 1.095171
  812. 3.679147 1.557205
  813. 9.789681 0.852971
  814. 14.958998 0.526707
  815. 11.182148 1.288459
  816. 7.528533 1.657487
  817. 5.253802 1.378603
  818. 13.946752 1.426657
  819. 15.557263 1.430029
  820. 12.483550 0.688513
  821. 2.317302 1.411137
  822. 10.069724 0.766119
  823. 5.792231 1.615483
  824. 4.138435 0.475994
  825. 12.929517 0.304378
  826. 9.378238 0.307392
  827. 8.361362 1.643204
  828. 7.939406 1.325042
  829. 10.735384 0.705788
  830. 11.592723 0.286188
  831. 10.098356 0.704748
  832. 9.299025 0.545337
  833. 11.158297 0.218067
  834. 16.143900 0.558388
  835. 10.971700 1.221787
  836. 0.000000 0.681478
  837. 3.178961 1.292692
  838. 17.625350 0.339926
  839. 1.995833 0.267826
  840. 10.640467 0.416181
  841. 9.628339 0.985462
  842. 4.662664 0.495403
  843. 5.754047 1.382742
  844. 0.000000 0.037146
  845. 9.334332 0.198118
  846. 3.846162 0.619968
  847. 10.685084 0.678179
  848. 4.752134 0.359205
  849. 0.697630 0.966786
  850. 10.365836 0.505898
  851. 0.461478 0.352865
  852. 11.339537 1.068740
  853. 5.420280 0.127310
  854. 3.469955 1.619947
  855. 8.517067 0.994858
  856. 8.306512 0.413690
  857. 2.628690 0.444320
  858. 0.000000 0.802985
  859. 0.000000 1.170397
  860. 7.298767 1.582346
  861. 7.331319 1.277988
  862. 9.392269 0.151617
  863. 5.541201 1.180596
  864. 15.149460 0.537540
  865. 5.515189 0.250562
  866. 7.728898 0.920494
  867. 11.318785 1.510979
  868. 3.574709 1.531514
  869. 7.350965 0.026332
  870. 7.122363 1.630177
  871. 1.828412 1.013702
  872. 10.117989 1.156862
  873. 11.309897 0.086291
  874. 8.342034 1.388569
  875. 0.241714 0.715577
  876. 10.482619 1.694972
  877. 9.289510 1.428879
  878. 4.269419 0.134181
  879. 0.000000 0.189456
  880. 0.817119 0.143668
  881. 1.508394 0.652651
  882. 9.359918 0.052262
  883. 10.052333 0.550423
  884. 11.111660 0.989159
  885. 11.265971 0.724054
  886. 10.383830 0.254836
  887. 3.878569 1.377983
  888. 13.679237 0.025346
  889. 10.526846 0.781569
  890. 0.000000 0.924198
  891. 4.106727 1.085669
  892. 8.118856 1.470686
  893. 7.796874 0.052336
  894. 2.789669 1.093070
  895. 6.226962 0.287251
  896. 10.169548 1.660104
  897. 0.000000 1.370549
  898. 7.513353 0.137348
  899. 8.240793 0.099735
  900. 14.612797 1.247390
  901. 3.562976 0.445386
  902. 3.230482 1.331698
  903. 3.612548 1.551911
  904. 0.000000 0.332365
  905. 3.931299 0.487577
  906. 14.752342 1.155160
  907. 10.261887 1.628085
  908. 2.787266 1.570402
  909. 15.112319 1.324132
  910. 5.184553 0.223382
  911. 3.868359 0.128078
  912. 3.507965 0.028904
  913. 11.019254 0.427554
  914. 3.812387 0.655245
  915. 11.056784 0.378725
  916. 8.826880 1.002328
  917. 11.173861 1.478244
  918. 11.506465 0.421993
  919. 7.798138 0.147917
  920. 10.155081 1.370039
  921. 10.645275 0.693453
  922. 9.663200 1.521541
  923. 10.790404 1.312679
  924. 2.810534 0.219962
  925. 9.825999 1.388500
  926. 1.421316 0.677603
  927. 11.123219 0.809107
  928. 13.402206 0.661524
  929. 1.212255 0.836807
  930. 1.568446 1.297469
  931. 3.343473 1.312266
  932. 5.400155 0.193494
  933. 3.818754 0.590905
  934. 7.973845 0.307364
  935. 9.078824 0.734876
  936. 0.153467 0.766619
  937. 8.325167 0.028479
  938. 7.092089 1.216733
  939. 5.192485 1.094409
  940. 10.340791 1.087721
  941. 2.077169 1.019775
  942. 10.151966 0.993105
  943. 0.046826 0.809614
  944. 11.221874 1.395015
  945. 14.497963 1.019254
  946. 3.554508 0.533462
  947. 3.522673 0.086725
  948. 14.531655 0.380172
  949. 3.027528 0.885457
  950. 1.845967 0.488985
  951. 10.226164 0.804403
  952. 10.965926 1.212328
  953. 2.129921 1.477378
  954. 0.000000 1.606849
  955. 9.489005 0.827814
  956. 0.000000 1.020797
  957. 0.000000 1.270167
  958. 6.556676 0.055183
  959. 9.959588 0.060020
  960. 7.436056 1.479856
  961. 0.404888 0.459517
  962. 9.952942 1.650279
  963. 15.600252 0.021935
  964. 2.723846 0.387455
  965. 0.513866 1.323448
  966. 0.000000 0.861859
  967. 7.280602 1.438470
  968. 9.161978 1.110180
  969. 0.991725 0.730979
  970. 7.398380 0.684218
  971. 12.149747 1.389088
  972. 9.149678 0.874905
  973. 9.666576 1.370330
  974. 3.620110 0.287767
  975. 5.238800 1.253646
  976. 14.715782 1.503758
  977. 14.445740 1.211160
  978. 13.609528 0.364240
  979. 3.141585 0.424280
  980. 0.000000 0.120947
  981. 0.454750 1.033280
  982. 0.510310 0.016395
  983. 3.864171 0.616349
  984. 6.724021 0.563044
  985. 4.289375 0.012563
  986. 0.000000 1.437030
  987. 3.733617 0.698269
  988. 2.002589 1.380184
  989. 2.502627 0.184223
  990. 6.382129 0.876581
  991. 8.546741 0.128706
  992. 2.694977 0.432818
  993. 3.951256 0.333300
  994. 9.856183 0.329181
  995. 2.068962 0.429927
  996. 3.410627 0.631838
  997. 9.974715 0.669787
  998. 10.650102 0.866627
  999. 9.134528 0.728045
  1000. 7.882601 1.332446

data.txt

代码:

import numpy as np
import operator
import matplotlib.pyplot as plt def knn_classifier(inX, train_data, labels, k):
"""
Knn_Classifier k近邻核心实现代码
:param inX: 输入待测试实例
:param train_data: 输入的训练数据集
:param labels: 训练数据集对应的标签
:param k: 分为k类
:return: 返回对应的类别
"""
train_data_size = train_data.shape[0] # 获取数据集的
diff_matrix = np.tile(inX, (train_data_size, 1)) - train_data # 计算inx与训练数据集中所有数据的差值
lp_diff_matrix = diff_matrix**2 # 这里采用的是欧氏距离
lp_distances = lp_diff_matrix.sum(axis=1)
distances = lp_distances**0.5
sorted_dist_indicies = np.argsort(distances) # 按照欧氏距离的大小进行排序
class_count = {}
for i in range(k):
vote_I_label = labels[sorted_dist_indicies[i]] # 依次存入欧氏距离前k个最小距离的编号
class_count[vote_I_label] = class_count.get(vote_I_label, 0) + 1 # 对应一个字典
sorted_class_count = sorted(class_count.items(), key=operator.itemgetter(1), reverse=True) # 对字典进行排序
return sorted_class_count[0][0] # 最高值对应类别即为inX的类别 def file_to_matrix(filename):
'''
文件数据转换为矩阵类型
:param filename:
:return:
'''
f = open(filename)
lines = f.readlines()
lines_number = len(lines)
feature = len(lines[1].split('\t'))
matrix = np.zeros((lines_number, feature - 1))
class_label_vector = []
index = 0
for line in lines:
line = line.strip()
item = line.split('\t')
matrix[index, :] = item[0:3]
class_label_vector.append(item[-1])
index += 1
return matrix, class_label_vector def auto_norm(data_set):
"""
auto_norm 归一化函数,消除量纲不同,不同属性的大小差异过大的影响
归一化公式 newValue = (oldValue - min)/(max - min) 取值0-1
:param dataSet:
:return:
"""
min_vals = data_set.min(0)
max_vals = data_set.max(0) ranges = max_vals - min_vals
# print(type(min_vals))
m = data_set.shape[0]
data_set = data_set - np.tile(min_vals, (m, 1))
data_set = data_set/(np.tile(ranges, (m, 1))) return data_set, ranges, min_vals def dating_class_test():
"""
dating_class_test 测试约会数据集data2的聚类预测结果
return: null
"""
ho_ratio = 0.1
dating_matrix, dating_labels = file_to_matrix('data2.txt') # 读入数据
norm_matrix, ranges, min_vals = auto_norm(dating_matrix) # 归一化数据
m = norm_matrix.shape[0] # 获取行数
num_test_vecs = int(m * ho_ratio) # 取出其中的10%作为测试数据
error_count = 0.0 # 记录错误率
for i in range(num_test_vecs):
classifier = knn_classifier(norm_matrix[i, :], norm_matrix[num_test_vecs:m, :], dating_labels[num_test_vecs:m], 4) #利用KNN聚类算法进行预测
print("the classifier came back with: " +classifier + " the real answer is: " + dating_labels[i])
if(classifier != dating_labels[i]) :
error_count += 1.0
print('the total error rate is: %f' % (error_count/float(num_test_vecs))) if __name__ == "__main__":
dating_class_test()

机器学习【算法】:KNN近邻的更多相关文章

  1. 机器学习入门KNN近邻算法(一)

    1 机器学习处理流程: 2 机器学习分类: 有监督学习 主要用于决策支持,它利用有标识的历史数据进行训练,以实现对新数据的表示的预测 1 分类 分类计数预测的数据对象是离散的.如短信是否为垃圾短信,用 ...

  2. 机器学习 之KNN近邻法

    目录 1.KNN近邻法 1.KNN近邻法 KNN模型由三个基本要素决定: 距离度量:其中欧式距离一般误差最小,\(x_{i} 和 x_{j}\)为两个样本点:\[L_{2}(x_{i}, x_{j}) ...

  3. Python机器学习算法 — KNN分类

    KNN简介 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.KNN分类算法属于监督学习. 最简单最初级的分类器是将全部的训练 ...

  4. 机器学习算法-K-NN的学习 /ML 算法 (K-NEAREST NEIGHBORS ALGORITHM TUTORIAL)

    1为什么我们需要KNN 现在为止,我们都知道机器学习模型可以做出预测通过学习以往可以获得的数据. 因为KNN基于特征相似性,所以我们可以使用KNN分类器做分类. 2KNN是什么? KNN K-近邻,是 ...

  5. 机器学习算法·KNN

    机器学习算法应用·KNN算法 一.问题描述 验证码目前在互联网上非常常见,从学校的教务系统到12306购票系统,充当着防火墙的功能.但是随着OCR技术的发展,验证码暴露出的安全问题越来越严峻.目前对验 ...

  6. 机器学习算法(KNN)

    KNN简介 KNN(k-NearestNeighbor)算法的思想总结一下:就是在数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K ...

  7. 每日一个机器学习算法——k近邻分类

    K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由 ...

  8. 机器学习算法——kNN

    顶级数据挖掘会议ICDM于2006年12月评选出了数据挖掘领域的十大经典算法,kNN便是其中一个. kNN算法的思想是:在训练集中选取与输入数据最近的k个邻居,统计k个邻居中出现次数最多的类别,以此作 ...

  9. sklearn机器学习算法--K近邻

    K近邻 构建模型只需要保存训练数据集即可.想要对新数据点做出预测,算法会在训练数据集中找到最近的数据点,也就是它的“最近邻”. 1.K近邻分类 #第三步导入K近邻模型并实例化KN对象 from skl ...

  10. 机器学习算法——kNN(k-近邻算法)

    算法概述 通过测量不同特征值之间的距离进行 [分类] 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围: 数值型 和 标称型 . 算法流程 数据 样本数 ...

随机推荐

  1. SpringBoot(五)-- 整合Spring的拦截器

    一.步骤 1.创建我们自己的拦截器类并实现 HandlerInterceptor 接口. 2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptor ...

  2. 《转》Python学习(17)-python函数基础部分

    http://www.cnblogs.com/BeginMan/p/3171977.html 一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/arch ...

  3. C#访问SQLServer数据库访问帮助类

    SQLServer数据库访问帮助类 这里有一个Mysql帮助类的使用例子可以参考(大同小异) 写了一个Mysql的例子,SQLServer的差不多,一样的 C#简单三层结构设计UI.BLL.DAL 1 ...

  4. MyBatis学习之输入输出类型

    1.  传递pojo对象 Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称,其中,#{}:占位符号,好处防止sql注入,${}:sql拼接符号, 简要说明 ...

  5. isolinux.cfg 文件是干什么的

    1.   首先光盘镜像也就是iso文件采用的是“ISO 9660 ”文件系统 . cd上的文件都存在这个简单的iso文件系统里,linux可以用mount  -o loop 直接把*.iso文件mou ...

  6. docker参数--restart=always的作用

    创建容器时没有添加参数  --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动. 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker ...

  7. 更新jenkins插件,报错 Perhaps you need to run your container with "-Djava.awt.headless=true"?

    Configuring the Java environment variables vi ~/.bash_profile 在最后一行加入: export JAVA_OPTS=-Djava.awt.h ...

  8. 【JSP】EL表达式语言

    EL简介 EL语言原本是JSTL1.0中的技术(所以EL和JSTL配合如此亲密和默契也就是自然的了),但是从JSP2.0开始(JSTL1.1)就分离出来纳入了JSP的标准了.因此EL不需要任何jar包 ...

  9. VC消息传递(对话框间传递参数)

    以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)发送自定义消息为例,说明这两种不同方法的自定义消息的 消息传递的方法一:使用ON_MESSAGE使用ON_ ...

  10. AD添加LOGO的方法

    1 将logo图片转换成单色的BMP 图像.简单的方法是使用Windows自带的画图程序,在将图片另存为时, 在文件类型下拉列表中选择单色.bmp即可.我们以Altium为例,如图所示将蓝色logo另 ...