K近邻分类算法实现 in Python

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

[python] view plain copy

  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

时间: 2024-08-07 04:30:54

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

K近邻分类算法

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Thu Jun 28 17:16:19 2018 4 5 @author: zhen 6 """ 7 from sklearn.model_selection import train_test_split 8 import mglearn 9 import matplotlib.pyplot as plt 10 x, y = mglearn.dataset

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

代码: 1 # -*- coding: utf-8 -*- 2 """ 3 Created on Thu Jul 12 09:36:49 2018 4 5 @author: zhen 6 """ 7 """ 8 分析n_neighbors的大小对K近邻算法预测精度和泛化能力的影响 9 """ 10 from sklearn.datasets import load_breast_canc

机器学习经典算法详解及Python实现--K近邻(KNN)算法

(一)KNN依然是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归.如果K=1,那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习,数据都有明确的label(分类针对离散分布,回归针对连续分布),根据机器学习产

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

(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离近期的邻居进行分类推断(投票法)或者回归.假设K=1.那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习.数据都有明白的label(分类针对离散分布,回归针对连续分布),依据机器学习产

【学习笔记】K近邻归类算法

# -*- coding:utf-8 -*- __author__ = 'Ghostviper' """ K近邻归类算法 """ from numpy import * import operator def createDataset():     group = array([         [1.0, 1.1],         [1.0, 1.0],         [0, 0],         [0, 0.1]     ])    

Machine Learning—k-nearest neighbor classification(k近邻分类)

印象笔记同步分享:Machine Learning-k-nearest neighbor classification(k近邻分类)

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

K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合. 一个不足之处是计算量较大,因为对每一个待分类的样本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点.

机器学习之KNN(k近邻)算法

1.算法介绍k近邻算法是学习机器学习的入门算法,可实现分类与回归,属于监督学习的一种.算法的工作原理是:输入一个训练数据集,训练数据集包括特征空间的点和点的类别,可以是二分类或是多分类.预测时,输入没有类别的点,找到k个与该点距离最接近的点,使用多数表决的方法,得出最后的预测分类. 2.算法优缺点优点:没有高深的数学思想,容易理解,精度高,对异常值不敏感,无数据输入假定:缺点:计算复杂度高,空间复杂度高:理解:因为knn算法是寻找与目标点接近的点,在计算时,异常值与目标点的"距离"会较

TensorFlow实现knn(k近邻)算法

首先先介绍一下knn的基本原理: KNN是通过计算不同特征值之间的距离进行分类. 整体的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. K通常是不大于20的整数.KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. KNN算法要解决的核心问题是K值选择,它会直接影响分类结果. 如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是