อัลกอริทึมเบิร์ชไม่ได้จัดกลุ่มตามที่คาดไว้


10

ฉันใช้อัลกอริธึมเบิร์ชจากแพคเกจ Python แบบเรียนรู้ scipy สำหรับการจัดกลุ่มชุดของจุดในเมืองเล็ก ๆ แห่งหนึ่งในจำนวน 10 ชุด

ฉันใช้รหัสต่อไปนี้:

no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)

ในความคิดของฉันฉันมักจะจบลงด้วยชุด 10 คะแนน ในกรณีของฉันตอนนี้ฉันมี 650 คะแนนสำหรับการรวมกลุ่มและ n_clusters คือ 65

แต่ปัญหาของฉันคือการที่มีขีด จำกัด ต่ำเกินไปฉันจะจบลงด้วย 1 ที่อยู่ต่อหนึ่งคลัสเตอร์เพียงแค่ขีด จำกัด ที่ใหญ่กว่าเล็ก ๆ - 40 ที่อยู่ต่อหนึ่งคลัสเตอร์

ฉันทำอะไรผิดที่นี่


อาจเป็น CRS ปัญหา? หากคุณลองใช้องศา (เช่น WGS 84) ให้ลองใช้เมตริก มีความแตกต่างใหญ่ในพิกัดและทั้งสองอาจต้องการค่าเกณฑ์ที่แตกต่างกัน นอกจากนี้คุณสามารถลองกับห้องสมุดหลามที่แตกต่างกันฉันขอแนะนำให้ใช้ scikit- เรียนรู้
dmh126

.. อีกครั้งฉันจัดกลุ่มตามพิกัด GPS ตามที่ได้รับจาก Google API ฉันคิดว่าพวกเขามีรูปแบบมาตรฐาน ไม่มี?
kaboom

อาจจะวางพิกัดเหล่านี้ไว้ที่นี่ฉันจะลองคิดดู
dmh126

dmh126 อาจถูกต้อง: Goolge API ทำงานกับ WGS84 นี่คือระบบ Geodetic (โลก) ไม่ใช่เมตริก
André

คำตอบ:


10

ฉันทำวิจัยแล้ว ฉันรับบางจุดในระบบพิกัดสองระบบที่ไม่ใช่เมตริก (WGS84) และเมตริก (โปแลนด์ 1992)

ฉันใช้รหัสนี้:

from scipy import loadtxt
from sklearn.cluster import Birch
import matplotlib.pyplot as plt

data84 = loadtxt("/home/damian/workspace/84.csv", delimiter=",")
data90 = loadtxt("/home/damian/workspace/90.csv", delimiter=",")

brc = Birch(threshold=0.5)

จากนั้นฉันพอดีกับโมเดลของเราด้วยข้อมูลเมตริก:

brc.fit(data90)

และพล็อตผลลัพธ์ที่จุดตัดเป็นจุดและวงกลมของฉันคือกลุ่มย่อยของฉัน:

c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()

นี่คือสิ่งที่ฉันได้รับ: ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถเห็นได้ว่าค่าเกณฑ์นั้นน้อยเกินไปเพราะพบ subcluster ในแต่ละจุด

คำจำกัดความของเกณฑ์:

รัศมีของ subcluster ที่ได้จากการรวมตัวอย่างใหม่และ subcluster ที่ใกล้เคียงที่สุดควรน้อยกว่า threshold มิฉะนั้นจะเริ่ม subcluster ใหม่

ดังนั้นในกรณีนี้เราต้องเพิ่มค่านี้

สำหรับ:

brc = Birch(threshold=5000)

มันดีกว่ามาก:

ป้อนคำอธิบายรูปภาพที่นี่

และคะแนน WGS84 สำหรับเกณฑ์ 0.5:

brc = Birch(threshold=0.5)
brc.fit(data84)

ป้อนคำอธิบายรูปภาพที่นี่

เพียงหนึ่งกลุ่มย่อยไม่ดี แต่ในกรณีนี้เราควรลดค่า threshold ดังนั้นสำหรับ 0.05:

brc = Birch(threshold=0.05)
brc.fit(data84)

ป้อนคำอธิบายรูปภาพที่นี่

เราได้ผลลัพธ์ที่ดี

สรุป:

เรื่อง CRS คุณต้องค้นหาค่าเกณฑ์ที่เหมาะสมขึ้นอยู่กับระบบพิกัดข้อมูลของคุณและระยะห่างระหว่างจุด หากคุณมี CRS ที่ไม่ใช่เมตริกเกณฑ์ควรมีขนาดค่อนข้างเล็กกว่ากับระบบเมตริก คุณต้องทราบความแตกต่างระหว่างเมตรและองศาถ้าระยะห่างระหว่างสองจุดเท่ากับ 10000m มันจะน้อยกว่า 1 องศาใน WGS84 ตรวจสอบ google เพื่อค่าที่แม่นยำยิ่งขึ้น

นอกจากนี้ยังมีคะแนนมากกว่าค่า n_clusters มันก็โอเคไม่มีกลุ่มเซนทรอยด์ แต่เป็นกลุ่มย่อย หากคุณพยายามคาดเดาบางสิ่งหรือพิมพ์ป้ายกำกับมันจะจำแนกจุดของคุณเป็นหนึ่งในพื้นที่ n_clusters (หรือจุดพิมพ์ที่จำแนกเป็น 0,1,2, ... , n_clusters ฉลาก)

หากคุณไม่ต้องการลองใช้พารามิเตอร์อื่นคุณสามารถใช้อัลกอริทึมอื่นได้เสมอ อัลกอริทึมที่ง่ายและใช้กันทั่วไปสำหรับการจัดกลุ่มเป็นอัลกอริทึม K-mean

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

มันควรหา n กลุ่มสำหรับข้อมูลของคุณโดยไม่ต้องกังวลเกี่ยวกับเกณฑ์ ฯลฯ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.