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 = 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 = 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)
นอกจากนี้เรายังสามารถเพิ่มการกำหนดคลัสเตอร์ของแต่ละสถานะให้กับชุดข้อมูลดั้งเดิมได้:
#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 แบบเต็มที่ใช้ในตัวอย่างนี้ ได้ ที่นี่