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
- from numpy import *
- import operator
- class 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 object
- group,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)
from: http://blog.csdn.net/abcjennifer/article/details/19757987
K近邻分类算法实现 in Python的更多相关文章
- 查看neighbors大小对K近邻分类算法预测准确度和泛化能力的影响
代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 09:36:49 2018 @author: zhen &qu ...
- K邻近分类算法
# -*- coding: utf-8 -*- """ Created on Thu Jun 28 17:16:19 2018 @author: zhen "& ...
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...
- 每日一个机器学习算法——k近邻分类
K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由 ...
- 机器学习-K近邻(KNN)算法详解
一.KNN算法描述 KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表.KNN算法属于有监督学习方式的分类算法,所谓K近 ...
- TensorFlow实现knn(k近邻)算法
首先先介绍一下knn的基本原理: KNN是通过计算不同特征值之间的距离进行分类. 整体的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于 ...
- softmax分类算法原理(用python实现)
逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 - 导入模块 import numpy as n ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- 数据挖掘算法(一)--K近邻算法 (KNN)
数据挖掘算法学习笔记汇总 数据挖掘算法(一)–K近邻算法 (KNN) 数据挖掘算法(二)–决策树 数据挖掘算法(三)–logistic回归 算法简介 KNN算法的训练样本是多维特征空间向量,其中每个训 ...
随机推荐
- tomcat、腾讯云主机和微信
腾讯云主机和微信 申请一个腾讯云上的服务器(在这里我是申请的Linux系统,里面自己事先装好了tomcat.jdk等所需要用到的工具,注意做好必要的配置工作) 连接服务器和部署项目时必要的步骤:1.将 ...
- be supposed to
be supposed to 期望; 認為必須, 認為應該; 認為...... 期望; 認為必須, 認為應該; 認為...必要 Am I supposed to clean all the rooms ...
- docker 报Error: docker-engine-selinux conflicts with docker-selinux-1.9.1-25.el7.centos.x86_64
root@ecshop Deploy]# yum -y install docker-engine-selinux.noarchLoaded plugins: fastestmirrorhttp:// ...
- linux下转换U盘文件系统
打算在windows 7 下复制一个12G 的文件至U盘,无奈U盘为FAT32格式,最大支持移动4G 的文件,只能将U盘文件系统格式化为NTFS.windows 7系统出现问题,转化中总是出现错误.故 ...
- Why does this json4s code work in the scala repl but fail to compile?
I'm converting a json-like string into json, and the following code works in the scala repl import o ...
- thinkphp上传至服务器后模板无法解析原因
前几日做好的响应式静态页面上传至虚拟空间,打开网址地址出现: 模板不存在:./app/Home/View/Index/index.html 错误位置 FILE: /home/u333385714/pu ...
- thinkphp无法加载模块解决办法
前台入口文件index.php <?php //前台入口 define('THINKPHP_PATH', '../ThinkPHP/');//底层的位置 define('APP_PATH', ' ...
- Xss里img标签的一些利用
<img src=x onerror=with(document)body.appendChild(document.createElement('script')).src="//x ...
- Hibernate的延迟加载
我们会分析load和get两种加载方式: 一.load加载方式 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load() ...
- BizTalk开发系列(十四) XML空白字符(WhiteSpace)
最近在做一个BizTalk项目,对XML文件的处理很复杂.本来是想找有没有方法可以一次性去除XML文件中节点和属性的值的空格.但是找了很久没有看到相关的方法.如果有知道该方法的麻烦跟我讲一下:cbcy ...