监督学习算法_k-近邻(kNN)分类算法_源代码

因为自己想学着去写机器学习的源码,所以我最近在学习《机器学习实战》这本书。

《机器学习实战》是利用Python2完成的机器学习算法的源代码,并利用机器学习方法来对实际问题进行分析与处理。

(《机器学习实战》豆瓣读书网址:https://book.douban.com/subject/24703171/)

以下内容是我通过学习《机器学习实战》,以及我对k-近邻(kNN)分类算法的理解,所总结整理出的内容,其中kNN分类算法的源码为Python3的代码,希望大家多多批评指正。

kNN分类算法是一类有监督的学习算法,kNN分类算法首先计算出测试样本点与已知样本点之间的距离,选择距离测试样本点最近的k个已知样本点,根据k个已知样本点的类别,通过“投票法”得到测试样本点的最终分类。

kNN分类算法的优缺点:优点:精度高、对异常值不敏感、无数据输入假定;缺点:计算复杂度高、空间复杂度高;适用数据范围:数值型和标称型(标称型数据:变量的结果只在有限目标集中取值)。--摘自《机器学习实战》

kNN分类算法通常使用欧氏距离来计算测试样本点与已知样本点之间的距离。

已知两个点A=(x1, y1)、B=(x2, y2),则A和B的欧氏距离为:

Distance = sqrt( (x1-x2)^2 + (y1-y2)^2 )

kNN分类算法的伪代码如下:

Step1:计算出测试样本点与已知样本点之间的距离;

Step2:将距离按照升序排序;

Step3:选择距离测试样本点最近的k个已知样本点;

Step4:计算k个最近的已知样本点所在类别出现的频率;

Step5:k个最近的已知样本点出现频率最高的类别,即为测试样本点的最终分类。

kNN分类算法的源码:

def classify(test, samples, labels, k):

  import numpy as np
  import operator

  # 改变测试样本的格式
  samplesize = samples.shape[0]
  testnew = np.tile(test, (samplesize, 1))

  # 计算测试样本与已知样本之间的距离
  distances2 = (testnew - samples) ** 2
  distances = (distances2.sum(axis = 1)) ** 0.5

  # 对距离进行升序排序,并返回距离的下标
  sortdistances = distances.argsort()

  #计算k个最近的已知样本点所在类别出现的次数
  classcount = {}

  for i in range(k):
    sortedlabels = labels[sortdistances[i]]
    classcount[sortedlabels] = classcount.get(sortedlabels, 0) + 1

  #将k个最近的已知样本点所在类别出现的次数降序排列
  sortedclasscount = sorted(classcount.items(), key = operator.itemgetter(1),reverse = True)

  #返回k个最近的已知样本点出现频率最高的类别,即为测试样本点的最终分类
  return sortedclasscount[0][0]

对 kNN分类算法的源码进行测试:

import numpy as np

import operator
test = [0, 1]
samples = np.array([[1, 1], [1, 3], [0, 0], [0., .1]])
labels = [‘A‘, ‘A‘, ‘B‘, ‘B‘]
k = 3
print(classify(test, samples, labels, k))

测试代码的输出结果为 ‘B‘,即测试样本点[0, 1]的所属类别为:B。

以上是我对kNN分类算法的理解以及源代码,欢迎大家多多批评指正。

后续如果有时间的话,我会增加 监督学习算法_k-近邻(kNN)分类算法_实战 这一部分的随笔整理。

祝好

希望可以和大家互相学习、共同进步。

Violet HE

2019.1.18 00:35

原文地址:https://www.cnblogs.com/violethjq/p/10285462.html

时间: 2024-11-17 17:06:58

监督学习算法_k-近邻(kNN)分类算法_源代码的相关文章

在Ignite中使用k-最近邻(k-NN)分类算法

在本系列前面的文章中,简单介绍了一下Ignite的线性回归算法,下面会尝试另一个机器学习算法,即k-最近邻(k-NN)分类.该算法基于对象k个最近邻中最常见的类来对对象进行分类,可用于确定类成员的关系. 一个适合k-NN分类的数据集是鸢尾花数据集,它可以很容易地通过UCI网站获得. 鸢尾花数据集由150个样本组成,来自3种不同种类的鸢尾花各有50朵(Iris Setosa, Iris Versicolour和Iris Virginica).以下四个特征可供每个样本使用: 萼片长度(cm) 萼片宽

机器学习---K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法 1.K最近邻(k-Nearest Neighbour,KNN) K最近邻(k-Nearest Neighbour,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实

KNN分类算法实现手写数字识别

需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ?数据维度比较大,样本数比较多. ? 数据集包括数字0-9的手写体. ?每个数字大约有200个样本. ?每个样本保持在一个txt文件中. ?手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下: 数据集压缩包解压后有两个目录:(将这两个目录文件夹拷贝的项目路径下E:/KNNCase/digits/) ?目录trainingD

后端程序员之路 12、K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法,是最简单的机器学习算法之一.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合.该算法的功能有:从目标区域抽样计算欧式或马氏距离:在交叉验证后的RMSE基础上选择启发式最优的K邻域:计算多元k-最近邻居的距离倒数加权平均. 机器学习(一)——K-近邻(KNN)算法 - oYabea - 博客园http://www.cnblo

KNN分类算法--python实现

一.kNN算法分析 K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别

KNN分类算法补充

KNN补充: 1.K值设定为多大? k太小,分类结果易受噪声点影响:k太大,近邻中又可能包含太多的其它类别的点. (对距离加权,可以降低k值设定的影响) k值通常是采用交叉检验来确定(以k=1为基准) 经验规则:k一般低于训练样本数的平方根 2.类别如何判定最合适? 加权投票法更恰当一些.而具体如何加权,需要根据具体的业务和数据特性来探索 3.如何选择合适的距离衡量? 高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差. 变量值域对距离的影响:值域越大的变量常常会在距离计算中

kNN分类算法的Python实现

1.k-近邻算法实现 from numpy import * import operator def createDataSet(): group = array([[1.0, 1.1], [2.0, 2.0], [0, 0], [4.1, 5.1]]) labels = ['A', 'B', 'C', 'D'] return group, labels def classify0(inX, dataSet, labels, k): """ :param inX: 用于分类的

用外部库实现knn分类算法,并计算正确率

from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris from sklearn.neighbors import KNeighborsClassifier import numpy as np cheng = load_iris() # print(cheng.keys()) # print(cheng.data) # print(cheng.target) # pr

机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离近期的邻居进行分类推断(投票法)或者回归.假设K=1.那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习.数据都有明白的label(分类针对离散分布,回归针对连续分布),依据机器学习产