在matlab中,如何生成兩個隨機點集羣,如下圖所示。你能告訴我腳本/代碼嗎?如何在Matlab中生成這個形狀?
回答
如果你想產生這樣的數據點,你將需要讓他們的概率分佈能夠產生點。
爲了您的觀點,我沒有真正的分佈,所以我只能給出一個近似值。從你的圖中我可以看到,兩者都大致位於一個圓上,具有隨機半徑和角度的有限跨度。我假設這些角度和半徑均勻分佈在一定範圍內,這似乎是一個非常好的起點。
因此,在極座標(即角度和半徑)而不是笛卡爾座標(即水平和垂直)中生成隨機數據並轉換它們以允許繪圖也是有意義的。
C1 = [0 0]; % center of the circle
C2 = [-5 7.5];
R1 = [8 10]; % range of radii
R2 = [8 10];
A1 = [1 3]*pi/2; % [rad] range of allowed angles
A2 = [-1 1]*pi/2;
nPoints = 500;
urand = @(nPoints,limits)(limits(1) + rand(nPoints,1)*diff(limits));
randomCircle = @(n,r,a)(pol2cart(urand(n,a),urand(n,r)));
[P1x,P1y] = randomCircle(nPoints,R1,A1);
P1x = P1x + C1(1);
P1y = P1y + C1(2);
[P2x,P2y] = randomCircle(nPoints,R2,A2);
P2x = P2x + C2(1);
P2y = P2y + C2(2);
figure
plot(P1x,P1y,'or'); hold on;
plot(P2x,P2y,'sb'); hold on;
axis square
這產生了:
這種方法與您可以輕鬆地變換,當你可以很容易地描述點的可能位置分佈相對而言尚能當您處理。如果不能,還有其他methods,如逆變換採樣方法,它提供算法來生成數據,而不是像我這樣做的手動變量轉換。
K-手段是不會給你想要的東西。
對於K均值,向量根據它們最近的聚類中心進行分類。我只能想到兩種方法可以得到圖中所示的非凸分配:
- 您的輸入數據實際上是更高維的,而您的示例圖像只是一個2-d投影。
- 您在整個維度中使用具有不同比例的距離度量。
爲了實現自己的目標:
- 使用非線性聚類算法。
- 對輸入數據應用非線性變換。 (可能不可行)。
您可以在非線性聚類算法here上找到列表。具體而言,請查看MST集羣頁面上的this reference。您的確切形狀出現在PDF的第四頁上,並與K-Means發生的情況進行比較。
對於現有的MATLAB代碼,您可以試試這個Kernel K-Means實現。另外,請查看Clustering Toolbox。
這是我從其他地方獲得的圖,所以我沒有原始的Matlab代碼來生成它。我知道K-means會失敗,所以我想嘗試單鏈接和完整鏈接,看看哪個更好。但在任何聚類之前,第一步就是生成這些數據。那麼如何在Matlab中做到這一點?所有的數據都是2D的。 –
假設您確實想對現有數據執行羣集操作,而不是生成數據本身。既然你有一些數據的陰謀,你已經知道如何做到這一點似乎是合乎邏輯的!如果我在這個假設中錯了,那麼你應該在未來更仔細地提出你的問題。
人類的大腦很擅長看到像這樣的事物,在計算機上編寫代碼通常需要一些認真的努力。如前所述,傳統的聚類工具如k-means會失敗。幸運的是,圖像處理工具箱爲已經寫好的這些用途提供了很好的工具。我可能會建議將圖轉換成圖像,使用填充點來繪製點。確保點的大小足以在羣集內互相接觸,並有一些重疊。然後根據需要使用擴張/腐蝕工具,以確保填充了任何小裂縫,但不要過於致使團簇合並。最後,使用區域分割工具挑選出簇。完成後,從圖像中的像素單位轉換回空間單位,並完成了您的任務。
對於圖像處理方法的工作,與集羣內的粗糙度相比,您需要足夠的集羣間隔。但是,對於任何成功的方法來說,這似乎都很明顯
這是我從其他地方獲得的圖形,所以我沒有原始的Matlab代碼來生成它。我知道K-means會失敗,所以我想嘗試單鏈接和完整鏈接,看看哪個更好。但在任何聚類之前,第一步就是生成這些數據。那麼如何在Matlab中做到這一點?謝謝。 –
- 1. 如何生成在MATLAB這個矩陣
- 2. 如何從Matlab中的標量數據生成這個特定的3D圖形?
- 3. 在Matlab中生成三角形分佈
- 4. 如何在javascript中形成這個xml?
- 5. 如何生成在MATLAB
- 6. 如何在java中生成這個json?
- 7. 如何形成這個UI
- 8. 如何在Matlab中生成這種類型的圖?
- 9. 如何在MATLAB中生成ANFIS輸出?
- 10. 隨機生成一個形狀
- 11. 生成形狀的算法
- 12. CSS生成的形狀
- 13. 用Matlab生物細胞形狀檢測
- 14. 如何讓這個形狀爲標題?
- 15. 如何用css製作這個形狀?
- 16. 如何繪製這個CSS3形狀?
- 17. 如何形成在Matlab上的一個矩形網格
- 18. 生成在MATLAB
- 19. 生成在MATLAB
- 20. 如何生成HTML這個在玉
- 21. 如何在TypeScript中描述這個對象的形狀?
- 22. 如何在qt中生成條形碼?
- 23. 如何在codeigniter中生成圖形條
- 24. 如何在php中生成條形碼
- 25. 如何在JFrame中生成圖形行?
- 26. AS3如何在所有物體上形成一個形狀
- 27. 在Matlab中生成概率
- 28. 在MATLAB中生成圖像
- 29. 如何在matlab中集成這個函數
- 30. 如何在Matlab中正確編寫這個集成?
你想要生成點,還是要對它們進行聚類? – Oli
k-means根據定義將無法對此進行聚類,因爲沒有voronoi分離。嘗試DBSCAN或OPTICS。 –