أكثر

قم بتحويل Eps إلى مسافة جغرافية باستخدام DBSCAN

قم بتحويل Eps إلى مسافة جغرافية باستخدام DBSCAN


أنا أستخدم ملفدبسكانالكتلة (الحزمةfpc) في R للعثور على مجموعات على مجموعة من إحداثيات خطوط الطول / العرض. أرغب في العثور على مسافة eps التي تتوافق مع مسافة جغرافية ذات معنى (على سبيل المثال ، ميل أو كيلومتر)

تبدو بياناتي كما يلي:

خط الطول 1 -87.53163 41.68640 2 -87.59986 41.67341 3 -87.80099 41.95469 4 -87.82481 41.97409 5 -87.67671 41.68832 6 -87.67751 41.73192

من خلال التجربة والخطأ ، حصلت على مجموعة من المجموعات التي تبدو معقولة. في الخريطة المرفقة.

dbscan.clust1 <- dbscan (النقاط ، eps = .025 ، MinPts = 20)

ما أرغب في القيام به هو إيجاد مسافة eps التي تتوافق مع قياس ذي مغزى (أي 1 ميل = 025 eps)


نسخة ELKI من DBSCAN لديها دعم كامل للمسافات الجيوديسية.

فقط اضبط وظيفة المسافة علىوظيفة LatLngDistanceأوLngLatDistanceFunction(اعتمادًا على تنسيق البيانات) ، وحدد نصف قطر epsilon بالأمتار.

يحتوي ELKI أيضًا على تسريع مؤشر R * -tree ، مما يجعل هذا النوع من التجميع سريعًا جدًا. قم بقياسها مقابل R ، وسترى أن R تخسر بعدة أوامر من حيث الحجم.

يقع Rfpc :: dbscanإصدار DBSCAN هو سيء للغاية. لا تستخدمه.

إذا كنت تصر على حل R (ولا تهتم بالأداء) ،
انظر وثائقfpc :: dbscan:

الأسلوب: يتعامل "dist" مع البيانات على أنها مصفوفة مسافة (سريعة نسبيًا ولكنها باهظة الثمن) ، وتعامل "raw" البيانات على أنها بيانات أولية وتتجنب حساب مصفوفة المسافة (تحفظ الذاكرة ولكنها قد تكون بطيئة) ، وتتوقع "مختلطة" أيضًا بيانات أولية ، ولكن يحسب مصفوفات المسافة الجزئية (سريع جدًا بمتطلبات ذاكرة متوسطة).

لا اعتقدfpc :: dbscanيسمح لك بتحديد وظيفة المسافة ، ولكن يمكنك حساب مصفوفة المسافة مسبقًا واستخدامها. هذا له عيب في الحاجة إلى ذاكرة O (n²) ، لذلك لن يتسع لمجموعات البيانات الكبيرة ، لكنه سيعمل مع مجموعات البيانات الصغيرة فقط على أي حال.