วิธีลดขนาดใน R


28

ฉันมีเมทริกซ์โดยที่ (i, j) บอกฉันกี่ครั้งที่ฉันดูเพจ j มีบุคคล 27K และหน้า 95K ฉันต้องการ "มิติ" หรือ "แง่มุม" จำนวนหนึ่งในพื้นที่ของหน้าเว็บซึ่งจะสอดคล้องกับชุดของหน้าเว็บที่มักจะดูด้วยกัน เป้าหมายสูงสุดของฉันคือเพื่อให้สามารถคำนวณความถี่ที่แต่ละบุคคลที่ฉันได้ดูหน้าเว็บที่อยู่ในส่วนข้อมูล 1 ส่วนข้อมูล 2 และอื่น ๆ

ฉันได้อ่านเอกสาร R เกี่ยวกับการวิเคราะห์องค์ประกอบหลักและการสลายตัวของค่าเดียวและดำเนินการคำสั่งเหล่านี้แล้ว แต่ฉันไม่แน่ใจว่าจะดำเนินการอย่างไร

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

ขอบคุณมากสำหรับความเข้าใจใด ๆ ~ l

คำตอบ:


10

ให้ถือว่า mat_pages [] มีหน้าต่างๆในคอลัมน์ (ซึ่งคุณต้องการจัดกลุ่ม) และบุคคลในแถว คุณสามารถทำคลัสเตอร์หน้าตามข้อมูลแต่ละตัวใน Rby โดยใช้คำสั่งต่อไปนี้:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

เมทริกการโหลดคือเมทริกซ์ของ eigenvector ของการสลายตัวของ SVD ของข้อมูล พวกเขาให้น้ำหนักสัมพัทธ์ของแต่ละหน้าในการคำนวณคะแนน การโหลดที่มีค่าสัมบูรณ์ที่มากกว่าจะมีอิทธิพลมากกว่าในการกำหนดคะแนนขององค์ประกอบหลักการที่สอดคล้อง

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

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


หลังจากคุณได้คะแนนแล้วจะทำอย่างไร?

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

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

หวังว่านี่จะช่วยให้คุณเห็นภาพว่าข้อมูลถูกจัดกลุ่มอย่างไร

คำเตือน:นี่ไม่ใช่สิ่งที่ฉันอยากจะแนะนำ


คำแนะนำของฉัน:

ปัญหาเช่นนี้เกิดขึ้นบ่อยครั้งในฟังก์ชั่นในหน้ากรณีของคุณสอดคล้องกับยีนและบุคคลที่สอดคล้องกับผู้ป่วย (โดยทั่วไปบุคคลที่มีความหมายเช่นเดียวกับในฟังก์ชั่น)

คุณต้องการจัดกลุ่มเพจตามข้อมูล

คุณสามารถใช้แพ็คเกจการทำคลัสเตอร์จำนวนมากใน R และได้รับคำตอบในคำตอบอื่น ๆ ปัญหาพื้นฐานกับแพคเกจก็เหมือน hclust คือวิธีการกำหนดจำนวนของกลุ่ม คนโปรดของฉันคือ:

  • pvclust (ให้คุณเป็นกลุ่มและยังให้ค่า p สำหรับแต่ละคลัสเตอร์ด้วยการใช้ p-value คุณสามารถกำหนดกลุ่มที่มีนัยสำคัญทางสถิติปัญหา : ต้องใช้พลังการคำนวณจำนวนมากและฉันไม่แน่ใจว่ามันจะทำงานกับข้อมูลของคุณหรือไม่ ขนาด)
  • hopach (ให้จำนวนคุณโดยประมาณกับกลุ่มและกลุ่ม)
  • มีแพ็คเกจอื่น ๆ ที่มีอยู่ใน Bioconductor โปรดตรวจสอบในมุมมองงาน

คุณยังสามารถใช้ algos จัดกลุ่มได้เช่น k-mean เป็นต้นฉันแน่ใจว่าฉันเห็นเธรดในฟอรัมนี้เกี่ยวกับการทำคลัสเตอร์ คำตอบนั้นละเอียดมาก Tal Galili ถูกถามว่าฉันจำได้ถูกต้องหรือไม่


@suncoolsu: ขอบคุณมาก! ฉันเพิ่งทำตามคำแนะนำของคุณและเรียกใช้ prcomp ฉันยังเก็บเมทริกซ์การโหลดที่ผลิต แต่ฉันจะใช้เมทริกซ์นี้เพื่อจัดกลุ่มหน้าต่างๆเข้าด้วยกันได้อย่างไร
laramichaels

สวัสดีลารามิชาเอลกรุณาหาคำตอบของฉันด้านล่าง
suncoolsu

@suncoolsu: ฉันกำลังจัดการกับปัญหาที่คล้ายกัน แต่ฉันต้องการ "จัดกลุ่ม" บุคคลที่มี "พลศาสตร์" ที่เหมือนกัน (อันที่จริงฉันมีจำนวนครั้งในแต่ละภูมิภาคและฉันต้องการสร้างแบบจำลอง) ฉันคิดที่จะใช้แพมกับระยะทางสหสัมพันธ์ (1-rho) นี่เป็นวิธีที่แนะนำหรือไม่ คุณช่วยแนะนำเส้นทางสำรวจให้หน่อยได้ไหม?
รองแก้ว

@Musa .. คุณชัดเจนขึ้นไหม ฉันไม่คิดว่าฉันเข้าใจ "พลวัต" ที่คุณกล่าวถึง pamแน่นอนก็โอเคสำหรับการจัดกลุ่ม แต่คุณสามารถลองใช้แพ็คเกจ R pvclust และ hopach ตามที่ฉันพูดถึง นอกจากนี้ SOM (แผนที่ที่จัดระเบียบตัวเอง) ยังเป็นวิธีที่แตกต่างกันในการดูการจัดกลุ่ม โปรดดูหนังสือ Ripley and Venable (2002) - MASS สำหรับรายละเอียดเพิ่มเติม หนังสือนำเสนอการรักษาอย่างละเอียดของการรวมกลุ่ม
suncoolsu

@suncoolsu: ขออภัยสำหรับสูตรที่ไม่ดี! ฉันมี 200 ครั้งที่ฉันต้องการสร้างแบบจำลอง (เช่นจำลอง) ฉันคิดว่าฉันสามารถจัดกลุ่ม "ที่คล้ายกัน" (เช่นมีพฤติกรรมเดียวกันเมื่อเวลาผ่านไป: วิธีการตรงไปข้างหน้าคือการใช้ความสัมพันธ์) และเลียนแบบเฉพาะกลุ่มไทม์ ...
teucer

4

เป็นปัญหาการจัดกลุ่มอย่างแน่นอน ลองใช้clusterแพ็คเกจRs เพื่อดูภาพรวมของตัวเลือกอัลกอริทึม ( pamและagnesเป็นตัวเลือกที่ดีที่สุดในการเริ่มต้นซึ่งเป็นตัวแทนสตรีมหลักสองรายการในการจัดกลุ่ม - centroidsและลำดับชั้น )
ปัญหาหลักในการใช้การทำคลัสเตอร์กับข้อมูลของคุณคือการกำหนดความคล้ายคลึงกันที่ดีระหว่างหน้า ง่าย ๆ คือการใช้ระยะทางแมนฮัตตัน ซับซ้อนกว่าเล็กน้อยในการนับจำนวนผู้ชมทั่วไปและทำให้เป็นมาตรฐานด้วยจำนวนเฉลี่ยของผู้ดูในหน้าแรกและหน้าที่สอง - นี่ควรจะเงียบเอฟเฟกต์ความนิยม

(เลขหน้า)×(เลขหน้า)


ฉันยกระดับคำตอบของคุณ อย่างไรก็ตามคุณสามารถให้ลิงค์ใหม่สำหรับรายงานในประโยคสุดท้ายได้ไหม คนเก่าตายไปแล้ว
discipulus

1
ฉันกลัวว่ามันจะสูญหายไปตลอดกาล ... โดยทั่วไปแล้วมันเกี่ยวกับการใช้งานของวิธีการจัดกลุ่มซึ่งไม่ได้สร้างเมทริกซ์ความเหมือนกันแบบแต่ละต่อคนอย่างชัดเจน แต่ตรวจสอบวัตถุตามต้องการ

1

การลดขนาดโดยทั่วไปจะใช้อัลกอริทึมการจัดกลุ่มกับคุณลักษณะ (คอลัมน์) เนื่องจากชุดข้อมูลของคุณมีขนาดค่อนข้างใหญ่คุณอาจลองใช้ SOM (แผนที่ที่จัดระเบียบตัวเอง / Kohonen net) เพื่อสร้างแผนที่สำหรับบุคคลหรือหน้า คุณสามารถเห็นได้ว่ารูปแบบนั้นมีความหมาย (ตีความได้) หรือไม่


1

ถ้าคุณทำ PCA คำแนะนำของฉันคือการกลั่นกรององค์ประกอบอื่น ๆ โดยย่อกว่าสองรายการแรก เมื่อคุณมีprcompวัตถุpc(ดูโพสต์ของ suncoolsu) คุณสามารถplot(pc)ดูจำนวนความแปรปรวนที่เกิดจากองค์ประกอบหลักที่แตกต่างกัน นอกจากนี้คุณยังสามารถเห็นภาพหลาย (ปกติสามหรือสี่) ของพวกเขาด้วยการpairs(pc$x[,1:3])ไม่ใช้,latticesplom(pc$x[,1:3])

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