การจัดกลุ่มเชิงพื้นที่ตามความหนาแน่นของแอปพลิเคชันที่มีการจัดกลุ่มเสียง (DBSCAN) ใน R


9

คำถามนี้เริ่มต้นเป็น "การจัดกลุ่มข้อมูลเชิงพื้นที่ใน R " และตอนนี้ย้ายไปยังคำถาม DBSCAN

เนื่องจากการตอบคำถามแรกแนะนำให้ฉันค้นหาข้อมูลเกี่ยวกับ DBSCAN และอ่านเอกสารบางอย่างเกี่ยวกับ มีคำถามใหม่เกิดขึ้น

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

พารามิเตอร์อื่นคือจำนวนจุดต่ำสุดที่ควรสร้างเป็นคลัสเตอร์ มีวิธีการหาหมายเลขนั้นหรือไม่? น่าเสียดายที่ฉันไม่พบ

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

คำถามสุดท้ายคือความพยายามครั้งแรกของฉันกับ DBSCAN (ไม่มีคำตอบที่ถูกต้องสำหรับคำถามก่อนหน้า) ทำให้เกิดปัญหาหน่วยความจำ R บอกว่ามันไม่สามารถจัดสรรเวกเตอร์ได้ ฉันเริ่มต้นด้วยตารางที่เว้นระยะ 4 กม. ด้วย 779191 จุดที่สิ้นสุดในประมาณ 300,000 แถว x 3 คอลัมน์ (ละติจูดลองจิจูดและอุณหภูมิ) เมื่อลบ SST ที่ไม่ถูกต้องออก คำใบ้ใด ๆ เพื่อแก้ไขปัญหาหน่วยความจำนี้ มันขึ้นอยู่กับคอมพิวเตอร์ของฉันหรือใน DBSCAN เอง

ขอบคุณสำหรับความอดทนในการอ่านข้อความที่ยาวและน่าเบื่อและสำหรับความช่วยเหลือของคุณ


มีฟอรัมที่ทุ่มเทให้กับการวิเคราะห์เชิงพื้นที่ อาจพูดถึงโพสต์นี้ที่นั่น (อย่าลืมระบุว่าคุณโพสต์ข้อความไขว้) gis.stackexchange.com
Roman Luštrik

คำตอบ:


2

ฉันยังคงติดอยู่กับปัญหานี้ ฉันได้รับคำแนะนำจากรายชื่อผู้รับจดหมาย R (ขอบคุณ Christian Hennig) ที่ฉันแนบมาที่นี่:

คุณเคยพิจารณาฟังก์ชั่น dbscan ในไลบรารี่fpcหรือว่ามันเป็นอีกฟังก์ชั่นหนึ่ง? fpc::dbscan()ฟังก์ชั่นไม่ได้มี "ระยะทาง" พารามิเตอร์ แต่หลายตัวเลือกหนึ่งซึ่งอาจแก้ไขปัญหาความจำของคุณ (ดูเอกสารของ "ความทรงจำ" พารามิเตอร์)

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

เป็นจริงที่fpc::dbscan()ต้องมีการปรับค่าคงที่ที่ผู้ใช้มีให้ โชคไม่ดีที่ไม่มีกฎทั่วไปว่าจะทำอย่างไร มันจำเป็นต้องเข้าใจวิธีการและความหมายของค่าคงที่และวิธีการนี้แปลเป็นข้อกำหนดของใบสมัครของคุณ

คุณอาจลองตัวเลือกที่แตกต่างกันและทำการตรวจสอบคลัสเตอร์เพื่อดูว่าอะไรใช้งานได้ แต่ฉันไม่สามารถอธิบายสิ่งนี้ในแง่ทั่วไปได้อย่างง่ายดายผ่านทางอีเมล

ฉันพยายามใช้ข้อมูลของฉันแล้ว แต่ไม่ประสบความสำเร็จ:

"ใช่ฉันลอง dbscan จาก fpc แล้ว แต่ฉันยังติดอยู่กับปัญหาหน่วยความจำเกี่ยวกับคำตอบของคุณฉันไม่แน่ใจว่าควรดูพารามิเตอร์หน่วยความจำใดต่อไปนี้คือรหัสที่ฉันลองใช้กับพารามิเตอร์ dbscan บางทีคุณอาจจะ ดูว่ามีข้อผิดพลาดใด ๆ

> sstdat=read.csv("sst.dat",sep=";",header=F,col.names=c("lon","lat","sst"))
> library(fpc)
> sst1=subset(sstdat, sst<50)
> sst2=subset(sst1, lon>-6)
> sst2=subset(sst2, lon<40)
> sst2=subset(sst2, lat<46)
> dbscan(sst2$sst, 0.1, MinPts = 5, scale = FALSE, method = c("hybrid"), 
         seeds = FALSE, showplot = FALSE, countmode = NULL)
Error: no se puede ubicar un vector de tamaño  858.2 Mb
> head(sst2)
             lon   lat   sst
1257 35.18 24.98 26.78
1258 35.22 24.98 26.78
1259 35.27 24.98 26.78
1260 35.31 24.98 26.78
1261 35.35 24.98 26.78
1262 35.40 24.98 26.85

ในตัวอย่างนี้ฉันใช้เฉพาะdbscan()กับค่าอุณหภูมิไม่ใช่ lon / lat ดังนั้นepsพารามิเตอร์คือ 0.1 เนื่องจากเป็นชุดข้อมูลแบบ gridded จุดใดก็ตามล้อมรอบด้วยจุดข้อมูลแปดจุดดังนั้นฉันจึงคิดว่าอย่างน้อย 5 จุดโดยรอบควรอยู่ในระยะที่สามารถเข้าถึงได้ แต่ฉันไม่แน่ใจว่าฉันได้รับแนวทางที่ถูกต้องโดยพิจารณาจากอุณหภูมิเท่านั้นบางทีฉันอาจขาดข้อมูลเชิงพื้นที่ ฉันจะจัดการกับลองจิจูดและข้อมูลละติจูดได้อย่างไร

ขนาดของsst2คือ: 152243 แถว x 3 คอลัมน์ "

ฉันแบ่งปันข้อความอีเมลนี้ที่นี่ในกรณีที่คุณสามารถแบ่งปันแสงบน R และ DBSCAN ขอบคุณอีกครั้ง


เฮ้ที่คุณสามารถแก้ปัญหาได้หรือไม่ ฉันติดอยู่กับปัญหาที่คล้ายกัน คุณช่วยแบ่งปันความคิดของคุณได้ไหม
Kumar

เรียน @ kumar ฉันต้องกลับไปที่วิธีคลัสเตอร์ CLARA ฉันไม่สามารถใช้ DBSCAN ได้ฉันขอโทษที่ช่วยคุณไม่ได้
pacomet

2

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

สำหรับฟังก์ชันระยะทางนี่คือสิ่งที่คุณต้องการ "ความรู้เกี่ยวกับโดเมน" ของคุณ หากคุณมีการปรับใช้ DBSCAN ที่ยืดหยุ่นเพียงพอ (เป็นเรื่องง่ายที่จะนำไปใช้จริงดัชนีจะทำให้เร็วกว่าO(n2)มันยากกว่ามาก!) คุณควรจะสามารถวางในระยะทางที่กำหนด คุณสามารถสร้างฟังก์ชันระยะทางสองอย่างและค่า epsilon ได้: คะแนนจะต้องไม่เกิน10kม. ออกไปและความแตกต่างของอุณหภูมิจะต้องน้อยกว่า 1K.

ดูที่ "Generalized DBSCAN" สำหรับหลักการทั่วไปที่ DBSCAN ต้องการ: แนวคิดเกี่ยวกับ "เพื่อนบ้าน" และแนวคิดของ "ประเด็นหลัก" (หรือ "ความหนาแน่น")

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