K-medoids ใน r: ตัวอย่างทีละขั้นตอน


การจัดกลุ่มเป็นเทคนิคการเรียนรู้ของเครื่องที่พยายามค้นหากลุ่มหรือ กลุ่ม ของ การสังเกต ภายในชุดข้อมูล

เป้าหมายคือการค้นหากระจุกที่การสังเกตภายในแต่ละกระจุกค่อนข้างคล้ายกัน ในขณะที่การสังเกตกระจุกที่ต่างกันจะค่อนข้างแตกต่างกัน

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

การจัดกลุ่มมักใช้ในการตลาดเมื่อธุรกิจสามารถเข้าถึงข้อมูลเช่น:

  • รายได้ของครัวเรือน
  • ขนาดครัวเรือน
  • อาชีพหัวหน้าครัวเรือน
  • ระยะทางไปยังเขตเมืองที่ใกล้ที่สุด

เมื่อมีข้อมูลนี้ การจัดกลุ่มสามารถใช้เพื่อระบุครัวเรือนที่คล้ายกันและอาจมีแนวโน้มที่จะซื้อผลิตภัณฑ์บางอย่างหรือตอบสนองต่อโฆษณาบางประเภทได้ดีขึ้น

รูปแบบการจัดกลุ่มรูปแบบหนึ่งที่พบบ่อยที่สุดเรียกว่า การจัดกลุ่มแบบเคมีน

น่าเสียดายที่วิธีนี้อาจได้รับอิทธิพลจากค่าผิดปกติ ซึ่งเป็นสาเหตุที่ทางเลือกที่ใช้บ่อยคือ k-medoidsคลัสเตอร์

การจัดกลุ่ม K-Medoids คืออะไร

การจัดกลุ่ม K-medoids เป็นเทคนิคที่เราใส่แต่ละการสังเกตในชุดข้อมูลลงในกลุ่ม K กลุ่มใดกลุ่มหนึ่ง

เป้าหมายสุดท้ายคือการมีกระจุกดาว K ซึ่งการสังเกตภายในแต่ละกระจุกจะค่อนข้างคล้ายกัน ในขณะที่การสังเกตในกลุ่มต่าง ๆ จะค่อนข้างแตกต่างกัน

ในทางปฏิบัติ เราใช้ขั้นตอนต่อไปนี้เพื่อดำเนินการจัดกลุ่ม K-means:

1. เลือกค่าสำหรับ K

  • ขั้นแรก เราต้องตัดสินใจว่าเราต้องการระบุคลัสเตอร์จำนวนเท่าใดในข้อมูล บ่อยครั้งที่เราเพียงแค่ต้องทดสอบค่า K ที่แตกต่างกันหลายค่า และวิเคราะห์ผลลัพธ์เพื่อดูว่าจำนวนคลัสเตอร์ใดที่ดูเหมือนจะเหมาะสมที่สุดสำหรับปัญหาที่กำหนด

2. สุ่มกำหนดแต่ละการสังเกตให้กับคลัสเตอร์เริ่มต้น ตั้งแต่ 1 ถึง K

3. ทำตามขั้นตอนต่อไปนี้จนกว่าการกำหนดคลัสเตอร์จะหยุดการเปลี่ยนแปลง

  • สำหรับแต่ละกระจุก K ให้คำนวณ จุดศูนย์ถ่วงของกระจุก นี่คือเวกเตอร์ของ ค่ามัธยฐาน p ของคุณลักษณะสำหรับการสังเกตคลัสเตอร์ที่ k
  • กำหนดการสังเกตแต่ละครั้งให้กับคลัสเตอร์ที่มีจุดศูนย์กลางใกล้เคียงที่สุด ในที่นี้ ระยะทาง ที่ใกล้เคียงที่สุด ถูกกำหนดโดยใช้ ระยะทางแบบยุคลิด

หมายเหตุทางเทคนิค:

เนื่องจาก k-medoids คำนวณเซนทรอยด์ของคลัสเตอร์โดยใช้ค่ามัธยฐานมากกว่าค่าเฉลี่ย จึงมีแนวโน้มที่จะมีความแม่นยำต่อค่าผิดปกติมากกว่าเคมีน

ในทางปฏิบัติ หากไม่มีค่าผิดปกติสุดขีดในชุดข้อมูล เคมีนและเคเมดอยด์จะให้ผลลัพธ์ที่คล้ายคลึงกัน

K-Medoids การจัดกลุ่มใน R

บทช่วยสอนต่อไปนี้ให้ตัวอย่างทีละขั้นตอนของวิธีการทำคลัสเตอร์ k-medoids ใน R

ขั้นตอนที่ 1: โหลดแพ็คเกจที่จำเป็น

ขั้นแรก เราจะโหลดสองแพ็คเกจที่มีฟังก์ชันที่มีประโยชน์มากมายสำหรับการทำคลัสเตอร์ k-medoids ใน R

 library (factoextra)
library (cluster)

ขั้นตอนที่ 2: โหลดและเตรียมข้อมูล

สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล USArrests ที่สร้างไว้ใน R ซึ่งมีจำนวนการจับกุมต่อผู้คน 100,000 คนในแต่ละรัฐของสหรัฐอเมริกาในปี 1973 ในข้อหา ฆาตกรรม การทำร้ายร่างกาย และ การข่มขืน รวมถึงเปอร์เซ็นต์ของประชากรแต่ละรัฐที่อาศัยอยู่ในเมือง พื้นที่ , เออร์เบินป็อป .

รหัสต่อไปนี้แสดงวิธีการทำสิ่งต่อไปนี้:

  • โหลดชุดข้อมูล USarrests
  • ลบแถวทั้งหมดที่มีค่าหายไป
  • ปรับขนาดตัวแปรแต่ละตัวในชุดข้อมูลให้มีค่าเฉลี่ยเป็น 0 และค่าเบี่ยงเบนมาตรฐานเป็น 1
 #load data
df <-USArrests

#remove rows with missing values
df <- na. omitted (df)

#scale each variable to have a mean of 0 and sd of 1
df <- scale(df)

#view first six rows of dataset
head(df)

               Murder Assault UrbanPop Rape
Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
Arizona 0.07163341 1.4788032 0.9989801 1.042878388
Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
California 0.27826823 1.2628144 1.7589234 2.067820292
Colorado 0.02571456 0.3988593 0.8608085 1.864967207

ขั้นตอนที่ 3: ค้นหาจำนวนคลัสเตอร์ที่เหมาะสมที่สุด

ในการทำคลัสเตอร์ k-medoid ใน R เราสามารถใช้ฟังก์ชัน pam() ซึ่งย่อมาจาก “การแบ่งพาร์ติชันรอบค่ามัธยฐาน” และใช้ไวยากรณ์ต่อไปนี้:

pam(data, k, metric = “Euclidean”, stand = FALSE)

ทอง:

  • data: ชื่อของชุดข้อมูล
  • k: จำนวนคลัสเตอร์
  • เมตริก: เมตริกที่ใช้คำนวณระยะทาง ค่าเริ่มต้นคือ แบบยุคลิด แต่คุณสามารถระบุ แมนฮัตตัน ได้เช่นกัน
  • stand: จะทำให้แต่ละตัวแปรในชุดข้อมูลเป็นมาตรฐานหรือไม่ ค่าเริ่มต้นเป็นเท็จ

เนื่องจากเราไม่ทราบล่วงหน้าว่าคลัสเตอร์จำนวนใดเหมาะสมที่สุด เราจะสร้างกราฟที่แตกต่างกันสองกราฟเพื่อช่วยเราตัดสินใจ:

1. จำนวนคลัสเตอร์ที่สัมพันธ์กับผลรวมของกำลังสอง

ขั้นแรก เราจะใช้ฟังก์ชัน fviz_nbclust() เพื่อสร้างพล็อตของจำนวนคลัสเตอร์เทียบกับผลรวมในผลรวมของกำลังสอง:

 fviz_nbclust(df, pam, method = “ wss ”) 

กลุ่มที่เหมาะสมที่สุดสำหรับ k-medoids

โดยทั่วไปผลรวมของกำลังสองจะเพิ่มขึ้นเสมอเมื่อเราเพิ่มจำนวนคลัสเตอร์ ดังนั้นเมื่อเราสร้างพล็อตประเภทนี้ เรากำลังมองหา “เข่า” ซึ่งผลรวมของกำลังสองเริ่ม “โค้งงอ” หรือคลาดเคลื่อน

จุดโค้งของโครงเรื่องโดยทั่วไปจะสอดคล้องกับจำนวนคลัสเตอร์ที่เหมาะสมที่สุด นอกเหนือจากตัวเลขนี้ อาจเกิดการ สวมอุปกรณ์มากเกินไป

สำหรับกราฟนี้ปรากฏว่ามีการงอหรือ “โค้งงอ” เล็กน้อยที่ k = 4 กระจุก

2. จำนวนคลัสเตอร์เทียบกับสถิติช่องว่าง

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

เราสามารถคำนวณสถิติช่องว่างสำหรับคลัสเตอร์แต่ละจำนวนได้โดยใช้ฟังก์ชัน clusGap() จากแพ็คเกจ คลัสเตอร์ รวมถึงพล็อตของคลัสเตอร์เทียบกับสถิติช่องว่างโดยใช้ฟังก์ชัน fviz_gap_stat()

 #calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
                    FUN = pam,
                    K.max = 10, #max clusters to consider
                    B = 50) #total bootstrapped iterations

#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat) 

K-medoids จำนวนที่เหมาะสมที่สุดของคลัสเตอร์ใน R

จากกราฟเราจะเห็นว่าสถิติช่องว่างสูงสุดที่ k = 4 กลุ่ม ซึ่งสอดคล้องกับวิธีข้อศอกที่เราใช้ก่อนหน้านี้

ขั้นตอนที่ 4: ทำคลัสเตอร์ K-Medoids ด้วย Optimal K

สุดท้ายนี้ เราสามารถดำเนินการจัดกลุ่ม k-medoids บนชุดข้อมูลโดยใช้ค่าที่เหมาะสมที่สุดสำหรับ k จาก 4:

 #make this example reproducible
set.seed(1)

#perform k-medoids clustering with k = 4 clusters
kmed <- pam(df, k = 4)

#view results
kmed

              ID Murder Assault UrbanPop Rape
Alabama 1 1.2425641 0.7828393 -0.5209066 -0.003416473
Michigan 22 0.9900104 1.0108275 0.5844655 1.480613993
Oklahoma 36 -0.2727580 -0.2371077 0.1699510 -0.131534211
New Hampshire 29 -1.3059321 -1.3650491 -0.6590781 -1.252564419
Vector clustering:
       Alabama Alaska Arizona Arkansas California 
             1 2 2 1 2 
      Colorado Connecticut Delaware Florida Georgia 
             2 3 3 2 1 
        Hawaii Idaho Illinois Indiana Iowa 
             3 4 2 3 4 
        Kansas Kentucky Louisiana Maine Maryland 
             3 3 1 4 2 
 Massachusetts Michigan Minnesota Mississippi Missouri 
             3 2 4 1 3 
       Montana Nebraska Nevada New Hampshire New Jersey 
             3 3 2 4 3 
    New Mexico New York North Carolina North Dakota Ohio 
             2 2 1 4 3 
      Oklahoma Oregon Pennsylvania Rhode Island South Carolina 
             3 3 3 3 1 
  South Dakota Tennessee Texas Utah Vermont 
             4 1 2 3 4 
      Virginia Washington West Virginia Wisconsin Wyoming 
             3 3 4 4 3 
Objective function:
   build swap 
1.035116 1.027102 

Available components:
 [1] "medoids" "id.med" "clustering" "objective" "isolation" 
 [6] "clusinfo" "silinfo" "diss" "call" "data"          

โปรดทราบว่าเซนทรอยด์ทั้งสี่คลัสเตอร์เป็นการสังเกตจริงในชุดข้อมูล ใกล้ด้านบนของเอาต์พุต เราจะเห็นว่าเซนทรอยด์ทั้งสี่มีสถานะดังต่อไปนี้:

  • อลาบามา
  • มิชิแกน
  • โอคลาโฮมา
  • นิวแฮมป์เชียร์

เราสามารถมองเห็นคลัสเตอร์บน Scatterplot ที่แสดงองค์ประกอบหลักสององค์ประกอบแรกบนแกนโดยใช้ฟังก์ชัน fivz_cluster() :

 #plot results of final k-medoids model
fviz_cluster(kmed, data = df)

การวางแผนกลุ่ม k-medoid ใน R

นอกจากนี้เรายังสามารถเพิ่มการกำหนดคลัสเตอร์ของแต่ละสถานะให้กับชุดข้อมูลดั้งเดิมได้:

 #add cluster assignment to original data
final_data <- cbind(USArrests, cluster = kmed$cluster)

#view final data
head(final_data)

           Murder Assault UrbanPop Rape cluster
Alabama 13.2 236 58 21.2 1
Alaska 10.0 263 48 44.5 2
Arizona 8.1 294 80 31.0 2
Arkansas 8.8 190 50 19.5 1
California 9.0 276 91 40.6 2
Colorado 7.9 204 78 38.7 2

คุณสามารถค้นหาโค้ด R แบบเต็มที่ใช้ในตัวอย่างนี้ ได้ ที่นี่

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *