K近邻分类算法实现 in Python

来源:互联网 发布:python 技术指标 编辑:程序博客网 时间:2024/04/30 11:25

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

from numpy import *import operatorclass KNN:    def createDataset(self):        group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])        labels = ['A','A','B','B']        return group,labels    def KnnClassify(self,testX,trainX,labels,K):        [N,M]=trainX.shape        #calculate the distance between testX and other training samples        difference = tile(testX,(N,1)) - trainX # tile for array and repeat for matrix in Python, == repmat in Matlab        difference = difference ** 2 # take pow(difference,2)        distance = difference.sum(1) # take the sum of difference from all dimensions        distance = distance ** 0.5        sortdiffidx = distance.argsort()        # find the k nearest neighbours        vote = {} #create the dictionary        for i in range(K):            ith_label = labels[sortdiffidx[i]];            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        sortedvote = sorted(vote.iteritems(),key = lambda x:x[1], reverse = True)        # 'key = lambda x: x[1]' can be substituted by operator.itemgetter(1)        return sortedvote[0][0]k = KNN() #create KNN objectgroup,labels = k.createDataset()cls = k.KnnClassify([0,0],group,labels,3)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)




关于Python更多的学习资料将继续更新,敬请关注本博客和新浪微博Rachel Zhang



4 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿子你要高就快点你国语 花裙子母亲午睡 儿子你不能这样啊国语高清 被要求穿超级短的超短裙 穿花裙子躺在沙发上 客厅弄醒午睡的妈连接 家庭毋HH伦s线视频中字 客厅弄硬午睡的儿子短文 客厅搞午睡的母亲 弄醒客厅午睡的母亲在线播放 弄醒午睡的妈视频连接 在客厅睡的午的母亲电影 客厅午睡的母亲在线下载 韩国午睡弄醒午睡的妈 在客厅弄醒午睡的 客厅午睡的母亲穿裙子在线播放 客厅午睡的母亲自拍 客厅里硬搞午睡的母亲视频 对白搞硬沙发午睡的儿子 客厅沙发儿子碎花裙 电影客厅午睡的母亲 客厅午睡以为你是爸爸 客厅弄醒午唾的儿子 客厅搞硬午睡的儿子小说 客厅弄醒穿花裙子午睡的妈电影 在客厅里弄醒午睡的儿子 中午弄醒正在午睡中的护校小 客厅弄醒午睡的妈视频完整迅雷 弄醒客厅午睡花裙子母亲 对白弄醒午睡的儿子 客厅沙发午睡的妈 母亲今晚让你入个够 在客厅里弄醒午睡的 客厅里午睡的花裙子电影 睡在客厅午睡的母亲 客厅弄醒午睡的妈视频 ckm 客厅中弄醒午睡的儿子 艹醒客厅上睡觉的百褶裙 搞硬午睡儿子沙发大战视频 客厅弄醒午睡的在线播放 在客厅穿花裙子午睡的母亲视频