k-近邻分类算法

KNN.py

#!/usr/bin/python  
# -*- coding: utf-8 -*-  
#coding=utf-8

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']   #元素个数等于group矩阵行数
    return group, labels


#k-近邻算法
#inX是输入向量,dataSet是训练样本集,labels为标签向量, k是用于选择最近邻居的数目
def classify0(inX, dataSet, labels, k):
    #计算已知类别数据集中的点与当前点之间的距离
    dataSetSize = dataSet.shape[0]  #获取矩阵第一维长度
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet  #tile(A, b) 将数组A重复b次
    sqDiffMat = diffMa**2
    sqDistances = sqDiffMat.sum(axis=1) #axis=1是将一个矩阵的每一行向量相加
    distances = sqDistances**0.5

    #按照距离递增次序排序
    sortedDistIndicies = distances.argsort()

    #选取与当前点距离最小的k个点,确定前k个点所在类别的出现频率
    classCount = {}
    for i in range(k):  # for(int i=0; i<l; i++)
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1  #get(key,d) 如果key在字典中,返回对应的值,否则返回d

    #返回前k个点出现频率最高的类别作为当前点的预测分类
    #sorted(iterable, cmp=None, key=None, reverse=False)
    #cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
    #key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
    #reverse:排序规则. reverse = True 降序;reverse = False,升序,有默认值。
    sortedClassCount = sorted(classCount.iteritems, key=operator.itemgetter(1), reverse=true)
    return sortedClassCount[0][0]

预测
在KNN.py中按F5,重新加载模块

>>> import KNN
>>> group, labels = KNN.createDataSet()
>>> KNN.classify0([0,0], group, labels, 3)
'B'
>>> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值