หาเซนทรอยด์ของกลุ่มจุด


27

ในขณะที่ค้นหาเว็บคำตอบสำหรับการค้นหาเซนทรอยด์ของรูปหลายเหลี่ยมจะเกิดขึ้นค่อนข้างบ่อย สิ่งที่ฉันสนใจคือการหาเซนทรอยด์ของกลุ่มจุด ค่าเฉลี่ยถ่วงน้ำหนักทุกประเภท ฉันจะขอบคุณถ้ามีคนให้พอยน์เตอร์รหัสหลอก (หรือดีกว่าแพ็คเกจ R ที่แก้ปัญหานี้แล้ว) หรือลิงก์ว่าปัญหานี้สามารถแก้ไขได้อย่างไร

แก้ไข

การบรรจบกันได้ดำเนินการแล้ว (อีกครั้ง) iant ได้แนะนำวิธีในการหาค่าพิกัดโดยเฉลี่ยและใช้มันสำหรับเซนทรอยด์ ตรงนี้เป็นสิ่งที่ข้ามใจของฉันเมื่อฉันเห็นภาพขวาบนของหน้าเว็บนี้

นี่คือรหัส R ที่ใช้ง่ายในการวาดรูปต่อไปนี้ซึ่งแสดงให้เห็นถึงสิ่งนี้ (×คือ centroid):

xcor <- rchisq(10, 3, 2)
ycor <- runif(10, min = 1, max = 100)
mx <- mean(xcor)
my <- mean(ycor)

plot(xcor, ycor, pch = 1)
points(mx, my, pch = 3)

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

แก้ไข 2

cluster::pam()$medoidsส่งคืน medoid ของชุดคลัสเตอร์ นี่คือตัวอย่างที่ถูกขโมยไปอย่างไร้ยางอายจาก @Joris Meys:

library(cluster)
df <- data.frame(X = rnorm(100, 0), Y = rpois(100, 2))
plot(df$X, df$Y)
points(pam(df, 1)$medoids, pch = 16, col = "red")

1
มีเหตุผลที่ศูนย์เฉลี่ยหรือศูนย์กลางของระยะทางต่ำสุดของคะแนนจะไม่พอเพียง?
Andy W

1
@ Roman: กราฟิกไม่ถูกต้อง:คุณต้องใช้ค่าเฉลี่ยไม่ใช่ค่ามัธยฐาน สำหรับเมฆจุดเชิงพื้นที่ 2 มิติมีจุดศูนย์กลางของค่ามัธยฐาน แต่นี่ไม่ใช่หนึ่งในนั้น (เพราะขึ้นอยู่กับพิกัด): ดูstats.stackexchange.com/q/1927/919สำหรับการสนทนา
whuber

1
ฉันยังอยากจะแนะนำให้ตรวจสอบจากบทที่ 4 ของสมุด crimestat ที่icpsr.umich.edu/CrimeStat/files/CrimeStatChapter.4.pdf มันเป็นคำนำที่ค่อนข้างอ่อนโยนอธิบายและแสดงผลแบบกราฟิกว่าทำไมค่ามัธยฐานสำหรับมิติที่สูงกว่าไม่มีวิธีแก้ปัญหาที่ไม่ซ้ำกันและอธิบายมาตรการอื่น ๆ ของแนวโน้มกลางและความแปรปรวนของรูปแบบจุดเชิงพื้นที่
Andy W

นี่คือสิ่งที่น่าสนใจมากขึ้นเรื่อย ๆ ขอบคุณสำหรับคำตอบ ฉันกำลังดูเรื่องนี้
Roman Luštrik

2
"แนะนำวิธีในการหาค่าเฉลี่ยพิกัดและใช้มันสำหรับเซนทรอยด์" อันที่จริงแล้วคำจำกัดความของเซนทรอยด์ไม่ใช่สิ่งที่ทำให้การประมาณค่าดีขึ้น
โคลิน K

คำตอบ:


43

แค่เฉลี่ยพิกัด X และ Y (คูณด้วยน้ำหนักถ้าคุณต้องการ) และมีเซนทรอยด์ของคุณ


4
+1 สุดยอดทางออก มันขยายไปถึง centroids บน spheroid ด้วยเช่นกัน (ซึ่งเป็นสิ่งสำคัญสำหรับการหลีกเลี่ยงการบิดเบือนที่เกี่ยวข้องกับการฉายภาพเมื่อมีการกระจายจุดบนส่วนใหญ่ของโลก): แปลงแรก (lat, lon) เป็น 3D (x, y, z) ( พิกัดทางภูมิศาสตร์โดยเฉลี่ยแล้วแปลงผลลัพธ์กลับเป็น (lat, lon) (ไม่สนใจความจริงที่หลีกเลี่ยงไม่ได้ว่าค่าเฉลี่ย 3D จะลึกลงไปใต้พื้นผิว)
whuber

ฉันได้อัปเดตคำถามเพื่อสะท้อนคำตอบของคุณแล้ว
Roman Luštrik

1

คุณสามารถใช้ฟังก์ชัน centroid จากแพ็คเกจ geosphere

https://www.rdocumentation.org/packages/geosphere/versions/1.5-5/topics/centroid


ยินดีต้อนรับสู่ GIS StackExchange และขอขอบคุณสำหรับการส่งคำตอบ โปรดสละเวลาสักครู่เพื่อทบทวนทัวร์เพื่อเรียนรู้เกี่ยวกับรูปแบบคำถาม & คำตอบที่เรามุ่งเน้น โปรดแก้ไขคำตอบของคุณเพื่อให้มีรายละเอียดมากขึ้นเนื่องจากเรามักจะมองหาคำตอบที่ยาวกว่า (ไม่ใช่ 1-2 ประโยค) เพื่อช่วยผู้โพสต์ดั้งเดิมหรือผู้ค้นหาในอนาคต การปรับเปลี่ยนอย่างใดอย่างหนึ่งที่คุณสามารถทำได้คือการรวมเหตุผลที่คุณคิดว่าเครื่องมือนี้จะเป็นประโยชน์หรือตัวอย่างโค้ด / ภาพหน้าจอ
smiller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.