MATLAB計算K近鄰

2021-08-16 00:11:13 字數 2890 閱讀 4436

在實驗中經常會需要計算k近鄰,為了避免多次重寫,這裡用matlab實現了乙個計算k近鄰的函式,該函式要求輸入兩個引數,第乙個引數就是資料矩陣,要求每行為乙個多維樣本點,第二個引數就是k值了。函式返回k近鄰矩陣。計算k近鄰比較好的一種演算法是利用kd樹,這裡暫且用的是易於理解的常規方法。使用kd樹的**將來補充。

具體**實現如下

function [ result ] = knn( data,k )

%計算k近鄰的乙個通用函式

%要求一行為乙個多維變數

%返回result為乙個矩陣,第i行為到第i個資料點的歐幾里得距離最短的k個資料點序號的排列,列序數越小距離越近

%計算knn用kd樹要更好一點,這個第一版暫時先用普通方法了

datasize = size(data);

distance = zeros(datasize(1),datasize(1));%距離矩陣,存放兩點之間的距離

%%%%

% 計算距離矩陣

%%%%%

for i = 1:datasize(1)-1

for j = i+1:datasize(1)

tempsum = 0;

for ci = 1:datasize(2)

tempsum = tempsum + (data(i,ci)-data(j,ci))*(data(i,ci)-data(j,ci));

enddistance(i,j) = sqrt(tempsum);

distance(j,i) = sqrt(tempsum);

end

endresult = zeros(datasize(1),k);%結果矩陣

%%%%

% 計算結果矩陣

%%%%%

for i = 1:datasize(1)

for j = 1:datasize(1)

if i==j

continue;

endindex = k;

while index>0 && result(i,index)==0

index = index-1;

end

if index == 0

result(i,1) = j;

else

if distance(i,j)0 && distance(i,j)使用的測試**如下所示

clc,clear

load('wine.mat')

data = wine(:,2:14);

result = knn(data,10)

計算結果如下所示

另外上面的測試方法其實是不太好的,最好是先將資料normlize一下。

計算乙個向量v在資料集矩陣data中的k近鄰**:

function [ result ] = vknn( v,data,k )

% 對乙個向量量v計算它在data中的k近鄰

% v是那個向量,data是資料集矩陣,k為近鄰數

% 要求向量是乙個行向量

datasize = size(data);

result = zeros(1,k);%結果向量

distance = zeros(datasize(1),1);%距離矩陣

%距離矩陣計算

下面是乙個使用vlfeat求k近鄰的乙個例子

clc,clear

x = rand(2,100);%一百個二維列向量

kdtree = vl_kdtreebuild(x);%構建kd樹

q = rand(2,1);

[index,distance] = vl_kdtreequery(kdtree, x, q);%返回x中與q最近的點

[index, distance] = vl_kdtreequery(kdtree, x, q, 'numneighbors', 10) ;%返回x中q的k的近鄰

k近鄰演算法matlab實現 K 近鄰演算法(一)

k 近鄰演算法是採用不同特徵之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 k 近鄰演算法的一般流程 1 收集資料集 可以使用任何方法 2 準備資料集 距離計算所需要的數值,最好是結構化的資料格式 3 分析資料 可以使用任何方法 4 訓練資料集...

K近鄰的MATLAB實現

參考 1 計算已知類別資料集合彙總的點與當前點的距離 2 按照距離遞增次序排序 3 選取與當前點距離最近的k個點 4 確定距離最近的前k個點所在類別的出現頻率 5 返回距離最近的前k個點中頻率最高的類別作為當前點的 分類 function relustlabel knn inx,data,label...

Matlab實現加權K近鄰

加權k近鄰是k近鄰的一種修正,當理解k近鄰之後,加權k近鄰則很好理解了,不說了,上 function label1 wknn training,testing,k row,column size training row1,column1 size testing 計算測試集與訓練集的距離 dist...