You are on page 1of 19

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN


--o0o--

BÁO CÁO BÀI TẬP LỚN

Môn: Lập trình với Python

Giảng viên hướng dẫn: Nguyễn Hoàng Anh


Sinh viên thực hiện: Nguyễn Tiến Hải - B19DCCN217
Nguyễn Văn Bến - B19DCCN065
Chu Ngọc Quang - B19DCCN519
Nguyễn Quang Thiện - B19DCCN668
Đỗ Như Đức - B19DCCN189
Nhóm lớp: 10
Nhóm bài tập lớn: 06

Hà Nội – 2021

1
Mục lục
I. Danh sách thành viên nhóm và nhiệm vụ……………………………………………….3
II. Giới thiệu thuật toán…………………………………………………………………... 4
III. Tóm tắt thuật toán……………………………………………………………………..6
IV. Giới thiệu ứng dụng…………………………………………………………………...7
1. Tổng quan về ứng dụng……………………………………………………………..7
2. Giao diện của ứng dụng……………………………………………………………..7
3. Các nút chức năng của chúng……………………………………………………….7
4. Phân tích thiết kế của ứng dụng……………………………………………………..8
a. Sơ đồ khối các chức năng của ứng dụng………………………………………….8
b. Sơ đồ thuật toán…………………………………………………………………..9

c. Sơ đồ thực thể quan hệ (ERD)……………………………………………………


10
V. Kết quả của ứng dụng……………………………………………………………… 11
1. Sơ đồ tổng quan ứng dụng được triển khai ………………………………………..11
2. Các kết quả thực hiện được………………………………………………………...12
VI. Kết luận………………………………………………………………………………15
1. Hạn chế…………………………………………………………………………….15
a. Chúng ta cần biết số lượng cluster cần clustering……………………………….15
b. Nghiệm cuối cùng phụ thuộc vào các centers được khởi tạo ban đầu…………..15
c. Các cluster cần có số lượng điểm gần bằng nhau……………………………….16
d. Khi mỗi cluster nằm phía trong luster khác……………………………………..17
2. Kết luận…………………………………………………………………………….18
VII. Tài liệu tham khảo…………………………………………………………………..19

1
Danh sách bảng biểu
Bảng 1: Sơ đồ khối các chức năng của ứng dụng……………………………………… .7
Bảng 2: Sơ đồ thuật toán………………………………………………………………... 8
Bảng 3: Sơ đồ thực thể quan hệ (ERD)………………………………………………… 9
Bảng 4 : Sơ đồ tổng quan ứng dụng được triển khai……………………………………10

Danh sách hình ảnh


Hình 1……………………………………………………………………………………4
Hình 2……………………………………………………………………………………5
Hình 3……………………………………………………………………………………6
Hình 4………………………………………………………………………………… 11
Hình 5………………………………………………………………………………… 12
Hình 6………………………………………………………………………………… 12
Hình 7………………………………………………………………………………… 13
Hình 8………………………………………………………………………………… 14
Hình 9………………………………………………………………………………… 15
Hình 10…………………………………………………………………………………16
Hình 11…………………………………………………………………………………17

Danh sách tài liệu tham khảo


Machinelearningcoban
Visualizing K-Means Clustering
Elbow method - Determining the number of clusters in a data set.

2
I. Danh sách thành viên nhóm và nhiệm vụ

Nguyễn Quang Thiện: - Xây dựng ý tưởng


- Tìm hiểu, xây dựng, chỉnh sửa code
- Làm phần giới thiệu và kết quả ứng dụng
Nguyễn Văn Bến: - Xây dựng ý tưởng
- Tìm hiểu ứng dụng
- Làm biểu đồ tổng quát của ứng dụng
Nguyễn Tiến Hải: - Xây dựng ý tưởng
- Tổng hợp nội dung
- Làm báo cáo
- Làm slide
Chu Ngọc Quang: - Xây dựng ý tưởng
- Tìm hiểu ứng dụng
- Làm sơ đồ thực thể quan hệ (ERD)
Đỗ Như Đức: - Xây dựng ý tưởng
- Tìm hiểu ứng dụng
- Làm sơ đồ khối các chức năng của của ứng dụng
- Thuyết trình

3
II. Giới thiệu về thuật toán Kmeans
Trong thuật toán K-means clustering, chúng ta không biết nhãn (label) của từng
điểm dữ liệu. Mục đích là làm thể nào để phân dữ liệu thành các cụm (cluster) khác nhau
sao cho dữ liệu trong cùng một cụm có tính chất giống nhau.
Ví dụ: Một công ty muốn tạo ra những chính sách ưu đãi cho những nhóm khách
hàng khác nhau dựa trên sự tương tác giữa mỗi khách hàng với công ty đó (số năm là
khách hàng; số tiền khách hàng đã chi trả cho công ty; độ tuổi; giới tính; thành phố; nghề
nghiệp; …). Giả sử công ty đó có rất nhiều dữ liệu của rất nhiều khách hàng nhưng chưa
có cách nào chia toàn bộ khách hàng đó thành một số nhóm/cụm khác nhau. Nếu một
người biết Machine Learning được đặt câu hỏi này, phương pháp đầu tiên anh (chị) ta
nghĩ đến sẽ là K-means Clustering. Vì nó là một trong những thuật toán đầu tiên mà anh
ấy tìm được trong các cuốn sách, khóa học về Machine Learning. Sau khi đã phân ra
được từng nhóm, nhân viên công ty đó có thể lựa chọn ra một vài khách hàng trong mỗi
nhóm để quyết định xem mỗi nhóm tương ứng với nhóm khách hàng nào. Phần việc cuối
cùng này cần sự can thiệp của con người, nhưng lượng công việc đã được rút gọn đi rất
nhiều.
Ý tưởng đơn giản nhất về cluster (cụm) là tập hợp các điểm ở gần nhau trong một
không gian nào đó (không gian này có thể có rất nhiều chiều trong trường hợp thông tin
về một điểm dữ liệu là rất lớn). Hình bên dưới là một ví dụ về 3 cụm dữ liệu (từ giờ tôi sẽ
viết gọn là cluster).

4
Hình 1
Giả sử mỗi cluster có một điểm đại diện (center) màu vàng. Và những điểm xung
quanh mỗi center thuộc vào cùng nhóm với center đó. Một cách đơn giản nhất, xét một
điểm bất kỳ, ta xét xem điểm đó gần với center nào nhất thì nó thuộc về cùng nhóm với
center đó. Tới đây, chúng ta có một bài toán thú vị: Trên một vùng biển hình vuông lớn
có ba đảo hình vuông, tam giác, và tròn màu vàng như hình trên. Một điểm trên biển
được gọi là thuộc lãnh hải của một đảo nếu nó nằm gần đảo này hơn so với hai đảo kia .
Hãy xác định ranh giới lãnh hải của các đảo.
Hình dưới đây là một hình minh họa cho việc phân chia lãnh hải nếu có 5 đảo khác
nhau được biểu diễn bằng các hình tròn màu đen:

Hình 2
Chúng ta thấy rằng đường phân định giữa các lãnh hải là các đường thẳng (chính
xác hơn thì chúng là các đường trung trực của các cặp điểm gần nhau). Vì vậy, lãnh hải
của một đảo sẽ là một hình đa giác.

5
III. Tóm tắt thuật toán
Đầu vào: Dữ liệu XX và số lượng cluster cần tìm KK.
Đầu ra: Các center MM và label vector cho từng điểm dữ liệu YY.

1. Chọn KK điểm bất kỳ làm các center ban đầu.


2. Phân mỗi điểm dữ liệu vào cluster có center gần nó nhất.
3. Nếu việc gán dữ liệu vào từng cluster ở bước 2 không thay đổi so với vòng lặp
trước nó thì ta dừng thuật toán.
4. Cập nhật center cho từng cluster bằng cách lấy trung bình cộng của tất các các
điểm dữ liệu đã được gán vào cluster đó sau bước 2.
5. Quay lại bước 2.

Chúng ta có thể đảm bảo rằng thuật toán sẽ dừng lại sau một số hữu hạn vòng lặp.
Thật vậy, vì hàm mất mát là một số dương và sau mỗi bước 2 hoặc 3, giá trị của hàm mất
mát bị giảm đi. Theo kiến thức về dãy số trong chương trình cấp 3: nếu một dãy số giảm
và bị chặn dưới thì nó hội tụ! Hơn nữa, số lượng cách phân nhóm cho toàn bộ dữ liệu là
hữu hạn nên đến một lúc nào đó, hàm mất mát sẽ không thể thay đổi, và chúng ta có thể
dừng thuật toán tại đây.
IV. Giới thiệu ứng dụng
1. Tổng quan về ứng dụng
Ứng dụng này được áp dụng trên thuật toán Kmeans để giải quyết các vấn đề về
chia điểm, các vật,… Các đối tượng có đặc điểm gần giống nhau sẽ được nhóm thành
một nhóm chung. Trong ứng dụng này các đối tượng đã được mô tả bằng các điểm và
chia chúng thành các nhóm mà ta cho trước.
2. Giao diện của ứng dụng

6
Hình 3
3. Các nút và chức năng của chúng
K : tương ứng với số nhóm cần thêm(k >0 , k<=8)
Ramdom: tạo các điểm ngẫu nhiên trong bảng
Run: thay đổi màu của các điểm trong bảng khi bảng đã có điểm
Reset: trở lại vị trí ban đầu
Agorithm: sẻ trả lại kết quả tối ưa hóa nhất mà nút Run hướng đến
Error : tính tổng khoảng cách từ các điểm đến các các điểm trung tâm của chúng (error
càng nhỏ thì kết quả càng tối ưu)
4. Phân tích thiết kế của ứng dụng
a. Sơ đồ khối các chức năng của ứng dụng

Bảng 1

7
b. Sơ đồ thuật toán

Bảng 2

8
c. Sơ đồ thực thể quan hệ (ERD)

Bảng 3

9
V. Kết quả của ứng dụng
1. Sơ đồ tổng quan ứng dụng được triển khai

Bảng 4

10
2. Các kết quả thực hiện được
Tích thêm các điểm trong bảng

Hình 4

11
Chọn số nhóm và chọn ramdom rồi chọn run

Hình 5
Sau khi chọn hàm agorithm để hàm tối ưa nhất

12
Hình 6
Và kết quả đã xog và chúng ta sẽ thử nút reset

Hình 7

13
VI. Kết luận
1. Hạn chế
Có một vài hạn chế của thuật toán K-means clustering:
a. Chúng ta cần biết số lượng cluster cần clustering
Trong thuật toán K-means, chúng ta cần biết được đại lượng K là số lượng
clusters. Trong thực tế, nhiều trường hợp chúng ta không xác định được giá trị này. Có
một số phương pháp giúp xác định số lượng clusters, bạn có thể tham khảo Elbow
method - Determining the number of clusters in a data set.

b. Nghiệm cuối cùng phụ thuộc vào các centers được khởi tạo ban đầu
Tùy vào các center ban đầu mà thuật toán có thể có tốc độ hội tụ rất chậm, ví dụ:

Hình 8
hoặc thậm chí cho chúng ta nghiệm không chính xác (chỉ là local minimum - điểm cực
tiểu mà không phải giá trị nhỏ nhất)
14
Hình 9
Có cách khắc phục đó là:
Chạy K-means clustering nhiều lần với các center ban đầu khác nhau rồi chọn
cách có hàm mất mát cuối cùng đạt giá trị nhỏ nhất.

c. Các cluster cần có số lượng gần bằng nhau


Dưới đây là một ví dụ với 3 cluster với 20, 50, và 1000 điểm. Kết quả cuối cùng
không chính xác.

15
Hình 10

d. Khi một cluster nằm phía trong 1 cluster khác


Đây là ví dụ kinh điển về việc K-means clustering không thể phân cụm dữ liệu.
Một cách tự nhiên, chúng ta sẽ phân ra thành 4 cụm: mắt trái, mắt phải, miệng, xunh
quanh mặt. Nhưng vì mắt và miệng nằm trong khuôn mặt nên K-means clustering không
thực hiện được:

16
Hình 11

2. Kết luận
Mặc dù có những hạn chế, K-means clustering vẫn cực kỳ quan trọng trong và ứng
dụng của thuật toán Kmeans mạng lại rất nhiều lợi ích cho công việc thực tiến liên quan
đến những công việc phải phân cụm đối tượng. Ví dụ như phân cụm các sinh viên cùng
tỉnh, phân cụm khách hang, ….

17
VII. Tài liệu tham khảo

- Machinelearningcoban
- Visualizing K-Means Clustering
- Elbow method - Determining the number of clusters in a data set.

18

You might also like