matlab練習程序(KNN,K最鄰近分類法)


K最鄰近密度估計技術是一種分類方法,不是聚類方法。

不是最優方法,實踐中比較流行。

通俗但不一定易懂的規則是:

1.計算待分類數據和不同類中每一個數據的距離(歐氏或馬氏)。

2.選出最小的前K數據個距離,這里用到選擇排序法。

3.對比這前K個距離,找出K個數據中包含最多的是那個類的數據,即為待分類數據所在的類。

不通俗但嚴謹的規則是:

給定一個位置特征向量x和一種距離測量方法,於是有:

1.在N個訓練向量外,不考慮類的標簽來確定k鄰近。在兩類的情況下,k選為奇數,一般不是類M的倍數。

2.在K個樣本之外,確定屬於wi,i=1,2,...M類的向量的個數ki,顯然sum(ki)=k。

3.x屬於樣本最大值ki的那一類wi。

如下圖,看那個綠色的值,是算三角類呢還是算矩類形呢,這要看是用幾NN了,要是3NN就屬於三角,要是5NN就屬於矩形。

至於K到底取幾,不同情況都要區別對待的。

下面是相關matlab代碼:

clear all;
close all;
clc;

%%第一個類數據和標號
mu1=[0 0];  %均值
S1=[0.3 0;0 0.35];  %協方差
data1=mvnrnd(mu1,S1,100);   %產生高斯分布數據
plot(data1(:,1),data1(:,2),'+');
label1=ones(100,1);
hold on;

%%第二個類數據和標號
mu2=[1.25 1.25];
S2=[0.3 0;0 0.35];
data2=mvnrnd(mu2,S2,100);
plot(data2(:,1),data2(:,2),'ro');
label2=label1+1;

data=[data1;data2];
label=[label1;label2];

K=11;   %兩個類,K取奇數才能夠區分測試數據屬於那個類
%測試數據,KNN算法看這個數屬於哪個類
for ii=-3:0.1:3
    for jj=-3:0.1:3
        test_data=[ii jj];  %測試數據
        label=[label1;label2];
        %%下面開始KNN算法,顯然這里是11NN。
        %求測試數據和類中每個數據的距離,歐式距離(或馬氏距離) 
        distance=zeros(200,1);
        for i=1:200
            distance(i)=sqrt((test_data(1)-data(i,1)).^2+(test_data(2)-data(i,2)).^2);
        end

        %選擇排序法,只找出最小的前K個數據,對數據和標號都進行排序
        for i=1:K
            ma=distance(i);
            for j=i+1:200
                if distance(j)<ma
                    ma=distance(j);
                    label_ma=label(j);
                    tmp=j;
                end
            end
            distance(tmp)=distance(i);  %排數據
            distance(i)=ma;

            label(tmp)=label(i);        %排標號,主要使用標號
            label(i)=label_ma;
        end

        cls1=0; %統計類1中距離測試數據最近的個數
        for i=1:K
           if label(i)==1
               cls1=cls1+1;
           end
        end
        cls2=K-cls1;    %類2中距離測試數據最近的個數
        
        if cls1>cls2    
           plot(ii,jj);     %屬於類1的數據畫小黑點
        end
        
    end
end

代碼中是兩個高斯分布的類,變量取x=-3:3,y=-3:3中的數據,看看這些數據都是屬於哪個類。

下面是運行效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM