K近邻分类算法
K近邻分类算法范文
K近邻分类算法范文K近邻(K Nearest Neighbors,KNN)分类算法是一种基本的机器学习算法,用于解决分类问题。
它是一种非参数算法,可以用于处理离散和连续型特征的数据集。
本文将详细介绍KNN算法的原理、步骤和算法的优缺点。
一、KNN算法原理1.计算距离:对于新样本,需要与训练集中每个样本计算距离。
常用的距离度量方法有欧式距离、曼哈顿距离和闵可夫斯基距离等。
2.选择K个最近邻居:根据距离选择K个最近邻居。
K的选择是一个重要参数,通常通过交叉验证来确定。
4.输出分类结果:将新样本标记为投票结果的类别。
二、KNN算法步骤KNN算法的步骤如下:1.数据预处理:对训练集进行数据预处理,包括特征标准化、缺失值处理和离散特征转换等。
2.特征选择:通过统计分析、特征重要性评估等方法选择合适的特征。
3.计算距离:对于新样本,计算它与训练集中每个样本的距离。
4.选择最近邻:根据距离选择K个最近邻居。
6.进行预测:将新样本标记为投票结果的类别。
7.模型评估:使用评估指标(如准确率、召回率和F1分数等)评估模型性能。
三、KNN算法的优缺点KNN算法具有以下优点:1.简单易理解:KNN算法的原理直观简单,易于理解和实现。
2.无假设:KNN算法不需要对数据做任何假设,适用于多种类型的数据。
3.非参数模型:KNN算法是一种非参数学习算法,不对数据分布做任何假设,适用于复杂的数据集。
KNN算法也有以下缺点:1.计算复杂度高:KNN算法需要计算新样本与训练集中所有样本的距离,计算复杂度较高,尤其是在大数据集上。
2.内存开销大:KNN算法需要保存整个训练集,占用内存较大。
3.对数据特征缩放敏感:KNN算法对特征缩放敏感,如果特征尺度不同,可能会导致距离计算不准确。
四、总结KNN算法是一种简单而有效的分类算法,适用于多种类型的数据。
通过计算新样本与训练集中所有样本的距离,并选择最近的K个邻居进行投票决策,可以得到新样本的分类结果。
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最近邻算法
K最近邻算法K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。
所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
kNN方法在类别决策时,只与极少量的相邻样本有关。
由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。
KNN算法的机器学习基础显示相似数据点通常如何彼此靠近存在的图像大多数情况下,相似的数据点彼此接近。
KNN算法就是基于这个假设以使算法有用。
KNN利用与我们童年时可能学过的一些数学相似的想法(有时称为距离、接近度或接近度),即计算图上点之间的距离。
例如,直线距离(也称为欧氏距离)是一个流行且熟悉的选择。
KNN通过查找查询和数据中所有示例之间的距离来工作,选择最接近查询的指定数字示例( K ),然后选择最常用的标签(在分类的情况下)或平均标签(在回归的情况下)。
在分类和回归的情况下,我们看到为我们的数据选择正确的K是通过尝试几个K并选择最有效的一个来完成的。
KNN算法的步骤1.加载数据2.将K初始化为你选择的邻居数量3.对于数据中的每个示例4.3.1 根据数据计算查询示例和当前示例之间的距离。
5.3.2 将示例的距离和索引添加到有序集合中6.按距离将距离和索引的有序集合从最小到最大(按升序)排序7.从已排序的集合中挑选前K个条目8.获取所选K个条目的标签9.如果回归,返回K个标签的平均值10.如果分类,返回K个标签的模式'为K选择正确的值为了选择适合你的数据的K,我们用不同的K值运行了几次KNN算法,并选择K来减少我们遇到的错误数量,同时保持算法在给定之前从未见过的数据时准确预测的能力。
K-近邻算法
K-近邻算法目录一、K-近邻算法优缺点二、K.近邻算法工作原理及示例三、K-近邻算法的一般流程四、准备:使用Python导入数据通实施kNN分类算法六、示例L改进约会网站的配对结果七:示例2:手写识别系统K-近邻算法优缺点简单地说,K.近邻算法(又称KNN)采用测量不同特征值之间的距离方法进行分类。
其优缺点及适用数据范围如下:优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。
适用数据罐;数值型和标称型。
示例:手写识别系统3.测试算法:之前我们将数据处理成分类器可以识别的格式,现在我们将这些数据输入到分类器,检测分类器的执行效果。
def handwritingClassTest():hwLabels=[]trainingFileList=listdirCtrainingDigits*)#获取目录中的文件内容存储于列表中m=len(trainingFileList)trainingMat=zeros((m,1024))for i in range(m):fileNameStr二traininTFileList【ilfileStr二fileNameStr・split(?H01tftake off・txta trainingMat[i/]=i mg2vector('tra i n i ng Digits/%s,%fileNameStr)dassNumStr二int(fileStr・split(''HOI)#从文件名解析分类数字hwLabels.append(classNumStr)testFileList=listdir('testDigits')iterate through the test seterrorCount=0.0mTest=len(testFileList)for i in range(mTest):fileNameStr=testFileList[i]fileStr=fileNameStr.split('.')[O]#take off.txtclassNumStr=int(fileStr.split('_')vectorUnderTest=img2vector('testDigits/%s'%fileNameStr)classifierResult=classify Of^ectorUnderTest,trainingMat,hwLabels,3)print"the classifier came back with:%d,the real answer is:%d"%(classifierResult,classNumStr)if(classifierResult!=classNumStr):errorCount+=1.0print"\nthe total number of errors is:%d"%errorCountprint”\nthe total error rate is:%f"%(errorCount/float(mTest))示例:手写识别系统(2)上述代码所示的自包含函数handwritingClassTest。
机器学习: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”指权重为距离的倒数,默认情况下是权重相等。
k近邻分类算法
k近邻分类算法
K近邻分类算法是机器学习领域中使用最广泛的分类算法,它是一种基于实例的学习方法,被用于无监督学习和监督学习。
它主要由三部分组成:距离计算函数、k值的选择、分类决策的规则。
K近邻分类算法的基本原理是将新实例与已知实例进行比较,即新实例的属性值与已知实例的属性值通过某种距离函数的计算来比较,确定它们之间的距离,最后选择与新实例最近的K个已知实例,这K个实例的类别决定新实例的类别。
K近邻分类算法具有简单、快速等优点,适用于较小数据集,它可以较快速地确定新数据。
另外,它可以处理离散型和连续型属性。
缺点是当特征值的取值范围比较大时,K近邻分类算法的性能会下降,容易发生过拟合问题,而且K近邻分类算法不能给出任何数据的基础结构信息。
K近邻分类算法通常有三步:第一步,计算新数据与每个样本点的距离;第二步,选取距离最近的k个样本点,这K个样本点称为该新数据的K近邻;第三步,统计K个样本点中各类别出现的频率,新数据属于哪类,就以频率最高的类别作为新数据的类别。
K近邻分类算法的变体有很多,比如累积k近邻分类算法,它将K个近邻的数据点的概率加起来,然后从概率最大的分类中选择类别。
另外,还有加权K近邻分类算法,它给距离近的数据点更高的权重,这样近邻数据点的影响力更大。
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近邻分类算法
第2章k-近邻算法(kNN)引言本章介绍kNN算法的基本理论以及如何使用距离测量的方法分类物品。
其次,将使用python从文本文件中导入并解析数据,然后,当存在许多数据来源时,如何避免计算距离时可能碰到的一些常见的错识。
2.1 k-近邻算法概述k-近邻(k Nearest Neighbors)算法采用测量不同特征之间的距离方法进行分类。
它的工作原理是:存在一个样本数据集合,并且样本集中每个数据都存在标签,即我们知道样本每一数据与所属分类的对应关系。
输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。
一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。
最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
k-近邻算法的优点是精度高,对异常值不敏感,无数据输入假定;缺点是计算复杂度高、空间复杂度高。
适用于数值和离散型数据。
2.1.1 准备知识:使用python导入数据首先,创建名为kNN.py的python模块,然后添加下面代码:from numpy import * #引入科学计算包import operator #经典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测试:>>> import kNN>>> group,labels=kNN.createDataSet()注意:要将kNN.py文件放到Python27文件夹下,否则提示找不到文件。
2.2.2 实施kNN算法使用k-近邻算法将每组数据划分到某个类中,其伪代码如下:对未知类别属性的数据集中的每个点依次执行以下操作:1.计算已知类别数据集中的点与当前点之间的距离;2.按照距离递增交序排序;3.选取与当前点距离最小的k个点;4.确定前k个点所在类别的出现频率;5.返回前k个点出现频率最高的类别作为当前点的预测分类。
简述k紧邻分类器的基本原理和分类算法
K紧邻分类器是一种常用的监督学习算法,用于解决分类问题。
该分类器基于数据点之间的相似性进行分类,通过计算待分类数据点与已知类别的训练数据点之间的距离,来确定待分类数据点所属的类别。
下面将针对k紧邻分类器的基本原理和分类算法进行详细的讲解。
一、基本原理K紧邻分类器的基本原理是基于邻近性进行分类。
它假设待分类的数据点在特征空间中,根据其周围k个最近的训练数据点的类别进行分类。
该分类器采用距离度量来确定邻近性,通常使用欧氏距离或曼哈顿距离等。
在算法执行分类时,它会计算目标数据点到每个训练数据点的距离,并选取距离最近的k个训练数据点。
通过投票或加权投票的方式来决定目标数据点的类别。
二、分类算法K紧邻分类器的分类算法主要包括以下几个步骤:1. 数据预处理需要对待分类的数据进行预处理,包括数据清洗、特征选择和数据转换等。
这些预处理步骤有助于提高分类器的性能和准确性。
2. 计算距离在分类算法中,需要计算待分类数据点与所有训练数据点之间的距离。
常用的距离计算方法包括欧氏距离、曼哈顿距离、切比雪夫距离等。
3. 确定k值在计算距离后,需要确定k的取值。
通常情况下,k的取值会影响分类器的性能和准确性。
选择合适的k值是K紧邻分类器的关键。
4. 确定类别接下来,根据距离最近的k个训练数据点的类别,通过投票或加权投票的方式来确定待分类数据点的类别。
如果采用加权投票的方式,距离越近的训练数据点对分类结果的影响越大。
5. 输出分类结果根据投票结果或加权投票结果,确定待分类数据点的类别,并输出分类结果。
三、应用场景K紧邻分类器在实际应用中具有广泛的应用场景。
它适用于各种类型的数据,包括数值型数据、离散型数据和混合型数据。
该分类器在模式识别、图像识别、文本分类等领域都有着重要的应用。
总结来说,K紧邻分类器是一种简单且有效的分类算法,它基于邻近性进行分类,通过计算最近的k个训练数据点的类别来确定待分类数据点的类别。
该分类器的基本原理和分类算法相对简单,但它在实际应用中表现出较高的性能和准确性,因此受到了广泛的关注和应用。
KNN(K近邻法)算法原理
KNN(K近邻法)算法原理⼀、K近邻概述k近邻法(k-nearest neighbor, kNN)是⼀种基本分类与回归⽅法(有监督学习的⼀种),KNN(k-nearest neighbor algorithm)算法的核⼼思想是如果⼀个样本在特征空间中的k(k⼀般不超过20)个最相邻的样本中的⼤多数属于某⼀个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
简单地说,K-近邻算法采⽤测量不同特征值之间的距离⽅法进⾏分类。
通常,在分类任务中可使⽤“投票法”,即选择这k个实例中出现最多的标记类别作为预测结果;在回归任务中可使⽤“平均法”,即将这k个实例的实值输出标记的平均值作为预测结果;还可基于距离远近进⾏加权平均或加权投票,距离越近的实例权重越⼤。
k近邻法不具有显式的学习过程,事实上,它是懒惰学习(lazy learning)的著名代表,此类学习技术在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进⾏处理K近邻算法的优缺点:优点:精度⾼、对异常值不敏感、⽆数据输⼊假定缺点:计算复杂度⾼、空间复杂度⾼适⽤数据范围:数值型和标称型⼆、K近邻法的三要素距离度量、k值的选择及分类决策规则是k近邻法的三个基本要素。
根据选择的距离度量(如曼哈顿距离或欧⽒距离),可计算测试实例与训练集中的每个实例点的距离,根据k值选择k个最近邻点,最后根据分类决策规则将测试实例分类。
根据欧⽒距离,选择k=4个离测试实例最近的训练实例(红圈处),再根据多数表决的分类决策规则,即这4个实例多数属于“-类”,可推断测试实例为“-类”。
k近邻法1968年由Cover和Hart提出1.距离度量特征空间中的两个实例点的距离是两个实例点相似程度的反映。
K近邻法的特征空间⼀般是n维实数向量空间Rn。
使⽤的距离是欧⽒距离,但也可以是其他距离,如更⼀般的Lp距离或Minkowski距离Minkowski距离(也叫闵⽒距离):当p=1时,得到绝对值距离,也称曼哈顿距离(Manhattan distance),在⼆维空间中可以看出,这种距离是计算两点之间的直⾓边距离,相当于城市中出租汽车沿城市街道拐直⾓前进⽽不能⾛两点连接间的最短距离,绝对值距离的特点是各特征参数以等权参与进来,所以也称等混合距离当p=2时,得到欧⼏⾥德距离(Euclidean distance),就是两点之间的直线距离(以下简称欧⽒距离)。
机器学习-分类算法之k-近邻
机器学习-分类算法之k-近邻分类算法之k-近邻k-近邻算法采⽤测量不同特征值之间的距离来进⾏分类优点:精度⾼、对异常值不敏感、⽆数据输⼊假定缺点:计算复杂度⾼、空间复杂度⾼使⽤数据范围:数值型和标称型⼀个例⼦弄懂k-近邻电影可以按照题材分类,每个题材⼜是如何定义的呢?那么假如两种类型的电影,动作⽚和爱情⽚。
动作⽚有哪些公共的特征?那么爱情⽚⼜存在哪些明显的差别呢?我们发现动作⽚中打⽃镜头的次数较多,⽽爱情⽚中接吻镜头相对更多。
当然动作⽚中也有⼀些接吻镜头,爱情⽚中也会有⼀些打⽃镜头。
所以不能单纯通过是否存在打⽃镜头或者接吻镜头来判断影⽚的类别。
那么现在我们有6部影⽚已经明确了类别,也有打⽃镜头和接吻镜头的次数,还有⼀部电影类型未知。
电影名称打⽃镜头接吻镜头电影类型California Man3104爱情⽚He's not Really into dues2100爱情⽚Beautiful Woman181爱情⽚Kevin Longblade10110动作⽚Robo Slayer 3000995动作⽚Amped II982动作⽚1890未知那么我们使⽤K-近邻算法来分类爱情⽚和动作⽚:存在⼀个样本数据集合,也叫训练样本集,样本个数M个,知道每⼀个数据特征与类别对应关系,然后存在未知类型数据集合1个,那么我们要选择⼀个测试样本数据中与训练样本中M个的距离,排序过后选出最近的K个,这个取值⼀般不⼤于20个。
选择K个最相近数据中次数最多的分类。
那么我们根据这个原则去判断未知电影的分类电影名称与未知电影的距离California Man20.5He's not Really into dues18.7Beautiful Woman19.2Kevin Longblade115.3Robo Slayer 3000117.4Amped II118.9我们假设K为3,那么排名前三个电影的类型都是爱情⽚,所以我们判定这个未知电影也是⼀个爱情⽚。
k近邻分类
k近邻分类k近邻(k-Nearest Neighbors,简称k-NN)是一种常用的监督机器学习算法,常用于分类任务。
它基于一个简单而直观的假设:相似的样本有着相似的标签。
k-NN分类算法会根据输入样本的特征与训练数据集中的样本进行比较,并找出k个最相似的训练样本。
然后,通过这k个样本的标签来确定输入样本的标签。
k-NN分类算法的实现非常简单。
下面我将介绍k-NN算法的工作原理及步骤,以及一些相关的考虑事项。
1. 距离度量:k-NN算法在找出与输入样本最相似的k个样本时,需要通过某种距离度量方法来衡量样本之间的差异。
欧式距离是最常用的度量方法,但也可以使用曼哈顿距离、切比雪夫距离等。
2. 特征选择:在使用k-NN算法之前,需要选择合适的特征来描述样本。
选择合适的特征对分类性能至关重要,因此需要深入理解问题和数据集,以确定最能表征样本的特征。
3. 数据预处理:在应用k-NN算法之前,需要进行数据预处理。
这包括去除重复、缺失或错误的数据,以及对数据进行归一化或标准化操作,以确保输入数据的质量和可比性。
4. 确定k值:在使用k-NN算法时,需要确定k值,即选择最相似的k个样本。
k值的选择直接影响到分类结果。
通常,k值过小会导致模型过于敏感,容易受到噪声的影响;k值过大则可能忽略了样本间的细微差异。
因此,k值的选择需要综合考虑问题的复杂度和数据集的规模。
5. 处理不平衡数据集:在实际应用中,数据集往往存在样本类别之间数量不平衡的情况。
这会导致k-NN算法对多数类别样本的分类效果较好,而对少数类别样本的分类效果较差。
可以采用过采样、欠采样等数据处理方式来解决这个问题。
6. 选择合适的距离度量方法:除了欧式距离等经典的度量方法外,还可以选择其他的距离度量方法来适应不同类型的数据和问题。
尽管k-NN算法在实现上非常简单,但在应用过程中还是需要考虑一些问题。
1. 计算复杂度:k-NN算法的计算复杂度随着训练集的规模线性增长,对于大规模数据集来说,计算开销会很大。
kneighborsclassifier 算法
kneighborsclassifier 算法K-最近邻算法(K-Nearest Neighbors Algorithm,简称KNN)是一种常见的分类算法之一,它可以对未知样本进行分类,它的基本原理是将未知样本与已知样本进行比较,以最近的K个样本为参考,将该未知样本归类到与最近的K个样本类别相同的类别中。
KNN算法的主要特点包括简单易用、非常适用于多类别样本分类问题,但是对于大规模数据的分类问题,计算量会变得非常大。
KNN算法的基本步骤包括:1. 选择和确定分类方式:可以是分析每个特征变量并按照最小误差或者最大分类准确率的方式进行;2. 选择要用于分类的近邻数量:这就是K的值,对于不同的问题要结合经验和理解来选择;3. 计算未知样本和已知样本之间的距离:可以使用欧式距离计算;4. 找到最近的K个样本:根据已知样本和未知样本之间的距离,找到最近的K个样本;5. 进行分类:通过统计K个样本中每个类别的数量,将未知样本归类到数量最大的类别中。
KNN算法是一个非常直观且易于理解的算法,但也存在一些缺点。
其中最明显的问题是需要大量的计算资源,特别是在样本数量非常大的时候。
算法需要存储所有的已知样本,也会占用大量的存储空间。
KNN算法的优点是对于高维数据,它不需要假设数据的任何分布类型。
这使得该算法适用于具有复杂结构和分布的数据集。
它适用于多分类问题和二分类问题。
在Python编程中,我们可以使用scikit-learn库中的KNeighborsClassifier来实现KNN算法。
下面是一个简单的代码示例:在使用KNN算法时,需要注意的一个关键问题是如何设置K值。
如果K值设置过小,那么模型会过于敏感,产生过拟合的现象;如果K值设置过大,那么模型会过于简单,容易出现欠拟合的情况。
K值的选择需要结合实际问题和模型评价指标进行综合考虑。
KNN算法是一个简单而有效的分类算法,可以用于多类别分类问题,尤其适用于非线性和高维数据。
近邻分类算法、
近邻分类算法、近邻分类算法(K-Nearest Neighbor,简称KNN)是机器学习领域中最常用的分类算法之一,其基本原理是通过计算样本之间的距离,并找出距离目标最近的前K个训练样本,根据这些样本的类别来预测目标样本的类别。
KNN算法简单易用,无需建立模型,具有较高的准确率和可解释性,广泛应用于模式识别、数据挖掘、推荐系统等领域中。
1. 训练阶段时间复杂度低,预测阶段时间复杂度高,但模型存储开销小。
2. 需要对距离度量进行合适的选择和优化,常见的距离度量有欧式距离、曼哈顿距离、余弦相似度等。
3. K值的选择对模型性能影响较大,通常通过交叉验证等方法确定。
KNN算法的基本流程如下:1. 计算目标样本与训练样本之间的距离。
2. 选择距离最近的前K个训练样本。
3. 根据这些样本的类别,预测目标样本的类别。
1. 优点:简单易用、无需建立模型、准确率高、可解释性强。
2. 缺点:计算复杂度高、对离群点敏感、需要对距离度量进行优化、对样本分布敏感。
KNN算法在中文文本分类中的应用:中文文本分类是自然语言处理中的一个重要任务,其目标是将中文文本分成不同的类别。
KNN算法可以通过计算文本之间的距离,并根据文本相似性来进行分类。
在中文文本分类中,常见的距离度量方法有余弦相似度、欧式距离和Jaccard距离等。
KNN算法能够处理高维稀疏特征空间中的文本分类问题,并且能够适应不同类别之间的边界,因此在中文文本分类中应用广泛。
总结:1. 分词:中文文本需要进行分词处理,将文本转换为词汇序列进行处理,通常采用词袋模型表示文本特征。
2. 特征提取:选择合适的特征对文本分类的准确性具有重要影响,通常采用TF-IDF 等方法进行特征提取。
3. 词向量化:将文本转换为对应的词向量,通过计算这些词向量之间的距离进行文本分类。
4. 参数优化:KNN算法的参数K值需要进行优化,通常采用交叉验证等方法进行确定。
5. 大规模文本分类:针对大规模中文文本分类问题,可以采用局部敏感哈希(LSH)等方法进行优化,提高算法效率。
k-nearestneighbork最近邻分类算法
k-nearestneighbork最近邻分类算法k-最近邻(K-Nearest Neighbors, KNN)是一种常用的分类算法,它通过计算待分类样本点与已知样本点之间的距离,将待分类样本点归属于距离最近的k个样本点中出现次数最多的类别。
在选择k个最近邻样本点后,KNN算法会统计这k个样本点中每个类别出现的次数,并将待分类样本点归属于出现次数最多的类别。
如果k取值为1,则待分类样本点将直接归属于与其距离最近的样本点的类别。
KNN算法的优点之一是它的简单性。
相对于其他复杂的分类算法,KNN算法的实现非常直观,不需要过多的参数调节和特定假设的前提条件。
此外,KNN算法还能够处理多类别问题,并且可以适应不同类别数据的分布。
然而,KNN算法也存在一些不足之处。
首先,KNN算法的计算复杂度较高,特别是在处理大规模数据集时。
其次,KNN算法对样本点的密度分布较为敏感,当样本点的分布不均匀时,KNN算法会产生较大的误差。
为了改进KNN算法的性能,可以采取一些技术手段。
一种常见的方法是对样本点进行归一化处理,以消除不同属性之间的量纲差异。
此外,还可以通过特征选择和降维等方法减少数据集的维度,从而减少计算复杂度。
另外,使用适当的距离度量标准,如欧氏距离、曼哈顿距离和闵可夫斯基距离等,也能够提高KNN算法的性能。
在实际应用中,KNN算法广泛应用于分类和回归问题。
KNN算法在图像识别、手写数字识别、推荐系统以及生物信息学等领域都取得了良好的效果。
此外,KNN算法还可以与其他机器学习算法相结合,形成集成学习方法,提高分类性能。
总之,KNN算法是一种简单有效的分类算法,它通过计算待分类样本点与已知样本点之间的距离,将待分类样本点归属于距离最近的k个样本点中出现次数最多的类别。
尽管KNN算法存在一些不足,但通过合适的预处理和选择合适的距离度量标准,可以提高KNN算法的性能。
在实际应用中,KNN算法在多个领域都取得了很好的效果。
K近邻算法——精选推荐
K近邻算法
1.K近邻分类
K近邻分类的思想是:在对新数据点进⾏预测,算法会在训练集中找到最近的数据点,也就是它的最近邻。
除了考虑最近邻,我们还可以考虑(K)个邻居。
这就是k近邻算法名字的由来。
在考虑多于⼀个得邻居时,我们⽤" 投票法(voting)" 来决定预测的结果,也就是选取K个邻居中所属类别最多的⼀类最为预测的结果。
在使⽤sklearn.neighbors.KneighborsClassifier时,随着K的的增⼤,模型的泛化性能得到提升,但是训练集模型的性能会下降。
2.K近邻回归
K-NN除了可以⽤于分类,同时还能⽤于回归。
在使⽤多近邻回归时,预测结果为这些邻居的平均值。
总结:K-NN的优点是算法思想简单,在⼩数据集上速度和性能都不错,但是在训练集很⼤时,预测速度会很慢。
k-最邻近分类算法
k-最邻近分类算法k-最邻近分类算法是一种常用于模式识别和数据挖掘领域的分类算法。
它的基本思想是根据已知分类的样本数据,通过计算待分类样本与已知样本之间的距离,找出距离最近的k个样本,并以它们中出现最频繁的类别作为待分类样本的类别。
k-最邻近分类算法的步骤如下:1. 准备样本数据:收集已知分类的样本数据,并为每个样本标注类别信息。
2. 计算距离:对于待分类样本,计算它与已知样本之间的距离。
距离的计算可以采用欧氏距离、曼哈顿距离等方法。
3. 选择k个最近邻:从已知样本中选择距离待分类样本最近的k个样本。
4. 确定类别:统计k个样本中各个类别出现的次数,将出现次数最多的类别作为待分类样本的类别。
5. 输出结果:将待分类样本归类到确定的类别中。
k-最邻近分类算法的优点是简单易懂,而且适用于多种数据类型。
同时,它也存在一些局限性。
首先,k的取值需要根据具体问题来确定,不同的k值会影响分类结果。
其次,k-最邻近分类算法对异常值敏感,如果待分类样本距离最近的k个样本中存在异常值,可能会导致分类错误。
此外,k-最邻近分类算法在处理大规模数据时计算量较大,效率相对较低。
为了提高k-最邻近分类算法的准确性和效率,可以采取以下策略:1. 特征选择:选择具有区分度的特征,可以提高分类算法的准确性。
2. 距离权重:可以根据实际情况为不同的特征设置不同的权重,使得某些特征对分类结果的影响更大。
3. 数据预处理:对原始数据进行预处理,如标准化、归一化等,可以提高分类算法的效果。
4. 降维处理:对高维数据进行降维处理,可以减少计算量,提高算法的效率。
k-最邻近分类算法是一种简单有效的分类算法,可以用于解决各种分类问题。
但在具体应用中,需要根据实际情况选择合适的k值,采取适当的策略来提高分类的准确性和效率。
同时,还可以结合其他分类算法进行改进和优化,以获得更好的分类结果。
python机器学习(二)分类算法-k近邻算法
python机器学习(⼆)分类算法-k近邻算法⼀、什么是K近邻算法?定义:如果⼀个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的⼤多数属于某⼀个类别,则该样本也属于这个类别。
来源:KNN算法最早是由Cover和Hart提出的⼀种分类算法.计算距离公式:两个样本的距离可以通过如下公式计算,⼜叫欧式距离。
⽐如说,a(a1,a2,a3),b(b1,b2,b3)欧式距离⼆、K近邻算法的实现sk-learn近邻算法APIsklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')n_neighbors:int,可选(默认= 5),k_neighbors查询默认使⽤的邻居数algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选⽤于计算最近邻居的算法:‘ball_tree’将会使⽤ BallTree,‘kd_tree’将使⽤ KDTree。
‘auto’将尝试根据传递给fit⽅法的值来决定最合适的算法。
(不同实现⽅式影响效率近邻算法实例案例背景:(kaggle地址:)预测⼊住数据下载地址:数据格式:row_id x y accuracy time place_id0 0 0.7941 9.0809 54 470702 852*******1 1 5.9567 4.7968 13 186555 17577267132 2 8.3078 7.0407 74 322648 11375372353 3 7.3665 2.5165 65 704587 65673932364 4 4.0961 1.1307 31 472130 7440663949... ... ... ... ... ... ...29118016 29118016 6.5133 1.1435 67 399740 867136110629118017 29118017 5.9186 4.4134 67 125480 907788789829118018 29118018 2.9993 6.3680 67 737758 283833430029118019 29118019 4.0637 8.0061 70 764975 100735584729118020 29118020 7.4523 2.0871 17 102842 7028698129[29118021 rows x 6 columns]实现思路:1、数据集的处理(缩⼩数据集范围,处理⽇期数据,增加分割的⽇期数据,删除没⽤的⽇期数据,将签到位置少于n个⽤户的删除)2、分割数据集3、对数据集进⾏标准化4、estimator流程进⾏分类预测具体代码如下:import pandas as pdfrom sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifier# 读取数据data = pd.read_csv("./data/FBlocation/train.csv")# 处理数据# 1、缩⼩数据,查询数据集范围data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")# 处理时间的数据time_value = pd.to_datetime(data['time'], unit='s')# 把⽇期格式转换成字典格式time_value = pd.DatetimeIndex(time_value)# 构造⼀些特征data['day'] = time_value.daydata['hour'] = time_value.hourdata['weekday'] = time_value.weekday# 把时间戳特征删除data = data.drop(['time'], axis=1)# 把签到数量少于n个⽬标位置删除place_count = data.groupby('place_id').count()tf = place_count[place_count.row_id > 3].reset_index()data = data[data['place_id'].isin(tf.place_id)]# 取出数据当中的特征值和⽬标值y = data['place_id']x = data.drop(['place_id'], axis=1)# 进⾏数据的分割训练集合测试集x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)# 特征⼯程(标准化)std = StandardScaler()# 对测试集和训练集的特征值进⾏标准化x_train = std.fit_transform(x_train)x_test = std.transform(x_test)# 进⾏算法流程 # 超参数knn = KNeighborsClassifier()knn.fit(x_train, y_train)y_predict = knn.predict(x_test)print("预测的⽬标签到位置为:", y_predict)print("预测的准确率:", knn.score(x_test, y_test))运⾏结果:预测的⽬标签到位置为: [8258328058 2355236719 6683426742 ... 5606572086 4932578245 9237487147]预测的准确率: 0.3959810874704492思考问题1、k值取多⼤?有什么影响?2、性能问题?三、K近邻算法总结K近邻算法优缺点优点:简单,易于理解,易于实现,⽆需估计参数,⽆需训练缺点懒惰算法,对测试样本分类时的计算量⼤,内存开销⼤必须指定K值,K值选择不当则分类精度不能保证使⽤场景⼩数据场景,⼏千~⼏万样本,具体场景具体业务去测试四、分类模型的评估评估⽅法estimator.score()⼀般最常见使⽤的是准确率,即预测结果正确的百分⽐混淆矩阵在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适⽤于多分类)混淆矩阵精确率(Precision):预测结果为正例样本中真实为正例的⽐例(查得准)精确率(Precision)召回率(Recall):真实为正例的样本中预测结果为正例的⽐例(查的全,对正样本的区分能⼒)召回率(Recall)其他分类标准,F1-score,反映了模型的稳健型F1-score分类模型评估API评估API :sklearn.metrics.classification_report⽤法:sklearn.metrics.classification_report(y_true, y_pred, target_names=None)y_true:真实⽬标值y_pred:估计器预测⽬标值target_names:⽬标类别名称return:每个类别精确率与召回率鸳鸯花实现:#coding=utf-8from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import classification_report#1.数据获取iris = load_iris()print iris.data.shape#2.数据预处理:训练集测试集分割,数据标准化X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)# 对训练和测试的特征数据进⾏标准化ss = StandardScaler()X_train = ss.fit_transform(X_train)X_test = ss.transform(X_test)# 3.使⽤K临近分类器对测试数据进⾏类别预测knc = KNeighborsClassifier()knc.fit(X_train,y_train)y_predict = knc.predict(X_test)#4.获取结果报告print'The Accuracy of K-Nearest Neighbor Classifier is', knc.score(X_test,y_test)print classification_report(y_test,y_predict,target_names=iris.target_names)执⾏结果:C:\Anaconda3\python.exe "C:\Program Files\JetBrains\PyCharm 2019.1.1\helpers\pydev\pydevconsole.py" --mode=client --port=49271 import sys; print('Python %s on %s' % (sys.version, sys.platform))sys.path.extend(['C:\\app\\PycharmProjects', 'C:/app/PycharmProjects'])Python 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]Type 'copyright', 'credits'or'license'for more informationIPython 7.12.0 -- An enhanced Interactive Python. Type '?'for help.PyDev console: using IPython 7.12.0Python 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] on win32runfile('C:/app/PycharmProjects/ArtificialIntelligence/test.py', wdir='C:/app/PycharmProjects/ArtificialIntelligence')(150, 4)The Accuracy of K-Nearest Neighbor Classifier is 0.8947368421052632precision recall f1-score supportsetosa 1.00 1.00 1.00 8versicolor 0.73 1.00 0.85 11virginica 1.00 0.79 0.88 19accuracy 0.89 38macro avg 0.91 0.93 0.91 38weighted avg 0.92 0.89 0.90 38。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
K近邻分类算法(K –nearest neighbors,简称KNN)
1算法的提出与发展
最初的近邻法是由Cover和Hart与1968年提出的,随后得到理论上深入的分析与研究,是非参数法中最重要的方法之一。
2算法原理
2.1 基本原理
最近邻方法(k-nearest neighbor,简称kNN)是一种简洁而有效的非参数分类方法,是最简单的机器学习算法之一,该算法最初由Cover和Hart提出的,用于解决文本的分类问题。
K 近邻算法是最近邻算法的一个推广。
该规则将是一个测试数据点x分类为与它最接近的K 个近邻中出现最多的那个类别。
K 近邻算法从测试样本点x开始生长,不断的扩大区域,直到包含进K 个训练样本点为止,并且把测试样本点x归为这最近的K 个训练样本点中出现频率最大的类别。
其中测试样本与训练样本的相似度一般使用欧式距离测量。
如果K 值固定,并且允许训练样本个数趋向于无穷大,那么,所有的这K 个近邻都将收敛于x。
如同最近邻规则一样,K 个近邻的标记都是随机变量,概率P(w i|x),i=1,2,…,K 都是相互独立的。
假设P(w m|x)是较大的那个后验概率,那么根据贝叶斯分类规则,则选取类别w m。
而最近邻规则以概率P(w m|x)选取类别。
而根据K近邻规则,只有当K个最近邻中的大多数的标记记为w m,才判定为类别w m。
做出这样断定的概率为
通常K值越大,选择类别w m概率也越大。
2.2K值的选择
K近邻规则可以被看作是另一种从样本中估计后验概率P(w i|x)的方法。
为了得到可高的估计必须是的K值越大越好。
另一方面,又希望又希望x的K 个近邻x 距离x1越近越好,因为这样才能保证P(w i|x1)尽可能逼近P(w i|x)。
在选取K 值的时候,就不得不做出某种折衷。
只有当n趋近于无穷大时,才能保证K 近邻规则几乎是最优的分类规则。
K值的选择:需要消除K值过低,预测目标容易产生变动性,同时高k值时,预测目标有过平滑现象。
推定k值的有益途径是通过有效参数的数目这个概念。
有效参数的数目是和k值相关的,大致等于n/k,其中,n是这个训练数据集中实例的数目。
确定K的值:通过实验确定。
进行若干次实验,取分类误差率最小的k值。
2.3算法步骤
1)依公式计算Item 与D1、D2 ……、Dj 之相似度。
得到Sim(Item, D1)、Sim(Item,
D2)……、Sim(Item, Dj)。
2)将Sim(Item, D1)、Sim(Item, D2)……、Sim(Item, Dj)排序,若是超过相似度门槛t则放入
邻居案例集合NN。
3)自邻居案例集合NN中取出前k名,依多数决,得到Item可能类别。
3KNN优缺点
优点:1)原理简单,实现起来比较方便;
2)支持增量学习;
3)能对超多边形的复杂决策空间建模。
缺点:1)样本的不均衡可能造成结果错误:如果一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
2)计算量较大,需要有效的存储技术和并行硬件的支撑:因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
4KNN的改进
针对上述KNN算法的几个主要缺陷,主要有以下三类改进方法:
1)为了降低样本的不均衡对结果造成的不好影响可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
2)对于计算量大的问题目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。
这样可以挑选出对分类计算有效的样本,使样本总数合理地减少,以同时达到减少计算量,有减少存储量的双重效果。
该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
3)对样本进行组织与整理,分群分层,尽可能将计算压缩到在接近测试样本领域的小范围内,避免盲目地与训练样本集中的每个样本进行距离计算。
4.1 快速搜索近邻法
其基本思想是将样本集按邻近关系分解成组,给出每组的质心所在,以及组内样本至该质心的最大距离。
这些组又可形成层次结构,即组又分子组,因而待识别样本可将搜索近邻的范围从某一大组,逐渐深入到其中的子组,直至树的叶结点所代表的组,确定其相邻关系。
这种方法着眼于只解决减少计算量,但没有达到减少存储量的要求。
用树结构表示样本分级:
➢p: 树中的一个结点,对应一个样本子集K p
➢N p : K p中的样本数
➢M p : K p中的样本均值
➢r p : 从K p中任一样本到M p的最大距离
◆规则1:
如果满足:
则K p中的样本都不可能是x的最近邻,B是算法执行中当前到x的最近距离
◆规则2:
如果满足:
则x i不是x的最近邻
4.2剪辑近邻法
其基本思想是,利用现有样本集对其自身进行剪辑,将不同类别交界处的样本以适当方式筛选,可以实现既减少样本数又提高正确识别率的双重目的。
剪辑的过程是:将样本集K N分成两个互相独立的子集:test集K T和reference集K R。
首先对K T中每一个X i在K R中找到其最近邻的样本Y i(X i) 。
如果Y i与X i不属于同一类别,则将X i从K T中删除,最后得到一个剪辑的样本集K TE(剪辑样本集),以取代原样本集,对待识别样本进行分类。
4.3压缩近邻法
利用现有样本集,逐渐生成一个新的样本集,使该样本集在保留最少量样本的条件下,仍能对原有样本的全部用最近邻法正确分类,那末该样本集也就能对待识别样本进行分类,并保持正常识别率。
定义两个存储器,一个用来存放即将生成的样本集,称为Store;另一存储器则存放原样本集,称为Grabbag。
其算法是:
1)初始化。
Store是空集,原样本集存入Grabbag;从Grabbag中任意选择一样本放入Store
中作为新样本集的第一个样本。
2)样本集生成。
在Grabbag中取出第i个样本用Store中的当前样本集按最近邻法分类。
若分类错误,则将该样本从Grabbag转入Store中,若分类正确,则将该样本放回Grabbag 中。
3)结束过程。
若Grabbag中所有样本在执行第二步时没有发生转入Store的现象,或
Grabbag已成空集,则算法终止,否则转入第二步。
5KNN应用举例
(1)文本分类
该算法的基本思路是:在给定新文本后,考虑在训练文本集中与该新文本距离最近(最相似)的K 篇文本,根据这K 篇文本所属的类别判定新文本所属的类别,具体的算法步骤如下:
STEP 1:根据特征项集合重新描述训练文本向量
STEP 2:在新文本到达后,根据特征词分词新文本,确定新文本的向量表示
STEP 3:在训练文本集中选出与新文本最相似的K 个文本,计算公式为:
其中,K 值的确定目前没有很好的方法,一般采用先定一个初始值,然后根据实验测试的结果调整K 值,一般初始值定为几百到几千之间。
STEP 4:在新文本的K 个邻居中,依次计算每类的权重,计算公式如下:
其中,x为新文本的特征向量,Sim(x,di)为相似度计算公式,与上一步骤的计算公式相同,而y(di,Cj)为类别属性函数,即如果di 属于类Cj ,那么函数值为1,否则为0。
STEP 5:比较类的权重,将文本分到权重最大的那个类别中。
(2)电影类别的判定
简单说一下这个数据的意思:这里用打斗次数和接吻次数来界定电影类型,如上,接吻多的是Romance类型的,而打斗多的是动作电影。
还有一部名字未知(这里名字未知是为了防止能从名字中猜出电影类型),打斗次数为18次,接吻次数为90次的电影,它到底属于哪种类型的电影呢?
KNN算法要做的,就是先用打斗次数和接吻次数作为电影的坐标,然后计算其他六部电影与未知电影之间的距离,取得前K个距离最近的电影,然后统计这k个距离最近的电影里,属于哪种类型的电影最多,比如Action最多,则说明未知的这部电影属于动作片类型。