K近邻分类的算法实现

合集下载

k紧邻分类的距离计算方法

k紧邻分类的距离计算方法

k紧邻分类的距离计算方法k-近邻分类(k-nearest neighbors classification)是一种常用的机器学习算法,它通过计算样本之间的距离来进行分类。

本文将介绍k-近邻分类的距离计算方法,并探讨其在实际应用中的优缺点。

一、距离计算方法在k-近邻分类中,计算样本之间的距离是非常重要的一步。

常用的距离计算方法有欧氏距离、曼哈顿距离、闵可夫斯基距离等。

下面分别介绍这些距离计算方法的原理和特点。

1. 欧氏距离(Euclidean Distance)欧氏距离是最常用的距离计算方法之一,它用于计算两个样本之间的直线距离。

假设有两个样本点A(x1, y1)和B(x2, y2),则它们之间的欧氏距离可以表示为:d(A, B) = sqrt((x2 - x1)^2 + (y2 - y1)^2)欧氏距离的优点是计算简单,直观易懂。

然而,它对异常值比较敏感,可能会导致错误的分类结果。

2. 曼哈顿距离(Manhattan Distance)曼哈顿距离是另一种常用的距离计算方法,它用于计算两个样本之间的城市街区距离。

假设有两个样本点A(x1, y1)和B(x2, y2),则它们之间的曼哈顿距离可以表示为:d(A, B) = |x2 - x1| + |y2 - y1|曼哈顿距离的优点是不受异常值的影响,对于离群点具有较好的鲁棒性。

然而,它没有考虑样本之间的斜率差异,可能导致分类结果不准确。

3. 闵可夫斯基距离(Minkowski Distance)闵可夫斯基距离是欧氏距离和曼哈顿距离的一种推广,它通过一个参数p来调节距离的计算方式。

当p=2时,闵可夫斯基距离等同于欧氏距离;当p=1时,闵可夫斯基距离等同于曼哈顿距离。

d(A, B) = (|x2 - x1|^p + |y2 - y1|^p)^(1/p)闵可夫斯基距离的优点是可以根据具体问题选择合适的p值,从而权衡欧氏距离和曼哈顿距离的影响。

然而,它的计算复杂度较高,需要考虑到p的选择和样本特征的归一化问题。

1.简述k最近邻算法的原理、算法流程以及优缺点

1.简述k最近邻算法的原理、算法流程以及优缺点

1.简述k最近邻算法的原理、算法流程以及优缺点一、什么是K近邻算法k近邻算法又称knn算法、最近邻算法,是一种用于分类和回归的非参数统计方法。

在这两种情况下,输入包含特征空间中的k个最接近的训练样本,这个k可以由你自己进行设置。

在knn分类中,输出是一个分类族群。

一个对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小),所谓的多数表决指的是,在k个最近邻中,取与输入的类别相同最多的类别,作为输入的输出类别。

简而言之,k近邻算法采用测量不同特征值之间的距离方法进行分类。

knn算法还可以运用在回归预测中,这里的运用主要是指分类。

二、k近邻算法的优缺点和运用范围优点:精度高、对异常值不敏感、无数据输入假定。

缺点:计算复杂度高、空间复杂度高。

适用范围:数值型和标称型、如手写数字的分类等。

三、k近邻算法的工作原理假定存在一个样本数据集合,并且样本集中的数据每个都存在标签,也就是说,我们知道每一个样本数据和标签的对应关系。

输入一个需要分类的标签,判断输入的数据属于那个标签,我们提取出输入数据的特征与样本集的特征进行比较,然后通过算法计算出与输入数据最相似的k个样本,取k个样本中,出现次数最多的标签,作为输入数据的标签。

四、k近邻算法的一般流程(1)收集数据:可以使用任何方法,可以去一些数据集的网站进行下载数据。

(2)准备数据:距离计算所需要的数值,最好是结构化的数据格式(3)分析数据:可以使用任何方法(4)训练算法:此步骤不适用于k近邻算法(5)测试算法:计算错误率(6)使用算法:首先需要输入样本数据和结构化的输出结构(统一数据格式),然后运行k近邻算法判定输入数据属于哪一种类别。

五、k近邻算法的实现前言:在使用python实现k近邻算法的时候,需要使用到Numpy科学计算包。

如果想要在python中使用它,可以按照anaconda,这里包含了需要python需要经常使用到的科学计算库,如何安装。

knn算法的分类规则

knn算法的分类规则

knn算法的分类规则目录1.KNN 算法简介2.KNN 算法的分类规则3.KNN 算法的优缺点4.KNN 算法的应用实例正文1.KNN 算法简介KNN(k-Nearest Neighbors,k-近邻)算法是一种基于距离度量的分类和回归方法。

该算法的基本思想是:在一个数据集中,每个数据点根据其距离其他数据点的距离进行分类。

具体而言,KNN 算法会找到距离目标数据点最近的 k 个数据点,然后根据这些邻居的数据类别决定目标数据点的类别。

2.KNN 算法的分类规则KNN 算法的分类规则非常简单,可以概括为以下三个步骤:(1)计算数据点之间的距离:首先,需要计算数据集中每个数据点之间的距离。

通常使用欧氏距离、曼哈顿距离等度量方法。

(2)确定邻居数据点:根据距离度量,找到距离目标数据点最近的 k 个数据点。

这里 k 是一个超参数,可以根据实际问题和数据集的特点进行选择。

(3)决定目标数据点的类别:根据邻居数据点的类别,决定目标数据点的类别。

如果邻居数据点的类别多数为某一类别,则目标数据点也被划分为该类别;否则,目标数据点不被划分为任何类别。

3.KNN 算法的优缺点KNN 算法的优点包括:简单易懂、易于实现、对数据集的噪声不敏感、能够很好地处理不同密度的数据等。

然而,KNN 算法也存在一些缺点,如计算量大、需要存储所有数据点、对 k 的选择敏感等。

4.KNN 算法的应用实例KNN 算法在许多领域都有广泛的应用,例如文本分类、图像分类、生物信息学、金融风险管理等。

例如,在文本分类任务中,可以将文本表示为特征向量,然后使用 KNN 算法根据特征向量的距离对文本进行分类。

总之,KNN 算法是一种简单且易于实现的分类方法,适用于各种数据集和领域。

机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)

机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)

机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)⽬录⼯作原理存在⼀个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每⼀数据与所属分类的对应关系。

输⼊没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进⾏⽐较,然后算法提取样本集中特征最相似数据(最近邻)的分类特征。

⼀般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不⼤于20的整数。

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

举个例⼦,现在我们⽤k-近邻算法来分类⼀部电影,判断它属于爱情⽚还是动作⽚。

现在已知六部电影的打⽃镜头、接吻镜头以及电影评估类型,如下图所⽰。

现在我们有⼀部电影,它有18个打⽃镜头、90个接吻镜头,想知道这部电影属于什么类型。

根据k-近邻算法,我们可以这么算。

⾸先计算未知电影与样本集中其他电影的距离(先不管这个距离如何算,后⾯会提到)。

现在我们得到了样本集中所有电影与未知电影的距离。

按照距离递增排序,可以找到k个距离最近的电影。

现在假定k=3,则三个最靠近的电影依次是He's Not Really into Dudes、Beautiful Woman、California Man。

python实现⾸先编写⼀个⽤于创建数据集和标签的函数,要注意的是该函数在实际⽤途上没有多⼤意义,仅⽤于测试代码。

def createDataSet():group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])labels = ['A','A','B','B']return group, labels然后是函数classify0(),该函数的功能是使⽤k-近邻算法将每组数据划分到某个类中,其伪代码如下:对未知类别属性的数据集中的每个点依次执⾏以下操作:(1)计算已知类别数据集中的点与当前点之间的距离;(2)按照距离递增次序排序;(3)选取与当前点距离最⼩的k个点;(4)确定前k个点所在类别的出现频率;(5)返回前k个点出现频率最⾼的类别作为当前点的预测分类。

k-近邻分类算法

k-近邻分类算法

k-近邻分类算法K近邻分类算法是一种基于实例的分类算法,它的主要思想是通过计算每个样本点与其周围的k个最近邻点的距离来确定该点的类别。

该算法主要应用于分类问题中,并且在实际应用过程中具有很好的可用性、易实现性和理解性。

算法原理算法首先通过确定k值来确定分类的邻域大小,以及根据k值的选择来确定分类的准确性和鲁棒性。

之后通过计算每个样本点与其邻域内k个最近邻点之间的距离来确定该样本点所属的分类。

具体流程如下:1.确定数据集中的k值和距离度量标准;2.对于每个待分类的样本点,计算与其邻域中k个最近邻点之间的距离;3.根据邻域中k个最近邻点的类别来确定该样本点所属的类别;4.重复步骤2和3,直到所有待分类的样本点均被分类完毕;5.给出分类结果。

距离度量标准在k-近邻分类算法中,距离度量标准是非常重要的,因为它决定了样本点之间距离的计算方式。

目前常见的距离度量标准有欧式距离、曼哈顿距离和切比雪夫距离。

欧式距离:$d=\sqrt{{\sum_{i=1}^{n}{(x_i-y_i)^2}}}$优缺点1.基于实例,不需要对数据进行任何假设和理论分析;2.算法的可预测性高,具有很好的分类性能;3.没有过拟合的现象,可以对复杂的数据集进行分类;4.整体而言,k-近邻分类算法非常容易理解和实现。

1.计算量比较大,对于大型数据集而言,算法的效率较低;2.对于高维数据集而言,容易出现维数灾难问题,即算法的效果会逐渐降低;3.容易受到异常值的影响,且在分类决策区域方面可能存在不连续的问题。

应用场景k-近邻分类算法广泛应用于模式识别、数据挖掘和生物信息学等领域,特别适合处理较小的数据集。

目前该算法已被应用于医疗诊断、电子商务、物联网等领域,既可以用于分类问题,也可以用于回归问题。

同时,对于分类问题而言,该算法并不适用于类别数比较多或类别间存在相互交叉的情况。

因此,在实际应用过程中,应根据具体情况来选择算法,以达到最佳的分类效果。

人工智能实验-k-近邻算法

人工智能实验-k-近邻算法

k-近邻算法一、 实验题目1. kNN 代码实现-AB 分类采用测量不同特征值之间的距离方法进行分类,用所给的函数创建具有两个特征与一个标签类型的数据作 为训练集,编写 classify0 函数对所给的数据进行 AB 分类。

2. k-近邻算法改进约会网站的配对效果k-近邻算法改进约会网站的配对效果通过收集的一些约会网站的数据信息,对匹配对象的归类:不喜欢的人、魅力一般的人、极具魅力的人。

数据中包含了 3 种特征:每年获得的飞行常客里程数、玩视频游戏所耗时间百分比、每周消费的冰淇淋公升数二、 实验代码1. kNN 代码实现-AB 分类kNN from http.client import ImproperConnectionStatefrom numpy import ∗ from collections importCounter import operator def createDataSet():group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])labels = [’A ’, ’A ’, ’B’, ’B’] return group, labelsdef classify0(inX, group, labels, k = 3):res1 = (inX − group)∗∗2 dist =res1[:,0] + res1[:,1] dic = argsort(dist) dic = dic[0:k:1] newdic = [] for i in range (k): newdic.append(labels[dic[i]]) c = Counter(newdic).most_common(1) return c[0][0] tests import kNN group, lables = kNN.createDataSet() print (’分类结果’) print (’[0,0] %c’ %(kNN.classify0([0, 0], group, lables, k = 3))) print (’[0.8,0.7] %c’ %(kNN.classify0([0.8, 0.7], group, lables, k = 3)))2.k-近邻算法改进约会网站的配对效果1 2 3 4 5 67 8 910111213141516171819 1 2 3 4 5import pandas as pdimport kNNfrom sklearn.model_selection import train_test_splitdf = pd.read_table(’datingTestSet2.txt’,sep=’\s+’, names = [’A ’, ’B’, ’C’, ’Y’])# 对特征进行归一化处理df2 = df.iloc[:, :3] df2 =(df2−df2.mean())/df2.std() lable=df.iloc[:,3:4] df2.loc[:, ’Y’] =lable# 对数据集进行测试集和训练集划分,90%作为训练集,10%作为测试集X_train, X_test, Y_train, Y_test = train_test_split(df2.iloc[:, :3], df2.Y, train_size=.90)# 将DataFrame 格式转化为numpy 格式处理 group = X_train.values label =Y_train.values length =len (X_test) X_test.iloc[0:1,:]# res 以储存测试结果res = []# 设置错误正确数count 以计算正确率Tnum = 0 Fnum = 0 for iin range (length):inX = X_test.iloc[i:i+1 , :].values res.append(kNN.classify0(inX,group, label, k = 3)) if (kNN.classify0(inX, group, label, k = 3) ==Y_test.values[i]):Tnum += 1 else :Fnum += 1res1 = pd.DataFrame(data = res, columns=[’TestResult’])Y_test.reset_index(inplace=True,drop=True)res1.loc[:, ’OriginTest’] = Y_testprint (’前20个数据测试结果和原数据比较’) print (’−−−−−−−−−−−−−−−−−−−−−——−−−−’) print (res1.head(20))print (’−−−−−−−−−−−−−−−−−−−−−——−−−−’) print (’正确率%.2f%%’ %(100∗Tnum/(Tnum+Fnum))) 三、 实验结果及分析1. kNN 代码实现-AB 分类分类结果[0, 0] B[0.8, 0.7] A2. k-近邻算法改进约会网站的配对效果1 2 3 45 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2526 27 28 29 3031 32 33 3435363738 1 2 3前20个数据测试结果和原数据比较−−−−−−−−−−−−−−−−−−−−−——−−−TestResult OriginTest0 2 2 1 3 3 2 1 3 3 2 2 4 2 2 5 3 3 6 3 3 7 2 2 8 1 1 9 1 1 10 1 1 11 3 3 12 2 2 13 2 2 14 1 1 15 2 2 16 1 1 17 2 2 18 1 1 19 3 3−−−−−−−−−−−−−−−−−−−−−——−−− 正确率97.00%从实验结果可以看出,通过 k-近邻算法改进后的约会网站的配对效果比较显著,多次随机划分测试集和训练集后发现正确率基本可以达到 90% 以上。

k近邻算法实现红酒数据集分类

k近邻算法实现红酒数据集分类

K近邻算法实现红酒数据集分类一、引言随着数据科学和机器学习的发展,分类算法在许多领域都得到了广泛的应用。

其中,K近邻算法(KNN,K-Nearest Neighbors)是一种简单且有效的分类算法,它基于实例的学习,通过测量不同数据点之间的距离进行分类。

红酒数据集是一个常用的分类任务,用于测试各种分类算法的性能。

本文将探讨如何使用K近邻算法对红酒数据集进行分类。

二、方法论1.数据预处理:首先,我们需要对红酒数据集进行预处理,包括缺失值填充、异常值处理、特征缩放等步骤,以保证数据的质量和一致性。

2.KNN算法原理:KNN算法是一种基于实例的学习,它通过测量不同数据点之间的距离进行分类。

在KNN中,我们选择距离最近的K个邻居,并根据这些邻居的类别进行投票,多数投票决定该数据的类别。

3.实现流程:首先,我们需要将数据集分成训练集和测试集。

然后,使用训练集对KNN算法进行训练,并确定最佳的K值。

最后,使用测试集对算法进行测试,评估其分类性能。

4.性能评估:使用准确率、召回率、F1分数等指标对KNN算法在红酒数据集上的分类性能进行评估。

三、红酒数据集红酒数据集是一个常用的分类任务,它包含了178个样本,每个样本有13个特征(如醇类、苹果酸、柠檬酸等)和一个标签(表示葡萄酒的种类)。

目标是通过分析葡萄酒的特征,将其分为三个类别:红葡萄酒、白葡萄酒和其他类型的葡萄酒。

四、KNN算法KNN算法是一种基于实例的学习,它通过测量不同数据点之间的距离进行分类。

具体来说,对于一个新的样本,KNN算法会在训练集中找到与该样本距离最近的K个邻居,并根据这些邻居的类别进行投票,多数投票决定该样本的类别。

在KNN中,我们通常使用欧氏距离或曼哈顿距离来测量不同数据点之间的距离。

五、实现与结果分析1.数据预处理:首先,我们对红酒数据集进行预处理,处理缺失值和异常值,并进行特征缩放。

这一步的目的是保证数据的质量和一致性,以提高分类的性能。

excel实现kn邻近算法 -回复

excel实现kn邻近算法 -回复

excel实现kn邻近算法-回复如何使用Excel实现k近邻算法?概述:k近邻算法(k-nearest neighbors algorithm)是一种常用的机器学习算法,用于分类和回归问题。

它的基本思想是基于样本之间的距离,找出离给定样本最近的k个邻居,并根据这些邻居的特征进行分类或回归预测。

在本文中,我们将探讨如何使用Excel来实现k近邻算法。

步骤一:准备数据首先,需要准备一组包含特征和类别标签的训练数据。

假设我们的数据集包含两个特征(例如,身高和体重)和一个类别标签(例如,男性或女性)。

将这些数据输入Excel表格中,并确保每一列都有相应的表头。

步骤二:计算距离k近邻算法的核心是根据样本之间的距离来确定最近的邻居。

在Excel中可以使用内置的函数来计算距离。

常用的距离度量方式之一是欧几里德距离,可以使用以下公式计算特征向量之间的欧几里德距离:=SQRT(SUMSQ(A2:B2-C2:D2))其中A2:B2和C2:D2分别代表两个样本的特征向量。

将这个公式应用到整个数据集上,可以得到样本之间的距离矩阵。

步骤三:选择k值在k近邻算法中,k值代表要考虑的最近邻居的个数。

选择合适数值的k 值对算法的性能非常重要。

通常,通过试验和交叉验证来选择最佳的k 值。

在Excel中可以通过调整单元格中的数值来改变k值。

步骤四:确定类别找到离给定样本最近的k个邻居后,需要根据这些邻居的类别标签来确定给定样本的类别。

一种简单的方式是根据这k个邻居中最多的类别来确定样本的类别。

可以使用Excel的COUNTIF函数来计算每个类别的频率,并选择最高频率的类别作为预测结果。

步骤五:测试算法一旦完成了模型的训练,就可以使用测试数据集来评估算法的性能。

将测试数据输入Excel表格,并重复执行步骤二到步骤四,以获取预测结果。

步骤六:评估算法性能在机器学习中,评估算法的性能至关重要。

在Excel中,可以使用各种评估指标来评估k近邻算法,如准确率、精确率、召回率和F1得分等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

K近邻分类的算法实现K近邻(KNN)法的输入为实例的特征向量,对应于特征空间的点;输入为实例的类别,可以取多类。

K近邻法假设给定一个训练数据集,其中的实例类别已定。

分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。

因此K近邻不具有显式的学习过程。

K近邻法实际上是利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。

1.1 选题背景现如今,数据的爆炸式增长、广泛可用和巨大数量使得我们的时代成为真正的数据时代。

急需功能强大和通用的工具,以便从这些海量数据中发现有价值的信息,把这些数据转化成有组织的知识。

这种需求导致了数据挖掘的诞生。

这个领域是年轻的、动态变化的、生机勃勃的。

数据挖掘已经并且将继续在我们从数据时代大步跨入信息时代的历程中作出贡献。

K近邻方法是20世纪50年代早期首次引进的。

当给定大量数据集时,该方法是计算密集的,直到20世纪60年代计算能力大大增强之后才流行起来。

此后它广泛用于模式识别领域。

K近邻分类法是基于类比学习,即通过将给定的检验元组与它相似的训练元组进行比较来学习。

训练元组用n个属性描述。

每个元组代表n维空间的一个点。

这样,所有的训练元组都存放在n维模式空间中。

当给定一个未知元组时,k近邻分类法搜索模式空间,找出最接近元组的k个训练元组。

这k个训练元组即为该元组的k个“最近邻”。

1.2 研究现状国内外学者为此算法在实际生活中更好地应用做出了许多努力。

例如对k近邻方法的不足做出的一些改进如文献[2],[7],[8],[9],[10]等等。

在其他领域的应用如文献[5]将K近邻算法改进为非线性分类算法,以达到分类动态心电图波形的目的。

文献[6]在KNN算法的基础上提出了图像自动分类模型。

在生物学上,K近邻方法也得到了广泛地应用,有文献利用蛋白质相互作用网络,提出了一种基于K 近邻的蛋白质功能的注释方法,该方法使得蛋白质的功能能够得到更有效的预测[4]。

还有很多其他领域的一些应用,显示了机器学习在21世纪越来越重要的作用。

本论文主要研究实现K 近邻分类算法,体会在如今大数据时代机器学习的意义,为今后进一步学习数据挖掘打下基础。

第二章 k 近邻模型和算法2.1 K 近邻模型K 近邻法使用的模型实际上对应于对特征空间的划分。

模型由三个基本要素—-距离度量、k 值得选择和分类规则决定。

2.1.1 模型K 近邻法中,当训练集、距离度量(如欧式距离)、k 值及分类决策规则(如多数表决)确定后,对于任何一个新的输入实例,它所属的类唯一确定。

这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所述的类。

这一事实从最近邻算法中可以看得很清楚。

特征空间中,对每个实例点i x,距离该点比其他店更近的所有点组成一个区域,叫做单元。

每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分。

最近邻法将实例i x 的类i y作为其单元中所有点的类标记。

这样,每个单元的实例点的类别时确定的。

下图是二维特征空间划分的一个例子。

2.1.2 距离度量特征空间中两个实例点的距离是两个点相似程度的反映。

K 近邻模型的特征空间一般是n 维实数向量空间Rn 。

使用的距离是欧式距离,但也可以是其他距离,如更一般的Lp 或闽科夫斯基距离。

设特征空间χ是n 维实数向量空间n R ,i x ,,),,,(,)()2()1(Tn i i i i j x x x x x =∈χ ,),,,()()2()1(T n j j j j x x x x =ji x x ,的距离定义为P Lpnl pl j li j i p x x x x L 11),(⎪⎭⎫ ⎝⎛-=∑=这里1≥p 。

当2=p 时,称为欧式距离,即21122,⎪⎭⎫⎝⎛-=∑=nl l jl i j i x x x x L )(当时,称为曼哈顿距离,即∑=-=nl lj li j i x x x x L 11,)(1=p当∞=p 时,它是各个距离坐标的最大值,即l jl i lj i x x x x L -=∞max ),(2.1.3 K 值的选择k 值的选择会对k 近邻法的结果产生重大影响。

如果选择较小的k 值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近的(相似的)训练实例才会对预测结果起作用。

但缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感。

如果近邻的实例点恰巧是噪声,预测就会出错。

换句话说,k 值得减小就意味着整体模型变得复杂,容易发生过拟合。

如果选择较大的k 值,就相当于用较大邻域中的训练实例进行预测。

其优点是可以减少学习的估计误差。

但缺点是学习的近似误差会增大。

这时与输入实例较远的(不相似的)训练实例也会对预测起作用,是预测发生错误。

K 值得增大就意味着整体的模型变得简单。

如果k=N ,那么无论输入实例是什么,都将简单的预测它属于在训练实例中最多的类。

这时,模型过于简单,完全忽略训练实例中的大量有用信息,是不可取的。

2.1.4 分类决策规则K 近邻法中的分类决策规则往往是多数表决,即由输入实例的k 个邻近的训练实例中的多数类决定输入实例的类。

多数表决规则有如下解释:如果分类的损失函数为0-1损失函数,分类函数为},,,{:21k n c c c R f →那么误分类的概率是))((1))((X f Y P X f Y P =-=≠对给定的实例χ∈x ,其最近邻的k 个训练实例点构成集合)(x N K 。

如果涵盖)(x N K 的区域的类别是jc 那么误分类概率是∑∑∈∈=-=≠)()()(11)(1x N x j i x N x j i K i K i c y I k c y I k要使误分类概率最小即经验风险最小,就要使∑∈=)()(x N x j iK i c yI 最大,所以多数表决规则等价于经验风险最小化。

2.2 K 近邻算法输入:训练数据集)},(,),,(),,{(2211N N y x y x y x T =其中,ni R x ⊆∈χ为实例的特征向量,},,{y 21k i c c c y =∈为实例的类别,i=1,2, ,N;实例特征向量x ; 输出:实例x 所属的类y 。

(1)根据给定的距离度量,在训练集T 中找出与x 最邻近的k 个点,涵盖这k 个点的x 邻域记作)(x N K ;(2)在)(x N K 中根据分类决策规则(如多数表决)决定x 的类别y :Kj N i c yI x N x j ic k i j,,2,1;,2,1,)(maxarg y )( ====∑∈该式中,I 为指示函数,即当ji c y =时I 为1,否则I 为0。

当k 取1的特殊情况时,k 近邻算法即为最近邻算法。

对于输入的实例点或是特征向量x ,其分类由其最邻近的点的分类决定。

第三章数据模拟和实例分析3.1 数据模拟用MATLAB随机生成150组数据,类别为三类,编程如下# 程序1:A1=rand(50,2);hold onplot(A1(:,1),A1(:,2),'.')A2=rand(50,2)+0.75;hold onplot(A2(:,1),A2(:,2),'.')hold onA3=rand(50,2)+1.5;plot(A3(:,1),A3(:,2),'.')再用k近邻分类算法对这150组数据进行分类,取k=15近邻,程序如下# 程序 2:clear allclcy=importdata('C:\Users\adm\Desktop\test.txt');p=y(:,2:3);p=p';Add=zeros(150,1);Add(1:50,:)=ones(50,1);Add(51:100,:)=2*ones(50,1);Add(101:150,:)=3*ones(50,1);figure(1),plot(y(:,1),Add,'g.');hold ongrid on;count=0;for i=1:3for j=1:50for k=1:150distance(k)=mse(p(:,k)-p(:,(i-1)*50+j));%保存每个向量与所有训练样本之间的距离end[d1 index1]=sort(distance);%对距离distance向量进行从小到大的排序num=[0 0 0];for m=1:20 % 考察num,存放的是排序后distance前20个属于每一类别的个数if index1(m)<=50num(1)=num(1)+1;elseif index1(m)<=100num(2)=num(2)+1;elsenum(3)=num(3)+1;endend[d2 class]=max(num);%属于哪类的个数最多,就属于哪类,class 即就是该向量所属的类别if i==classcount=count+1;endA((i-1)*50+j)=class;%存放判断的结果endendcountrate=count/150figure(2),plot(y(:,1),A,'r.');grid on;%画图分类程序运行后得到count =143 rate =0.9533图一模拟数据原始分类图2 K近邻方法得到的分类实验结果分析从图像和运行结果均可以看出,对上述模拟数据用取k=15的k近邻算法作出的分类正确率为95.33%,分类效果不错,符合预期。

改变k值,分别取k=1,5,10,15,20,30,40,60做测试,发现k取1的取值对分类结果没有明显的规律,当k=1时,即为最近邻的特殊情况,此时分类和原分类吻合,当k从1开始逐渐增大时,分类效果呈现起伏,这说明k值得选取对分类结果有一定的影响,程序执行如下表。

表2 Iris数据集分类效果K值正确率错误1 1 05 96% 4%10 94.67% 5.33%15 95.33% 4.67%20 96.67% 3.33%30 96% 4%40 95.33% 4.67%60 94.67% 5.33%3.2 实例分析本文选取了著名的Iris数据集,Iris数据集共150组,有四个特征,分别是花萼和花瓣的长度和宽度,类别也是三类,取k=20,对前文程序代码稍作修改如下。

# 程序 3:clear allclcy=importdata('C:\Users\adm\Desktop\test.txt');p=y(:,2:5);p=p';Add=zeros(150,1);Add(1:50,:)=ones(50,1);Add(51:100,:)=2*ones(50,1);Add(101:150,:)=3*ones(50,1);figure(1),plot(y(:,1),Add,'g.');hold ongrid on;count=0;for i=1:3for j=1:50for k=1:150distance(k)=mse(p(:,k)-p(:,(i-1)*50+j));%保存每个向量与所有训练样本之间的距离end[d1 index1]=sort(distance);%对距离distance向量进行从小到大的排序num=[0 0 0];for m=1:20 % 考察num,存放的是排序后distance前20个属于每一类别的个数if index1(m)<=50num(1)=num(1)+1;elseif index1(m)<=100num(2)=num(2)+1;elsenum(3)=num(3)+1;endend[d2 class]=max(num);% 属于哪类的个数最多,就属于哪类,class 即就是该向量所属的类别if i==classcount=count+1;endA((i-1)*50+j)=class;%存放判断的结果endendcountrate=count/150figure(2),plot(y(:,1),A,'r.');grid on;%画图分类程序执行后得到以下结果:count =147 rate =0.9800图3 原始数据的分类图像图4 K近邻分类算法所得到的分类图像实验结果分析上述程序运行后的结果表明k取20时对Iris数据集具有较好的分类效果,从某种意义上说,k近邻算法对花的分类可以给出一定的借鉴意义。

相关文档
最新文档