导航:首页 > 编程语言 > knn算法matlab代码

knn算法matlab代码

发布时间:2023-03-21 21:25:52

① R语言-KNN算法

1、K最近邻(k-NearestNeighbor,KNN)分类算法,是一孝含个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

2、KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不简大是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

3、KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比。

简言之,就是将未标记的案例归类为与它们最近相似的、带有标记的案例所在的类 。

原理及举例

工作原理:我们知道样本集中每一个数据与所属分类的对应关系,输入没有标签的新数据后,将新数据与训练集的数据对应特征进行比较,找出“距离”最近的k(通常k<20)数据,选择这k个数据中出现最多的分类作为新数据的分类。

算法描述

1、计算已知数据集中的点与当前点的距离

2、按距离递增次序排序

3、选取与当前数据点距离最近的K个点

4、确定前K个点所在类别出现的频率

5、返回频率最高的类别作为当前类别的预测巧咐笑

距离计算方法有"euclidean"(欧氏距离),”minkowski”(明科夫斯基距离), "maximum"(切比雪夫距离), "manhattan"(绝对值距离),"canberra"(兰式距离), 或 "minkowski"(马氏距离)等

Usage

knn(train, test, cl, k = 1, l = 0, prob =FALSE, use.all = TRUE)

Arguments

train

matrix or data frame of training set cases.

test

matrix or data frame of test set cases. A vector will  be interpreted as a row vector for a single case.

cl

factor of true classifications of training set

k

number of neighbours considered.

l

minimum vote for definite decision, otherwisedoubt. (More precisely, less thank-ldissenting votes are allowed, even

ifkis  increased by ties.)

prob

If this is true, the proportion of the votes for the

winning class are returned as attributeprob.

use.all

controls handling of ties. If true, all distances equal

to thekth largest are

included. If false, a random selection of distances equal to thekth is chosen to use exactlykneighbours.

kknn(formula = formula(train), train, test, na.action = na.omit(), k = 7, distance = 2, kernel = "optimal", ykernel = NULL, scale=TRUE, contrasts = c('unordered' = "contr.mmy", ordered = "contr.ordinal"))

参数:

formula                            A formula object.

train                                 Matrix or data frame of training set cases.

test                                   Matrix or data frame of test set cases.

na.action                         A function which indicates what should happen when the data contain ’NA’s.

k                                       Number of neighbors considered.

distance                          Parameter of Minkowski distance.

kernel                              Kernel to use. Possible choices are "rectangular" (which is standard unweighted knn), "triangular", "epanechnikov" (or beta(2,2)), "biweight" (or beta(3,3)), "triweight" (or beta(4,4)), "cos", "inv", "gaussian", "rank" and "optimal".

ykernel                            Window width of an y-kernel, especially for prediction of ordinal classes.

scale                                Logical, scale variable to have equal sd.

contrasts                         A vector containing the ’unordered’ and ’ordered’ contrasts to use

kknn的返回值如下:

fitted.values              Vector of predictions.

CL                              Matrix of classes of the k nearest neighbors.

W                                Matrix of weights of the k nearest neighbors.

D                                 Matrix of distances of the k nearest neighbors.

C                                 Matrix of indices of the k nearest neighbors.

prob                            Matrix of predicted class probabilities.

response                   Type of response variable, one of continuous, nominal or ordinal.

distance                     Parameter of Minkowski distance.

call                              The matched call.

terms                          The ’terms’ object used.

iris%>%ggvis(~Length,~Sepal.Width,fill=~Species)

library(kknn)
data(iris)

dim(iris)

m<-(dim(iris))[1]
val<-sample(1:m,size=round(m/3),replace=FALSE,prob=rep(1/m,m))

建立训练数据集

data.train<-iris[-val,]

建立测试数据集

data.test<-iris[val,]

调用kknn  之前首先定义公式

formula : Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

iris.kknn<-kknn(Species~.,iris.train,iris.test,distance=1,kernel="triangular")

summary(iris.kknn)

# 获取fitted.values

fit <- fitted(iris.kknn)

# 建立表格检验判类准确性

table(iris.valid$Species, fit)
# 绘画散点图,k-nearest neighbor用红色高亮显示

pcol <- as.character(as.numeric(iris.valid$Species))

pairs(iris.valid[1:4], pch = pcol, col = c("green3", "red")[(iris.valid$Species != fit)+1]

二、R语言knn算法

install.packages("class")

library(class)

对于新的测试样例基于距离相似度的法则,确定其K个最近的邻居,在K个邻居中少数服从多数

确定新测试样例的类别

1、获得数据

2、理解数据

对数据进行探索性分析,散点图

如上例

3、确定问题类型,分类数据分析

4、机器学习算法knn

5、数据处理,归一化数据处理

normalize <- function(x){

num <- x - min(x)

denom <- max(x) - min(x)

return(num/denom)

}

iris_norm <-as.data.frame(lapply(iris[,1:4], normalize))

summary(iris_norm)

6、训练集与测试集选取

一般按照3:1的比例选取

方法一、set.seed(1234)

ind <- sample(2,nrow(iris), replace=TRUE, prob=c(0.67, 0.33))

iris_train <-iris[ind==1, 1:4]

iris_test <-iris[ind==2, 1:4]

train_label <-iris[ind==1, 5]

test_label <-iris[ind==2, 5]

方法二、

ind<-sample(1:150,50)

iris_train<-iris[-ind,]

iris_test<-iris[ind,1:4]

iris_train<-iris[-ind,1:4]

train_label<-iris[-ind,5]

test_label<-iris[ind,5]

7、构建KNN模型

iris_pred<-knn(train=iris_train,test=iris_test,cl=train_label,k=3)

8、模型评价

交叉列联表法

table(test_label,iris_pred)

实例二

数据集

http://archive.ics.uci.e/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data

导入数据

dir <-'http://archive.ics.uci.e/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data'wdbc.data <-read.csv(dir,header = F)

names(wdbc.data) <- c('ID','Diagnosis','radius_mean','texture_mean','perimeter_mean','area_mean','smoothness_mean','compactness_mean','concavity_mean','concave points_mean','symmetry_mean','fractal dimension_mean','radius_sd','texture_sd','perimeter_sd','area_sd','smoothness_sd','compactness_sd','concavity_sd','concave points_sd','symmetry_sd','fractal dimension_sd','radius_max_mean','texture_max_mean','perimeter_max_mean','area_max_mean','smoothness_max_mean','compactness_max_mean','concavity_max_mean','concave points_max_mean','symmetry_max_mean','fractal dimension_max_mean')

table(wdbc.data$Diagnosis)## M = malignant, B = benign

wdbc.data$Diagnosis <- factor(wdbc.data$Diagnosis,levels =c('B','M'),labels = c(B ='benign',M ='malignant'))

② 哪本书有讲到knn算法matlab

knnsearch(x,y,'k',5); 就表示在x中找y的最近的5个。返尘哪岁回结果 idx 是m行5列的矩阵,每一行派睁是结果中缓世最近的5个

③ 求k近邻法实例,有的给我发一个,matlab程序。求高手啊!

大奎!哥来要分!
发个算法吧,以免口舌,VS2008C#算法代码,刚学C#,代码有些粗糙,绝对好使,想要全部代码与本人联系。呵呵~: )
public void knnsf(float PH,float JD,float NH4,float COD,float BOD,float SS,float XTD)
{
double[,] kn = new double[81, 2];
int a = 0, b = 0, c = 0;
//计算欧氏距离
for (int i = 0; i < 27; i++ )
{
kn[i, 0] = Math.Sqrt( Math.Pow(class1[i, 1] - PH, 2) + Math.Pow(class1[i, 2] - JD, 2) + Math.Pow(class1[i, 3] - NH4, 2) +
Math.Pow(class1[i, 4] - COD, 2) + Math.Pow(class1[i, 5] - BOD, 2) + Math.Pow(class1[i, 6] - SS, 2) +
Math.Pow(class1[i, 7] - XTD, 2));
kn[i, 1] = 1;

kn[i+27,0] = Math.Sqrt(Math.Pow(class2[i, 1] - PH, 2) + Math.Pow(class2[i, 2] - JD, 2) + Math.Pow(class2[i, 3] - NH4, 2) +
Math.Pow(class2[i, 4] - COD, 2) + Math.Pow(class2[i, 5] - BOD, 2) + Math.Pow(class2[i, 6] - SS, 2) +
Math.Pow(class2[i, 7] - XTD, 2));
kn[i+27, 1] = 2;

kn[i+54,0] = Math.Sqrt(Math.Pow(class3[i, 1] - PH, 2) + Math.Pow(class3[i, 2] - JD, 2) + Math.Pow(class3[i, 3] - NH4, 2) +
Math.Pow(class3[i, 4] - COD, 2) + Math.Pow(class3[i, 5] - BOD, 2) + Math.Pow(class3[i, 6] - SS, 2) +
Math.Pow(class3[i, 7] - XTD, 2));
kn[i+54, 1] = 3;
}

//选择排序法
for (int i = 0; i < 81; i++ )
{
int k = 0;
double mintmp = kn[i, 0],clas=kn[i,1];
for (int j = i+1; j < 81; j++)
{
if (mintmp > kn[j, 0])
{
mintmp = kn[j, 0];
clas = kn[j, 1];
k = j;
}
}

kn[k, 0] = kn[i, 0];
kn[k, 1] = kn[i, 1];

kn[i, 0] = mintmp;
kn[i, 1] = clas;
}
//选择K=30个近邻
for (int k = 0; k < 3; k++)
{
if (kn[k, 1] == 1) a++;
if (kn[k, 1] == 2) b++;
if (kn[k, 1] == 3) c++;
}
//统计近邻类别
if (a > b && a > c)
{
classes = 1;
}
if (b > a && b > c)
{
classes = 2;
}
if (c > b && c > a)
{
classes = 3;
}

}

④ KNN-分类算法

KNN,K-NearestNeighbor,即K个最近的邻居的意思。对于一个输入样本,用特征上最接近它的K个临近值大多数属于的标签来对它进行分类。KNN是最简单的机器学习算法之一,可以用于分类和回归,是一种监督学习算法。

具体实现过程如下:
①准备数据,对数据进行预处理

在已经分好类的情况下,我们需要对没有分类的物品进行分类 。
②计算测试样本点(也就是待分类点)到其他每个样本点的距离。

其实就是计算(x1,y1)和(x2,y2)的距离。拓展到多维空间,则公式变成这晌岩样:

k值是KNN算法的一个参数,K的含义即参考”邻居“标签值的个数。
如含陪果当K的取值过小时,一旦有噪声得成分存在们将会对预测产生比较大影响,例如取K值为1时,一旦最近的一个点是噪声,那么就会出现偏差,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
如果K的值取的过大时,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误。K值的增大就意味着整体的模型变得简单;
如果K==N的时候,那么就是取全部的实例,即为取实例中某分类下最多的点,就对预测没有什么实际的意义了
在划分好数据集后,我们可以通过交叉验证法来得到宴老御最佳的K值

优点:
1.无数据输入假定,在分类完的情况下进行测试
2.预测精度高
3.对异常值不敏感
缺点:
1.时间复杂度和空间复杂度高,计算到每一个点的距离,计算量较大
2.当样本不平衡的时候,比如一个类的样本容量大,另一个类的样本容量很小,对于测试识别的样本来说,投票结果更容易靠近样本容量大的类,从而导致分类错误

⑤ MATLAB中KNN均值滤波器代码…… 作业,急!!求教大虾

道德

⑥ knn最基本的Matlab仿真怎么弄

准备条件:已经把特征数据和样本标号保存为文件
测试代码为:
[plain]
view
plain
train_data=load('sample_feature.txt');
train_label=load('train_label.txt');
test_data=load('features.txt');
k=knnclassify(test_data,train_data,train_label,3,'cosine','random');
train_data保存的是训练样本特征,要求是最能代表本类胡闭别的,不一定多,当然不能太少橡做戚;
train_label保存梁陵的是样本标号,如0,1,2等等,随便设置,只有能区分就行,具体格式可以为:
[plain]
view
plain
1
1
2
2
3
3
test_data测试文件保存的是测试数据的特征;

⑦ KNN算法,k近邻

K最近邻(k-Nearest Neighbour,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算回法之一。该方法的思路答是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

⑧ 文本分类器(基于KNN算法),语言最好是Matlab的,有测试数据集。。。。


好像这些算法在数据缺失的情况下是没法进行的吧,只能说改进之后在数据缺失情况下做了相应处理,你说的这些算法都可以在网上找到代码

阅读全文

与knn算法matlab代码相关的资料

热点内容
为什么u盘读有些文件读取不出来 浏览:485
linux内核体系架构 浏览:758
java高低字节 浏览:105
win10安全模式也死机 浏览:159
最简单的数据库开发软件 浏览:718
迅雷下载网络断开 浏览:792
考勤系统数据库在哪个文件夹 浏览:134
creo30绘图配置文件设置 浏览:624
苹果ID被锁要交600元交不交 浏览:29
实例化module配置文件失败 浏览:872
网站源码是什么东西 浏览:90
怎样打开桌面隐藏文件 浏览:904
拯救者的颜色配置文件 浏览:860
微信转发朋友圈送礼品 浏览:905
新电脑装win10教程 浏览:130
linux文件执行授权 浏览:618
微信文件如何删除重新打开 浏览:897
删了他微信他又来加 浏览:283
苹果备忘录文件夹备份 浏览:233
手机查看db文件 浏览:248

友情链接