matlab 練手專案,DBSCAN密度聚類,關於DBSCAN的MATLAB實現的一個案例

語言: CN / TW / HK

緒論

剛剛完成了一個關於DBSCAN的作業,由於剛開始學習MATLAB的使用便用它完成了一個練手任務,有一點想法記錄下來。以便於後來重新學習這個方法和記錄一些函式,同時也希望能給同學著一點思路。有問題也請留言,會不斷改正。
參考部落格指路:看了不少,連結挺多,有些忘了,歡迎指出改正
推薦一個基礎知識點整理的比較好的博主
萬勇’s Blog
http://blog.csdn.net/qiu1440528444/article/details/80763420?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160601820019195264744375%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160601820019195264744375&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-80763420.first_rank_ecpm_v3_pc_rank_v2&utm_term=matlab+%E5%AE%9E%E7%8E%B0DBSCAN&spm=1018.2118.3001.4449



任務目標

1.生成一個雙月型資料集;
2.使用KNN求出E-PS,在本實驗中預先設定了Min-point =4;
3,利用DBSCAN分類,展示分類結果
4,順便賺點幣下載別人資料(手動狗頭)


實驗過程

1.生成雙月型資料集
1.1思想
設計了一個半圓環,在matlab可以通過rand()函式在這個範圍內生成隨機數,
R是半徑 W是圓環厚度,R+W是大圓環半徑  R-W為小圓環半徑
程式碼如下:



```tmp=[2*(r+w2)*(rand(N1,1)-0.5) (r+w2)*rand(N1,1)];   
     tmp(:,3)=sqrt(tmp(:,1).*tmp(:,1)+tmp(:,2).*tmp(:,2)); %求到原點距離
```bash

通過映象和位移獲得第二個半圓,N(生成點是可以自己定義)
完整程式碼資源指路:
(想下載資源沒積分,救救孩子吧,等我夠用就把下載需求就調最低)
http://download.csdn.net/download/Enjoy324/13137793
2求EPS
在本次實驗中,由上文生成了一個200個點的雙月型資料集
在這裡插入圖片描述





2.1如何求EPS
通過呼叫k近鄰函式將距離最近的前五個儲存在一個數組中,

[IDX,Dist]=knnsearch(A(1:numData,:),A(1,:),'k',5);

因為Dist包含到自己本身的距離,所以想用第四近鄰點是【1.5】
將該點
儲存在新的陣列中
Kdist(1)=Dist(1,5);`


重複這個過程得到一個200*1的陣列
排序後,將其作為縱座標,,將點作為橫座標畫圖找轉折點來確定Eps
畫圖如下:在這裡插入圖片描述
該部分完整程式碼指路:
http://download.csdn.net/download/Enjoy324/13137793



3.如何利用DBSCAN分類
3.1(有點累了,休息休息,再補充,希望有人看)