การใช้ K-mean Clustering บน Crime Dataset



การนำ Kmeans ไปใช้กับชุดข้อมูลอาชญากรรมของสหรัฐฯ

ในบล็อกนี้คุณจะเข้าใจว่า K-mean clustering คืออะไรและจะนำไปใช้กับข้อมูลอาชญากรที่รวบรวมในรัฐต่างๆของสหรัฐอเมริกาได้อย่างไร ข้อมูลประกอบด้วยการก่ออาชญากรรมเช่นการทำร้ายร่างกายการฆาตกรรมและการข่มขืนในการจับกุมต่อประชากร 100,000 คนใน 50 รัฐของสหรัฐอเมริกาในปี 1973 นอกจากการวิเคราะห์ข้อมูลแล้วคุณยังจะได้เรียนรู้เกี่ยวกับ:

    • การค้นหาจำนวนคลัสเตอร์ที่เหมาะสมที่สุด
    • ลดการบิดเบือน
    • การสร้างและวิเคราะห์ข้อศอกโค้ง
  • การทำความเข้าใจกลไกของอัลกอริทึม k-mean

ให้เราเริ่มต้นด้วยการวิเคราะห์ ข้อมูลมีลักษณะดังนี้:





dataset

คลิกที่ภาพเพื่อดาวน์โหลดชุดข้อมูลนี้

ต้องการชุดข้อมูลนี้หรือไม่ คลิกที่ภาพด้านบนเพื่อดาวน์โหลด



ก่อนอื่นมาเตรียมข้อมูลสำหรับการวิเคราะห์ ในการดำเนินการดังกล่าวเราควรลบค่า NA ใด ๆ ที่อาจมีอยู่ในข้อมูลและแปลงข้อมูลเป็นเมทริกซ์

> Crime0 Crime str (อาชญากรรม) num [1:50, 1: 4] 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ... - attr (*, 'dimnames') = รายชื่อ 2 .. $: chr [1 : 50] 'Alabama' 'Alaska' 'Arizona' 'Arkansas' … .. $: chr [1: 4] 'Murder' 'Assault' 'UrbanPop' 'Rape'

ให้เรานำจำนวนคลัสเตอร์มาเป็น 5 ฟังก์ชัน Kmeans () รับข้อมูลอินพุตและจำนวนคลัสเตอร์ที่ข้อมูลจะถูกจัดคลัสเตอร์ ไวยากรณ์คือ: kmeans (data, k) โดยที่ k คือจำนวนคลัสเตอร์เซ็นเตอร์

> คลาส cl (cl) [1] 'kmeans'

การวิเคราะห์คลัสเตอร์:



> str (cl) รายชื่อคลัสเตอร์ 9 $: ชื่อ int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'names') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ centre: num [1: 5, 1: 4] 2.95 6.11 12.14 5.59 11.3 ... ..- attr (*,' dimnames ') = รายชื่อ 2 .. .. $: chr [1: 5] '1' '2' '3' '4' … .. .. $: chr [1: 4] 'ฆาตกรรม' 'จู่โจม' 'UrbanPop' 'ข่มขืน '$ totss: num 355808 $ withinss: num [1: 5] 4548 2286 16272 1480 3653 $ tot.withinss: num 28240 $ betweenss: num 327568 $ size: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - attr (*, 'class') = chr 'กิโลเมตร'

ฟังก์ชั่น str () ให้โครงสร้างของ kmeans ซึ่งรวมถึงพารามิเตอร์ต่างๆเช่น withinss, betweenss และอื่น ๆ ซึ่งคุณสามารถหาประสิทธิภาพของ kmeans ได้

betweenss: ระหว่างผลรวมของกำลังสองเช่นความคล้ายคลึงกันภายในคลัสเตอร์

withinss: ภายในผลรวมของกำลังสองเช่นความคล้ายคลึงระหว่างคลัสเตอร์

totwithinss: ผลรวมของภายในทั้งหมดของคลัสเตอร์ทั้งหมดเช่นความคล้ายคลึงกันภายในคลัสเตอร์ทั้งหมด

การจัดกลุ่มที่ดีจะมีค่า withinss ต่ำกว่าและมูลค่า betweens ที่สูงกว่าซึ่งขึ้นอยู่กับจำนวนคลัสเตอร์ 'k' ที่เลือกในตอนแรก มาดูกันว่าเราจะหาค่าที่เหมาะสมที่สุดของ 'k' ได้อย่างไร

การหาค่าที่เหมาะสมที่สุดของ 'k'

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

การบิดเบือน:

คลาส __init__ python

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

kmeans.wss.k<- function(crime, k){ km = kmeans(crime, k) return (km$tot.withinss) }

ฟังก์ชันนี้รับข้อมูลและค่าของ k และส่งกลับค่า 'km $ totwithinss' 'km $ totwithinss' คือผลรวมภายในคลัสเตอร์ของกำลังสองซึ่งรวมถึง withinss ของคลัสเตอร์ทั้ง 5 ที่สร้างขึ้นเช่นผลรวม (withinss). ค่า 'km $ totwithinss' สูงขึ้นค่าความผิดเพี้ยนก็จะมากขึ้น

สำหรับ k = 5 withinss คือ 24417.02

> kmeans.wss.k (อาชญากรรม 5) [1] 24417.02

มาเพิ่มค่า k จาก 5 เป็น 10 และสังเกตความแตกต่าง

> kmeans.wss.k (อาชญากรรม 10) [1] 11083.04

จะเห็นได้ว่าเมื่อค่า K เพิ่มขึ้นการบิดเบือนจะลดลง

เราสามารถนำค่าต่างๆของ 'km $ totwithinss' ออกมาแล้วพล็อตในกราฟเพื่อหาความสัมพันธ์ระหว่างการบิดเบือนและค่า k ฟังก์ชันต่อไปนี้ทำเพื่อเรา:

> kmeans.dis maxk = 10> dis = kmeans.dis (Crime, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Number of Clusters', + ylab = 'Distortion', + col = 'สีน้ำเงิน')

ตาดา !!! ดังนั้นเราจึงมีโค้งข้อศอกที่มีชื่อเสียงกับเรา

โค้งข้อศอก:

นี่คือพล็อตระหว่าง 'k' จำนวนคลัสเตอร์และ 'totwithinss' (หรือการบิดเบือน) สำหรับแต่ละค่าของ k คุณจะเห็นได้ว่าเมื่อจำนวนคลัสเตอร์น้อยลงความผิดเพี้ยนลดลงทีละน้อย แต่เมื่อเราเพิ่มค่า k ไปเรื่อย ๆ อัตราการลดค่าการบิดเบือนจะกลายเป็นค่าคงที่

ค่า k ซึ่งเกินกว่าที่อัตราการบิดเบือนจะกลายเป็นค่าคงที่เป็นค่าที่เหมาะสมที่สุด ที่นี่ k = 4.

ให้เราใช้แอนิเมชั่นเพื่อทำความเข้าใจว่า R ให้ผลลัพธ์แบบคลัสเตอร์อย่างไร

> ไลบรารี (ภาพเคลื่อนไหว)> cl<- kmeans.ani(crime, 4)

Kmeans clustering Algorithm:

ให้เราเข้าใจอัลกอริทึมที่การทำคลัสเตอร์ k-mean ทำงาน:

ขั้นตอนที่ 1. ถ้า k = 4 เราจะเลือกจุดสุ่ม 4 จุดและถือว่าเป็นศูนย์คลัสเตอร์สำหรับคลัสเตอร์ที่จะสร้าง

ขั้นตอนที่ 2. เราใช้จุดข้อมูลแบบสุ่มจากอวกาศและค้นหาระยะทางจากศูนย์ทั้ง 4 คลัสเตอร์ หากจุดข้อมูลอยู่ใกล้กับศูนย์กลางคลัสเตอร์สีเขียวมากที่สุดจุดนั้นจะเป็นสีเขียวและในทำนองเดียวกันจุดข้อมูลทั้งหมดจะถูกจัดหมวดหมู่ใน 4 คลัสเตอร์

เป็นผู้สำเร็จการศึกษาระดับปริญญาโท

ขั้นตอนที่ # 3. ตอนนี้เราคำนวณเซนทรอยด์ของจุดสีเขียวทั้งหมดและกำหนดจุดนั้นเป็นศูนย์กลางคลัสเตอร์สำหรับคลัสเตอร์นั้น

ในทำนองเดียวกันเราคำนวณเซนทรอยด์สำหรับจุดสีทั้ง 4 จุด (คลัสเตอร์) และกำหนดเซนทรอยด์ใหม่เป็นศูนย์กลางคลัสเตอร์

ขั้นตอนที่ # 4. ขั้นตอนที่ 2 และขั้นตอนที่ 3 จะถูกเรียกใช้ซ้ำ ๆ เว้นแต่ศูนย์กลางคลัสเตอร์จะมาบรรจบกันที่จุดใดจุดหนึ่งและไม่เคลื่อนที่อีกต่อไป

วิธีสร้างแอปใน Salesforce


ดังนั้นเราจึงไปถึงศูนย์คลัสเตอร์ที่มาบรรจบกัน

จะเห็นได้ว่าข้อมูลแบ่งออกเป็น 4 คลัสเตอร์ ศูนย์คลัสเตอร์ ได้แก่ :

> cl $ center Murder Assault UrbanPop Rape Texas 4.740741 104.8519 62.96296 16.10 Louisiana 10.907143 219.9286 71.71429 25.95 เซาท์แคโรไลนา 13.375000 284.5000 46.25000 25.05 นิวเม็กซิโก 11.040000298.0000 77.60000 32.68

คลัสเตอร์ -4 ที่มี 'นิวเม็กซิโก' เป็นศูนย์กลางคลัสเตอร์มีอัตราการก่ออาชญากรรมจำนวนมากและมีจำนวนประชากรสูงสุดเช่นกัน

คลัสเตอร์ -3 และคลัสเตอร์ -2 ติดตาม

แต่ละรัฐจะถูกกำหนดคลัสเตอร์ขึ้นอยู่กับว่าเราสามารถทำนายอันดับอาชญากรรมของตนได้ในขณะนี้ ผลลัพธ์มีลักษณะดังนี้:

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป

กระทู้ที่เกี่ยวข้อง: