KNN算法 机器学习的分类算法 基本思想
一个样本与数据集中的k个样本最相似 如果这k个样本大多数属于某一类 则该样本也属于这一类
用游戏得分数据编写实例
import math
import numpy
import operator
def createDataSet():
playerdata {1: [633, 黄金 ],
2: [426, 黄金 ],
3: [315, 白银 ],
4: [422, 白银 ],
5: [753, 白金 ],
6: [862, 钻石 ],
7: [456, 白银 ],
8: [675, 白金 ],
9: [1358, 大师 ],
10: [985, 钻石 ],
11: [765, 白金 ],
12: [554, 黄金 ],
13: [113, 青铜 ],
14: [102, 青铜 ],
15: [151, 青铜 ],
x [233]
KNN []
for key, v in playerdata.items():
d math.sqrt((x[0] - v[0]) ** 2 )
KNN.append([key, round(d, 2)])
KNN.sort(key lambda dis: dis[1])
print(KNN)
KNN KNN[:5]
labels { 青铜 : 0, 白银 : 0, 黄金 : 0, 白金 : 0, 钻石 : 0, 大师 : 0}
for s in KNN:
label playerdata[s[0]]
labels[label[1]] 1
labels sorted(labels.items(), key lambda l: l[1], reverse True)
print(labels, labels[0][0], sep n )
createDataSet()
解释
输入样本
playerdata {1: [633, 黄金 ],
2: [426, 黄金 ],
3: [315, 白银 ],
4: [422, 白银 ],
5: [753, 白金 ],
6: [862, 钻石 ],
7: [456, 白银 ],
8: [675, 白金 ],
9: [1358, 大师 ],
10: [985, 钻石 ],
11: [765, 白金 ],
12: [554, 黄金 ],
13: [113, 青铜 ],
14: [102, 青铜 ],
15: [151, 青铜 ],
}
设置样本
x [233]
设置KNN算法距离计算公式并引入数组存储
KNN [] for key, v in playerdata.items(): d math.sqrt((x[0] - v[0]) ** 2 ) KNN.append([key, round(d, 2)])
排序经过计算之后的距离数组并选取K 5
KNN.sort(key lambda dis: dis[1]) print(KNN) KNN KNN[:5]
设置各段位数据 对5个最近的数据集进行匹配 输出匹配最多次的段位
labels { 青铜 : 0, 白银 : 0, 黄金 : 0, 白金 : 0, 钻石 : 0, 大师 : 0}
for s in KNN:
label playerdata[s[0]]
labels[label[1]] 1
labels sorted(labels.items(), key lambda l: l[1], reverse True)
print(labels, labels[0][0], sep n )
结束
代码运行结果为
[[3, 82.0], [15, 82.0], [13, 120.0], [14, 131.0], [4, 189.0], [2, 193.0], [7, 223.0], [12, 321.0], [1, 400.0], [8, 442.0], [5, 520.0], [11, 532.0], [6, 629.0], [10, 752.0], [9, 1125.0]] [( 青铜 , 3), ( 白银 , 2), ( 黄金 , 0), ( 白金 , 0), ( 钻石 , 0), ( 大师 , 0)] 青铜



