K- หมายถึงความคล้ายคลึงโคไซน์กับระยะทางแบบยุคลิด (LSA)


10

ฉันใช้การวิเคราะห์ความหมายแฝงเพื่อแสดงคลังข้อมูลของเอกสารในพื้นที่มิติต่ำกว่า ฉันต้องการจัดกลุ่มเอกสารเหล่านี้เป็นสองกลุ่มโดยใช้วิธี k

หลายปีที่ผ่านมาฉันทำสิ่งนี้โดยใช้ gensim ของ Python และเขียนอัลกอริทึม k-mean ของฉันเอง ฉันกำหนดเซนทรอยด์ของคลัสเตอร์โดยใช้ระยะทางแบบยุคลิด แต่ก็ทำการจัดกลุ่มเอกสารตามความคล้ายคลึงกันของโคไซน์กับเซนทรอยด์ ดูเหมือนว่าจะทำงานได้ค่อนข้างดี

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

ตอนนี้ฉันเจอสิ่งนี้ในหน้าLSA Wikipedia :

เอกสารและคำแทนเวกเตอร์สามารถจัดกลุ่มได้โดยใช้อัลกอริทึมการจัดกลุ่มแบบดั้งเดิมเช่น k- หมายถึงโดยใช้มาตรการความคล้ายคลึงกันเช่นโคไซน์

แล้วมันคืออะไร? ฉันสามารถใช้โคไซน์คล้ายคลึงกันได้หรือไม่?


หัวข้อนั้นคงอยู่นานในเว็บไซต์นี้ เพียงคำถามล่าสุด: stats.stackexchange.com/q/120085/3277 (ดูลิงก์เพิ่มเติมที่นั่น) สิ่งที่น่าสนใจอย่างมากคือวิธีที่คุณใช้ k-mean ซึ่งประมวลผลโคไซน์ หากคุณอธิบายอัลกอริทึมของคุณในคำถามของคุณมันจะช่วยให้ผู้คนตอบคำถาม
ttnphns

@ttnphns ฉันสร้าง centroids คลัสเตอร์โดยใช้ระยะทางแบบยุคลิด (ค่าเฉลี่ยของแต่ละมิติ) อย่างไรก็ตามจากนั้นฉันมอบหมายเอกสารแต่ละฉบับให้กับคลัสเตอร์โดยพิจารณาจากความคล้ายคลึงกันของโคไซน์มากกว่าระยะทางแบบยุคลิด
Jeff

I then assigned each document to a cluster based on cosine similarity- โคไซน์ระหว่าง doc กับ centroid? และหลังจากเอกสารทั้งหมดได้รับการกำหนดให้คุณอัพเดตเซนทรอยด์ด้วยวิธีปกติ (แบบยุคลิด) เพราะพิกัดของเอกสารในอวกาศนั้นเป็นที่รู้จัก เป็นอย่างนั้นเหรอ?
ttnphns

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

1
สิ่งที่ฉันเริ่มคิดก็คือคุณอาจกำลังมองหาวิธี k- ดำเนินการในทรงกลมไม่ได้อยู่ในพื้นที่ k-Angular เชิงมุมดังนั้นต้องพูด ฉันคิดว่ามันเป็นไปได้ แต่ฉันไม่เคยอ่านหรือใช้สิ่งนี้
ttnphns

คำตอบ:


4

ใช่คุณสามารถใช้มัน ปัญหาคือความเหมือนโคไซน์ไม่ใช่ระยะทางนั่นคือสาเหตุที่เรียกว่าความเหมือนกัน แต่มันสามารถแปลงเป็นระยะทางตามที่อธิบายไว้ที่นี่

จริงๆแล้วคุณสามารถใช้ระยะทางใดก็ได้ การศึกษาที่ดีมากของคุณสมบัติของฟังก์ชั่นระยะทางในช่องว่างมิติสูง (เหมือนมันมักจะเป็นกรณีในการดึงข้อมูล) เป็นพฤติกรรมที่น่าแปลกใจของตัวชี้วัดระยะทางในพื้นที่สูงมิติ มันไม่ได้เปรียบเทียบ Euclidean กับ Cosine

ฉันเจอการศึกษานี้ซึ่งพวกเขาอ้างว่าในพื้นที่มิติสูงระยะทางทั้งสองมีแนวโน้มที่จะทำงานในทำนองเดียวกัน


1
คำตอบนี้อาจจะเป็นหนึ่งที่ดีถ้าจะอธิบายว่า Yes, you can use it(คือความคิดที่จะแปลงโคไซน์ไปยุคลิดระยะที่คล้ายกับของฉันคำตอบ ?)
ttnphns

ความเข้าใจของฉันเกี่ยวกับค่า k นั้นแตกต่างกัน ไม่จำเป็นต้อง จำกัด ระยะทางแบบยุคลิด ( stat.uni-muenchen.de/~leisch/papers/Leisch-2006.pdf ) ดูการอ้างอิงที่สองของฉันหรือแพ็คเกจ R นี้ ( cran.r-project.org/web/packages/cclust/cclust.pdf ) ฉันหมายถึงชอบในเว็บไซต์วิกิพีเดีย เพียงแค่ต้องการฟังก์ชั่นระยะทาง พวกเขาเรียกมันว่า "ความคล้ายคลึงเชิงมุม"
jpmuc

1
อาจจะ (และขอขอบคุณสำหรับการแบ่งปันกระดาษ!) แต่จากนั้น "การปรับเปลี่ยน" ทั้งหมดของ k-mean ซึ่งแตกต่างจาก k-หมายความว่าพวกเขากำหนดเซนทรอยด์ไม่ได้เป็นค่าเฉลี่ยเลขคณิตในปริภูมิแบบยุคลิดไม่ควรเรียกว่า k- mean
ttnphns

1

ระยะทางแบบยุคลิดไม่เหมาะสำหรับการเปรียบเทียบเอกสารหรือกลุ่มของเอกสาร เมื่อเปรียบเทียบเอกสารปัญหาสำคัญอย่างหนึ่งคือการทำให้เป็นมาตรฐานโดยความยาวของเอกสาร ความคล้ายคลึงกันของโคไซน์ทำให้เกิดการฟื้นฟูแบบนี้ แต่ระยะทางแบบยุคลิดไม่ได้ ยิ่งกว่านั้นเอกสารมักถูกจำลองเป็นการแจกแจงความน่าจะเป็นแบบหลายค่า (เรียกว่า bag of word) ความคล้ายคลึงโคไซน์เป็นค่าประมาณของ JS-divergence ซึ่งเป็นวิธีการทางสถิติที่มีเหตุผลสำหรับความคล้ายคลึงกัน ปัญหาสำคัญอย่างหนึ่งของเอกสารและโคไซน์ก็คือเราควรใช้การปรับมาตรฐาน tf-idf ให้เหมาะสมกับการนับ หากคุณใช้ gensim เพื่อรับการแทน LSA gensim ก็ทำเช่นนั้นแล้ว

ข้อสังเกตที่มีประโยชน์อื่นสำหรับกรณีการใช้งานของคุณของ 2 กลุ่มคือคุณสามารถรับค่าเริ่มต้นที่ไม่สุ่มเนื่องจาก LSA เป็นเพียง SVD คุณทำในวิธีต่อไปนี้:

  • ใช้เวลาเพียงองค์ประกอบแรกของแต่ละเอกสาร (สมมติว่าองค์ประกอบแรกคือเวกเตอร์เอกพจน์ด้านบน)
  • เรียงลำดับค่าเหล่านั้นโดยการติดตามรหัสเอกสารสำหรับแต่ละค่า
  • cluster 1 = รหัสเอกสารที่สอดคล้องกับด้านบนเช่น 1,000 (หรือมากกว่า) ค่า
  • cluster 2 = รหัสเอกสารที่สอดคล้องกับด้านล่างเช่น 1,000 (หรือมากกว่า) ค่า
  • เฉลี่ยเวกเตอร์ของแต่ละกลุ่มและทำให้ความยาวของเวกเตอร์เป็นมาตรฐาน
  • ตอนนี้ใช้ k-mean กับการเริ่มต้นนี้ ซึ่งหมายความว่าแค่ทำซ้ำ (1) กำหนดเอกสารให้กับเซนทรอยด์ที่ใกล้เคียงที่สุดในปัจจุบันและ (2) เฉลี่ยและปรับเซนทรอยด์ใหม่ให้เป็นปกติหลังจากการโอนสิทธิ

1

ใช่การปรับปรุงเซนทรอยด์เดียวกันโดยเวกเตอร์เฉลี่ยทำงาน

ดู m = 1 รายในหัวข้อ 2.2 ของเอกสารนี้ น้ำหนักคือน้ำหนักและน้ำหนักมีทั้งหมด 1 สำหรับอัลกอริธึมฐาน k-mean

กระดาษใช้คุณสมบัติของความไม่เท่าเทียมกัน Cauchy-Schwartz เพื่อสร้างเงื่อนไขที่ลดฟังก์ชั่นค่าใช้จ่ายสำหรับ k-mean

ยังจำได้ว่าความคุ้นเคยโคไซน์ไม่ใช่ระยะห่างของเวกเตอร์ ความไม่คุ้นเคยโคไซน์คือ (ซึ่งควรจะเป็นคำค้นหาที่ดี.) ดังนั้นเมื่อคุณปรับปรุงพาร์ทิชันที่คุณกำลังมองหาเมื่อเทียบกับarg maxarg min

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