K-最近邻是分类器
- 格式:doc
- 大小:22.50 KB
- 文档页数:2
k-nearest neighbors classifierK-nearest neighbors classifier(KNN)是一种非常简单且有效的分类算法。
它的基本思想是:在特征空间中,根据待分类样本的k个最近邻居的类别进行多数投票,以确定待分类样本的类别。
具体来说,KNN算法需要选择近邻的数量k和距离度量方法。
在训练阶段,算法会计算每个样本与训练集中其他样本之间的距离,并按照距离的升序进行排序。
然后,选择距离最小的k个样本作为待分类样本的最近邻居。
在分类阶段,算法会根据最近邻居的类别进行多数投票,以确定待分类样本的类别。
KNN算法的优点包括:简单易懂、实现容易、无需训练阶段、对数据分布不敏感等。
但是,KNN算法也存在一些缺点,例如:计算量大、对参数k的选择敏感、容易受到噪声和异常值的影响等。
在使用KNN算法时,需要注意以下几点:1.确定合适的k值:k值的选择对分类结果的影响较大,需要根据实际情况进行调整和选择。
常用的方法是通过交叉验证等技术来选择最优的k值。
2.距离度量的选择:距离度量方法的选择也会影响分类结果。
常用的距离度量方法有欧氏距离、曼哈顿距离等。
需要根据实际情况选择合适的距离度量方法。
3.数据预处理:由于KNN算法是基于距离的度量,因此数据预处理对于KNN算法来说非常重要。
需要将数据进行归一化或标准化处理,以消除不同特征之间的尺度差异。
4.处理多分类问题:KNN算法也可以用于多分类问题,但是需要采用一些特殊的方法进行处理。
例如,可以将多分类问题转化为多个二分类问题进行处理,或者使用其他多分类技术如一对多、多对一等。
5.处理连续特征: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 算法是一种简单且易于实现的分类方法,适用于各种数据集和领域。
监督分类有哪些方法监督分类是机器学习中的一种常见任务,主要是将输入的样本数据分为不同的预定义类别。
监督分类方法有很多种,可以根据算法的原理和特点进行分类。
以下是一些常用的监督分类方法:1. 逻辑回归(Logistic Regression):逻辑回归是一种线性分类算法,常用于二分类任务。
它基于一个S形函数,将输入特征与权重进行线性组合,并通过一个sigmoid函数将结果映射到[0, 1]的范围内,从而得到分类概率。
2. 决策树(Decision Tree):决策树通过对输入特征进行逐层划分,构建一个树状结构来进行分类。
它以特征的信息增益或基尼指数等作为准则来选择最佳的划分特征,从而在每个节点上进行分类决策。
3. 支持向量机(Support Vector Machines, SVM):SVM是一种二分类算法,基于统计学习理论和结构风险最小化准则。
SVM利用核函数在高维特征空间中将样本映射为线性可分的,并通过寻找最大间隔超平面来进行分类。
4. k最近邻(k-Nearest Neighbors, k-NN):k-NN是一种基于实例的分类算法,可以用于多分类任务。
它通过比较输入样本与训练样本之间的距离,并取最接近的k个邻居的标签来进行分类。
5. 朴素贝叶斯(Naive Bayes):朴素贝叶斯基于贝叶斯定理和特征条件独立性假设,将输入特征的联合概率分解为各个特征的条件概率。
它通过计算后验概率来进行分类,选择具有最大概率的类别。
6. 神经网络(Neural Networks):神经网络是一类模拟人脑神经元结构和工作机制的计算模型,在监督分类中常用于多分类任务。
它通过多层神经元处理输入特征,并通过反向传播算法来优化网络权重,从而实现分类。
7. 集成学习(Ensemble Learning):集成学习将多个分类模型组合成一个更强大的模型,以提高分类性能和鲁棒性。
常见的集成方法包括随机森林(Random Forest)和梯度提升树(Gradient Boosting Tree)。
近邻分类器(k-nearest neighbor classifier,简称k-NN分类器)是一种常见的机器学习算法,可用于分类和回归问题。
它的工作原理是根据输入实例的特征向量,在训练集中找出与该实例特征最相似的k 个实例,然后使用这k个实例中的多数类别(对于分类问题)或平均值(对于回归问题)作为预测结果。
在本文中,我们将介绍如何使用Matlab编程语言来构建k-NN分类器,以及如何实现k-NN分类方法。
我们将从k-NN分类器的基本原理开始介绍,然后逐步介绍Matlab代码的实现过程,并结合实例进行演示。
1. k-NN分类器的原理及特点k-NN分类器是一种基于实例的学习方法,不同于传统的基于模型的学习方法(如决策树、支持向量机等)。
它的主要特点包括:- 非参数化:k-NN分类器没有显式的模型参数,它的预测结果完全依赖于训练集中实例的分布。
- 适用性广泛:k-NN分类器适用于各种类型的数据,包括连续型、离散型、多类别、多标签等。
- 可解释性强:k-NN分类器的预测结果可以直观地解释为与输入实例最相似的训练集实例的类别。
2. Matlab中k-NN分类器的构建在Matlab中,使用Statistics and Machine Learning Toolbox工具箱可以方便地构建k-NN分类器。
我们需要加载训练集数据和对应的类别标签,然后使用fitcknn函数来构建k-NN分类器模型。
具体的步骤如下:2.1 加载训练集数据和类别标签在Matlab中,可以使用csvread函数或readtable函数来加载训练集数据,然后将数据分为特征向量和类别标签两部分。
例如: ```matlabdata = csvread('train_data.csv');X = data(:, 1:end-1); % 特征向量Y = data(:, end); % 类别标签```2.2 构建k-NN分类器模型使用fitcknn函数可以构建k-NN分类器模型,需要指定k的取值和距离度量方法等参数。
K最近邻(K-Nearest Neighbors,KNN)是一种简单而直观的机器学习算法,用于分类和回归。
下面是KNN算法在鸢尾花分类问题中的基本原理和实现步骤:KNN 算法原理:
1.数据准备:收集带有标签的训练数据,这些数据包括输入特征和对应的标
签(类别)。
2.选择 K 值:确定要使用的邻居数量 K。
K值的选择可能会影响分类的准确
性,一般通过交叉验证等方式来确定。
3.计算距离:对于给定的未标记样本,计算它与训练集中所有样本的距离。
常用的距离度量包括欧氏距离、曼哈顿距离等。
4.排序:将距离按升序排列,选择前 K 个距离最近的训练样本。
5.投票:统计 K 个最近邻居中每个类别的数量,选择数量最多的类别作为未
标记样本的预测类别。
鸢尾花分类问题的实现:
下面是使用Python和scikit-learn库实现鸢尾花分类的简单示例:
在这个示例中,我们首先加载鸢尾花数据集,然后将数据集分为训练集和测试集。
接着,我们创建一个KNN分类器,使用训练集训练模型,并在测试集上进行预测。
最后,计算模型的准确性。
这是一个简单的KNN分类器的实现,可以在更复杂的
数据集和应用中进行进一步的调整和优化。
分类算法原理
分类算法,也称为模式识别,是一种机器学习算法。
其主要目的是从数据中发现规律并将数据分成不同的类别。
常见的分类算法包括决策树、朴素贝叶斯、逻辑回归、K-最近邻(KNN)、支持向量机等。
例如,K-NN(K-最近邻)算法是一种非参数的、懒惰学习型的算法,它根据相似性(如,距离函数)对新数据进行分类。
首先,它识别已经被分成若干类的数据点,然后通过这些已知的数据点预测新样本点的分类。
朴素贝叶斯分类器基于概率论,假设各个特征之间相互独立。
该分类器在处理大量数据时具有较好的性能表现。
逻辑回归则是用于解决二分类问题的常用方法,它通过寻找一个超平面将不同类别的数据分隔开。
决策树是一种基于树结构进行决策的算法,通过构建一棵决策树来进行分类或预测。
支持向量机则是通过找到一个最优的超平面,使得两个类别之间的间隔最大,从而实现良好的分类效果。
以上各种算法都有其各自的优缺点,因此在实际应用中需要根据具体的问题和数据集来选择合适的算法。
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算法是一个简单而有效的分类算法,可以用于多类别分类问题,尤其适用于非线性和高维数据。
matlab各种分类方法和降维方法一、分类方法1.决策树分类:Matlab的决策树分类器可用于构建分类模型。
通过提供训练数据和目标标签,模型可以学习并生成分类规则,用于对新数据的分类。
2.支持向量机(SVM)分类:SVM是一种基于统计学习理论的分类方法,可以处理高维、复杂的数据。
Matlab的SVM工具箱提供了构建SVM模型的功能。
3.神经网络分类:神经网络是一种模拟人脑工作方式的算法,可用于分类、回归等任务。
Matlab的神经网络工具箱提供了多种神经网络模型,如多层感知器(MLP)等。
4.k-最近邻(k-NN)分类:k-NN是一种基于实例的学习算法,通过比较待分类项与已知类别的项,确定其所属类别。
Matlab的k-NN分类器可用于构建分类模型。
5.随机森林分类:随机森林是一种基于决策树的集成学习算法,通过组合多个决策树的预测结果,提高模型的性能和稳定性。
Matlab 的随机森林分类器可用于构建分类模型。
二、降维方法1.主成分分析(PCA):PCA是一种常用的降维方法,通过最大化数据方差的方式来选择新的坐标系,将原始数据投影到低维空间中。
Matlab的PCA工具箱提供了实现PCA的功能。
2.独立成分分析(ICA):ICA是一种用于分离混合信号的方法,通过最大化数据中非高斯性的方式,将数据降维并分离出各成分。
Matlab的独立成分分析工具箱提供了实现ICA的功能。
3.线性判别分析(LDA):LDA是一种用于二分类问题的降维方法,通过在样本间找到一个最优的超平面,将高维数据降维到二维空间中,提高分类的效率和准确性。
Matlab的线性判别分析工具箱提供了实现LDA的功能。
4.t-分布邻域嵌入(t-SNE):t-SNE是一种非线性降维方法,通过将高维数据映射到低维空间中,保留数据的分布和结构信息,用于可视化数据分析。
Matlab的t-SNE工具箱提供了实现t-SNE的功能。
在使用这些方法时,需要注意选择适合的数据和任务,并进行适当的参数调整和模型评估,以确保得到准确和可靠的分类或降维结果。
常见的非平衡文本分类方法非平衡文本分类是指在分类问题中,各个类别的样本数目不均衡,导致模型容易对样本数目多的类别过拟合,造成模型的偏差。
在现实生活中,非平衡样本问题十分普遍,例如在金融领域中,真正的欺诈交易数量非常少,正常交易则占据了总体的绝大部分。
在医疗领域中,罕见疾病的患病率非常低,而常见疾病则占有绝大部分。
因此有效的非平衡文本分类方法对于解决现实生活中的一系列问题具有重要的实际应用价值。
1. 重采样方法重采样方法是解决非平衡数据集的一种最基本的方法,它通过对数据集进行采样来平衡各类别的样本数目。
其中,欠采样方法(undersampling)移除一些样本,使得各个类别具有相近的样本数目;而过采样方法(oversampling)在样本数目较少的类别中进行复制,增加这些类别的样本数目以达到平衡。
欠采样方法最简单的方式是通过随机屏蔽删除部分样本,常用的欠采样算法有RandomUnderSampler和TomekLinks。
而过采样方法则常用复制或添加函数来生成新的样本。
其中比较常用的过采样方法有SMOTE和ADASYN。
2. 对齐分类器方法对齐分类器方法属于一种基于集成学习的方法,它通过多个弱分类器的集成来有效解决非平衡样本分类问题。
分类器之间具有相互独立的性质,因此可以使用对齐策略来解决样本分布失衡的问题。
在对齐分类器方法中,弱分类器可以是任何分类算法,如决策树,支持向量机(SVM),k-最近邻(k-NN)等。
对齐分类器方法的基本思想是对每个样本进行分类,并根据分类结果进行对齐,即使得各类别的样本达到均衡。
常见的对齐方案包括常用百分比(常用各类别样本的比例),逆分类误差(Inverse Class Frequency, ICF)以及逆样本密度(Inverse Density Ratio, IDR)等。
3. 改变损失函数方法改变损失函数方法也是解决非平衡分类问题的有效方法,它主要是通过调整损失函数,使得模型更加关注样本数目少的类别。
k 最近邻(knn)算法可用于分类问题和回归问题
K最近邻(K-最近邻)算法是一种基于距离度量的机器学习算法,常用于分类问题和回归问题。
该算法的基本思想是将输入特征映射到类别或回归标签。
在分类问题中,K最近邻算法将输入特征映射到K个最近邻的类别,即对于每个输入特征,选择距离该特征最近的类别作为它的输出结果。
该算法通常用于卷积神经网络(CNN)和循环神经网络(RNN)等深度学习模型中,可以用于分类、聚类和序列生成等任务。
在回归问题中,K最近邻算法将输入特征映射到K个最近的回归结果,即对于每个输入特征,选择距离该特征最近的回归结果作为它的输出结果。
该算法通常用于预测连续值预测、时间序列预测和回归分析等任务。
K最近邻算法不仅可以用于分类问题,还可以用于回归问题。
在分类问题中,该算法通常需要大量的训练样本来训练模型,而在回归问题中,由于每个预测值都是对输入数据的加权和,因此可以使用K最近邻算法来快速预测模型。
此外,K 最近邻算法还可以通过添加正则化项来减少过拟合现象。
K最近邻算法是一种简单而有效的机器学习算法,可以用于分类问题和回归问题。
在实际应用中,该算法可以与其他机器学习算法和深度学习模型相结合,以提高模型的准确性和鲁棒性。
knn分类算法计算过程
K最近邻(K-Nearest Neighbors,KNN)是一种常用的分类算法,其计算过程如下:
1. 准备数据集:首先,需要准备一个带有标签的数据集,其中包含已知分类的样本和相应的标签。
2. 计算距离:对于待分类的样本,需要计算它与数据集中每个已知样本之间的距离。
常用的距离度量方法包括欧氏距离、曼哈顿距离和余弦相似度等。
3. 选择K值:K值是指用于决策的邻居个数,需要根据具体问题和数据集进行选择。
4. 选择邻居:从数据集中选择与待分类样本最近的K个样本作为邻居。
可以按照距离升序排序,并选择前K个样本。
5. 进行投票:根据邻居的类别标签进行投票,多数类即为待分类样本的预测类别。
6. 输出结果:将投票结果作为待分类样本的预测类别,并完成分类。
需要注意的是,KNN算法的计算过程中,样本的特征值需要进行归一化或标准化处理,以避免某些特征对距离计算的影响过大。
此外,KNN算法还可以使用加权投票的方式,给距离较近的样本赋予更高的权重,以提高分类的准确性。
在C语言中,有许多种常用的分类算法可以用于数据挖掘和机器学习任务。
以下是一些常见的C语言实现的分类算法:1. 决策树(Decision Tree):ID3算法:一种基于信息熵的决策树构建算法。
C4.5算法:ID3算法的改进版本,使用信息增益率代替信息熵,并支持处理连续属性。
2. 朴素贝叶斯(Naive Bayes):朴素贝叶斯分类器是一种基于贝叶斯定理的概率分类模型,尤其适用于文本分类问题。
在C语言中,可以通过计算每个特征的条件概率和先验概率来实现。
3. K-最近邻(K-Nearest Neighbors, KNN):KNN是一种基于实例的学习方法,通过计算新样本与训练集中每个样本的距离,然后选取最近的k个邻居进行多数表决或加权平均等方式进行分类。
4. 支持向量机(Support Vector Machine, SVM):虽然SVM的理论较为复杂,但在C语言中也可以实现基本的线性SVM分类器,通过构建最大边距超平面来划分不同类别的数据。
5. 逻辑回归(Logistic Regression):逻辑回归是一种广义线性模型,常用于二分类问题。
在C语言中,可以通过优化算法(如梯度下降法)求解模型参数。
6. ABC分类算法(Activity-Based Costing Classification):ABC分类算法主要用于库存管理和运营管理,根据物品的价值和使用频率将其分为A、B、C三类,以便进行不同的管理策略。
7. 神经网络(Artificial Neural Networks, ANN):虽然神经网络的实现通常较为复杂,但在C语言中也可以实现简单的前馈神经网络用于分类任务。
在实现这些算法时,需要注意数据预处理、模型训练、模型评估等步骤,并且可能需要使用到一些数值计算库,如BLAS和LAPACK,或者专门的机器学习库,如LibSVM和OpenCV等。
同时,由于C语言的特性,代码可能会比其他高级语言(如Python或R)更为复杂和低级,但其执行效率通常更高。
kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法⼀、KN N算法概述 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的⽅法之⼀。
所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以⽤它最接近的k个邻居来代表。
Cover和Hart在1968年提出了最初的邻近算法。
KNN是⼀种分类(classification)算法,它输⼊基于实例的学习(instance-based learning),属于懒惰学习(lazy learning)即KNN没有显式的学习过程,也就是说没有训练阶段,数据集事先已有了分类和特征值,待收到新样本后直接进⾏处理。
与急切学习(eager learning)相对应。
KNN是通过测量不同特征值之间的距离进⾏分类。
思路是:如果⼀个样本在特征空间中的k个最邻近的样本中的⼤多数属于某⼀个类别,则该样本也划分为这个类别。
KNN算法中,所选择的邻居都是已经正确分类的对象。
该⽅法在定类决策上只依据最邻近的⼀个或者⼏个样本的类别来决定待分样本所属的类别。
提到KNN,⽹上最常见的就是下⾯这个图,可以帮助⼤家理解。
我们要确定绿点属于哪个颜⾊(红⾊或者蓝⾊),要做的就是选出距离⽬标点距离最近的k个点,看这k个点的⼤多数颜⾊是什么颜⾊。
当k取3的时候,我们可以看出距离最近的三个,分别是红⾊、红⾊、蓝⾊,因此得到⽬标点为红⾊。
算法的描述: 1)计算测试数据与各个训练数据之间的距离; 2)按照距离的递增关系进⾏排序; 3)选取距离最⼩的K个点; 4)确定前K个点所在类别的出现频率; 5)返回前K个点中出现频率最⾼的类别作为测试数据的预测分类⼆、关于K的取值 K:临近数,即在预测⽬标点时取⼏个临近的点来预测。
K值得选取⾮常重要,因为: 如果当K的取值过⼩时,⼀旦有噪声得成分存在们将会对预测产⽣⽐较⼤影响,例如取K值为1时,⼀旦最近的⼀个点是噪声,那么就会出现偏差,K值的减⼩就意味着整体模型变得复杂,容易发⽣过拟合; 如果K的值取的过⼤时,就相当于⽤较⼤邻域中的训练实例进⾏预测,学习的近似误差会增⼤。
sklearn kneibor classifier 参数Sklearn KNeighborsClassifier参数详解引言:Scikit-learn(简称为sklearn)是Python中一个广泛使用的机器学习库,提供了丰富的机器学习算法和工具。
其中KNeighborsClassifier是sklearn中的一个分类算法,使用K最近邻分类器实现。
本文将详细介绍KNeighborsClassifier的参数及其使用方法。
正文内容:1. KNeighborsClassifier概述1.1 K最近邻分类器原理1.2 KNeighborsClassifier的功能和应用场景1.3 KNeighborsClassifier的优缺点2. KNeighborsClassifier参数解析2.1 n_neighbors参数2.2 weights参数2.3 algorithm参数2.4 leaf_size参数2.5 p参数3. KNeighborsClassifier使用示例3.1 数据准备3.2 拟合和预测3.3 参数调优1. KNeighborsClassifier概述1.1 K最近邻分类器原理K最近邻分类器是一种基于实例的学习算法,其原理是通过计算样本与训练集中所有样本的距离,选取距离最近的K个样本作为邻居,根据邻居的标签进行投票,将样本分类到得票最多的类别中。
KNeighborsClassifier是sklearn中实现K 最近邻分类器的类。
1.2 KNeighborsClassifier的功能和应用场景KNeighborsClassifier可以用于分类问题,适用于特征空间较小的数据集。
它的优点是简单易用,对于非线性可分的数据集有较好的效果。
它的应用场景包括图像识别、文本分类、推荐系统等。
1.3 KNeighborsClassifier的优缺点KNeighborsClassifier的优点是简单易懂、易于实现,对于训练样本分布不均匀的情况也能较好地处理。
K-最近邻是分类器算法中最通俗易懂的一种,计算测试样本到各训练样本的距离,取其中最小的K个,并根据这K个训练样本的标记进行投票得到测试样本的标记。
算法的思路清晰简单,然而对于海量数据计算量过大,每个训练样本都有一个距离必须度量,耗费大量时间。
function test_knn
% 二维平面两类分类问题: k应该取奇数,避免投票时正负两类的得票数相同
clear;
k=10; % 最近邻居的数目
kk=zeros(k,1); % k个最近邻的标记初始值为0;
num_po=100; % 正类样本:横坐标(0,1);纵坐标(0,1)
x11=rand(num_po,1);
x12=rand(num_po,1);
x1=[x11 x12];
y1=ones(num_po,1); % 正类标记
num_ne=100; % 负类样本:横坐标(1,2);纵坐标(0,1)
x21=rand(num_ne,1)+1;
x22=rand(num_ne,1);
x2=[x21 x22];
y2=-1*ones(num_ne,1); % 负类标记
x=[x1;x2];
y=[y1;y2];
num_t=20; % 测试样本
test1=rand(num_t,1)+0.5;
test2=rand(num_t,1);
test=[test1 test2];
for num=1:num_t
for i=1:(num_po+num_ne)
dis(i)=(test(num,1)-x(i,1))^2+(test(num,2)-x(i,2))^2;
end
for j=1:k % 赋初值
near(j)=10^5;
end
for i=1:(num_po+num_ne) % 求最近的K个距离并记录其标记
for j=1:k
if dis(i)<near(j)
near(j)=dis(i);
kk(j)=y(i);
for t=j:k
near(t+1)=near(t);
end
break
end
end
end
sum=0;
for h=1:k
sum=kk(h)+sum;
end
y_test(num)=sign(sum); % 测试样本的标记end
for i=1:(num_po+num_ne) % 训练样本图示 if y(i)>0
plot(x(i,1),x(i,2),'r+');
hold on
else
plot(x(i,1),x(i,2),'b.');
hold on
end
end
for i=1:num_t % 测试样样本图示 if y_test(i)>0
plot(test(i,1),test(i,2),'g+');
title('K-最近邻分类器');
hold on
else
plot(test(i,1),test(i,2),'y.');
hold on
end
end。