K近邻(KNN):分类算法

* KNN是non-parametric分类器(不做分布形式的假设,直接从数据估计概率密度),是memory-based learning.

* KNN不适用于高维数据(curse of dimension)

* Machine Learning的Python库很多,比如mlpy更多packages),这里实现只是为了掌握方法

* MATLAB 中的调用,见《MATLAB分类器大全(svm,knn,随机森林等)》

* KNN算法复杂度高(可用KD树优化,C中可以用libkdtree或者ANN

* k越小越容易过拟合,但是k很大会降分类精度(设想极限情况:k=1和k=N(样本数))

本文不介绍理论了,注释见代码。

KNN.py

  1. from numpy import *
  2. import operator
  3. class KNN:
  4. def createDataset(self):
  5. group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
  6. labels = ['A','A','B','B']
  7. return group,labels
  8. def KnnClassify(self,testX,trainX,labels,K):
  9. [N,M]=trainX.shape
  10. #calculate the distance between testX and other training samples
  11. difference = tile(testX,(N,1)) - trainX # tile for array and repeat for matrix in Python, == repmat in Matlab
  12. difference = difference ** 2 # take pow(difference,2)
  13. distance = difference.sum(1) # take the sum of difference from all dimensions
  14. distance = distance ** 0.5
  15. sortdiffidx = distance.argsort()
  16. # find the k nearest neighbours
  17. vote = {} #create the dictionary
  18. for i in range(K):
  19. ith_label = labels[sortdiffidx[i]];
  20. vote[ith_label] = vote.get(ith_label,0)+1 #get(ith_label,0) : if dictionary 'vote' exist key 'ith_label', return vote[ith_label]; else return 0
  21. sortedvote = sorted(vote.iteritems(),key = lambda x:x[1], reverse = True)
  22. # 'key = lambda x: x[1]' can be substituted by operator.itemgetter(1)
  23. return sortedvote[0][0]
  24. k = KNN() #create KNN object
  25. group,labels = k.createDataset()
  26. cls = k.KnnClassify([0,0],group,labels,3)
  27. print cls

-------------------
运行:

1. 在Python Shell 中可以运行KNN.py

>>>import os

>>>os.chdir("/Users/mba/Documents/Study/Machine_Learning/Python/KNN")

>>>execfile("KNN.py")

输出B

(B表示类别)

2. 或者terminal中直接运行

$ python KNN.py

3. 也可以不在KNN.py中写输出,而选择在Shell中获得结果,i.e.,

>>>import KNN

>>> KNN.k.KnnClassify([0,0],KNN.group,KNN.labels,3)

from: http://blog.csdn.net/abcjennifer/article/details/19757987

K近邻分类算法实现 in Python的更多相关文章

  1. 查看neighbors大小对K近邻分类算法预测准确度和泛化能力的影响

    代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 09:36:49 2018 @author: zhen &qu ...

  2. K邻近分类算法

    # -*- coding: utf-8 -*- """ Created on Thu Jun 28 17:16:19 2018 @author: zhen "& ...

  3. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...

  4. 每日一个机器学习算法——k近邻分类

    K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由 ...

  5. 机器学习-K近邻(KNN)算法详解

    一.KNN算法描述   KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表.KNN算法属于有监督学习方式的分类算法,所谓K近 ...

  6. TensorFlow实现knn(k近邻)算法

    首先先介绍一下knn的基本原理: KNN是通过计算不同特征值之间的距离进行分类. 整体的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于 ...

  7. softmax分类算法原理(用python实现)

    逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 - 导入模块 import numpy as n ...

  8. 基本分类方法——KNN(K近邻)算法

    在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...

  9. 数据挖掘算法(一)--K近邻算法 (KNN)

    数据挖掘算法学习笔记汇总 数据挖掘算法(一)–K近邻算法 (KNN) 数据挖掘算法(二)–决策树 数据挖掘算法(三)–logistic回归 算法简介 KNN算法的训练样本是多维特征空间向量,其中每个训 ...

随机推荐

  1. 20145330《Java程序设计》第二次实验报告

    20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...

  2. C#中Thread.sleep() 【转载】

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果我 ...

  3. (转)C#/.NET主线程与子线程之间的关系

    一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程.       有的博客上说“至少一个主线程”,这一说法持有怀疑         主线程与子线程之间的关系        ...

  4. [LintCode] Maximal Square 最大正方形

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  5. Java_Eclipse_Maven环境搭建

    一.Maven下载 地址:http://maven.apache.org/download.cgi 二.配置仓库及环境变量(以D:\maven为例) 1> 解压文件至D:\maven 2> ...

  6. Js的引用关系示例和总结

    三种引用(指针引用)关系,借助引用关系可以形成复杂的链关系,巧妙借助链关系可以实现收放自如,形散神不散的神奇效果,jquery就是其中一例: 1.对象指向属性;        2.a=b(b是对象,a ...

  7. cocos2d-x渲染流程

    Cocos2Dx之渲染流程 发表于8个月前(2014-08-08 22:46)   阅读(3762) | 评论(2) 17人收藏此文章, 我要收藏 赞2 如何快速提高你的薪资?-实力拍“跳槽吧兄弟”梦 ...

  8. Web前端开发基础 第四课(CSS元素分类)

    元素分类 在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <di ...

  9. ping & tracert over TCP

    偶然发现还有这样的工具: 通过TCP协议实现ping和tracert. 之前一直苦恼无法通过ping的方式测试被q网站, 现在有了这两个工具后就方便了. [Windows] tcping: http: ...

  10. php使用p3p实现cookies跨域设置 实现单点登录,全站登录

    P3P Header is present: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC ...