(1)kNN算法

kNN算法:存在一个样本数据集合,样本集中的每一个数据都存在标签,现在给定一个新的数据,如何判断它属于哪一类?kNN所使用的方法是:选择与新数据最接近的k个样本数据,这k个样本数据所属的分类(虚着呢出现次数最多的分类)就是新样本所属的分类。
新建一个python文件,kNN.py ,内容如下:

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
#classify0函数有4个参数,第一个inX是用于分类的输入向量,输入的训练样本集是dataSet,
#标签向量为labels,k表示用于选择最近邻居的数目。
def classify0(inX,dataSet,labels,k):
#shape[0]表示矩阵的行数
#函数格式tile(A,reps)表示A重复reps次
    dataSetSize=dataSet.shape[0]
    diffMat=tile(inX,(dataSetSize,1))-dataSet
    sqDiffMat=diffMat**2
 #将矩阵的每一行向量相加
    sqDistances=sqDiffMat.sum(axis=1)
    distances=sqDistances**0.5
 #将元素从小到大排序,提取其索引值
    sortedDistIndicies=distances.argsort()
    classCount={ }
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
 #更新,将其分类数加1
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
        sortedClassCount=sorted(classCount.items( ),key=operator.itemgetter(1),reverse=True)
        return sortedClassCount[0][0]

在该文件所在目录下进入python交互式开发环境输入以下命令:

#首先导入kNN模块
import kNN
#创建变量group 和labels
group,labels=kNN.createDataSet()
#验证是否正确定义了变量
group
labels
#这里的四组数据,每一组数据有两个属性或者特征值,向量labels包含了每个数据点的
#标签信息
#对未知类别的数据集中的每个点执行以下操作
#(1)计算一直类别数据集中的点到当前点之间的距离
#(2)按照距离递增次序排序
#(3)选取与当前点距离最小的k个点
#(4)确定前k个点所在类别的出现频率
#(5)返回前k个点出现频率最高的类别作为当前点的预测分类
#调用calssify0函数,在python提示符下输入
kNN.classify0([0,0].group,labels,3)
#

输出的结果为B,大家也可以改变这个向量的值,测试运行将结果。此时我们已经
用kNN算法构造了一个分类器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值