K-近邻算法
来源:互联网 发布:摩托罗拉v8和v9 java 编辑:程序博客网 时间:2024/06/13 01:33
简介
K-近邻算法采用测量不同特征值之间的距离方法进行分类。
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
适用数据范围:数值型和标称型
工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签, 即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
过程
对未知类别属性的数据集中的每个点依次执行以下操作:
(1)计算已知类别数据集中的点与当前点之间的距离;
(2)按照距离递增次序排序;
(3)选取与当前点距离最小的k个点;
(4)确定前K个点所在类别的出现频率;
(5)返回前K个点出现频率最高的类别作为当前点的预测分析。
程序清单如下:
def classify0(inX, dataSet, labels, k): dataSetSize=dataSet.shape[0] diffMat=tile(inX, (dataSetSize,1))-dataSet sqDiffMat=diffMat**2 sqDiffMat=diffMat**2 sqDistances=sqdiffMat.sum(axis=1) distances=sqDistances**0.5 sortedDistIndicies=distances.argsort() classCount={} for i in range(k): voteIlabel=label[sortedDistIndicies[i]] classCount[voteIlabel]=classCount.get(voteIlabel,0) +1 sortedClassCount=sorted(classCount.iteritems(), key=operator.itemgetter(1),reverse=True) return sortedClassCount[0][0]
classify0()函数有4个输入参数:用于分类的输入向量是inX,输入的训练样本集为dataSet,标签向量为labels,最后的参数k表示用于选择最近邻居的数目,其中标签向量的元素数目和矩阵dataSet的行数相同。
0 0
- K近邻算法
- K近邻算法
- K近邻算法
- K近邻算法
- K近邻算法
- K近邻算法
- k近邻算法
- OpenCv K近邻算法
- k-近邻算法(kNN)
- k-近邻算法
- k-近邻算法(kNN)
- K近邻算法
- K近邻分类算法
- K近邻分类算法
- K近邻算法
- K近邻算法
- k最近邻算法
- K-近邻算法
- 过年胖三斤
- Ambari Metrics介绍
- git 查看单个文件的历史
- 安全测试之禁止页面缓存和文件上传校验
- iOS中持久化存储SQLite(一)
- K-近邻算法
- poj 1061 青蛙的约会(扩展欧几里得算法)
- ArrayList的用法
- 对上下文菜单和PopopMenu 以及在ActionBar中显示菜单项的总结
- HDU 1873 看病要排队(优先队列)
- maven的依赖范围
- Drupal8开发教程:认识.info.yml文件
- 最近写东西需要复制代码的行号,用了gvim,总结些经验,复制行号,缩进,模式
- 2016-02-16 FFC