博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k-近邻算法(kNN)
阅读量:5857 次
发布时间:2019-06-19

本文共 1589 字,大约阅读时间需要 5 分钟。

  工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前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。

  

转载于:https://www.cnblogs.com/GDUT-xiang/p/5718738.html

你可能感兴趣的文章
hbase修改表名
查看>>
技术整理
查看>>
STL容器之multimap和multiset
查看>>
JDBC连接orcale 数据库 注意事项
查看>>
Windows Server 2008 R2 之二十二AD RMS基础
查看>>
如何设计出一款出色的结账表单
查看>>
lua脚本调用cocos2d-x 之实现精灵、Tmx地图创建【iOS游戏开发征文】
查看>>
源码编译cmake安装mysql-5.5.32
查看>>
演示:在思科路由器上IPv6本地链路地址的配置
查看>>
bootstrap2和bootstrap3的用法区别概述(三)
查看>>
Mybatis 入门
查看>>
画图解释SQL联合语句
查看>>
基于Android的英文电子词典
查看>>
IOS视图动画
查看>>
中小企业数据备份
查看>>
PyQt初识(1)
查看>>
Android-Service组件
查看>>
grails类的映射 char类型
查看>>
RHCE 学习笔记(21) - SELinux
查看>>
Python 学习笔记 - 线程(基本概念和创建)
查看>>