码迷,mamicode.com
首页 > 编程语言 > 详细

knn原理及借助电影分类实现knn算法

时间:2019-09-19 01:02:13      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:sum   使用   excel   之间   数据   and   加载   shape   class   

KNN最近邻算法原理

  KNN英文全称K-nearst neighbor,中文名称为K近邻算法,它是由Cover和Hart在1968年提出来的 
  KNN算法原理:
        1. 计算已知类别数据集中的点与当前点之间的距离;
        2. 按照距离递增次序排序;
        3. 选择与当前距离最小的k个点;
        4. 确定前k个点所在类别的出现概率
        5. 返回前k个点出现频率最高的类别作为当前点的预测分类
 
  如果数据集中序号1-12为已知的电影分类,分为喜剧片、动作片、爱情片三个种类,使用的特征值分别为搞笑镜头、打斗镜头、拥抱镜头的数量。那么来了一部新电影《唐人街探案》,它属于上述3个电影分类中的哪个类型?
技术图片 
 
代码实现如下
import pandas as pd
import numpy as np


def distance(v1, v2):
    """
    距离计算
    :param v1:点1
    :param v2: 点2
    :return: 距离
    """
    dist = np.sqrt(np.sum(np.power((v1 - v2), 2)))
    return dist


# 加载数据
data = pd.read_excel("./电影分类数据.xlsx")
print("data:\n", data)
print("*" * 80)
# 获取训练集
train = data.iloc[:, :6]
print("train:\n", train)
# 获取训练集的特征值   与目标值
train_x = train.iloc[:, :-1]
train_y = train.iloc[:, -1]
# 获取测试集
print("*" * 80)
test = data.columns[-4:]
print("test:\n", test)

# 进行计算距离
# 循环计算训练集每一个样本与测试集的距离
for i in range(train.shape[0]):

    # 计算距离
    dist = distance(train_x.iloc[i,2:5],test[1:])

    train.loc[i,dist] = dist



print(train)
#  对距离按照升序进行排序
train.sort_values(by=dist,inplace=True)
print("*" * 80)
print("排序后的train:\n",train)

# 确定K 值 k值不同结果不同
k =5
res = train.loc[:,电影类型][:k].mode()[0]
print("*" * 80)
print(res)

 

 
 
 

knn原理及借助电影分类实现knn算法

标签:sum   使用   excel   之间   数据   and   加载   shape   class   

原文地址:https://www.cnblogs.com/wutanghua/p/11546214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!