机器学习-KNN算法

机器学习-KNN算法

k近邻算法无训练步骤

输入的四个参数变量:
inX:用于分类的输入向量
dataSet:输入的训练样本集
labels:标签向量
k:参数k的定义

k-近邻算法基本程序

算法思想:对未知类别属性的特征向量分别与已知类别中的特征向量进行距离的计算;按照所得距离数值从小到大排序,选取前k个距离小的点;对挑选出来的点所属类别进行统计,返回出现频率最高的类别作为当前未知类别属性的类别分类。

def classfy(inX, dataSet, labels, k):
    lendataSet = dataSet.shape[0]      #计算已知数据集的点的个数
    diffMat = tile(inX, (lendataSet, 1)) - dataSet    #将未知类别属性扩展为和已知数据集相同的矩阵格式
    sqdiffMat = diffMat * *2      #计算平方
    sqdistance = sqdiffMat.sum(axis=1)    #按行相加来统计未知类别属性与每个点之间的距离
    distance = sqdistance * *0.5     #求得最后的距离
    sortdistance = distance.argsort()   #对距离进行排序
    classcount = { }
    for i in range (k):
        votellabels = labels[sortdistance(i)]      #距离最近的前k个类别的标签
        classcount[votellabels] = classcount.get(votellabels, 0)+1     #对标签出现的次数进行统计
    SortClassCount = sorted(classcount.iteritems(), key = operator.itemgetter(1), reverse = True)      #按照出现的类别次数对标签进行排序
    return SortClassCount[0][0]     #返回出现类别频率最高的标签
  1. get函数的用法 :dict.get(key, default=None),
    key–为函数要查找的值
    default–如果查找的值不存在,则返回default的值
  2. .itemgetter(1):按照第二个元素的次序对元组进行排序;
  3. items()和iteritems()函数的用
    items():返回的是一个列表;
    iteritems():返回的是一个迭代器。

K近邻算法示例–约会网站配对效果

将文本记录转化为NumPy的解析程序

def file2matrix( filename):
    fr = open(filename)         
    arrayoLines = fr.readlines()     #读取文件内容
    numberofLines = len(arrayoLines)     #统计文件中的行数
    returnMat = zeros ((numberofLines, 3))      #创建一个用0填充的矩阵
    classLabelVector = [ ]
    index = 0

    for line in arrayoLines:
        line = line.strip()       #截掉所有的回车字符
        ListFromLine = line.split('\t')     #将整行数据分割为一个元素列表
        returnMat[index, :] = ListFromLine[0:3]
        classLabelVector.append(int(ListFromLine[-1]))     将最后一列元素标签存储到向量矩阵中
        index +=1
return returnMat, classLabelVector
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值