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;**中是兩個高斯分布的類,變數取x=-3:3,y=-3:3中的資料,看看這些資料都是屬於哪個類。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
下面是執行效果圖:
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演算法解釋最清楚的圖如下所示 藍方塊和紅三角均是已有分類資料,當前的任務是將綠色圓塊進行分類判斷,判斷是屬於藍方塊...