机器学习与模式识别-第6章_近邻法

合集下载

模式识别:K_近邻法

模式识别:K_近邻法

模式识别:K_近邻法最近邻法:保存两个已知分类的样本,用新样本依次与已经保存的两类样本计算欧式距离,分类结果指向距离最小的样本。

K-近邻法:在最近邻法的基础上,引进投票机制,选择若干个距离新样本最近的已知样本,用他所得类别最大票数做为新样本所属类别。

注意:为保证公平,投票数量(k)为奇数欧式距离:||xi-xj||xi,xj为特征向量,||。

||先取绝对值再取模错误率:样本趋于无穷,k值趋于无穷时 k-近邻法的错误率接近贝叶斯错误率算法:涉及的语言以及依赖库:本算法采用python3完成,事先需要安装python3的numpy,pandas,random库。

其中numpy库涉及矩阵运算,以及科学数据处理。

pandas涉及excel文档数据的导入。

random库涉及随机数的产生,用于产生本程序所需要的k_折交叉验证用到的随机分包索引矩阵。

程序:# -*- coding: utf-8 -*-"""Created on Sun Nov 19 17:27:04 2017@author: hasee"""import pandas as pdimport mathimport randomimport numpy as np#读取文件的数据集def read_file(filename):file_data = pd.read_excel(filename,index_col=None,header=None,sheetna me=0)example_data = np.array(file_data)example_data = example_data.tolist()example_data = np.mat(example_data)return example_data#计算矩阵中各元素平方def numplus(plus_data):m,n = np.shape(plus_data)for i in list(range(0,m)):for j in list(range(0,n)):plus_data[i,j]=plus_data[i,j]**2target_data = plus_data.sum(1)m1,n1 = np.shape(target_data)for k in list(range(0,m1)):for v in list(range(0,n1)):target_data[k,v]=np.sqrt(target_data[k,v])return target_data#寻找数量最多的元素的值def maxnum(label_map):label_list = label_map.tolist()num_list=[]m,n=np.shape(label_map)for i in list(range(0,m)): #获取标签矩阵中个数最多的元素b=label_list[i]d=max(b,key=b.count)num_list.append(d)label_mat = np.mat(num_list).Treturn label_mat#K折交叉验证随机分包行标记,row_big为样本集最大行数def rndom_rows(row_big,k):rows = list(range(0,row_big))goals = []rows = set(rows)for i in list(range(0,k)):a = random.sample(rows,int(row_big/k)) #在给定的rows里面选择row_big/k个不同的数b = set(a)rows = rows -bgoals.append(a)goal = np.array(goals)index_matrix = np.mat(goal)return index_matrix#用k_折交叉验证获取训练数据以及测试数据def k_validation(example_data,index_matrix,k1): #k1表式取索引矩阵的第k1组数据作为测试集合exm_list=example_data.tolist() #样本数据转化为列表index_list = index_matrix.tolist() #分包索引矩阵转化问列表m,n = np.shape(exm_list) #获取样本数据大小m1,n1 = np.shape(index_list) #获取索引矩阵大小test=[]train=[]for i in list(range(0,int(m/10))): #遍历index_matrix中数据集测试集索引c = index_list[k1][i]test.append(exm_list[c]) #根据index_d=matrix的索引获取样本集,保存在test列表中test_data=np.mat(test) #样本列表转换成矩阵for x in test: #删除样本集中取出的测试集相等子集exm_list.remove(x)train = exm_listtrain_data = np.mat(train) #训练样本列表转矩阵return test_data,train_data #返回样本集,测试集#获取测试集与训练集的欧式距离矩阵def get_distance(train_data,test_data):m,n = np.shape(train_data)m1,n1=np.shape(test_data)r_train = train_data[:,0:n-1] #获取除标签外的test_data和train_datar_test = test_data[:,0:n1-1]each_row = np.mat(np.zeros((m+1,1))) #建立按列增加的矩阵each_col = np.mat(np.zeros((1,n-1))) #建立按行增加的矩阵for i in list(range(0,m1)):for j in list(range(0,m)):a=r_train[j,:]-r_test[i,:] #计算样本和测试集坐标差each_col=np.vstack((each_col,a)) #按行增加保存在each_col矩阵中target_data = numplus(each_col) #根据坐标差调用numplus()函数,计算欧式距离each_row = np.hstack((each_row,target_data)) #按列增加模式保存在each_row距离矩阵中each_col = np.mat(np.zeros((1,n-1)))distance = each_row #距离矩阵赋值给distancem2,n2 = np.shape(distance)distance_data = distance[1:m2,1:n2] #删除空间分配时产生的零行和零列m,n = np.shape(distance_data)return distance_data #返回距离矩阵#在距离矩阵中实现分类def classify_data(distance,train_data,test_data,K):m,n = np.shape(train_data)pre_clsy = np.hstack((distance,train_data[:,n-1])) #将训练集的标签按行增加的方式,贴到距离矩阵中,距离矩阵中的每一列代表一个样本和所有训练集的欧氏距离pre_clsy = pre_clsy.T #求距离矩阵的转置标签变为最后一行m1,n1=np.shape(pre_clsy)clsy_index = np.mat(np.zeros((1,n1)))for i in list(range(0,m1-1)):index_sort = np.argsort(pre_clsy[i,:]) #按行排序把排好序的数据在未排序之前的元素所在的位置保存在位置矩阵中clsy_index = np.vstack((clsy_index,index_sort))clsy_index = clsy_index[1:m1,:] #获取除标签外的所有行的数据排序后的位置矩阵target_index = clsy_index[:,0:K] #K_近邻法要求取的前k各最小的元素,索引矩阵前k行m2,n2 =np.shape(target_index)for i in list(range(0,m2)):for j in list(range(0,n2)):a=target_index[i,j]target_index[i,j] =train_data[a,n-1] #将索引矩阵映射到原矩阵的标签处label_map = target_indexlabel = maxnum(label_map) #投票求出得票数最多的类型,并将其标签保存target_clsy = np.hstack((test_data,label)) #得到的标签保存后按列扩增后贴到测集合上return target_clsy,label#获取分类的错误率def get_accuracy(target_classify_data):m,n=np.shape(target_classify_data)count=0for i in list(range(0,m)):if target_classify_data[i,n-1] !=target_classify_data[i,n-2]: #判断分类后的标签与原测试数据是否相等,若不相等则count+1 count+=1else:true_rate=(m-count)/m #计算正确率target_classify_data[:,n-2]=target_classify_data[:,n-1] classify_data = target_classify_data[:,0:n-1] #删除原标签,贴上分类判断得到的结果标签return classify_data,true_rate #返回分类最终结果,以及正确率#构建分类器def classify_cot(filename,K):data = read_file(filename) #获取iris数据集m,n = np.shape(data) #获取原数据集行,列大小for k0 in list(range(0,1)): #k_折交叉验证循环,循环次数为子集个index_matrix = rndom_rows(m,10) #获取样本随机分包索引test_data,train_data = k_validation(data,index_matrix,1) #分包得到测试集以及数据集distance = get_distance(train_data,test_data)target_index,label = classify_data(distance,train_data,test_data,K)clsy_data,true_rate = get_accuracy(target_index)print("\n\n")print("------------------------%s-----------------------------------------------------------"%filename)print("分离出来的训练集:")print(train_data)print("分离出来的测试集:")print(test_data)print("标签匹配矩阵")print(target_index)print("分类结果矩阵")print(clsy_data)print("分类正确率")print(true_rate)print("原数据行数:")print(m)print("-------------------------%s-----------------------------------------------------------"%filename)print("\n\n")#定义最近邻分类子函数def B_NN():#最近邻法iris数据集分类iris='iris.xlsx'classify_cot(iris,1)#最近邻法sonar分类sonar = 'sonar.xlsx'classify_cot(sonar,1)#定义k_近邻子函数def K_NN():#最近邻法iris数据集分类iris='iris.xlsx'classify_cot(iris,80)#最近邻法sonar分类sonar = 'sonar.xlsx'classify_cot(sonar,80)B_NN()K_NN()最后:代码是自己根据原理敲出来的,有什么不足之处希望大佬们斧正。

第6章-k近邻算法--机器学习与应用第二版

第6章-k近邻算法--机器学习与应用第二版

第6章k 近邻算法k 近邻算法(kNN 算法)由Thomas 等人在1967年提出[1]。

它基于以下朴素思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k 个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。

因为直接比较待预测样本和训练样本的距离,kNN 算法也被称为基于实例的算法。

6.1基本概念确定样本所属类别的一种最简单的方法是直接比较它和所有训练样本的相似度,然后将其归类为最相似的样本所属的那个类,这是一种模板匹配的思想。

k 近邻算法采用了这种思路,下图6.1是使用k 近邻思想进行分类的一个例子:图6.1k 近邻分类示意图在上图中有红色和绿色两类样本。

对于待分类样本即图中的黑色点,我们寻找离该样本最近的一部分训练样本,在图中是以这个矩形样本为圆心的某一圆范围内的所有样本。

然后统计这些样本所属的类别,在这里红色点有12个,绿色有2个,因此把这个样本判定为红色这一类。

上面的例子是二分类的情况,我们可以推广到多类,k 近邻算法天然支持多类分类问题。

6.2预测算法k 近邻算法没有要求解的模型参数,因此没有训练过程,参数k 由人工指定。

它在预测时才会计算待预测样本与训练样本的距离。

对于分类问题,给定l 个训练样本(),i i y x ,其中i x 为维特征向量,i y 为标签值,设定参数k ,假设类型数为c ,待分类样本的特征向量为x 。

预测算法的流程为:1.在训练样本集中找出离x 最近的k 个样本,假设这些样本的集合为N 。

2.统计集合N 中每一类样本的个数,1,...,i C i c =。

3.最终的分类结果为arg max i i C 。

在这里arg max i i C 表示最大的i C 值对应的那个类i 。

如果1k =,k 近邻算法退化成最近邻算法。

k 近邻算法实现简单,缺点是当训练样本数大、特征向量维数很高时计算复杂度高。

因为每次预测时要计算待预测样本和每一个训练样本的距离,而且要对距离进行排序找到最近的k 个样本。

近邻法

近邻法
N A1
(2)采用抽样的办法,使之能自适应选择k;
“科研反哺教学”,将自己的研究工作融入课堂;
6.3.2 核近邻法(续)
贝叶斯 决策器
学习 方法
4 3 2
分类 错误率 5.5% 4.6% 4.1%
KNN (k=3) BKNN 贝叶斯决策器
KNN
1 0 -1
三种方法的分类错误率比较
BKNN
-2 -3 -4 -4
本人解决方案:
NN (Fix, 1951)
KNN (Yu,2002) (Peng,2004) BNN (Homes,2002)
定义最优核距离 (本章) 核化 (本章)
BKNN (本章)
(1)推导出“最优核距离”:
1 rko x , xl rko x, xl N A1 1 NA B x, xi , xl B x, xi , xl N i 1 A i 1
J. Peng. Adaptive Quasiconformal Kernel Nearest Neighbor Classification. IEEE Trans PAMI[J]. 2004, 26(5): 656 - 661.
Rd
x1 , t1 1 x5 , t5 1 1
6.1.1 关于近邻法
1951年Fix和Hodges首次提出
第 w1 类
第 w2 类
最经典的模式识别方法之一 方法简单,便于理论分析
x
x1
x4
是其它模式识别方法的标尺
“距离”的度量方式有很多种
近邻法原理示意图
6.1.2 近邻法应用实例:人脸表情识别
欲解决的问题:
七 类 表 情

第六章最近邻方法- 模式识别

第六章最近邻方法- 模式识别
第六章 最近邻方法
Nearest Neighbour Classification
6.1 最近邻决策规则 6.2 剪辑最近邻法 6.3 误判概率及其上下界
最近邻方法
6.1 最近邻决策规则—1-
cN类N问题,设 x ( ji) i( i 1 ,2 , c ,j 1 ,2 , N i)
最近邻分类规则:
j1,2, ,Ni
如果 dm(x)mindi(x) 则 x m
i1,2, ,c
这里 xj X(NTE)
剪辑最近邻方法 ω1 ω2 X(NR) X(NT)
用X(NTE) 对输入 的未知样本做 K-NN分类。
用X(NR)中的样本 采用最近邻规则对 X(NT)中的每个样 本分类,剪辑掉 X(NT)中被错误分 类的样本。
N l i m P S 1 N l i m p ( x 0 |x ) ( x 0 x )
P 1
即x 以0 概率1收敛于 x记为 x 0 x
c
P 1/N(e|x,x0)1 P (i|x)P (i|x0) i1
x 因为 x 0 P ,1 x故 条件下的渐近误判概率为
其中 k i表示k个近邻元中属于ωi的样本个数
最近邻方法
N(1N)已知N个已 知类别样本X
6.1 最近邻决策规则—k-
(2)输入未知类别 样本x
(6) 判xω2
(4)找出x的k个最近邻 元Xk={xi,i=1,2,…,k}
(5)看Xk中属于哪一类的 样本最多k1=3<k2=4
6.2 剪辑最近邻方法
c
N li m P 1/N(e|x,x0)1i1P( i|x)2
P 1NN(e|x)N li m P 1/N(e|x,x0)p(x0|x)dx0

机器学习:K-近邻算法(KNN)

机器学习:K-近邻算法(KNN)

机器学习:K-近邻算法(KNN)机器学习:K-近邻算法(KNN)⼀、KNN算法概述KNN作为⼀种有监督分类算法,是最简单的机器学习算法之⼀,顾名思义,其算法主体思想就是根据距离相近的邻居类别,来判定⾃⼰的所属类别。

算法的前提是需要有⼀个已被标记类别的训练数据集,具体的计算步骤分为⼀下三步:1、计算测试对象与训练集中所有对象的距离,可以是欧式距离、余弦距离等,⽐较常⽤的是较为简单的欧式距离;2、找出上步计算的距离中最近的K个对象,作为测试对象的邻居;3、找出K个对象中出现频率最⾼的对象,其所属的类别就是该测试对象所属的类别。

⼆、算法优缺点1、优点思想简单,易于理解,易于实现,⽆需估计参数,⽆需训练;适合对稀有事物进⾏分类;特别适合于多分类问题。

2、缺点懒惰算法,进⾏分类时计算量⼤,要扫描全部训练样本计算距离,内存开销⼤,评分慢;当样本不平衡时,如其中⼀个类别的样本较⼤,可能会导致对新样本计算近邻时,⼤容量样本占⼤多数,影响分类效果;可解释性较差,⽆法给出决策树那样的规则。

三、注意问题1、K值的设定K值设置过⼩会降低分类精度;若设置过⼤,且测试样本属于训练集中包含数据较少的类,则会增加噪声,降低分类效果。

通常,K值的设定采⽤交叉检验的⽅式(以K=1为基准)经验规则:K⼀般低于训练样本数的平⽅根。

2、优化问题压缩训练样本;确定最终的类别时,不是简单的采⽤投票法,⽽是进⾏加权投票,距离越近权重越⾼。

四、python中scikit-learn对KNN算法的应⽤#KNN调⽤import numpy as npfrom sklearn import datasetsiris = datasets.load_iris()iris_X = iris.datairis_y = iris.targetnp.unique(iris_y)# Split iris data in train and test data# A random permutation, to split the data randomlynp.random.seed(0)# permutation随机⽣成⼀个范围内的序列indices = np.random.permutation(len(iris_X))# 通过随机序列将数据随机进⾏测试集和训练集的划分iris_X_train = iris_X[indices[:-10]]iris_y_train = iris_y[indices[:-10]]iris_X_test = iris_X[indices[-10:]]iris_y_test = iris_y[indices[-10:]]# Create and fit a nearest-neighbor classifierfrom sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier()knn.fit(iris_X_train, iris_y_train)KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',metric_params=None, n_jobs=1, n_neighbors=5, p=2,weights='uniform')knn.predict(iris_X_test)print iris_y_testKNeighborsClassifier⽅法中含有8个参数(以下前两个常⽤):n_neighbors : int, optional (default = 5):K的取值,默认的邻居数量是5;weights:确定近邻的权重,“uniform”权重⼀样,“distance”指权重为距离的倒数,默认情况下是权重相等。

第6章_近邻法

第6章_近邻法

i
K近邻法
(1)已知N个已知 类别样本X
(2)输入未知类别 样本x
(3)计算x到 xiX,(i=1, 2,…,N)的 距离di(x)
(6) 判xω2 (4)找出x的k个最近邻 元Xk={xi,i=1,2,…,k} (5)看Xk中属于哪一类的样 本最多k1=3<k2=4

讨论k为奇数时的两类问题
xi X p
第二阶段用搜索算法
检验未知样本x的最近邻是否在X p中的两个规则。 规则1:如果存在 B rp D x, M p 则xi X p 不可能是x的最近邻。其中B是在算法执行过程 中,对于已涉及到的那些样本集X p中的样本到x 的最近 距离。初始B可置为, 以后的B在算法中求得。
c * P P P 2 P c 1 * 其中P 为贝叶斯错误率,c为类数。
* *
可以证明,当样本数相当多时,近邻法错误 率与贝叶斯错误率存在以下关系:
• 上式表明,当样本数相当多时,近邻法的错误 率在贝叶斯错误率和两倍的贝叶斯错误率之间。
最近邻法错误率上下界与贝叶斯错误率的关系
5在目录表中选择最近节点p, 它使D x, M p 最小化,并
称该p为当前执行节点,从目录表中去掉p。如果当前 的水平L是最终水平,则转步骤6。否则置L L 1,转 步骤2。
6对现在执行节点p中的每个x,利用规则2作如下检验。
如果
D x, M p D xi , M p B
规则2:如果存在
B xi , M p D x, M p
其中xi X p,则xi 不是x的最近邻。 D x, xi D x, M p D xi , M p B D xi , M p 在计算rp中已用到,并可存储在机器中。

模式识别基础之近邻法

模式识别基础之近邻法近邻法是一种常用的模式识别方法,它通过测量不同对象间的相似性来进行分类。

本文将介绍近邻法的基本原理、应用领域以及优缺点。

一、基本原理近邻法是基于实例学习(instance-based learning)的一种算法。

它通过计算样本之间的距离或相似度来判断其归属类别。

简单来说,近邻法将新的样本与已有的样本进行比较,将其归类到与其最相似的样本所属的类别中。

在实际应用中,近邻法通常是通过计算样本之间的欧氏距离或余弦相似度来进行分类。

欧氏距离是指在坐标系中两点之间的直线距离,而余弦相似度是指两个向量之间的夹角的余弦值。

根据距离或相似度的大小,近邻法将样本进行分类。

二、应用领域1. 图像识别近邻法在图像识别领域有着广泛的应用。

通过计算图像的特征向量之间的相似度,可以实现图像分类、图像匹配等功能。

例如,当需要将一张未知图像分类到已知类别中时,可以通过计算未知图像与已知图像的特征向量之间的相似度来判断其归属类别。

2. 文本分类在文本分类任务中,近邻法也是一个常用的算法。

通过计算文本之间的相似度,可以实现文本的自动分类。

例如,当需要将一篇未知文本归类到已有类别中时,可以计算未知文本与已有文本之间的相似度,并将其归类到相似度最高的类别中。

3. 推荐系统近邻法在推荐系统中也得到了广泛的应用。

通过计算用户之间的兴趣相似度,可以为用户推荐符合其兴趣的物品。

例如,在电商平台上,通过计算用户购买记录或点击行为之间的相似度,可以为用户推荐与其兴趣相似的商品。

三、优缺点1. 优点近邻法具有以下优点:- 简单直观:近邻法的原理简单易懂,容易实现和解释。

- 非参数化:近邻法不对数据的分布做任何假设,适用于任何类型的数据。

- 灵活性强:近邻法适用于多种应用场景,可以根据实际需求进行定制。

2. 缺点近邻法也存在一些缺点:- 计算复杂度高:对于大规模的数据集,计算样本之间的距离或相似度可能会非常耗时。

- 依赖样本质量:近邻法受样本质量的影响较大,对于噪声数据或不均衡数据容易产生误分类。

第6章近邻法


(6)检验
对当前执行结点p '中的每个xi , 利用规则2作如下检验: 如果 D x, M p B D xi , M p 则xi不是x的最近邻,从而不计算D x, xi 。 否则 计算D x, xi , 若D x, xi B, 则置NN i和B D x, xi 。在当前执行结点中 所有的xi 被检验之后,转步骤(3)。
计算机学院信息科学研究所
模式识别
第6章 近邻法
6.3.2 剪辑近邻法 1.两分剪辑近邻法
NR NT , 样本分为独立的参考集和考试集:
(1)剪辑:用参考集 NR 中的样本对考试集 NT 中的样本进行近邻法分类,剪掉 NT 中被错分 的样本, NT 中剩余样本构成 -剪辑样本集 NTE (2)分类:利用剪辑样本集 NTE 和近邻法对未 知样本x进行分类
计算机学院信息科学研究所
模式识别
第6章 近邻法
6.2 k-近邻法
• 最近邻法的推广。在已知N个样 本中,找出测试样本x的k个近 邻,其中k个近邻中属于各类别 的个数分别为k1, k2 ,…, kc
N1 N 2 N c N 判别函数:gi x ki , i 1, 2, , c 决策规则:若 g j x max ki,则 x ω j
计算机学院信息科学研究所
模式识别
第6章 近邻法
可以证明: c * P P P 2 P c 1 其中:P*为贝叶斯错误率,c为类别数,
* *
P是N 时最近邻法的错误率(渐近的平均错误率)
一般情况下P*很小, 因此上式可粗略表示为: P * P 2P * 即:最近邻法的错误率在 贝叶斯错误率的2倍之内
• 如右图,红点表示A类训练样本,蓝点表 示B类训练样本,而绿点O表示待测样本。 • 若以欧式距离来衡量, O 的最近邻是 A3,其次是B1,因此O应该属于A类。 • 但若A3被拿开,O就会被判为B类

清华大学模式识别课件-07_近邻法


(6 20)
因为 P 与
P 2 i | x 有关,若寻求 P 与 P* 的关系,首先可以寻求 P 2 i | x 与 P* 的关
i 1 i 1
系。现利用式(6-18),式(6-20)的结果来推导,有
P | x P
2 2 i 1 i
c
m
| x P i | x 1 P e | x
以上两式对我们的启发是:对已知的 P m | x 而言,
*
P | x 的最小值对应着 P 的最大值。
2 i 1 i
c
如能求出 P 的最大值,就把贝叶斯错误率 P 和最近邻法错误率 P 联系起来了。 若记
P | x P
2 2 i 1 i
c
m
| x P 2 i | x

x's
p x' dx'
N
(6 8)
P x1 , x2 , …,x N 1 Ps
当 N→∞时,这一概率趋于零。由于 s 可以任意小,所以 N→∞时, x' 落在以 x 为中心无限小区域
中的概率趋于 1。就是说 x' 以概率为 1 收敛于 x,从而
N
lim p x' | x x' - x
(6 9)
现在来计算条件错误概率 PN e | x, x' 。当我们说有 N 个独立抽取并有类别标记的样本时,意 思是说有 N 对随机变量 x1 , 1 , x2 , 2 , …, x N , N ,其中 xi 是独立抽取的样本,i 是 xi 的类别 标记,且 i 是 c 个类别状态 1 , 2 …,c 之一。现在假定抽取一对 x, ,并假定标以 ' 的 x' 是 x 的最近邻。由于抽出 x' 时,它的类别状态和 x 无关。因此有

模式识别7.近邻法

的样本均值
:从 到
的最大距离
15
【样本集分级分解示例 】
16
【样本集搜索规则 】
规则1:如果
成立,则 规则2:如果
不可能是 的最近邻。
成立,其中
,则 不可能是 的最近邻。
:当前已经涉及到的样本集 中的样本到 的最 近距离。
17
【搜索算法的基本思想 】
18
【讨论 】
1. 分级数目增多,结点增多,最终结点对应的样 本数减少。
2. 分级数目增少,结点增少,最终结点对应的样 本数增多。
3. 推广到 -近邻
19
3. 剪辑近邻法
20
【概念的提出 】
以上讨论的快速算法只是研究如何减少计算量的问题 ,而不考虑存储量的压缩。实际上由于对样本进行分层次 分组,并附有一些参数,实际的存储量还有可能增加。
对每个模板计算一次相似度。
5
1.近邻法原理及其决策规则
6
【基本原理】
背景: 最小距离分类器是将各类训练样本划分成若干子类,并在每 个子类中确定代表点,一般用子类的质心或邻近质心的某一 样本为代表点。测试样本的类别则以其与这些代表点距离最 近作决策。该法的缺点是所选择的代表点并不一定能很好地 代表各类, 后果将使错误率增加。
本数量却大大减少了,因此可以大大节省存储量。
35
【本章小结】
几个要点: (1) 弄清楚近邻法的定义以及基本做法。 (2) 弄清“近邻法性能好”是在什么意义上讲的? (3) 快速搜索方法是使用怎样的原理? (4) 剪辑近邻法的原理是什么? 而压缩近邻法与剪辑近邻法有什
么不同之处?
36
【课后习题】
• 有7个二维向量:
9
【 -近邻法决策规则 】
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

•基本思想
•是将样本集按邻近关系分解成组,给出每组的均值中 心所在,以及组内样本至该中心的最大距离 •这些组又可形成层次结构,即组又分子组 •因而待识别样本可将搜索近邻的范围从某一大组,逐 渐深入到其中的子组,直至树的叶结点所代表的组, 确定其相邻关系
6.3.1 近邻法的快速算法
•样本集分级分解
•分级分解过程可列举如下
6.3.2 剪辑近邻法
在实际问题中,由于不知道准确的贝叶 斯决策边界,所以不能准确确定 i类落 在 j类区域中的样本。而代之以去掉被k 近邻分错的样本。这样得到的样本集合 称为剪辑(Edited set)集。以后的实验 样本集用剪辑集按k近邻法分类。这种算 法称为剪辑近邻法。
剪辑的最近邻法的错误率 • 可以证明,未剪辑的最近邻法的错误率 和贝叶斯错误率分别为上式的上下界:
6.3.1 近邻法的快速算法
•实现快速搜索近邻的基本思路
•需要有方法快速判断某个样本子集是否是该 待识样本的可能近邻样本集,从而可将无关的 样本子集尽快排除。 •另一方面在某样本子集内寻找哪个样本是近 邻时,需快速排除不可能为近邻的样本 •这两个快速判别算法可用两个规则表示
6.3.1 近邻法的快速算法
个样本中哪一类最多, 就判属哪一类。即:
d i ( x ) ki
i 1,2,, c
显然 如果
k
i 1
i 1, 2,,c m ( x) max d i ( x)
x m
6.2 K-近邻法
K-近邻法的错误率界
• 可以证明: 最近邻法的错误率在贝叶斯错误率和2倍 贝叶斯错误率之间。
最近邻法的错误率
• 可以证明 当样本数相当多时,近邻法的错误率在 贝叶斯错误率和2倍的贝叶斯错误率之间。
最近邻法的错误率
6.2 K-近邻法
6.2 K-近邻法
对于一个待识别模式x, 分别计算它与 N N i 个已知类别的样本 x j 的距离, 取k个最近邻样本,这k
(i )
i 1 c
剪辑的最近邻法的错误率 • 重复使用最近邻法,把落在 j类区域中 i 类的样本剪掉,其错误率的情况为
6.3.3 压缩近邻法
•近邻法存在的问题
•计算量大,存储量大,要计算大量的样本间 的距离 •在投票近邻法,靠近贝叶斯决策边界的点对 分类有关键作用。而位于各类类中心附近、远 离决策边界的点不影响分类,因而可以把它们 去掉。这样减少(参考)样本点,可以节省近 邻法的时间和空间。
6.3.3 压缩近邻法
•它定义两个存储器,一个用来存放即将生成 的样本集,称为Store;另一存储器则存放原 样本集,称为Grabbag。
6.3.3 压缩近邻法
•算法的实现
•其算法是:
•1.[初始化]Store是空集,原样本集存入Grabbag;从 Grabbag中任意选择一样本放入Store中作为新样本集的第一 个样本。 •2.[样本集生成]在Grabbag中取出第i个样本用Store中的 当前样本集按最近邻法分类。若分类错误,则将该样本从 Grabbag转入Store中,若分类正确,则将该样本放回 Grabbag中,对Grabbag中所有样本重复上述过程。 •3.[结束过程]若Grabbag中所有样本在执行第二步时没有 发生转入Store的现象,或Grabbag已成空集,则算法终止, 否则转入第二步。
第六章 近邻法
• 产生
– 由Cover和Hart于1968年提出 – 理论上有深入分析 – 是模式识别中最重要的方法之一
第六章 近邻法
• 最小距离分类器
– 每个类别只有一个”代表点”
第六章 近邻法
• 基于距离的分段线性函数
– 每个类别用多个”代表点”表示
第六章 近邻法
– 考虑以全部训练样本作为“代表点” – 分类方法:
• 实现快速搜索算法的两个规则
规则1:如果存在
则 不可能是x的近邻。其中B是待识别样本在搜 索近邻过程中的当前近邻距离,B在搜索过程中不断 改变与缩小。算法开始可将B设为无穷大。 表 示待识样本x到结点 的均值点距离。
6.3.1 近邻法的快速算法
实现快速搜索算法的两个规则
规则2: 如果
其中xi∈ ,则xi不可能是x的近邻。
6.3.1 近邻法的快速算法
•搜索算法的大体过程
•当搜索树形样本集结构由高层次向低层次深入时,对 同一层次的所有结点,可以利用规则1排除掉一些不 可能包含待识别样本的近邻的结点(样本子集)。 •但是这往往不能做到只留下唯一的待搜索结点,因此 必须选择其中某一结点先深入搜索,以类似于深度优 先的方法确定搜索路径直至叶结点。 •然而在该叶结点中找到的近邻并不能保证确实是全样 本集中的最近邻者,所找到的该近邻样本需要在那些 有可能包含最近邻的样本子集中核对与修正,直至找 到真正的最近邻样本为止。
6.3.1 近邻法的快速算法
•树搜索算法步骤:
•步骤4: [路径选择]如该层次目录表中有不止一个结 点,选其中D(x,Mp)最小者,将该结点从目录表中删 除,如该结点是叶结点转 步骤5,如不是叶结点,则L =L+1,转步骤2;如该层次目录表中无结点待搜索, 则L=L-1,如L=0则停止,否则转步骤3。 •步骤5: [近邻样本搜索]对现在执行结点p中的每个样 本xi,利用规则2作如下检验: 如果D(x,Mp)> D(xi,Mp)+B则xi不是x的最近邻,否则计算D(x,xi), 若D(x,xi)<B,置NN=i和B=D(x,xi)。对当前执行 结点中所有xi被检验后,转步骤3。
K-近邻法的错误率界
近邻法问题分析
•近邻法缺点
存储量大
要存储的样本很多
计算量大
每个测试样本要对每个存储样本计算一次相似度
•改进方法的两种原理
•预先建立“索引”,方便快速查找到相似的 样本集,忽略很不相似的样本集。 •减少冗余样本。
6.3 减少近邻法计算量和存储量方法
•近邻法快速算法
•这种方法着眼于只解决减少计算量,但没有达到减少 存储量的要求。
• 测试样本与每个”代表点”做比较 • 与哪个模板最相似(即为近邻),就按最近似的”代 表点”的类别作为分类的类别
– 这种方法就是近邻法的基本思想
6.1 最近邻法
最近邻决策规则
• 对未知样本,找出已知类别的训练样本集 中和未知样本最近的一个样本,把未知样 本识别为与该样本一样的类。
最近邻决策算法
• 这类的算法称为压缩近邻法。
6.3.3 压缩近邻法
•压缩近邻法压缩样本的思想
•它利用现有样本集,逐渐生成一个新的样本 集。 •使该样本集在保留最少量样本的条件下, 仍能 对原有样本的全部用最近邻法正确分类,那末 该样本集也就能对待识别样本进行分类, 并保 持正常识别率。
6.3.3 压缩近邻法
•算法的实现
•首先将整个样本分成l个子集,每个子集又分为它的 l个子集 •如此进行若干次就能建立起一个样本集的树形结 构 •分成子集的原则是该子集内的样本尽可能聚成堆, 这可用聚类方法实现。
6.3.1 近邻法的快速算法
结点参数:
树形结构,每个结点表示一样本子集,描述 该子集的参数是:
一个树形结构样本集, 其中分支数l=3
6.3.2 剪辑近邻法
•剪辑近邻法的基本思想
•由于样本的数量有限,因此样本的边界具有较大的稀 疏性, 带来较大分类随机性 •不同类别交迭区域中不同类别的样本彼此穿插,将使 得随机错误率更高。
•因此如果能将不同类别交界处的样本以适当方式筛选, 可以实现既减少样本数又提高正确识别率的双重目的。
•为此可以利用现有样本集对其自身进行剪辑。
6.3.1 近邻法的快速算法
•树搜索算法步骤:
•步骤1: [初始化]置B=∞,L=1(当前层次), p=0(确定当前结点)。 •步骤2: [置后选待搜索结点]把当前结点的所 有直接后继结点放入层的一目录表中,并对这 些结点计算D(x,Mp)。
•步骤3: [排除无关结点]对层目录表中的每个 结点P,用规则1将与近邻无缘的结点从目录 表中清除。
相关文档
最新文档