你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

KNN实例1

2021/12/22 8:25:34

  一、需求:

      一个简单的KNN代码实现:通过已知电影中打斗次数和接吻次数将电影划分为爱情电影与动作电影,预测测试电影属于哪一类电影。

二、代码实现:

代码用python实现,见注释。

import numpy as np
import  matplotlib.pyplot as plt
# 打斗次数
fight=(5,2,1,105,97,98)
# 接吻次数
kiss=(114,101,80,11,5,3)
# 爱情电影1,动作电影2
filmtype=(1,1,1,2,2,2)
plt.scatter(fight,kiss,c=filmtype)
plt.xlabel('fight')
plt.ylabel('kiss')
plt.title('movie')
# 打斗次数和接吻次数合并为输入
x=np.array([fight,kiss])
# 输出电影类型
y=np.array(filmtype)
# 矩阵转置,每一行代表一条数据样本
x=x.T
print(x)
print(y)
plt.show()
# 测试数据
xx=np.array([18,90])
# 按行求和,计算未知样本和每个训练集样本的距离
dist=(((x-xx)**2).sum(1))**0.5
print(dist)
#使用argsort()函数 将距离按索引升序排列,获取排序后的索引值
sortedDist=dist.argsort()
print(sortedDist)
# 选取距离最小的K个点,统计前K个点所在类别出现的次数
k=4
# 定义一个空字典.voteLabel存放key值,get函数取value值
classCount={}
for i in range(k):
    voteLabel=y[sortedDist[i]]
    classCount[voteLabel]=classCount.get(voteLabel,0)+1
print(classCount )
# 根据多数表决,输出结果
maxType=0
maxCount=-1
# 遍历字典
for key,value in classCount.items():
    if value>maxCount:
        maxType=key
        maxCount=value
print(maxType)

三、运行结果: