Triển khai K-means Clustering trên Crime Dataset



Triển khai phân nhóm Kmeans trên tập dữ liệu tội phạm của Hoa Kỳ

Trong blog này, bạn sẽ hiểu phân cụm K-mean là gì và cách nó có thể được triển khai trên dữ liệu tội phạm được thu thập ở các bang khác nhau của Hoa Kỳ. Dữ liệu chứa các tội ác đã thực hiện như: tấn công, giết người và hiếp dâm bị bắt trên 100.000 cư dân ở mỗi bang trong số 50 bang của Hoa Kỳ vào năm 1973. Cùng với việc phân tích dữ liệu, bạn cũng sẽ tìm hiểu về:

    • Tìm số lượng cụm tối ưu.
    • Giảm thiểu sự biến dạng
    • Tạo và phân tích đường cong khuỷu tay.
  • Hiểu cơ chế của thuật toán k-mean.

Hãy để chúng tôi bắt đầu với phân tích. Dữ liệu có dạng:





dataset

Nhấp vào hình ảnh để tải xuống bộ dữ liệu này

Cần tập dữ liệu này? Bấm vào hình trên để tải xuống.



Trước tiên, hãy chuẩn bị dữ liệu cho phân tích. Để làm như vậy, chúng ta nên loại bỏ bất kỳ giá trị NA nào có thể có trong dữ liệu và chuyển đổi dữ liệu thành ma trận.

> Crime0 Crime str (Crime) 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') = Danh sách 2 .. $: chr [1 : 50] 'Alabama' 'Alaska' 'Arizona' 'Arkansas' ... .. $: chr [1: 4] 'Giết người' 'Tấn công' 'UrbanPop' 'Hiếp dâm'

Chúng ta hãy lấy số lượng các cụm là 5. Hàm Kmeans () lấy dữ liệu đầu vào và số lượng các cụm mà dữ liệu sẽ được phân nhóm. Cú pháp là: kmeans (dữ liệu, k) trong đó k là số trung tâm cụm.

> cl class (cl) [1] 'kmeans'

Phân tích cụm:



> str (cl) Danh sách cụm 9 $: Được đặt tên là int [1:50] 5 3 3 5 3 5 4 5 3 5… ..- attr (*, 'names') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ center: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3… ..- attr (*,' dimnames ') = Danh sách 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Giết người' 'Tấn công' 'UrbanPop' 'Hiếp dâm '$ 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 'kmeans'

Hàm str () cung cấp cấu trúc của các kmean bao gồm các tham số khác nhau như withinss, betweenss, v.v., phân tích mà bạn có thể tìm ra hiệu suất của kmeans.

betweenss: Giữa tổng các ô vuông, tức là độ tương đồng giữa các cụm

withinss: Trong tổng bình phương, tức là độ tương tự giữa các lớp

totwithinss: Tổng của tất cả các withins của tất cả các cụm, tức là tổng điểm tương đồng trong cụm

Một phân cụm tốt sẽ có giá trị của số điểm thấp hơn và giá trị của số tiền cược cao hơn, điều này phụ thuộc vào số lượng cụm ‘k’ được chọn ban đầu. Hãy để chúng tôi xem làm thế nào chúng tôi có thể tìm thấy giá trị tối ưu của ‘k’.

Tìm giá trị tối ưu của ‘k’

Giá trị tối ưu của ‘k’ là giá trị cho chúng ta một tập hợp các cụm hội tụ với độ méo nhỏ nhất. Sự biến dạng lớn hơn, tệ hơn sẽ là các cụm được hình thành.

Méo mó:

ứng dụng của phân tích dữ liệu lớn

Sự biến dạng có thể được tính toán dưới dạng 'withinss' từ mỗi cụm. Giá trị 'withinss' của một cụm cụ thể càng thấp, thì mật độ dân cư sẽ càng đông, do đó độ méo tối thiểu.

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

Hàm này lấy dữ liệu và giá trị của k và trả về 'km $ totwithinss' cho nó. ‘Km $ totwithinss’ là tổng các ô vuông trong cụm, do đó bao gồm các ô của tất cả 5 cụm được tạo, tức làsum (withinss). Giá trị của ‘km $ totwithinss’ càng cao thì độ méo càng lớn.

Đối với k = 5, số lượng là 24417,02

> kmeans.wss.k (tội phạm, 5) [1] 24417.02

Hãy tăng giá trị của k từ 5 lên 10 và quan sát sự khác biệt.

> kmeans.wss.k (tội phạm, 10) [1] 11083.04

Có thể thấy rằng khi giá trị của K càng tăng thì độ méo càng giảm.

Chúng ta có thể lấy ra các giá trị khác nhau của ‘km $ totwithinss’ và vẽ chúng trong biểu đồ để tìm mối quan hệ giữa độ méo và giá trị của k. Hàm sau thực hiện điều đó cho chúng tôi:

> kmeans.dis maxk = 10> dis = kmeans.dis (tội phạm, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Number of Cluster', + ylab = 'Distortion', + col = 'blue')

Ta Da !!! Vì vậy, chúng tôi có đường cong khuỷu tay nổi tiếng với chúng tôi.

Đường cong khuỷu tay:

Đây là biểu đồ giữa ‘k’, số lượng cụm và ‘totwithinss’ (hoặc độ méo) cho mỗi giá trị của k. Bạn có thể thấy khi số lượng cụm ít hơn, độ méo sẽ giảm dần nhưng khi chúng ta tiếp tục tăng giá trị của k, tốc độ giảm giá trị méo sẽ không đổi.

Giá trị k này vượt quá mà tốc độ biến dạng không đổi là giá trị tối ưu. Ở đây k = 4.

Chúng ta hãy áp dụng một số hoạt ảnh để hiểu cách R cho chúng ta các kết quả theo nhóm.

> thư viện (hoạt ảnh)> cl<- kmeans.ani(crime, 4)

Thuật toán phân cụm Kmeans:

Hãy để chúng tôi hiểu thuật toán mà phân cụm k-mean hoạt động:

Bước 1. Nếu k = 4, chúng ta chọn 4 điểm ngẫu nhiên và giả sử chúng là trung tâm cụm cho các cụm được tạo.

Bước 2. Chúng tôi lấy một điểm dữ liệu ngẫu nhiên từ không gian và tìm ra khoảng cách của nó với tất cả 4 trung tâm cụm. Nếu điểm dữ liệu gần trung tâm cụm màu xanh lục nhất, nó có màu xanh lục và tương tự như vậy, tất cả các điểm được phân loại trong 4 cụm.

sử dụng python trong studio trực quan

Bước 3. Bây giờ chúng ta tính toán tâm của tất cả các điểm màu xanh lá cây và gán điểm đó làm trung tâm cụm cho cụm đó.

Tương tự, chúng tôi tính toán các trọng tâm cho tất cả 4 điểm được tô màu (theo nhóm) và chỉ định các trọng tâm mới làm tâm cụm.

Bước 4. Bước 2 và bước 3 được chạy lặp đi lặp lại, trừ khi các trung tâm cụm hội tụ tại một điểm và không còn di chuyển.

thủ tục trong sql là gì


Như vậy, chúng ta đến được các trung tâm cụm hội tụ.

Có thể thấy dữ liệu được chia thành 4 cụm. Các trung tâm cụm là:

> cl $ center Vụ giết người Tấn công UrbanPop Hiếp dâm Texas 4.740741 104,8519 62,96296 16,10 Louisiana 10,907143 219,9286 71,71429 25,95 Nam Carolina 13.375000 284,5000 46,25000 25,05 New Mexico 11.040000 298.0000 77.60000 32,68

Cụm-4 với ‘New Mexico’ là trung tâm cụm có tỷ lệ tội phạm rất lớn với dân số cao nhất.

Theo dõi Cụm-3 và Cụm-2.

Mỗi bang được chỉ định một cụm, tùy thuộc vào đó, chúng ta có thể dự đoán xếp hạng tội phạm của nó. Đầu ra trông như sau:

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.

Bài viết liên quan: