Python实现的KNN分类器
来源:互联网 发布:mfc图形界面编程实例 编辑:程序博客网 时间:2024/06/06 16:40
knn.py
# -*- coding: UTF-8 -*-'''Created on 2016-4-24@author: taiji1985'''import numpy as npimport operatorimport matplotlib.pyplot as plt#创建一个测试用的数据集def createDataSet(): X = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) ylabel = np.array([0,0,1,1]) return {'X':X,'ylabel':ylabel}#根据x和y创建数据集def createDataset2(x,y): return {'X':x,'ylabel':y}#绘图def plotData(ds,type='o'): X= ds['X'] y=ds['ylabel'] n = X.shape[0] cn = len(np.unique(y)) cs = ['r','g'] dd = np.arange(n) for i in range(2): index= y == i xx=X[dd[index]] plt.plot(xx[:,0],xx[:,1],type,markerfacecolor=cs[i],markersize=14)#对多个样本进行分类def classify(x,dataSet,k): n = x.shape[0] ret = np.zeros(n,'uint8') for i in range(n): ret[i] = _classify(x[i], dataSet, k) return ret pass#对一个样本进行分类def _classify(x,dataSet,k): X= dataSet['X'] ylabel = dataSet['ylabel'] n = X.shape[0] cls_label = np.unique(ylabel) cn=len(cls_label) # $d=\sqrt{\sum{(x-x_i)^2}}$ 下面公式忽略求平方根因为不影响结果 d=np.tile(x,(n,1)) - X #扩展为n行并求差 d = (d*d).sum(axis=1) #求和 sort_idx = d.argsort() vote = np.zeros((cn,1),'uint8') for i in range(k): vl = ylabel[sort_idx[i]] vote[vl]+= 1 #print vote return np.argmax(vote) pass
测试
'''Created on 2016-4-24@author: taiji1985'''import numpy as npimport matplotlib.pyplot as pltfrom ml import knnd=knn.createDataSet()X= d['X']y=d['ylabel']cn = 2plt.figure()knn.plotData(d,'o')plt.axis([-1, 2, -1, 2])x = np.random.randn(100,2)+1r = knn.classify(x, d,2)#plt.plot(x[0],x[1],'*',markerfacecolor=cs[r],markersize=12)d2=knn.createDataset2(x,r)print d['ylabel'].shapeprint d2['ylabel'].shapeknn.plotData(d2, '*')plt.show()
参考
[1] 《机器学习实战》
0 0
- Python实现的KNN分类器
- python实现特征向量的knn分类
- 利用python实现KNN分类器
- Python实现kNN分类算法
- kNN分类算法python实现
- KNN分类算法Python实现
- KNN 图像分类python实现
- Python实现K近邻算法<KNN>_分类器
- 【Python】基于kNN算法的手写识别系统的实现与分类器测试
- 基于Bayes和KNN的newsgroup 18828文本分类器的Python实现
- KNN分类算法的实现
- KNN-分类算法的实现
- KNN的python实现
- KNN分类器及实现
- kNN文本分类器实现
- KNN分类器-Java实现
- 用python实现kNN分类算法
- Python实现KNN算法项目 --- 水果分类
- 27. 用户生成内容
- 函数调用运算符的重载
- java 异常printStackTrace
- Node.js入门实例程序
- Linux是一个多用户多任务的操作系统
- Python实现的KNN分类器
- Codeforces #591 D Chip 'n Dale Rescue Rangers(二分查找/转换参考系)
- Failure to transfer org.apache.maven.plugins:maven-war-plugin:pom:2.2 from https://repo.maven.apache
- tar.gz 和 tar.bz2 详细解释
- 上下DIV固定,中间DIV自适应的HTML+CSS实现
- JVM(1)——简介
- [模版] 带部分重构的KD_Tree
- 原理分析之二:框架整体设计
- Node.js快速入门