1. 程式人生 > >聚類方法:DBSCAN演算法研究(2)--matlab程式碼實現

聚類方法:DBSCAN演算法研究(2)--matlab程式碼實現

DBSCAN聚類演算法三部分:

1、        DBSCAN原理、流程、引數設定、優缺點以及演算法;

2、        matlab程式碼實現;

3、        C++程式碼實現及與matlab例項結果比較。

摘要:介紹DBSCAN原理、流程、引數設定、優缺點以及演算法的matlabC++程式碼例項。

matlab程式碼測試實驗(程式碼從matlab官方網站[8]下載)

下載的程式碼主要包括一個測試資料集合mydata.mat,main.mDBSCAN.mPlotClusterinResult.m4個檔案,我們在測試實驗實驗中做了兩個方面更改:1)更換了另外一個測試資料,測試資料來源於

[13](取其中的一部分),2)添加了個K距離圖部分程式碼(均在如下主程式程式碼中給出),程式碼按照個人對k-distance graph的理解編寫,如有錯誤之處,望大家指正,3)改變引數Eps值大小,輸出結果並顯示

所有測試程式碼在下文給出,包括DBSCAN.mPlotClusterinResult.m子函式。

(所有測試程式碼下載:

%main function:主函式
%all codes and test data downlown: http://yarpiz.com/255/ypml110-dbscan-clustering 
 % Copyright (c) 2015, Yarpiz (www.yarpiz.com)
% All rights reserved. Please read the "license.txt" for license terms.
%
% Project Code: YPML110
% Project Title: Implementation of DBSCAN Clustering in MATLAB
% Publisher: Yarpiz (www.yarpiz.com)
% 
% Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team)
% 
% Contact Info: 
[email protected]
, [email protected] clc; clear; close all; %% test Data %資料下載網站:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/ %這裡使用的iris資料的一部分,由於第3維和第4為資料資料區分度好,因此用3、4維資料測試 X1 =[5.1,3.5,1.4,0.2;%,Iris-setosa 4.9,3.0,1.4,0.2; 4.7,3.2,1.3,0.2; 4.6,3.1,1.5,0.2; 5.1,3.7,1.5,0.4; 4.6,3.6,1.0,0.2; 5.1,3.3,1.7,0.5; 5.0,3.6,1.4,0.2; 5.4,3.9,1.7,0.4; 4.6,3.4,1.4,0.3; 5.0,3.4,1.5,0.2; 4.4,2.9,1.4,0.2; 4.9,3.1,1.5,0.1; 5.4,3.7,1.5,0.2; 4.8,3.4,1.6,0.2; 4.8,3.0,1.4,0.1; 4.3,3.0,1.1,0.1; 5.8,4.0,1.2,0.2; 5.7,4.4,1.5,0.4; 5.4,3.9,1.3,0.4; 5.1,3.5,1.4,0.3; 5.7,3.8,1.7,0.3; 5.1,3.8,1.5,0.3; 5.4,3.4,1.7,0.2; 6.4,3.2,4.5,1.5;%Iris-versicolor 6.9,3.1,4.9,1.5; 5.5,2.3,4.0,1.3; 6.5,2.8,4.6,1.5; 5.7,2.8,4.5,1.3; 6.3,3.3,4.7,1.6; 4.9,2.4,3.3,1.0; 4.9,2.4,3.3,1.0; 6.6,2.9,4.6,1.3; 5.2,2.7,3.9,1.4; 5.0,2.0,3.5,1.0; 5.9,3.0,4.2,1.5; 6.0,2.2,4.0,1.0]; X=X1(:,3:4); %%KNN k distance graph, to determine the epsilon A=X; numData=size(A,1); Kdist=zeros(numData,1); [IDX,Dist]=knnsearch(A(2:numData,:),A(1,:)); Kdist(1)=Dist; for i=2:size(A,1) [IDX,Dist] = knnsearch(A([1:i-1,i+1:numData],:),A(i,:)); Kdist(i)=Dist; end [sortKdist,sortKdistIdx]=sort(Kdist,'descend'); distX=[1:numData]'; plot(distX,sortKdist,'r+-','LineWidth',2); set(gcf,'position',[1000 340 350 350]); grid on; %% Run DBSCAN Clustering Algorithm epsilon= 0.15 ; MinPts= 3 ; IDX1=DBSCAN(X,epsilon,MinPts); %% Plot Results figure; PlotClusterinResult(X, IDX1); title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']); set(gcf,'position',[30 -10 500 500]); epsilon= 0.25 ; MinPts= 3 ; IDX2=DBSCAN(X,epsilon,MinPts); %% Plot Results figure; PlotClusterinResult(X, IDX2); title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']); set(gcf,'position',[530 -10 500 500]); epsilon= 0.5 ; MinPts= 3 ; IDX3=DBSCAN(X,epsilon,MinPts); %% Plot Results figure; PlotClusterinResult(X, IDX3); title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']); set(gcf,'position',[30 380 500 500]); %DBSCAN演算法子函式,需另外建立.m檔案儲存 % Copyright (c) 2015, Yarpiz (www.yarpiz.com) % All rights reserved. Please read the "license.txt" for license terms. % % Project Code: YPML110 % Project Title: Implementation of DBSCAN Clustering in MATLAB % Publisher: Yarpiz (www.yarpiz.com) % % Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team) % % Contact Info:
[email protected]
, [email protected] function [IDX, isnoise]=DBSCAN(X,epsilon,MinPts) C=0; n=size(X,1); IDX=zeros(n,1); D=pdist2(X,X); visited=false(n,1); isnoise=false(n,1); for i=1:n if ~visited(i) visited(i)=true; Neighbors=RegionQuery(i); if numel(Neighbors)<MinPts % X(i,:) is NOISE isnoise(i)=true; else C=C+1; ExpandCluster(i,Neighbors,C); end end end function ExpandCluster(i,Neighbors,C) IDX(i)=C; k = 1; while true j = Neighbors(k); if ~visited(j) visited(j)=true; Neighbors2=RegionQuery(j); if numel(Neighbors2)>=MinPts Neighbors=[Neighbors Neighbors2]; %#ok end end if IDX(j)==0 IDX(j)=C; end k = k + 1; if k > numel(Neighbors) break; end end end function Neighbors=RegionQuery(i) Neighbors=find(D(i,:)<=epsilon); end end %結果顯示子函式,需另外建立.m檔案儲存 % Copyright (c) 2015, Yarpiz (www.yarpiz.com) % All rights reserved. Please read the "license.txt" for license terms. % % Project Code: YPML110 % Project Title: Implementation of DBSCAN Clustering in MATLAB % Publisher: Yarpiz (www.yarpiz.com) % % Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team) % % Contact Info: [email protected], [email protected] function PlotClusterinResult(X, IDX) k=max(IDX); Colors=hsv(k); Legends = {}; for i=0:k Xi=X(IDX==i,:); if i~=0 Style = 'x'; MarkerSize = 8; Color = Colors(i,:); Legends{end+1} = ['Cluster #' num2str(i)]; else Style = 'o'; MarkerSize = 6; Color = [0 0 0]; if ~isempty(Xi) Legends{end+1} = 'Noise'; end end if ~isempty(Xi) plot(Xi(:,1),Xi(:,2),Style,'MarkerSize',MarkerSize,'Color',Color); end hold on; end hold off; axis equal; grid on; legend(Legends); legend('Location', 'NorthEastOutside'); end

執行結果:


觀察當Eps由小到大變化時候,當Eps=0.15時,資料分成2類,噪音點有9個,當Eps=0.25時,資料分成3來,噪音點4個,Eps=0.15時,被分成2類,無噪音點,而根據k距離圖大致確定0.15為較適合的Eps引數值,但是這不能很好的將這兩類資料分開(資料來源:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/,資料詳細說明可到上述網站檢視),這可能是資料密度分佈不均勻,導致引數Eps不太容易確定,在這種時候按照引數設定的指導原則不能選取較好的引數,而是需要根據具體應用先驗進行引數適當調整。

有關matlab版本的DBSCAN演算法程式碼,除了matlab官網可以下載DBSCAN演算法程式碼知網,[9]也給出一個最原始的DBSCANmatlab實現,只能處理小規模的資料。

參考資料:

[2]Ester,Martin;Kriegel, Hans-Peter; Sander,Jörg; Xu, Xiaowei (1996). Simoudis, Evangelos; Han, Jiawei; Fayyad, Usama M.,eds.Adensity-based algorithm for discovering clusters in large spatial databaseswith noise. Proceedings of the Second International Conference on KnowledgeDiscovery and Data Mining (KDD-96).AAAI Press.pp. 226–231.CiteSeerX10.1.1.121.9220.ISBN1-57735-004-9.

[3] 各種聚類演算法的比較



相關推薦

方法DBSCAN演算法研究2--matlab程式碼實現

DBSCAN聚類演算法三部分: 1、        DBSCAN原理、流程、引數設定、優缺點以及演算法; 2、        matlab程式碼實現; 3、        C++程式碼實現及與matlab例項結果比較。 摘要:介紹DBSCAN原理、流程、引數設

方法DBSCAN演算法研究1--DBSCAN原理、流程、引數設定、優缺點以及演算法

DBSCAN聚類演算法三部分: 1、        DBSCAN原理、流程、引數設定、優缺點以及演算法; 2、        matlab程式碼實現; 3、        C++程式碼實現及與matlab例項結果比較。 DBSCAN(Density-based

神經網路方法SOM演算法原理

一個神經網路接收外界輸入模式時,將會分為不同的對應區域,各區域對輸入模式有不同的響應特徵,而這個過程是自動完成的。其特點與人腦的自組織特性類似。SOM的目標是用低維(通常是二維或三維)目標空間的點來表

測量人臉顏值的標準有哪些,人臉影象演算法研究2

今天帶來一篇人臉識別中的顏值打分技術,所謂“顏值”,基於什麼標準來評判高低呢?既然是個“數值”,那到底能不能“測量”一下? 概述 近年來隨著人臉識別技術的發展,顏值打分也受到了廣泛的關注與研究。可即使人來打分,大家也口味各異,御姐蘿莉各有所愛。計算機又豈能判

方法DBSCAN

演算法思想 DBSCAN是一種基於密度的聚類方法,其思想是根據樣本間的緊密程度來對簇進行劃分。 DBSCAN的樣本點一般被分為三類: 1.核心點: 在半徑Eps內含有超過MinPts數目的點 2.邊界點: 在半徑Eps內含有的點不超過MinPts,但

視覺SLAM之詞袋bag of words 模型與K-means演算法淺析2

          這裡表示分類的平均值。 注:arg表示使目標函式取最小值時的變數值 設我們一共有 N 個數據點需要分為 K 個 cluster ,k-means 要做的就是最小化 其中  rnk在  在資料點 n 被歸類到 cluster k 的時候為 1 ,否則為 0 。直接尋找  rnk  和

《C語言程式設計現代方法2K.N.King 著》學習筆記九格式化輸入/輸出2

3.2 scanf 函式 就如同 printf 函式用特定的格式顯示輸出一樣,scanf 函式也根據特定的格式讀取輸入。像 printf 函式的格式串一樣,scanf 函式的格式串也可以包含普通字元

演算法研究1python實現經典排序演算法並可視化分析複雜度

排序演算法在演算法界是一個怎麼樣的存在?就好像在學術界中數學的地位,說直接用好像用不上,可是不會做起事情來總會捉襟見肘,左支右絀。找工作的時候,有的面試官甚至會讓我們手寫排序演算法。既然排序演算法如此重要,就讓我們一起去夯實基礎,切切實實得掌握它吧。 前言

演算法最優化2線性規劃問題中的常見概念辨析可行解,最優解,基,基向量,非基向量,基變數,非基變數等等

線性規劃裡面有很多基本的概念容易弄混 已知標準型為: max Z=CX AX=b X≥0 可行解:滿足約束條件,AX=b,X≥0的解X稱為線性規劃問題的可行解。 最優解:使目標函式Z=CX達到最大值的可行解稱為最優解。 基,基向量,非基向量,基變數,非基變數 基本解(又叫做基解

基於大資料的推薦演算法研究1

孫遠帥. 基於大資料的推薦演算法研究[D]. 廈門大學, 2014. 讀的一篇論文的總結 總覽 基於專案層次結構的推薦演算法,並結合Hadoop技術實現矩陣分解演算法。 改進均衡相似度的餘弦距離和皮爾遜相關係數的計算公式,避免計算目標使用者與所有使

FCM演算法研究--近五年改進文獻彙總

近年來,FCM 演算法越來越受歡迎,被應用到各個領域範圍,針對FCM演算法的改進也越來越多。本文總結了近兩年來的演算法改進,如有改進演算法不全請自己查詢哦,論文太多啦。由於參考文獻均為英文論文,這裡就不翻譯了,畢竟俺不是歪果仁。 2014年 D-FIC

機器學習演算法小結3

將最近接觸的幾個機器學習演算法小結一下,順便理理自己的思路。 近年來在機器學習的研究中,對演算法的創新主要是在原有的基礎上,通過結合不同演算法的優點,得到一種更有效的演算法,如結合遺傳演算法的決策樹、

iOS 給測試人員測試手機APP的四種方法真機執行,打ipa包,testFlighe郵件,蒲公英打ipa包

APP上線前測試,無外乎 一:用資料線真機除錯(以前需要下載真機除錯證書) 二:打.ipa包給測試人員(上限100人)     2.1 打包APP的.ipa 包給測試人員之前,如果沒有新增裝置的UDID號, 先進入蘋果開發者中心(添加了直接跳到2.6)  2.2點

CamShift 目標跟蹤演算法研究

CamShift演算法:    CamShift演算法,即"Continuously Apative Mean-Shift"演算法,是一種運動跟蹤演算法。它主要通過視訊影象中運動物體的顏色資訊來達到跟蹤的目的。    我把這個演算法分解成三個部分,便於理解:    1)

Android中apk動態載入技術研究2android插件化及實現

name creat package path iss fontsize 調用 dex con 了解了android中類載入的前期知識點後,來看看android中DexClassLoader詳細的實現 詳細載入流程例如以下: 宿主程序會到文件系統比

kaggle入門項目Titanic存亡預測驗證與實現

tps 多參數 name 出了 運算 處理 defaults purpose sof 原kaggle比賽地址:https://www.kaggle.com/c/titanic 原kernel地址:A Data Science Framework: To Achieve 99

selenium2學習單元測試框架2

__init__ module asc 單獨 sci str mos ddt IT 1.4 Discover更多測試用例 discover(start_dir,pattern=‘test*.py‘,top_level_dir=None) 找到指定目錄下所有測試模塊,

實驗四shell編程2

AR shift ber AC info 作用 name source 幫助信息 1. shell 變量基本用法及常用符號使用 此部分要求寫出實現相應要求的 shell 命令,截圖顯示 (1)將主提示符改為用戶的主目錄名 (2)將字符串 DOS file c:&

第一行代碼以太坊2-使用Solidity語言開發和測試智能合約

之一 腳本語言 其他 括號 add row ans img 運行方式 智能合約是以太坊的核心之一,用戶可以利用智能合約實現更靈活的代幣以及其他DApp。不過在深入講解如何開發智能合約之前,需要先介紹一下以太坊中用於開發智能合約的Solidity語言,以及相關的開發和測試環境

Learning-Python【19】Python常用模組2—— os、sys、shutil

os模組:與作業系統相關的模組 import os # 獲取當前的工作目錄 print(os.getcwd()) # 切換工作目錄 os.chdir(r'E:\Python\test') print(os.getcwd()) # 當前目錄, 一個點 print(o