聚類方法:DBSCAN演算法研究(2)--matlab程式碼實現
DBSCAN聚類演算法三部分:
1、 DBSCAN原理、流程、引數設定、優缺點以及演算法;
2、 matlab程式碼實現;
3、 C++程式碼實現及與matlab例項結果比較。
摘要:介紹DBSCAN原理、流程、引數設定、優缺點以及演算法的matlab和C++程式碼例項。
matlab程式碼測試實驗(程式碼從matlab官方網站[8]下載):
下載的程式碼主要包括一個測試資料集合mydata.mat,main.m,DBSCAN.m和PlotClusterinResult.m共4個檔案,我們在測試實驗實驗中做了兩個方面更改:1)更換了另外一個測試資料,測試資料來源於
所有測試程式碼在下文給出,包括DBSCAN.m和PlotClusterinResult.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]也給出一個最原始的DBSCAN的matlab實現,只能處理小規模的資料。
參考資料:
[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語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記九:格式化輸入/輸出(2)
3.2 scanf 函式 就如同 printf 函式用特定的格式顯示輸出一樣,scanf 函式也根據特定的格式讀取輸入。像 printf 函式的格式串一樣,scanf 函式的格式串也可以包含普通字元
演算法研究(1)python實現經典排序演算法並可視化分析複雜度
排序演算法在演算法界是一個怎麼樣的存在?就好像在學術界中數學的地位,說直接用好像用不上,可是不會做起事情來總會捉襟見肘,左支右絀。找工作的時候,有的面試官甚至會讓我們手寫排序演算法。既然排序演算法如此重要,就讓我們一起去夯實基礎,切切實實得掌握它吧。 前言
演算法最優化(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動態載入技術研究(2)android插件化及實現
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