KNN算法(邻近算法)介绍与代码实现

KNN算法(邻近算法)介绍与代码实现

一、简介

邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。

二、算法实现

1.算法理解

(1)准备数据,对数据进行预处理。
(2)选用合适的数据结构存储训练数据和测试数据。
(3)设定参数,如k。
(4)计算测试数据到训练数据的距离,按照从小到大排序。
(5)取前k个数据作为参考样本。
(6)分析参考样本,得到结果。

2.代码实现

训练数据:
序号 电影名称 搞笑镜头 拥抱镜头 打斗镜头 电影类型
1 宝贝当家 45 2 9 喜剧片
2 美人鱼 21 17 5 喜剧片
3 澳门风云3 54 9 11 喜剧片
4 功夫熊猫3 39 0 31 喜剧片
5 谍影重重 5 2 57 动作片
6 叶问3 3 2 65 动作片
7 我的特工爷爷 6 4 21 动作片
8 奔爱 7 46 4 爱情片
9 夜孔雀 9 39 8 爱情片
10 代理情人 9 38 2 爱情片
11 新步步惊心 8 34 17 爱情片
12 伦敦陷落 2 3 55 动作片

测试数据:
唐人街探案 23 3 17

import numpy as np
import pandas as pd

class KNN(object):
    def __init__(self,path,testdata,k):
        self.path=path
        self.testData=testdata
        self.k=k

    def readData(self):
        #读取数据
        try:
            self.data = pd.read_csv(self.path,sep=',',encoding='gbk')
        except:
            self.data = pd.read_excel(self.path)
        # return self.data

    def clearData(self):
        #清洗空值的数据
        self.data.dropna(axis=1,how='all',inplace=True)
        self.data.dropna(axis=0,how='all',inplace=True)

    def distance(self):
        # 计算距离
        #新增instance一列,将对应点的距离一一填入
        self.data['distance'] = np.sqrt((self.data['搞笑镜头']-self.testData[0])**2+(self.data['拥抱镜头']-self.testData[1])**2+(self.data['打斗镜头']-self.testData[2])**2)

    def KNN_way(self):
        # KNN算法函数
        sort_list = sorted(self.data['distance'])[:self.k]   #将距离一列进行排列存入sort_list
        list=[]
        for i in sort_list:
            list.append(self.data.loc[self.data['distance']==i]['电影类型'].values)
        df = pd.DataFrame({'type':list})

        top_type = df['type'].describe()[2][0]
        print(top_type)

test = KNN(r'C:\Users\Administrator\Desktop\电影分类数据.xlsx',[23, 3, 17],5)
test.readData()
test.clearData()
test.distance()
test.KNN_way()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值