机器学习实战——2.k-近邻算法

2.1.k-近邻(kNN)算法概述
k-近邻算法采用测量不同特征值之间的距离进行分类。
优点:精度高、对异常值不敏感、无数据输入设定。
缺点:计算复杂度高、空间复杂度高。
适用范围:数值型和标称型。
kNN工作原理:存在一个样本数据集,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
k-近邻算法的一般流程:
在这里插入图片描述
2.1.1准备:使用python导入数据
下面给出一个小例子:
写一个createDataSet()函数用于生成数据集:

import numpy as np
import operator
import matplotlib.pyplot as plt
#生成数据集
def createDataSet():
    group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    label=[['A'],['A'],['B'],['B']]
    return group,label

if __name__=='__main__':
    group,label=createDataSet()
    figure=plt.figure()
    plt.xlim((-0.5,1.2))
    plt.ylim((-0.5,1.2))
    for i in range(len(label)):
        plt.plot(group[i][0],group[i][1],marker='o',markerfacecolor='b')
        plt.annotate(label[i][0],xy=group[i],xycoords='data',xytext=(-5,5),textcoords='offset points',fontsize=7)
    plt.show()

在这里插入图片描述
如图四组数据中,每组数据有两个已知的属性或特征值。由于人类大脑的限制,通常只能可视化处理三维以下的事务,因此为了简单地实现数据可视化,对于每个数据通常只使用两个特征。
上面的group矩阵每行包含一个不同的数据,可以把它想象为某个日志文件中不同的测量点或者入口。向量label包含了每个数据点的标签信息,label包含的元素个数等于group矩阵行数。这里将数据点(1,1.1)定义为类A,数据点(0,0.1)定义为类B。
2.1.2从文本文件中解析数据
使用k-近邻算法将每组数据划分到某个类中的伪代码:
对未知类别属性的数据集中的每个点依次执行以下操作:
(1)计算已知类别数据集中的每个点与当前点之间的距离;
(2)按照距离递增次序排序;
(3)选取与当前点距离最小的k个点;
(4)确定前k个点所在类别的出现频率;
(5)返回前k个点出现频率最高的类别作为当前点的预测分类。
k-近邻算法的程序为:

import numpy as np
#生成数据集
def createDataSet():
    group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    label=[['A'],['A'],['B'],['B']]
    return group,label
def classify(input,dataset,label,k):
    datasetsize=dataset.shape[0]    #数据集数量

    #计算距离
    diffmat=np.array([input]*datasetsize)-dataset
    #diffm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值