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

2021-08-28 07:37:18 字數 2155 閱讀 2854

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到底取幾,不同情況都要區別對待的。

clear all;

close all;

clc;

%%第乙個類資料和標號

mu1=[0

0]; %均值

s1=[0.3

0;00.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;00.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

:kma=distance(i);

for j=i+1:200

if distance(j)

ma=distance(j);

label_ma=label

(j);

tmp=j;

endend

distance(tmp)=distance(i); %排資料

distance(i)=ma;

label(tmp)=label

(i); %排標號,主要使用標號

label(i)=label

_ma;

endcls1=0

; %統計類1中距離測試資料最近的個數

for i=1

:kif

label(i)==1

cls1=cls1+1

;end

endcls2=k-cls1; %類2中距離測試資料最近的個數

if cls1>cls2

plot(ii,jj); %屬於類1的資料畫小黑點

endend

end

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

下面是執行效果圖:

matlab練習程式(knn,k最鄰近分類法)

matlab練習程式(DBSCAN)

和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...

matlab練習程式(c c 呼叫matlab)

就我目前了解的c 呼叫matlab有兩種方法。第一種是通過matlab引擎呼叫,也就是這裡用到的方法。第二種是用matlab將m檔案編譯為相應的h lib dll檔案再加以呼叫。使用engine所用到的h和lib檔案基本在d program files matlab r2010b extern裡面,...

機器學習 KNN K 最鄰近演算法

k 近鄰學習是一種常用的監督學習方法,比如 判斷乙個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即 近朱者赤,近墨者黑 理論 原理 物以類聚,人以群分 乙個對於knn演算法解釋最清楚的圖如下所示 藍方塊和紅三角均是已有分類資料,當前的任務是將綠色圓塊進行分類判斷,判斷是屬於藍方塊...