資源簡介
密度聚類中的DBSCAN代碼,根據周志華的《機器學習》中的偽代碼編寫,直接調用就可以使用,內部有注釋
代碼片段和文件信息
function?[kC]?=?DBSCAN(epsMinPtsD)
%?k?聚類個數
%?C?聚類得到的簇
%D?數據集
%eps??鄰域參數
%MinPts??領域參數
%設置參數
O?=?zeros(1?size(D?1));??????????????%核心對象集
C?=?cell(size(D1));???????????????????%聚類簇
%%?找出核心對象
d?=?zeros(size(D?1)?size(D?1));?
distance?=?‘euclidean‘;
for?i?=?1:size(D?1)
?????for?j?=?size(D?1):-1:i
????????if?pdist(D([i?j]:)distance)?<=?eps???%計算樣本行與行之間的距離,樣本之間的距離小于eps元素值為1,反之0
????????????d(i?j)?=?1;
????????end
????????d(j?i)?=?d(i?j);???%d為對稱矩陣
????end
????%d(ii)?=?0;
????if?sum(d(:i))?>=?MinPts
????????????O(i)?=?i;????????%找到核心對象
????end
end
%?O(O==0)?=?[];??%O中的元素去零
%?disp(O)
%%?找出由密度可達樣本生成的聚類簇
k?=??0;????????????????????????????????%初始化聚類簇數
Tau?=?1:size(D?1);????????????????????%初始化未訪問樣本集合
while?sum(O)?~=?0
????Tau_old?=?Tau;?????????????????????%記錄當前未訪問樣本集合
????%隨機選取一個核心對象j
????j?=?1;
????while?O(j)?==?0
????????j?=?j+1;
????end
????Q?=?zeros(1?size(
- 上一篇:一鍵生成窗戶
- 下一篇:模擬退火算法解決0-1背包問題
評論
共有 條評論