用KNN(k-nearest neighbor)如何判断自己喜欢的电影属于什么类型

参考原博客地址


一、knn概念

knn(k near neighbor):每一个测试样本的类别都可以用和它最近的k个数据(邻居)的类别代表。

二、算法步骤

1.流程

初始化已知数据集

  1. 计算已知类别数据集中的点与当前点之间的距离
  2. 按距离递增次序排序
  3. 选取与当前点距离最小的k个点
  4. 统计前k个点所在的类别出现的频率
  5. 返回前k个点出现频率最高的类别作为当前点的预测分类

例子
这里采用的是欧氏距离!
在这里插入图片描述

2.代码如下

# -*- coding = utf-8 -*-
# @Time : 2021/3/11 12:41
# @Author : pinpin
# @File : knn.py
# @Software : PyCharm
import math
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,"爱情片"],
    "新步步惊心":[8,34,17,"爱情片"]
}
#测试样本:唐人街探案[23,3,17,"?片”]
#计算测试样本与已知数据的距离,并保留两位小数
tr=[23,3,17]
KNN=[]
for key,v in movie_data.items():
    d=(tr[0]-v[0])**2+(tr[1]-v[1])**2+(tr[2]-v[2])**2
    KNN.append([key,round(d,2)])
#按照距离从小到大排序
#list的sort排序函数,lambda是匿名函数,dis:dis[1]指的是lambda表示的匿名函数的参数,这里按照参数类型的第二个元素递增排序
KNN.sort(key=lambda dis:dis[1] )
#选择距离最小的前k个样本,这里取5
KNN=KNN[:5]
#确定前K个样本所在类别出现的频率,并打印出来频率最高的类别
class_number={"动作片":0,"爱情片":0,"喜剧片":0}
for k in KNN:
    leixing=movie_data[k[0]]
    class_number[leixing[3]]+=1
class_number = sorted(class_number.items(),key=lambda l:l[1],reverse=True)
print(class_number[0][0],sep='\n')

总结

以上就是今天要讲的内容,本文仅仅简单介绍了knn算法原理以及python的一个实例,感谢参考博主的分享!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值