首页 > 编程语言 >机器学习实践篇第二篇-KNN算法学习

机器学习实践篇第二篇-KNN算法学习

时间:2024-04-02 13:24:06浏览次数:26  
标签:KNN 分类 group labels 学习 算法 1.0 第二篇

一.了解什么是K-NN算法

   1.KNN算法原理

  KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。

KNN算法的思想非常简单:对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。

KNN算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。

输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,然后提取样本中特征最相近的数据(最近邻)的分类标签。

 2.KNN算法三要素:k值的选取,距离度量的方式和分类决策规则。

    3.K值的选择方法:

  一种常见的方法是从k等于训练集中样本数量的平方根开始。比如训练集中有100个案例,则k可以从10开始进行进行进一步筛选。
另一种方法是基于各种测试数据测试多个k值,并选择一个可以提供最好分类性能的k值。除非数据的噪声非常大,否则大的训练集可以使k值的选择不那么重要。
还有一种方法是选择一个较大的k值,同时用一个权重投票,在这个过程中,认为较近邻的投票比远的投票权重更大。
   4.距离度量的方式

  距离度量的方式有三种:欧式距离、曼哈顿距离、闵可夫斯基距离。

二.KNN算法的实现​

  这里我们对海伦问题进行讨论,看看是如何解决海伦问题的。

  海伦一直使用在线约会网站寻找适合自己的约会对象。她曾交往过三种类型的人:

    • 不喜欢的人
    • 一般喜欢的人
    • 非常喜欢的人

  这些人包含以下三种特征

    • 每年获得的飞行常客里程数
    • 玩视频游戏所耗时间百分比
    • 每周消费的冰淇淋公升数

  该网站现在需要尽可能向海伦推荐她喜欢的人,需要我们设计一个分类器,根据用户的以上三种特征,识别出是否该向海伦推荐。

 1.使用python导入数据集 

from numpy import *
import operator
 
def createDataSet():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'A', 'B', 'B']
    return group, labels
 
group, labels = createDataSet()
print(group)
print(labels)
import matplotlib.pyplot as plt
 
def createDataSet():
    group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'A', 'B', 'B']
    return group, labels
 
def plotDataSet(group, labels):
    label_dict = {'A': 'red', 'B': 'blue'}
    colors = [label_dict[label] for label in labels]
    fig, ax = plt.subplots()
    ax.scatter(group[:, 0], group[:, 1], c=colors)
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_title('Data Set')
    plt.show()
 
group, labels = createDataSet()
plotDataSet(group, labels)

 

  2.构建KNN算法

  

def classify0(inX, dataSet, labels, k):
    #numpy函数shape[0]返回dataSet的行数
    dataSetSize = dataSet.shape[0]
    #在列向量方向上重复inX共1次(横向),行向量方向上重复inX共dataSetSize次(纵向)
    diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
    #二维特征相减后平方
    sqDiffMat = diffMat**2
    #sum()所有元素相加,sum(0)列相加,sum(1)行相加
    sqDistances = sqDiffMat.sum(axis=1)
    #开方,计算出距离
    distances = sqDistances**0.5
    #返回distances中元素从小到大排序后的索引值
    sortedDistIndices = distances.argsort()
    #定一个记录类别次数的字典
    classCount = {}
    for i in range(k):
        #取出前k个元素的类别
        voteIlabel = labels[sortedDistIndices[i]]
        #dict.get(key,default=None),字典的get()方法,返回指定键的值,如果值不在字典中返回默认值。
        #计算类别次数
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    # import pdb
    # pdb.set_trace()
    #返回次数最多的类别,即所要分类的类别
    return sortedClassCount[0][0]

三.总结

  经过对KNN算法的学习后,我学会了一种用于分类和回归的统计方法,KNN算法是一种简单而直观的分类算法,其基本思想是通过找到与待分类样本最近的K个已知类别样本来确定其类别。其主要优点是实现简单、可解释性强,并且适用于多分类问题和非线性分类问题。但是,KNN算法的缺点也很明显,主要包括计算复杂度高、需要大量的存储空间等。世界上没有完美的算法,每个算法都有优有劣,但KNN算法较为简单,对于我们刚入门的新手来说比较适合,KNN算法虽然有一些局限性和缺点,但是在实际应用中仍然具有很大的价值和意义。理解KNN算法的基本思想,掌握其实现方法和优化技巧,可以对我们进一步学习和应用其他机器学习算法提供很好的基础。
参考文献:KNN算法原理-CSDN博客

标签:KNN,分类,group,labels,学习,算法,1.0,第二篇
From: https://www.cnblogs.com/Linglo/p/18110358

相关文章

  • 立创泰山派学习04-ubuntu的VNC远程桌面
    VNC(VirtualNetworkConsole)是虚拟网络控制台的缩写,主机服务与客户端必须在同一个局域网内。1、先在tspi上安装VNC服务端sudoaptinstallx11vnc2、创建服务端密码x11vnc-storepasswd使用lckfb用户创建VNC连接密码,密码默认保存在/home/lckfb/.vnc/passwd文件......
  • CMSE11475金融机器学习
    金融机器学习(CMSE11475)项目说明该项目旨在实践使用最先进的机器学习模型来分析财务数据和解决财务问题。单个项目:该项目是单独的项目。不需要任何组。学生应根据数据选择自己的主题独自完成自己的研究问题。在学习中相互合作和讨论鼓励过程,但项目应由学生自己完成,而不是分组课业。......
  • JavaWeb学习笔记——第十二天
    SpringBootWeb案例(三)登录功能LoginController:importcom.zgg1h.pojo.Emp;importcom.zgg1h.pojo.Result;importcom.zgg1h.service.EmpService;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springfram......
  • 【文化课学习笔记】【数学】复数
    【数学】复数定义规定\(i^2=-1\),并称\(i\)为虚数单位。则\(i^3=-i,i^4=(i^2)^2=1,i^5=i^4\cdoti=i\),所以\(i^k\)具有周期性,周期为\(4\)。复数:\[z=a+bi(a,b\in\mathrmR)\]其中\(a\)为实部,\(b\)为虚部。注意:\(a\)和\(b\)都是实数。所有复数......
  • Vue学习笔记70--全局前置-路由守卫 + 后置路由守卫 + 独享守卫 + 组件内守卫
    路由守卫简介作用:用于对路由进行权限控制分类:全局守卫(前置路由守卫+后置路由守卫)、独享守卫、组件内守卫全局--前置路由守卫+ 后置守卫 示例1importVuefrom'vue'2importVueRouterfrom'vue-router'3importHomefrom'../views/Home.vue'4imp......
  • 基于深度学习的人脸表情识别系统
    基于深度学习的人脸表情识别系统摘要随着社会的进步和经济的发展,人工智能已经开始应用于各种各样的场景,最典型的应用就是机器人的应用。人机交互的设计已经越来越成熟,而机器人要想了解人的正确想法就不应仅体现在语言上,还应该在其他方面分析出人的正确情感,表情识别分析就......
  • 基于深度学习的疲劳检测算法
    摘要:为了实现对驾驶员驾驶状态的检测预警,避免发生交通事故。提出了一种基于改进多任务级联卷积神经网络(Multi-TaskConvolutionalNeuralNetworks,MTCNN)人脸检测及多特征融合的疲劳检测方法。算法利用改进的MTCNN进行人脸检测和面部9个特征点定位;基于特征点确定出嘴巴、眼睛......
  • 基于深度学习的咖啡豆叶片病害识别算法设计与实现任务书
    一、毕业设计(论文)课题的背景咖啡原产于非洲热带地区,距今发展己有1300多年的的历史。作为饮料,咖啡具有健胃、消食、利尿、醒脑、提神等功效。咖啡含有淀粉、糖分、脂肪和蛋白质等多种营养成分。其中小粒咖啡的主要成分含量为:粗纤维17.94、蛋白质13.86、粗脂肪11.97、淀粉6.......
  • 基于深度学习的健身动作识别纠正系统设计与实现开题报告
    一、本课题研究意义随着人们对身体健康和自身形体的愈发重视,健身逐渐成为人们日常生活中的一个重要部分,而科学的健身和标准的健身动作可以使人们健身时能够更好地拥有好的形体和保护自己的安全,防止不规范的动作造成的肌肉拉伤和无效化健身。本系统视频识别以深度学习中的S......
  • 基于STM32HAL库的FreeRTOS学习(2)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言上一篇文章我们介绍了FreeRTOS的基础创建任务函数,这篇我们来介绍FreeRTOS的任务挂起与恢复函数。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是任务挂起与恢复?在了解任务恢复之前,我们要先......