机器学习----K-近邻算法(Python代码详解)

本博文的内容主要是在自学《Machine Learning in Action》的中文版《机器学习实战》的小结,原书中对调用的一些模块的函数并没有做出过多的解释,本文进行了总结和补充。

K-近邻算法

一、算法概述

K-近邻算法就是采用测量不同特征值之间的距离进行分类。
距离采用欧式距离计算公式,计算两个向量点xA和xB之间的距离:

d=(xA0xB0)2+(xA1xB1)2

例如,点(0,0)与点(1,2)之间的距离计算为:
(10)2+(20)2

如果数据集存在4个特征值,则点(1,0,0,1)与(7,6,9,4)之间的距离计算为:
(71)2+(60)2+(90)2+(41)2

  • 优点:精度高,对异常值不敏感,无数据输入假定。
  • 缺点 : 计算复杂度高,空间复杂度高。

Python代码实现

基本算法实现

  1. 使用Python准备数据
from numpy import *
import  operator

def creatDataset():
    group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) #数据集
    labels=['A','A','B','B'] #标签
    return group,labels
  1. K-近邻算法
    根据K-近邻算法的原理,其代码逻辑如下:
    1. 计算已知类别属性的数据集中的每个点与当前点之间的距离;
    2. 按照距离从小到大是次序进行排序;
    3. 选取与当前距离最小的K个点;
    4. 确定K个点所在类别的出现频率;
    5. 返回前K个点出现频率最高的类别作为当前点的预测类别;
def classify0(intX,dataSet,labels,k):
    #1.1获得dataSet矩阵行数
    dataSetSize=dataSet.shape[0] 
    #1.1tile函数通过给定参数构建数组
    diffMat=tile(intX,(dataSetSize,1))-dataSet 
    #1.1数组中每个元素进行平方
    sqDiffMat=diffMat ** 2 
    #1.1对多维数组第一轴进行相加求和
    sqDistances=sqDiffMat.sum(axis=1) 
    distances=sqDistances ** 0.5 #1.1开平方
    #2.1返回排序数组的索引
    sortedDistIndicies=distances.argsort() 
    classCount={}
    #3.1
    for i in range(k):
        #4.1获得从小到大排序后依次的标签
        voteIlabel = labels[sortedDistIndicies[i]]
        #4.2记录前K个元素中不同标签出现的次数,classCount应为       字典类型
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 
    #4.3按标签出现次数从多到少进行排序
    sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse = True)
    #5 
    return sortedClassCount[0][0]

如果输入参数intX=[0,0],则该程序给出的分类结果因该为B

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值