ไพธอนอัลกอริทึมคลัสเตอร์แบบลำดับชั้น!

โหนดต้นทาง: 1055669

บทความนี้เผยแพร่โดยเป็นส่วนหนึ่งของไฟล์ Blogathon วิทยาศาสตร์ข้อมูล

บทนำ

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

ที่นี่เราใช้ Python เพื่ออธิบายโมเดลการจัดกลุ่มแบบลำดับชั้น เรามีข้อมูลลูกค้าห้างสรรพสินค้า 200 รายในชุดข้อมูลของเรา รหัสลูกค้า ประเภท อายุ รายได้ต่อปี และคะแนนการใช้จ่ายของลูกค้าแต่ละรายรวมอยู่ในกรอบข้อมูล จำนวนเงินที่คำนวณสำหรับคะแนนการใช้จ่ายของลูกค้าแต่ละรายนั้นขึ้นอยู่กับเกณฑ์หลายประการ เช่น รายได้ จำนวนครั้งต่อสัปดาห์ที่พวกเขาไปห้างสรรพสินค้า และจำนวนเงินที่พวกเขาใช้ไปในหนึ่งปี คะแนนนี้มีตั้งแต่ 1 ถึง 100 เนื่องจากเราไม่ทราบคำตอบ ปัญหาทางธุรกิจจึงกลายเป็นปัญหาการรวมกลุ่ม เราไม่รู้จักหมวดหมู่สุดท้ายของข้อมูล ด้วยเหตุนี้ เป้าหมายของเราคือการค้นหากลุ่มลูกค้าที่ไม่รู้จักมาก่อน

แต่ก่อนอื่น เราพิจารณาคำศัพท์ที่สำคัญบางประการในการจัดกลุ่มแบบลำดับชั้น

ข้อกำหนดที่สำคัญในการจัดกลุ่มแบบลำดับชั้น

วิธีการเชื่อมโยง

หากมี (ก) การสังเกตดั้งเดิม a[0],…,a[|a|1] ในกลุ่ม (a) และ (b) วัตถุดั้งเดิม b[0],…,b[|b|1] ในกลุ่ม ( b) จากนั้นเราจะต้องคำนวณระยะห่างระหว่างสองกระจุก (a) และ (b) เพื่อรวมเข้าด้วยกัน (b) สมมติว่ามีจุด (d) ที่ไม่ได้ถูกกำหนดให้กับคลัสเตอร์ใดๆ เราจะต้องพิจารณาว่าคลัสเตอร์ (a) อยู่ห่างจากคลัสเตอร์ (d) และคลัสเตอร์ (b) อยู่ห่างจากคลัสเตอร์ (d) แค่ไหน

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

การเชื่อมโยงเดี่ยว — ระยะทางระหว่างสมาชิกที่คล้ายกันมากที่สุดจะถูกคำนวณสำหรับแต่ละคู่ของกระจุกดาว จากนั้นจึงรวมกระจุกตามระยะทางที่สั้นที่สุด

การเชื่อมโยงโดยเฉลี่ย — คำนวณระยะห่างระหว่างสมาชิกทั้งหมดของคลัสเตอร์หนึ่งและสมาชิกทั้งหมดของคลัสเตอร์อื่น หลังจากนั้นจะใช้ค่าเฉลี่ยของระยะทางเหล่านี้เพื่อกำหนดว่าคลัสเตอร์ใดจะรวมกัน

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

การเชื่อมโยงค่ามัธยฐาน — เราใช้ระยะทางมัธยฐานแทนระยะทางเฉลี่ยในลักษณะเดียวกันกับการเชื่อมโยงโดยเฉลี่ย

การเชื่อมโยงวอร์ด — กำหนดระยะห่างระหว่างกระจุกโดยใช้วิธีการวิเคราะห์ความแปรปรวน

การเชื่อมโยงเซนทรอยด์ — เซนทรอยด์ของแต่ละคลัสเตอร์คำนวณโดยการเฉลี่ยจุดทั้งหมดที่กำหนดให้กับคลัสเตอร์ จากนั้นจึงคำนวณระยะห่างระหว่างคลัสเตอร์โดยใช้เซนทรอยด์นี้

การคำนวณระยะทาง

มีหลายวิธีในการคำนวณระยะทางระหว่างกระจุกสองกระจุกขึ้นไป โดยระยะทางแบบยุคลิดเป็นวิธีที่ได้รับความนิยมมากที่สุด การวัดระยะทางอื่นๆ เช่น Minkowski, City Block, Hamming, Jaccard และ Chebyshev สามารถใช้กับการจัดกลุ่มแบบลำดับชั้นได้เช่นกัน การวัดระยะทางที่แตกต่างกันมีผลกระทบต่อการจัดกลุ่มแบบลำดับชั้น ดังแสดงในรูปที่ 2

การคำนวณระยะทาง

เดนโดรแกรม

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

ตัวอย่าง

ตอนนี้เรามาดูตัวอย่างโดยใช้ Python เพื่อสาธิตโมเดลการจัดกลุ่มแบบลำดับชั้น เรามีข้อมูลลูกค้าห้างสรรพสินค้า 200 รายในของเรา ชุด. รหัสลูกค้า ประเภท อายุ รายได้ต่อปี และคะแนนการใช้จ่ายของลูกค้าแต่ละรายจะรวมอยู่ในกรอบข้อมูล จำนวนเงินที่คำนวณสำหรับคะแนนการใช้จ่ายของลูกค้าแต่ละรายนั้นขึ้นอยู่กับเกณฑ์หลายประการ เช่น รายได้ จำนวนครั้งต่อสัปดาห์ที่พวกเขาไปห้างสรรพสินค้า และเงินที่พวกเขาใช้ไปในหนึ่งปี คะแนนนี้มีตั้งแต่ 1 ถึง 100 เนื่องจากเราไม่ทราบคำตอบ ปัญหาทางธุรกิจจึงกลายเป็นปัญหาการรวมกลุ่ม

#1 การนำเข้าไลบรารี
นำเข้า numpy เป็น np นำเข้า matplotlib.pyplot เป็น plt นำเข้าแพนด้าเป็น pd
#2 การนำเข้าชุดข้อมูล Mall_Customers โดยแพนด้า
ชุดข้อมูล = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].ค่า

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

#3 การใช้เดนโดรแกรมเพื่อค้นหาจำนวนคลัสเตอร์ที่เหมาะสมที่สุด # สิ่งแรกที่เราจะทำคือการนำเข้าไลบรารี่ scipy scipy เป็นไลบรารีโอเพ่นซอร์ส # Python ที่มีเครื่องมือในการทำคลัสเตอร์แบบลำดับชั้นและสร้าง dendrograms # นำเข้าเฉพาะเครื่องมือที่จำเป็นเท่านั้น นำเข้า scipy.cluster.hierarchy เป็น sch 
#มาสร้างตัวแปร dendrogram กัน # การเชื่อมโยงจริงๆ แล้วเป็นอัลกอริธึมของการจัดกลุ่มแบบลำดับชั้น จากนั้นใน #linkage เราต้องระบุว่าเราใช้และมีส่วนร่วมกับข้อมูลใด นี่คือชุดข้อมูล X dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidean Distances') plt แสดง()

วิธีการ Ward เป็นวิธีการที่พยายามลดความแปรปรวนภายในแต่ละคลัสเตอร์ มันเกือบจะเหมือนกับตอนที่เราใช้ K-means เพื่อลด wcss เพื่อลงจุดแผนภูมิวิธีข้อศอกของเรา ข้อแตกต่างเพียงอย่างเดียวคือแทนที่จะใช้ wcss เราจะลดตัวแปรภายในคลัสเตอร์ให้เหลือน้อยที่สุด ภายในแต่ละคลัสเตอร์ นี่คือความแปรปรวน เดนโดรแกรมแสดงไว้ด้านล่าง

เดนโดแกรม

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

#4 การปรับการจัดกลุ่มแบบลำดับชั้นให้เหมาะสมกับชุดข้อมูล Mall_Customes # มีสองอัลกอริธึมสำหรับการจัดกลุ่มแบบลำดับชั้น: การทำคลัสเตอร์แบบลำดับชั้นแบบ Agglomerative และ # การจัดคลัสเตอร์แบบลำดับชั้นแบบแบ่งส่วน เราเลือกวิธีแบบยุคลิดระยะทางและวอร์ดสำหรับคลาสอัลกอริทึม # ของเราจาก sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidean', linkage ='ward') # มาลองปรับอัลกอริทึมการจัดกลุ่มแบบลำดับชั้นให้เข้ากับชุดข้อมูล X กันดีกว่า ในขณะที่สร้าง # คลัสเตอร์เวกเตอร์ที่บอกลูกค้าแต่ละรายว่าลูกค้าอยู่ในคลัสเตอร์ใด y_hc=hc.fit_predict(X)
#5 การแสดงภาพคลัสเตอร์ รหัสนี้คล้ายกับรหัสการแสดงภาพเคมีน #เราจะแทนที่เฉพาะชื่อเวกเตอร์ y_kmeans เป็น y_hc สำหรับการจัดกลุ่มแบบลำดับชั้น plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = 'คลัสเตอร์ 1') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='blue', label = 'คลัสเตอร์ 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='green', label ='คลัสเตอร์ 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='cyan', label ='คลัสเตอร์ 4') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='magenta', label ='คลัสเตอร์ 5') plt.title('กลุ่มลูกค้า (โมเดลการจัดกลุ่มแบบลำดับชั้น)') plt.xlabel('รายได้ต่อปี(k$)') plt.ylabel ('คะแนนการใช้จ่าย(1-100') plt.show()
คลัสเตอร์ | การจัดกลุ่มแบบลำดับชั้น
Cluster1(สีแดง), Cluster2 (สีน้ำเงิน), Cluster3(สีเขียว), Cluster4(สีฟ้า), Cluster5 (Magenta)

กลุ่มเหล่านี้ถือได้ว่าเป็นกลุ่มลูกค้าของห้างสรรพสินค้า

นั่นคือทั้งหมดที่มีสำหรับโมเดลการจัดกลุ่มแบบลำดับชั้นมาตรฐาน ชุดข้อมูลและโค้ดทั้งหมดมีอยู่ในส่วน Github

สรุป

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

สิ้นสุดหมายเหตุ

ขอบคุณสำหรับการอ่าน!
ฉันหวังว่าคุณจะสนุกกับบทความนี้และเพิ่มพูนความรู้ของคุณ
โปรดอย่าลังเลที่จะติดต่อฉัน on อีเมลล์
มีอะไรที่ไม่ได้กล่าวถึงหรือต้องการแบ่งปันความคิดของคุณ? รู้สึกอิสระที่จะแสดงความคิดเห็นด้านล่างและฉันจะกลับไปหาคุณ

เกี่ยวกับผู้เขียน

ฮาร์ดิกกุมาร์ เอ็ม. ดาดุก
นักวิเคราะห์ข้อมูล | ผู้เชี่ยวชาญด้านการวิเคราะห์ข้อมูลดิจิทัล | ผู้เรียนวิทยาศาสตร์ข้อมูล
เชื่อมต่อกับฉัน LinkedIn
เชื่อมต่อกับฉัน Github

สื่อที่แสดงในบทความนี้ไม่ใช่ของ Analytics Vidhya และใช้ดุลยพินิจของผู้เขียน

ที่มา: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา