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

              KNN算法

存在一个训练样本集合,里面有n个训练数据,每个训练数据有m个特征。每个训练数据都标明了相对应的分类。比如:

其中一条数据有四个特征:体重,翼展等,也有相对应的种属。

  则KNN算法就是将一条未知种属的数据的每个特征与训练样本集合中的每条数据对应的特征进行比较,然后算法提取样本集合特征最相似数据(最近邻)的分类标签。一般选择样本数据集合中前K个最相似的数据,这就是K-近邻算法中k的出处。

最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

(可以大概理解为将一条数据与样本中每条数据都比较一遍,然后计算出与每条样本数据的距离,然后选出来K个距离最近的样本,看看这k个样本都是属于哪一类的,哪一类最多,那这个未知的数据也属于这个样本)。

KNN算法实现:

创建KNN.文件

先写下训练样本(举个例子)

1 # -*- coding: utf-8 -*-
2 import numpy as np
3 import operator
4 def createDataSet():
5     group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])   #训练样本数据
6     labels = [‘A‘,‘A‘,‘B‘,‘B‘]             #每条训练样本数据对用的标签
7     return group, labels

使用欧式距离公式,计算目标数据和训练数据的距离

如果数据集存在四个特征值,则点(1,0,0,1)与点(7,6,9,4)间的距离为:

K-近邻算法实现:

 1 def classify0(inX,dataSet,labels,k):
 2     dataSetsize = dataSet.shape[0]  #shape[0]获取矩阵的行数,shape[1]获取矩阵的列数
 3     diffMat = np.tile(inX,(dataSetsize,1)) - dataSet  #tile函数是将inX复制成dataSetsize行,1列,这行求的是目标数据与每条训练数据集间的差值
 4     sqDiffMat = diffMat**2          #对diffMat矩阵中每个值求平方
 5     sqDistances =sqDiffMat.sum(axis = 1)   #axis=0表示按列相加,axis=1表示按照行的方向相加
 6     distances = sqDistances**0.5   #开根号
 7     sortedDistIndicies = distances.argsort()#将distances中的元素从小到大排列,提取其对应的index(索引),然后输出到y,比如y[0]存的是distances中数值最小数的索引
 8     classCount = {}  #定义一个字典类型数据
 9     for i in range(k):
10         voteIlabel = labels[sortedDistIndicies[i]]   #将前k个最小数值对应的标签提取出来
11         classCount[voteIlabel] = classCount.get(voteIlabel,0) +1      #统计k个元素中每个标签出现的次数
12     sortedClassCount = sorted(classCount.items(),key = operator.itemgetter(1),reverse=True)   #逆排序,按照每个标签统计的个数从大到小次序排序,要明白里面几个函数的意思
13     return sortedClassCount[0][0]  #返回发生频率最高的元素标签
14     

来个测试程序,创建一个test.py文件

# -*- coding: utf-8 -*-
import KNN
group,labels = KNN.createDataSet()

print (KNN.classify0([0,0],group,labels,3))

输出结果就是:

一个简单的KNN算法实现就完成了,虽然没有太大的实际用处,但是也构造出了第一个分类器。

时间: 2024-11-02 12:50:11

机器学习算法之 KNN(k最近算法)的相关文章

机器学习算法( 二、K - 近邻算法)

一.概述 k-近邻算法采用测量不同特征值之间的距离方法进行分类. 工作原理:首先有一个样本数据集合(训练样本集),并且样本数据集合中每条数据都存在标签(分类),即我们知道样本数据中每一条数据与所属分类的对应关系,输入没有标签的数据之后,将新数据的每个特征与样本集的数据对应的特征进行比较(欧式距离运算),然后算出新数据与样本集中特征最相似(最近邻)的数据的分类标签,一般我们选择样本数据集中前k个最相似的数据,然后再从k个数据集中选出出现分类最多的分类作为新数据的分类. 二.优缺点 优点:精度高.对

基本分类方法——KNN(K近邻)算法

在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门算法. 参考内容如下:http://www.cnblogs.com/charlesblc/p/6193867.html 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据,对于

KNN K~近邻算法笔记

K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据的分类标签.一般来说,只提取样本数据集中前K个最相似的数据.通常K不大于20,最后选择K个最相似数据中出现次数最多的分类,最为新的数据分类. 但是K~近邻算法必须保存全部的数据集,如果训练数据集很大,必须使用打量的存储空间.此外,由于必须对数据集中每个数据集计算距离值,实际使用起来会非常耗时间.

机器学习(一)之Knn(K-近邻算法)

Contents KNN算法简介 算法实现 总结 KNN算法简介 k近邻算法(k-nearest neighbor)是一种基本的分类.回归算法. 算法的基本思想是"物以类聚".也就是说,物体周边事物的类别可以在某种程度上反应该物体的类别.例如,可以通过了解你身边最亲密的几个朋友来了解你的性格:又或者一部电影中某类镜头出现的频率高,会把该类电影归纳为与之对应类型的电影. 因此,knn算法在分类时,对于新的实例,会根据其k个最近邻实例的类别,通过多数表决的方式进行预测,也就是少数服从多数.

web安全之机器学习入门——3.1 KNN/k近邻算法

目录 sklearn.neighbors.NearestNeighbors 参数/方法 基础用法 用于监督学习 检测异常操作(一) 检测异常操作(二) 检测rootkit 检测webshell sklearn.neighbors.NearestNeighbors 参数: 方法: 基础用法 print(__doc__) from sklearn.neighbors import NearestNeighbors import numpy as np X = np.array([[-1, -1],

KNN (K近邻算法) - 识别手写数字

KNN项目实战——手写数字识别 1. 介绍 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法.它的工作原理是:存在一个样本数据集合,也称作为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系.输入没有标签的新数据后,将新的数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本最相似数据(最近邻)的分类标签.一般来说,我们只选择样本数据集中前k个最相似的数据,这就是

k-近邻算法(kNN)测试算法:作为完整程序验证分类器

1 #测试算法:作为完整程序验证分类器 2 def datingClassTest(): 3 hoRatio = 0.10 #设置测试集比重,前10%作为测试集,后90%作为训练集 4 datingDataMat,datingLabels = file2matrix('datingTestSet.txt') 5 normMat, ranges, minVals = autoNorm(datingDataMat) 6 m = normMat.shape[0] #得到样本数量m 7 numTestV

02-16 k近邻算法

[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ k近邻算法 k近邻算法(k-nearest neighbors,KNN)是一种基本的分类和回归方法,本文只探讨分类问题中的k近邻算法,回归问题通常是得出最近的$k$个实例的标记值,然后取这$k$实例标记值的平均数或中位数. k近邻算法经常被人们应用于生活当中,比如傅玄曾说过"近朱者赤近墨者黑&quo

K近邻算法小结

什么是K近邻? K近邻一种非参数学习的算法,可以用在分类问题上,也可以用在回归问题上. 什么是非参数学习? 一般而言,机器学习算法都有相应的参数要学习,比如线性回归模型中的权重参数和偏置参数,SVM的C和gamma参数,而这些参数的学习又依赖一定的学习策略.相比较而言,k近邻算法可以说是最简单,也是最容易理解的一种机器学习算法了. K近邻算法思想? 具体而言,在一个待测试样本周围找K个最近的点,然后根据这k个点进行决策,如果是分类问题,决策结果就是K个点中出现最多的类别:如果是回归问题,结果值为

DM里的K均值算法

1.Preface 因为一直在做的是聚类算法的研究,算是总结了一些心得,这里总结些知识性与思路性的东西,我想在其他地方也是很容易的找到类似的内容的.毕竟,世界就是那么小. 声明:本文比较不适合没有DM基础的人来阅读.我只是胡乱的涂鸦而已 2.聚类算法 在DM里的聚类算法里,有基于划分的算法,基于层次的算法,基于密度的算法,基于网格的算法,基于约束的算法. 其中每一种基于的算法都会衍生出一至几种算法,对应的每一种算法不管在学术界还是工业界都存在着许多的改进的算法 这里想介绍的是基于基于划分的算法里