ฉันทำวิจัยแล้ว ฉันรับบางจุดในระบบพิกัดสองระบบที่ไม่ใช่เมตริก (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 กลุ่มสำหรับข้อมูลของคุณโดยไม่ต้องกังวลเกี่ยวกับเกณฑ์ ฯลฯ