kNN算法原理

k最近邻(k-Nearest Neighbor)算法是比较简单的机器学习算法。它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本在特征空间中的k个最近邻(最相似)的样本中大多数属于某一个类别,则该样本也属于这个类别。

kNN算法的步骤

第一阶段:确定k值(指最近的邻居的个数),一般是一个奇数

第二阶段:确定距离度量公式。文本分类一般使用夹角余弦,得出待分类数据点和所有已知类别的样本点,从中选择距离最近的k个样本:

第三阶段:统计这k个样本点钟各个类别的数量

kNN算法的Python实现

第一阶段:可以利用NBayes中的初始化Nbayes_lib.py,点击这里查看

第二阶段:实现夹角余弦的距离公式

from numpy import *
import operator
from Nbayes_pre import
*

k=3
#夹角余弦距离公式
def cosdist(vector1,vector2):
    return dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))

第三阶段:kNN实现分类器

#kNN分类器
#测试集 testdata,训练集 trainSet,类别标签 listClasses,k k个邻居数
def classify(testdata,trainSet,listClasses,k):
    dataSetSize=trainSet.shape[0]#返回样本集的行数
   
distances=array(zeros(dataSetSize))
    for indx in xrange(dataSetSize):
        distances[indx]=cosdist(testdata,trainSet[indx])
    #根据生成的夹角余弦从大到小排序,结果为索引号
   
sortedDistIndicies=argsort(-distances)
    classCount={}
    #获取角度最小的前k项作为参考项
   
for i in range(k):
        votelIlabel=listClasses[sortedDistIndicies[i]]#按排序顺序返回样本集对应的类别标签
       
classCount[votelIlabel]=classCount.get(votelIlabel,0)+1#为字典classCount按value重新排序
    #对分类字典classCount按value重新排序
    #sorted(data.iteritems(),key=operator.itemgetter(1),reverse=True)
    #该句是按字典值排序的固定用法
    #classCount.iteritems():字典迭代器
    #key:排序参数;operator.itemgetter(1):多级排序
   
sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reversed=True)
    return sortedClassCount[0][0]#返回序最高的一项 #评估分类结果
dataSet,listClasses=loadDataSet()
nb=NBayes()
nb.train_set(dataSet,listClasses)
#使用之前贝叶斯分类阶段的数据集及生成的TF向量进行分类
print (classify(nb.tf[3],nb.tf,listClasses,k)) 工程源代码

分类算法——k最近邻算法(Python实现)(文末附工程源代码)的更多相关文章

  1. K最近邻算法项目实战

    这里我们用酒的分类来进行实战练习 下面来代码 1.把酒的数据集载入到项目中 from sklearn.datasets import load_wine #从sklearn的datasets模块载入数 ...

  2. 【算法】K最近邻算法(K-NEAREST NEIGHBOURS,KNN)

    K最近邻算法(k-nearest neighbours,KNN) 算法 对一个元素进行分类 查看它k个最近的邻居 在这些邻居中,哪个种类多,这个元素有更大概率是这个种类 使用 使用KNN来做两项基本工 ...

  3. 《算法图解》——第十章 K最近邻算法

    第十章    K最近邻算法 1 K最近邻(k-nearest neighbours,KNN)——水果分类 2 创建推荐系统 利用相似的用户相距较近,但如何确定两位用户的相似程度呢? ①特征抽取 对水果 ...

  4. 12、K最近邻算法(KNN算法)

    一.如何创建推荐系统? 找到与用户相似的其他用户,然后把其他用户喜欢的东西推荐给用户.这就是K最近邻算法的分类作用. 二.抽取特征 推荐系统最重要的工作是:将用户的特征抽取出来并转化为度量的数字,然后 ...

  5. [笔记]《算法图解》第十章 K最近邻算法

    K最近邻算法 简称KNN,计算与周边邻居的距离的算法,用于创建分类系统.机器学习等. 算法思路:首先特征化(量化) 然后在象限中选取目标点,然后通过目标点与其n个邻居的比较,得出目标的特征. 余弦相似 ...

  6. PCB 加投率计算实现基本原理--K最近邻算法(KNN)

    PCB行业中,客户订购5000pcs,在投料时不会直接投5000pcs,因为实际在生产过程不可避免的造成PCB报废, 所以在生产前需计划多投一定比例的板板, 例:订单 量是5000pcs,加投3%,那 ...

  7. 机器学习【一】K最近邻算法

    K最近邻算法 KNN 基本原理 离哪个类近,就属于该类   [例如:与下方新元素距离最近的三个点中,2个深色,所以新元素分类为深色] K的含义就是最近邻的个数.在sklearn中,KNN的K值是通过n ...

  8. 机器学习-K最近邻算法

    一.介绍 二.编程 练习一(K最近邻算法在单分类任务的应用): import numpy as np #导入科学计算包import matplotlib.pyplot as plt #导入画图工具fr ...

  9. 图说十大数据挖掘算法(一)K最近邻算法

    如果你之前没有学习过K最近邻算法,那今天几张图,让你明白什么是K最近邻算法. 先来一张图,请分辨它是什么水果 很多同学不假思索,直接回答:“菠萝”!!! 仔细看看同学们,这是菠萝么?那再看下边这这张图 ...

随机推荐

  1. iOS获取本地时间

    NSDate *currentDate = [NSDate date];//获取当前时间,日期 NSDateFormatter *dateFormatter = [[NSDateFormatter a ...

  2. API内部文件读取

    直接上代码吧 尝试将项目复制后建一个新的项目,结果总是有问题,不过可以把原项目转换为新项目,方法如下: 1.项目右键在android tools 有个 rename application packa ...

  3. CHM文件无法打开的解决方法

    转载请注明来自:http://www.yaosansi.com原文地址:http://www.yaosansi.com/post/cannot_open_chm_file.html 目录:一.正确操作 ...

  4. 对synchronized关键字的理解

    先看两个线程同时访问一个对象的例子. public class Account { private String accountNo; private double balance; public A ...

  5. jQuery给CheckBox全选与不全选

    $(function(){ $("#checkAll").click(function() {//全选 $('input[name="DATA"]').prop ...

  6. 了解 : Odata 的 $filter

    api/jobPosts?$filter=company/name eq "string" //基本 api/orders?$filter=orderItem/product/EF ...

  7. 快速排序算法javascript实现

    function quicksort(arr){ function q(start,end){ if(start>=end){return;} var pivot = start, temp = ...

  8. Spring框架---IOC装配Bean

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

  9. 3月题外:关于GeoServer和OpenLayers3实用开源插件或组件的总结

    Geoserver篇 注意: 1)用法 GeoServer-Extension的使用方法:将jar包直接放入部署在tomcat上的geoserver/WEB-INF/lib文件夹中 2)在安装插件时, ...

  10. Binary Tree Paths leetcode

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...