“python”之“机器学习”第一篇“K近邻算法”

例题说明:

本例是由无问东西、后来的我们、前任3等五部电影构成的训练集,根据这五部电影的打斗镜头和接吻镜头训练机器人,当有新电影出现时,可根据其打斗镜头和接吻镜头来判断他属于哪类电影

在这里插入图片描述
K近邻算法顾名思义,即根据距离来判断其属于哪类电影,将电影的打斗镜头和接吻镜头制成表格如下:
在这里插入图片描述
肉眼可见,绿色点即新电影距离爱情片更近在这里插入图片描述
具体操作步骤如下:
在这里插入图片描述
在这里插入图片描述
以下是 整个代码:

#K近邻算法实现,以判断动作片,还是爱情片为例
#为方便验证,这里使用python的字典dict构建数据集,然后再将其转化为dataframe格式


import  pandas as pd
rowdata = {'电影名称': ['无问东西', '后来的我们', '前任三', '红海行动', '唐人街探案', '战狼2'],
           '打斗镜头': [1, 5, 12, 108, 112, 115],
           '接吻镜头'[101, 89, 97, 5, 9, 8],
           '电影类型': ['爱情片', '爱情片', '爱情片', '动作片', '动作片', '动作片']}
movie_data = pd.DataFrame(rowdata)
#计算已知类别数据集中的点与当前点之间的距离
k = 4
new_data = [24, 67]#定义的新电影,打斗数24,接吻数67
dist = list((((movie_data.iloc[:6, 1:3]-new_data)**2).sum(1))**0.5)#iloc这是python中的数据切片只要0:6行1:3列,此句意为计算所求点到每个点的距离
#将距离升序排列,然后选取距离最小的k个点
dist_1 = pd.DataFrame({'dist': dist, 'labels': (movie_data.iloc[:6, 3])})#给上一步求出的距离值加上原表第3列的标签
dr = dist_1.sort_values(by = 'dist')[: k]#sort_values用于排序
#确定前k个点所在类别出现的频率
re = dr.loc[:, 'labels'].value_counts()
re.index[0]
result = []
resulte.append(re.index[0])

发布了44 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_45161766/article/details/104283788