KNN电影分类

1构建已经分类好的原始数据集

​ 为了方便验证,这里使用python的字典dict构建数据集,然后再将其转化成DataFrame格式。

import pandas as pd
#定义字典
rowdata={'电影名称':['无问西东','后来的我们','前任3','红海行动','唐人街探案','战狼2'],
         '打斗镜头':[1,5,12,108,112,115],
         '接吻镜头':[101,89,97,5,9,8],
         '电影类型':['爱情片','爱情片','爱情片','动作片','动作片','动作片']}
#字典转DataFrame
movie_data= pd.DataFrame(rowdata)
movie_data

电影名称 打斗镜头 接吻镜头 电影类型
0 无问西东 1 101 爱情片
1 后来的我们 5 89 爱情片
2 前任3 12 97 爱情片
3 红海行动 108 5 动作片
4 唐人街探案 112 9 动作片
5 战狼2 115 8 动作片

2.计算已知类别数据集中的点与当前点之间的距离

new_data = [24,67]
dist = list((((movie_data.iloc[:6,1:3]-new_data)**2).sum(1))**0.5) #axis=0为对应列相加,axis=1为对应行相加
dist
#其中.iloc[:6,1:3]表示取六行,0,1,2,3,4,5 第1,2列的数据

[41.048751503547585,
29.068883707497267,
32.31098884280702,
104.4030650891055,
105.39449701004318,
108.45275469069469]

:获得对应的两点间的距离,的大小,使用的是欧氏距离的方法

3.将距离升序排列,然后选取距离最小的k个点

dist_l = pd.DataFrame({'dist': dist, 'labels': (movie_data.iloc[:6, 3])})
dist_l

dist labels
0 41.048752 爱情片
1 29.068884 爱情片
2 32.310989 爱情片
3 104.403065 动作片
4 105.394497 动作片
5 108.452755 动作片

dr = dist_l.sort_values(by = 'dist')[: 4]
dr
#前四列的值

dist labels
1 29.068884 爱情片
2 32.310989 爱情片
0 41.048752 爱情片
3 104.403065 动作片

4.确定前k个点所在类别的出现频率

re = dr.loc[:,'labels'].value_counts()
re

爱情片 3
动作片 1
Name: labels, dtype: int64

5.选择频率最高的类别作为当前点的预测类别

result = [] 
result.append(re.index[0])
result

[‘爱情片’]

封装函数

import pandas as pd
"""
函数功能:KNN分类器
参数说明:
    new_data:需要预测分类的数据集
    dataSet:已知分类标签的数据集(训练集)
    k:k-近邻算法参数,选择距离最小的k个点
返回:
    result:分类结果
"""

def  classify0(inX,dataSet,k):
    result = [] 
    dist = list((((dataSet.iloc[:,1:3]-inX)**2).sum(1))**0.5)
    dist_l = pd.DataFrame({'dist':dist,'labels':(dataSet.iloc[:, 3])})
    dr = dist_l.sort_values(by = 'dist')[: k]
    re = dr.loc[:, 'labels'].value_counts()
    result.append(re.index[0])
    return result
inX = new_data
dataSet = movie_data
k = 3
classify0(inX,dataSet,k)

[24, 67]
电影名称 打斗镜头 接吻镜头 电影类型
0 无问西东 1 101 爱情片
1 后来的我们 5 89 爱情片
2 前任3 12 97 爱情片
3 红海行动 108 5 动作片
4 唐人街探案 112 9 动作片
5 战狼2 115 8 动作片
[‘爱情片’]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐