zoukankan      html  css  js  c++  java
  • K-近邻算法

    k-近邻算法是分类算法中的入门算法,它的原理是:存在一个数据集合,并且集合中的每个数据都存在标签。输入没有标签的新数据时,将新数据的每个特征与样本集合数据对应的特征进行比较,然后算法提取数据集中特征最相似数据的分类标签。通常k取不大于20的奇数,出现次数最多的分类就是新数据的分类。

    伪代码如下:

    1. 计算已知类别数据集中的点与当前点之间的距离;
    2. 按照距离递增次序排序;
    3. 选取与当前距离最小的k个点;
    4. 确定前k个点所在类别的出现频率;
    5. 返回前k个点频率最高的类别作为当前点的预测分类。

    简单实例

    [d = sqrt{(xA_{0}-xB_{0})^{2} + (xA_{1}-xB_{1})^{2}} ]

    代码实现

    import numpy as np
    import operator
    
    def createDataSet():
        '''
        生成数据集
        :return:特征矩阵 标签
        '''
        group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
        labels = np.array(['A', 'A', 'B', 'B'])
        return group, labels
    
    def classify0(inX, dataSet, labels, k):
        '''
        k近邻算法
        :param inX: 新数据特征
        :param dataSet: 数据特征矩阵
        :param labels: 数据标签
        :param k: k值
        :return:分类结果
        '''
        # 计算欧式距离
        # np.tile(A,n),功能是将数组A重复n次,构成一个新的数组
        # np.argsort 返回数组值从小到大的索引值
        dataSetSize = dataSet.shape[0]
        diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
        sqDiffMat = diffMat**2
        sqDistances = sqDiffMat.sum(axis=1)
        distances = sqDistances**0.5
        sortedDistIndicies = np.argsort(distances)
        # print(sortedDistIndicies) [2 3 1 0]
        # 选择距离最小的k个点
        classCount = {}
        for i in range(k):
            voteILabel = labels[sortedDistIndicies[i]]
            classCount[voteILabel] = classCount.get(voteILabel, 0) + 1
        # print(classCount) {'B': 2, 'A': 1}
        # 排序
        # sorted(iterable, key=None, reverse=False) 
        sortedClassCount = sorted(classCount.items(), key=lambda x:x[1], reverse=True)
        return sortedClassCount[0][0]
    
    if __name__ == '__main__':
        group, labels = createDataSet();
        pred = classify0([0, 0], group, labels, 3)
        print(pred)
    
    
  • 相关阅读:
    Mysql 的安装(压缩文件)和基本管理
    Mysql 数据库安装与配置详解
    Bootstrap的插件
    Bootstrap学习
    移动端单位介绍
    响应式页面-@media介绍
    前端 ---jQuery的补充
    前端 ---- jQuery的ajax
    前端 ----轮播图实现
    安装scrapy时遇到的问题
  • 原文地址:https://www.cnblogs.com/wys7541/p/13583386.html
Copyright © 2011-2022 走看看