zoukankan      html  css  js  c++  java
  • knn原理及借助电影分类实现knn算法

    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:
    ", data)
    print("*" * 80)
    # 获取训练集
    train = data.iloc[:, :6]
    print("train:
    ", train)
    # 获取训练集的特征值   与目标值
    train_x = train.iloc[:, :-1]
    train_y = train.iloc[:, -1]
    # 获取测试集
    print("*" * 80)
    test = data.columns[-4:]
    print("test:
    ", 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:
    ",train)
    
    # 确定K 值 k值不同结果不同
    k =5
    res = train.loc[:,'电影类型'][:k].mode()[0]
    print("*" * 80)
    print(res)
     
     
     
  • 相关阅读:
    DOM基础
    9个实用的Javascript代码高亮脚本
    去掉超链接虚线框去掉chrome浏览器中input或textarea在得到焦点时出现黄色边框和取消可以拖动大小
    我的Gvim配置文件
    收集的一些有关UED的团队和个人博客
    JS函数:返回下一个元素节点而不是下一个节点
    分享一款图片导航效果 Animated Slideshow Navigation
    原生javascript写的Tab菜单(函数版)
    单个select语句实现MySQL查询统计次数
    mysql 语句case when
  • 原文地址:https://www.cnblogs.com/wutanghua/p/11546214.html
Copyright © 2011-2022 走看看