D ensity- b ased s patial c ความแวววาวของ pplications ที่ ไม่มี oise
DBSCAN เป็นอัลกอริทึมการจัดกลุ่ม ให้ชุดค่าต่างๆ แก่มัน แล้วอัลกอริธึมจะจัดมันเป็นกลุ่มของค่าใกล้เคียง
สำหรับพวกเราหลายๆ คน ถ้าเราคุ้นเคยกับอัลกอริธึมการจัดกลุ่มเลย เราก็รู้เกี่ยวกับการจัดกลุ่ม แบบเคมีน แต่ความท้าทายอย่างหนึ่งของ เคมี นคือคุณต้องระบุจำนวนคลัสเตอร์ (" k ") เพื่อใช้งาน โดยมาก เราจะไม่ทราบว่าค่า k ที่สมเหตุสมผลคือ ค่านิรนัย (อันที่จริงนั่นมักเป็นสิ่งที่เราอยากรู้ตั้งแต่แรก!)
ข้อดีของ DBSCAN ก็คือคุณไม่จำเป็นต้องระบุคลัสเตอร์จำนวนหนึ่งเพื่อใช้งาน สิ่งที่คุณต้องมีคือฟังก์ชันในการคำนวณระยะห่างระหว่างค่าและคำแนะนำบางประการเกี่ยวกับระยะทางที่ถือว่าเป็น "ปิด" DBSCAN ยังให้ผลลัพธ์ที่สมเหตุสมผลมากกว่าค่าเฉลี่ย k ในการแจกแจงแบบต่างๆ
import DBSCAN
import simd
let input : [ SIMD3 < Double > ] = [ [ 0 , 10 , 20 ] ,
[ 0 , 11 , 21 ] ,
[ 0 , 12 , 20 ] ,
[ 20 , 33 , 59 ] ,
[ 21 , 32 , 56 ] ,
[ 59 , 77 , 101 ] ,
[ 58 , 79 , 100 ] ,
[ 58 , 76 , 102 ] ,
[ 300 , 70 , 20 ] ,
[ 500 , 300 , 202 ] ,
[ 500 , 302 , 204 ] ]
let dbscan = DBSCAN ( input )
#if swift(>=5.2)
let ( clusters , outliers ) = dbscan ( epsilon : 10 ,
minimumNumberOfPoints : 1 ,
distanceFunction : simd . distance )
#else // Swift <5.2 requires explicit `callAsFunction` method name
let ( clusters , outliers ) = dbscan . callAsFunction ( epsilon : 10 ,
minimumNumberOfPoints : 1 ,
distanceFunction : simd . distance )
#endif
print ( clusters )
// [ [0, 10, 20], [0, 11, 21], [0, 12, 20] ]
// [ [20, 33, 59], [21, 32, 56] ],
// [ [58, 79, 100], [58, 76, 102], [59, 77, 101] ],
// [ [500, 300, 202], [500, 302, 204] ],
print ( outliers )
// [ [ 300, 70, 20 ] ]
เพิ่มแพ็คเกจ DBSCAN ให้กับการอ้างอิงเป้าหมายของคุณใน Package.swift
:
import PackageDescription
let package = Package (
name : " YourProject " ,
dependencies : [
. package (
url : " https://github.com/NSHipster/DBSCAN " ,
from : " 0.0.1 "
) ,
]
)
จากนั้นรันคำสั่ง swift build
เพื่อสร้างโปรเจ็กต์ของคุณ
เอ็มไอที
แมตต์ (@mattt)