• k-近邻算法(kNN)


      工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

    # -*- coding: utf-8 -*-
    # 导入了两个模块,第一个是科学计算包Numpy,第二个是运算符模块,K近邻算法执行排序操作时将使用这个模块提供的函数
    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
    
    """
        四个输入参数:用于分类的输入向量是inX,输入的训练样本集为dataSet,标签向量labels,
                      最后的参数k表示用于选择最近邻居的数目,其中标签向量的元素数目和矩阵
                      dataSet的行数相同
    """
    def classify0(inX, dataSet, labels, k):
        #计算距离
        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 = {}
        #选择距离最小的K个点
        for i in range(k):
            voteIlabel = labels[sortedDistIndicies[i]]
            classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
        #使用程序operator模块的itemgetter方法,按照第二个元素的次序对元组进行排序,此处的排序为逆序,即按照从大到小的次序,最后返回发生频率最高的元素标签
        sortedClassCount = sorted(classCount.iteritems(), key = operator.itemgetter(1), reverse = True)
        return sortedClassCount[0][0]
    
    
    
    dataSet, labels = createDataSet()
    testPoint = [0, 0]
    print classify0(testPoint, dataSet, labels, 3)

      分类器并不会得到百分百正确的结果,我们可以使用多种方法检测分类器的正确率。此外分类器的性能也会受到很多因素的影响,例如分类器设置和数据集等。用测试集去测试分类器的错误率,错误率即是分类器给出错误结果的次数除以测试执行的总数。完美的分类器的错误率为0,最差分类器的错误率为1.0。

      

  • 相关阅读:
    13.2 抽像类与体类(Abstract & Concrete Classes) 简单
    13.3 深度隔离的界面(Deeply Parted interface) 简单
    计算天数(C++)_学习 简单
    13.1.2 纯虚函数(Pure Virutal Functions) 简单
    C++ operator关键字(重载操作符) 简单
    二月一共多少天 简单
    重载运算符操作_学习 简单
    计算两个日期之间的天数(C++) 简单
    1.2 连接信号和响应函数 简单
    用Android手机做台式机无线网卡
  • 原文地址:https://www.cnblogs.com/GDUT-xiang/p/5718738.html
Copyright © 2020-2023  润新知