บทนำ
K-Means เป็นหนึ่งในอัลกอริธึมการจัดกลุ่มที่ได้รับความนิยมมากที่สุด การมีจุดศูนย์กลางไปยังคลัสเตอร์ จะจัดกลุ่มจุดอื่นๆ ตามระยะห่างของจุดศูนย์กลางนั้น
ข้อเสียของ K-Means คือต้องเลือกจำนวนคลัสเตอร์ Kก่อนรันอัลกอริทึมที่จัดกลุ่มชี้
หากคุณต้องการอ่านคำแนะนำเชิงลึกเกี่ยวกับ K-Means Clustering โปรดดูที่ “การจัดกลุ่ม K-Means กับ Scikit-Learn”.
การวิเคราะห์วิธีข้อศอกและเงา
เทคนิคที่ใช้บ่อยที่สุดในการเลือกจำนวน Ks คือ วิธีข้อศอก และ การวิเคราะห์เงา.
เพื่ออำนวยความสะดวกในการเลือก Ks, the อิฐเหลือง ไลบรารีปิดโค้ดด้วย for loops และพล็อตที่เรามักจะเขียนเป็นโค้ด 4 บรรทัด
ในการติดตั้ง Yellowbrick โดยตรงจากโน้ตบุ๊ก Jupyter ให้เรียกใช้:
! pip install yellowbrick
มาดูกันว่ามันทำงานอย่างไรสำหรับชุดข้อมูลที่คุ้นเคยซึ่งเป็นส่วนหนึ่งของ Scikit-learn แล้ว the ม่านตา ชุดข้อมูล
ขั้นตอนแรกคือการนำเข้าชุดข้อมูล KMeans
และ yellowbrick
ห้องสมุดและโหลดข้อมูล:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
แจ้งให้ทราบที่นี่เรานำเข้า KElbowVisualizer
และ SilhouetteVisualizer
ราคาเริ่มต้นที่ yellowbrick.cluster
นี่คือโมดูลที่เราจะใช้เพื่อแสดงผลลัพธ์ของ Elbow และ Silhouette!
หลังจากโหลดชุดข้อมูลแล้ว ใน data
คีย์ของพวง (ชนิดข้อมูลที่เป็นส่วนขยายของพจนานุกรม) คือค่าของจุดที่เราต้องการจัดกลุ่ม อยากรู้ว่าตัวเลขแทนอะไร ดูที่ iris['feature_names']
.
เป็นที่ทราบกันดีอยู่แล้วว่าชุดข้อมูล Iris ประกอบด้วยม่านตาสามประเภท: 'versicolor', 'virginica' และ 'setosa' นอกจากนี้คุณยังสามารถตรวจสอบชั้นเรียนใน iris['target_names']
เพื่อยืนยัน
ดังนั้นเราจึงมีคุณลักษณะ 4 ประการสำหรับคลัสเตอร์และควรแยกออกเป็น 3 คลัสเตอร์ที่แตกต่างกันตามที่เราทราบอยู่แล้ว ลองดูว่าผลลัพธ์ของเราด้วยวิธี Elbow Method และ Silhouette Analysis จะยืนยันได้หรือไม่
ขั้นแรก เราจะเลือกค่าคุณสมบัติ:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
จากนั้น เราก็สร้าง KMeans
แบบจำลอง KElbowVisualizer()
ซึ่งจะได้รับโมเดลนั้นพร้อมกับจำนวน ks ที่จะคำนวณเมทริก ในกรณีนี้จาก เพื่อ 2 11 เค.
หลังจากนั้นเราปรับ visualizer กับข้อมูลโดยใช้ fit()
และแสดงพล็อตด้วย show()
. หากไม่ได้ระบุเมตริก Visualizer จะใช้ การบิดเบือน metric ซึ่งคำนวณผลรวมของระยะทางกำลังสองจากแต่ละจุดไปยังจุดศูนย์กลางที่กำหนด:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
ตอนนี้เรามี .แล้ว ศอกคะแนนบิดเบี้ยวสำหรับ KMeans Clustering พล็อตที่มีเครื่องหมายเส้นแนวตั้งซึ่งจะเป็นจำนวน ks ที่ดีที่สุด ในกรณีนี้ 4
.
ดูเหมือนว่า Elbow Method ที่มีตัววัดการบิดเบือนจะไม่ใช่ตัวเลือกที่ดีที่สุดหากเราไม่ทราบจำนวนจริงของคลัสเตอร์ Silhouette จะระบุด้วยว่ามี 4 กลุ่มหรือไม่? ในการตอบคำถามนั้น เราแค่ต้องทำซ้ำโค้ดสุดท้ายกับโมเดลที่มี 4 คลัสเตอร์และอ็อบเจกต์ visualizer อื่น:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
รหัสแสดง a พล็อต Silhouette ของการจัดกลุ่ม KMeans สำหรับ 150 ตัวอย่างใน 4 ศูนย์. ในการวิเคราะห์คลัสเตอร์นี้ เราต้องดูที่ค่าสัมประสิทธิ์ภาพเงา (หรือคะแนน) ค่าที่ดีที่สุดคือใกล้กับ 1 ค่าเฉลี่ยที่เรามีคือ 0.5
ทำเครื่องหมายด้วยเส้นแนวตั้งและไม่ค่อยดีนัก
เราต้องดูการกระจายตัวระหว่างคลัสเตอร์ด้วย - พล็อตที่ดีมีขนาดใกล้เคียงกันของพื้นที่คลัสเตอร์หรือจุดที่มีการกระจายอย่างดี ในกราฟนี้มีกลุ่มที่เล็กกว่า 3 กลุ่ม (หมายเลข 3, 2, 1) และกลุ่มที่ใหญ่กว่าหนึ่งกลุ่ม (หมายเลข 0) ซึ่งไม่ใช่ผลลัพธ์ที่เราคาดหวัง
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
ลองทำพล็อตเดียวกันซ้ำสำหรับ 3 กลุ่มเพื่อดูว่าเกิดอะไรขึ้น:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
โดยการเปลี่ยนจำนวนกลุ่ม ได้คะแนนเงา 0.05
สูงขึ้นและคลัสเตอร์มีความสมดุลมากขึ้น ถ้าเราไม่รู้จำนวนจริงของคลัสเตอร์ โดยการทดลองและรวมเทคนิคทั้งสอง เราจะเลือก 3
แทน 2
เป็นจำนวน Ks.
นี่เป็นตัวอย่างว่าการรวมและเปรียบเทียบเมตริกต่างๆ การแสดงข้อมูล และการทดลองกับค่าต่างๆ ของกลุ่มมีความสำคัญอย่างไรในการนำผลลัพธ์ไปในทิศทางที่ถูกต้อง และการมีห้องสมุดที่อำนวยความสะดวกในการวิเคราะห์นั้นสามารถช่วยในกระบวนการนั้นได้อย่างไร!