KNN(K-Nearest Neighbor)最邻…
来源:互联网 发布:我的世界1.9方块数据 编辑:程序博客网 时间:2024/05/03 10:56
KNN最邻近规则,主要应用领域是对未知事物的识别,即判断未知事物属于哪一类,判断思想是,基于欧几里得定理,判断未知事物的特征和哪一类已知事物的的特征最接近;
K最近邻(k-NearestNeighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比(组合函数)。
该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
K-NN可以说是一种最直接的用来分类未知数据的方法。基本通过下面这张图跟文字说明就可以明白K-NN是干什么的
简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。
算法步骤:
step.1---初始化距离为最大值
step.2---计算未知样本和每个训练样本的距离dist
step.3---得到目前K个最临近样本中的最大距离maxdist
step.4---如果dist小于maxdist,则将该训练样本作为K-最近邻样本
step.5---重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完
step.6---统计K-最近邻样本中每个类标号出现的次数
step.7---选择出现频率最大的类标号作为未知样本的类标号
KNN的matlab简单实现代码
%in:
% out: training samples' class label,n*1
%test:
% target:
%k:
ClassLabel=unique(out);
c=length(ClassLabel);
n=size(in,1);
% target=zeros(size(test,1),1);
dist=zeros(size(in,1),1);
for j=1:size(test,1)
end
R语言的实现代码如下
library(class)
data(iris)
names(iris)
m1<-knn.cv(iris[,1:4],iris[,5],k=3,prob=TRUE)
attributes(.Last.value)
library(MASS)
m2<-lda(iris[,1:4],iris[,5])
b<-data.frame(Sepal.Length=6,Sepal.Width=4,Petal.Length=5,Petal.Width=6)
p1<-predict(m2,b,type="class")
C++ 实现 :
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
#include
#include
#include
#include
#include
using namespace std;
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
#define
#define
#define
#define
#define
//结构体
struct dataVector {
};
struct distanceStruct {
};
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
struct dataVector gTrainingSet[MAX_SIZE_OF_TRAINING_SET];//训练数据集
struct dataVectorgTestSet[MAX_SIZE_OF_TEST_SET];
struct distanceStructgNearestDistance[K];
intcurTrainingSetSize=0;
intcurTestSetSize=0;
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
double Distance(struct dataVector vector1,struct dataVectorvector2)
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
int GetMaxDistance()
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
char* Classify(struct dataVector Sample)
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
}
以上内容为参考网上有关资料;加以总结;
- KNN(K-Nearest Neighbor)最邻…
- K最邻近算法(K-Nearest Neighbor,KNN)(初探)
- K最近邻(KNN,k-Nearest Neighbor)准确理解
- KNN(K-Nearest Neighbor)
- KNN(K-nearest neighbor)理解
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- 最邻近规则分类(K-Nearest Neighbor)KNN算法
- 最邻近规则分类(K-Nearest Neighbor)KNN算法应用
- 基于Matlab的FIR滤波器设计与实现
- Matlab中窗函数的简单使用
- 二维杆状图函数stem
- CCTV3《回声嘹亮——西游记重…
- NMF(非负矩阵分解)算法
- KNN(K-Nearest Neighbor)最邻…
- 几种常见的缺失数据插补方法
- 小波去噪
- LaTeX新人教程,30分钟从完全陌生…
- Spectral Clustering: A…
- hdu 1426 Sudoku Killer 解题报告
- MySql 的批量操作,要加rewriteBatchedStatements参数
- adobe cs4系列套装及注册机下载
- 对于Ajax在IE上读缓存的问题