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

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

DBSCAN 及其索引是否應該具有相同的距離函數

DBSCAN 及其索引是否應該具有相同的距離函數

千巷貓影 2023-08-23 11:44:31
DBSCAN及其索引是否要求具有相同的距離函數?如果不是,什么情況下需要使用不同的距離函數?Scala 代碼如何創建 DBSCAN 和索引:import de.lmu.ifi.dbs.elki.algorithm.clustering.DBSCANimport de.lmu.ifi.dbs.elki.algorithm.clustering.gdbscan.parallel.ParallelGeneralizedDBSCANimport de.lmu.ifi.dbs.elki.data.model.Modelimport de.lmu.ifi.dbs.elki.data.{Clustering, DoubleVector, NumberVector}import de.lmu.ifi.dbs.elki.database.{Database, StaticArrayDatabase}import de.lmu.ifi.dbs.elki.datasource.ArrayAdapterDatabaseConnectionimport de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctionimport de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanDistanceFunctionimport de.lmu.ifi.dbs.elki.index.tree.metrical.covertree.SimplifiedCoverTreedef createDatabase(data: Array[Array[Double]], distanceFunction: NumberVectorDistanceFunction[NumberVector]): Database = {  val indexFactory = new SimplifiedCoverTree.Factory[NumberVector](distanceFunction, 1.3, 20)  // Create a database  val db = new StaticArrayDatabase(new ArrayAdapterDatabaseConnection(data), java.util.Arrays.asList(indexFactory))  // Load the data into the database  db.initialize()  db}def dbscanClustering(data: Array[Array[Double]], distanceFunction: NumberVectorDistanceFunction[NumberVector]): Unit = {  // Use the same `distanceFunction` for the database and DBSCAN <- is it required??  val db = createDatabase(data, distanceFunction)  val dbscan = new DBSCAN[DoubleVector](distanceFunction, 0.01, 20)  val result: Clustering[Model] = dbscan.run(db)  println(s"Number of clusters: ${result.getAllClusters.size()}")  result.getAllClusters.asScala.zipWithIndex.foreach { case (cluster, idx) =>    println(s"# $idx: ${cluster.getNameAutomatic}")    println(s"Size: ${cluster.size()}")    println(s"Model: ${cluster.getModel}")}val inputData: Array[Array[Double]] = ???dbscanClustering(inputData, SquaredEuclideanDistanceFunction)
查看完整描述

1 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

如果索引使用相同的距離函數,則只能用于加速度。某些索引可以支持多個(但不是任意)距離,例如 R* 樹可以支持所有空間距離函數(盡管取得了不同的成功)。

顯然,如果你建立一個索引來加速余弦距離,但你要求歐幾里德最近鄰,則該索引不能也不會被使用。

你不需要使用索引,但如果沒有,你的運行時間將是 O(n2);使用索引,它可以更快(取決于參數、維度等 - 在最壞的情況下,索引是開銷)。


查看完整回答
反對 回復 2023-08-23
  • 1 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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