KNN算法简述
1、算法概述
KNN算法的核心思想是:一个样本空间中最相邻的k个样本中最常见的类别就是待测试数据的类别,并且具有相同的特征。
2、算法介绍
当待测数据与数据集有相同的属性时,可以用knn算法判断是否为同一类别,具体计算,待测样本到数据集中每个样本的距离。有k决定范围,考虑k个距离样本距离最近的数据,其中多数属于某个类别则样本属于属于该类别。
如上图所示,当k=5时,绿色属于红色三角形类别,当k=7时属于蓝色正方形类别,说明k值在很大程度上决定了样本类别。
3、工作原理
1.计算待分类数据与其他物体的距离。
2.统计最近的k个邻居。
3.待测类别则为样本中最多的类别。
4、步骤
1.加载数据集
2.计算待测数据到到个数据的距离
3.将计算的距离从小到大排序
4.确定k值,找最小的k个数据
5.计算k个数据中出现频次最高的类别
6.返回该类别即为待测数据的类别
距离公式
5、代码小试
//训练集样本
movie_data={
"宝贝当家": [45, 2, 9, "喜剧片"],
"美人鱼": [21, 17, 5, "喜剧片"],
"澳门风云3": [54, 9, 11, "喜剧片"],
"功夫熊猫3": [39, 0, 31, "喜剧片"],
"谍影重重": [5, 2, 57, "动作片"],
"叶问3": [3, 2, 65, "动作片"],
"伦敦陷落": [2, 3, 55, "动作片"],
"我的特工爷爷": [6, 4, 21, "动作片"],
"奔爱": [7, 46, 4, "爱情片"],
"夜孔雀": [9, 39, 8, "爱情片"],
"代理情人": [9, 38, 2, "爱情片"]
} //字典类型
// 待测样本
test_data={
"唐人街探案":[23,3,17,"?"]}
//求训练集到测试集的距离
import math
x=[23,3,27]
test_distance=[]
for key,v in movie_data.items():
d=math.sqrt((x[0]-v[0])**2+(x[1]-v[1])**2+(x[2]-v[2])**2) //欧式距离计算公式
test_distance.append([key,round(d,2),v[3])
print(test_distance)
// 对距离排序
test_distance.sort(key=lamba dis:dis[1])
print(test_distance)
// 通过k值确定样本范围
test1_distance=test_distance[:5]
print(test1_distance)
// 找出样本中出现最多的类别即为待测数据类别
types=[["喜剧片",["动作片"],["爱情片"]]
for i in test1_distance:
for j in types:
if i[2]=j[0]:
j[1]+=1
print(types)
// 输出待测样本类别
types.sort(key=lamba d:d[1] reverse=True)
print(types[0][0])
最终的结果应该是喜剧电影的输出。
. . .
相关推荐
热门推荐
VC 编程技巧 (一)
23天前
docker安装 kafka集群
23天前
flask框架项目搭建
23天前
libiconv字符集转换库使用方法
23天前
Lucene 结构分析
23天前
【计算机系统】位运算与逻辑运算
23天前
ads via 小工具