亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用微笑庫的 CLARANS 方法使用自定義距離矩陣對我的數據進行聚類

如何使用微笑庫的 CLARANS 方法使用自定義距離矩陣對我的數據進行聚類

幕布斯6054654 2022-12-21 10:02:55
我想使用自定義距離矩陣而不是內置算法(即歐幾里德)對我的數據進行聚類。而且似乎沒有明確的方法來做到這一點。我試圖將我的一些代碼添加到 Smile 項目的演示中。還嘗試通過在我的項目中進行測試來做到這一點,這是一段代碼:        StringBuilder sb = new StringBuilder();        String line;        while ((line = vrpJsonFromFile.readLine()) != null) {            sb.append(line).append("\n");        }        JSONArray jsonArray = new JSONObject(sb.toString()).getJSONArray("services");        Double[][] data = new Double[jsonArray.length()][2];        for (int i = 0; i < jsonArray.length(); i++) {            JSONObject address = jsonArray.getJSONObject(i).getJSONObject("address");            data[i][0] = Double.parseDouble(address.getString("lon"));            data[i][1] = Double.parseDouble(address.getString("lat"));        }        // here        Distance<Double[]> distance1 = (x, y) -> Math.sqrt(Math.pow(y[1]-x[1],2) + Math.pow(y[0]-x[0], 2));        CLARANS<Double[]> clarans = new CLARANS<>(data, distance1, 3);        System.out.println(clarans);此代碼使用 Euclidean 算法創建了一個 CLARANS 聚類(請參閱 //here 注釋下方的行)。我應該用我自己的距離矩陣來改變它,我希望在 Smile 中有一種方法可以做到這一點。
查看完整描述

1 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

你可能會使用

Distance<Integer> d = (i,j) -> matrix[i][j];

聚類對象編號,而不是它們的向量。

但是 ELKI 可能值得一看,它具有距離矩陣的預定義類,并使用對象集的優化表示,而不是Integer像上面的 lambda 那樣必須使用昂貴的盒裝。因為ij是盒裝整數,這需要為每個距離計算額外的內存間接(和緩存未命中),這會大大降低性能。它還具有更好的 FastCLARANS 算法,以及據稱快 O(k) 倍的 FastPAM。


查看完整回答
反對 回復 2022-12-21
  • 1 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號