Giới thiệu về phân cụm dữ liệu Bản chất của phân cụm ta có thể hiểu là các qui trình tìm cách nhóm các đối tượng đã cho vào các cụm clusters, sao cho các đối tượng trong cùng 1 cụm tươ
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐÀO TẠO CHẤT LƯỢNG CAO NGÀNH CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN 1
ĐỀ TÀI: PHÂN CỤM DỮ LIỆU VỚI GIẢI THUẬT K-MEANS
(DATA CLUSTERING WITH K-MEANS ALGORITHM)
GVHD: TS Trần Nhật Quang
TP Hồ Chí Minh, tháng 12 năm 2018
MỤC LỤC
DANH MỤC CÁC HÌNH 1 DANH MỤC CÁC BẢNG 2
Trang 2NỘI DUNG 3
I Mô tả project 3
1 Lý do xây dựng phần mềm 3
2 Giới thiệu về phân cụm dữ liệu 3
3 Giới thiệu về thuật toán k-means 5
4 Use case diagram 6
5 Mô tả use case diagram 6
II Thực hiện 8
1 Thiết kế lớp 8
2 Cài đặt và kiểm thử 10
2.1 Phân cụm dữ liệu giả lập 10
2.1 Phân cụm dữ liệu thực tế 13
III Phân công công việc của các thành viên 17
IV Kết luận 18
TÀI LIỆU THAM KHẢO 19
Trang 3DANH MỤC CÁC HÌNH
Hình 1 Các loại kỹ thuật phân cụm[5] 3
Hình 2 Use Case Diagram 6
Hình 3 Kiểm thử với dữ liệu 2 chiều không chồng lấp F1_score = 1 10
Hình 4 Kiểm thử với dữ liệu 3 chiều không chồng lấp F1_score = 1 11
Hình 5 Kiểm thử với dữ liệu 2 chiều chồng lấp F1_score=0.6962 12
Hình 6 Kiểm thử với dữ liệu 3 chiều chồng lấp F1_score=0.7976 13
Hình 7 Ảnh chưa thêm nhiễu 14
Hình 8 Cú pháp thêm nhiễu cho từng tấm hình 14
Hình 9 Tất cả hình ảnh đã được thêm nhiễu 15
Hình 10 Một số ảnh của dữ liệu đầu vào 15
Hình 11 Kiểm thử với dữ liệu thực tế F1_score max = 1 16
Hình 12 Kiểm thử với dữ liệu thực tế F1_score có thể là nhỏ nhất = 0.5180 16
Hình 13 Kiểm thử với dữ liệu thực tế (gán tâm) F1_score = 1 17
1
Trang 4DANH MỤC CÁC BẢNG
Bảng 1 Mô tả Actor 6
Bảng 2 Mô tả Use case diagram 7
Bảng 3 Thiết kế lớp 8
Bảng 4 Các Phương Thức của lớp ClassData 8
Bảng 5 Các phương thức của lớp Class_K_mean 9
Bảng 6 Phân công công việc 17
Trang 5NỘI DUNG
I. Mô tả project
1 Lý do xây dựng phần mềm
Với tình hình phát triển của công nghệ hiện nay, thì hiện tại các dữ liệu đã có thể được lưu trữ rất nhiều trên các thiết bị lưu trữ Vậy nên việc phân loại những tập dữ liệu lớn này ngày càng trở nên khó khăn hơn Con người với cách làm thủ công thì sẽ tốn rất rất nhiều thời gian, thậm chí không thể phân loại hết được Do đó, việc xây dựng một phần mềm có thể giúp con người phân loại những dữ liệu là một nhu cầu thiết yếu Trong
đồ án này, sử dụng thuật toán k-means clustering để viết ra phần mềm nhằm giải quết vấn
đề trên
2 Giới thiệu về phân cụm dữ liệu
Bản chất của phân cụm ta có thể hiểu là các qui trình tìm cách nhóm các đối tượng
đã cho vào các cụm (clusters), sao cho các đối tượng trong cùng 1 cụm tương tự (similar) nhau và các đối tượng khác cụm thì không tương tự (disimilar) nhau[5]
Hình 1 Các loại kỹ thuật phân cụm[5]
Mục đích của phân cụm là tìm ra bản chất bên trong các nhóm dữ liệu Các thuật toán phân cụm (Clustering Algorthms) đều sinh ra các cụm (clusters)
Trang 6Kỹ thuật phân cụm được áp dụng trong rất nhiều lĩnh vực như [5]:
Marketing: Góm nhóm những sản phẩm độc đáo,khách hàng…
Sinh học: Dùng để phân cụm nhưng loài động, thực vật theo một số thuốc tính,…
Medicine: Phân loại thuốc theo thuốc tính của vi khuẩn tăng hiệu quả thuốc
Khoa học máy tính: xử lý ngôn ngữ tự nhiên, phân loại hình ảnh,
Xã hội: xác định nhưng khu vực thường xảy ra các vụ phạm tội, phân cụm các
trường có thuộc tính tương tự,
Hóa học: tìm những cấu trúc tương đồng của nhiều hợp chất hóa học khác nhau,
Library: Theo dõi độc giả, sách, dự đoán nhu cầu của độc giả…
Insurance, finance: Phân nhóm các đối tượng sử dụng bảo hiểm và các dịch vụ tài
chính, dự đoán xu hướng (trend) của khách hàng, phát hiện gian lận tài chính (identifying frauds)
WWW: Phân loại tài liệu (document classification), phân loại người dùng web
(clustering weblog)…
Các phương pháp đánh giá thường được sử dụng dể đánh giá chất lượng phân cụm gồm: accuracy score, confusion matrix, ROC curve, Area Under the Curve, Precision and Recall, F1 score, Top R error[2] Mỗi một phương pháp lại có những thuốc tính đánh giá riêng vậy nên tùy bài toán mà ta chọn ra phương pháp phù hợp nhất Và trong đồ án này chúng em sử dụng F1 score (một trường hợp đặc biệt của F measure [6]) để đánh giá
F1 score là một trung bình điều hoà (harmonic mean) của Precision và Recall[3]
TP (True Positive): được định nghĩa 2 điểm dữ liệu tương tự nhau được phân vào cùng một cụm
FP (False Positive): được định nghĩa 2 điểm dữ liệu khác nhau được phân vào cùng một cụm
TN (True Negative): được định nghĩa 2 điểm dữ liệu khác nhau được phân khác cụm nhau
FN (False Negative): được đinh nghĩa 2 điểm dữ liệu giống nhau được phân vào các cụm khác nhau
Trang 7Precision được định nghĩa là tỉ lệ số điểm đã thuộc và vẫn thuộc lớp dương (TP) sau khi phân cụm trong số nhưng điểm được phân loại thuộc lớp dương (TP+FP)
Recall được định nghĩa ngược lại, là tỉ lệ số điểm đã và vẫn thuộc lớp âm (TN) sau khi phâm cụm trong số những điểm được phân loại thuộc lớp âm (TN+FN)
precision= TP TP+ FP recall= TP TP+FN
F 1score=2 precision recall precision+recall
3 Giới thiệu về thuật toán k-means
Thuật toán k-means được MacQueen giới thiệu trong bài báo của ông vào năm
1967 [4] k-means là một thuật toán phân hoạch thuộc nhóm các thuật toán máy học không cần sự định hướng trước (unsupervised machine learning) được biết đến khá rộng rãi Thuật toán này không cần quá trình huấn luyện để học, ghi nhớ các mô hình tri thức tách biệt với quá trình chạy Điều này cũng đồng nghĩa với việc, k-means cho ra kết quả cuối cùng không thể đoán trước và rất khác nhau dù cho cùng dữ liệu đầu vào
k-means được sử dụng khi ta có một tập hợp gồm nhiều dữ liệu không được dán nhãn (dữ liệu chưa được phân loại theo nhóm hay danh mục) Mục tiêu của thuật toán là tìm ra k nhóm của tập dữ liệu này với k cho trước Thuật toán xử lý dựa trên thao tác lặp (iterative) để gán mỗi điểm dữ liệu vào 1 trong k nhóm dự vào thuộc tính (feature) đã cho của từng điểm dữ liệu Các điểm dữ liệu được phân nhóm (cluster) theo tiêu chí tương đồng về các thuộc tính của chúng Kết quả của thuật toán k-means là[7]:
- k điểm trung tâm (centroid) của k nhóm (cluster) k điểm này có thể được dùng
để tiếp tục gán nhãn cho dữ liệu mới khi chúng được thêm vào tập dữ liệu ban đầu
- Nhãn cho tập điểm dữ liệu (mỗi điểm dữ liệu được gán cho một nhóm xác định ứng với một điểm trung tâm)
Mô tả tóm tắt các bước của thuật toán:
Đầu vào: Dữ liệu và số k (cụm) cần tìm.
Trang 8Đầu ra: Các tâm và cụm dữ liệu thuộc các tâm đấy.
Bước 1: Chọn ngẫu nhiên k tâm (centroid) cho k cụm (cluster)
Bước 2: Tính khoảng cách giữa các đối tượng đến k tâm
Bước 3: Phân mỗi điểm dữ liệu vào cụm (cluster) có tâm (centroid) gần nó nhất
Bước 4 Xác đinh lại tâm mới Bằng việc tính giá trị trung bình của các điểm dữ liệu thuộc từng cụm (cluster)
Bước 5: Quay lại bước 2 đến khi các tâm không xê dịch hoặc gặp điều kiện dừng
4 Use case diagram
5 Mô tả use case diagram
Bảng 1 Mô tả Actor
TT Tên Actor Ý nghĩa
1 User
Người dùng thông thường chỉ được sử dụng phần mềm ( program, program1, program3 ) không được thực hiện các thao tác ảnh hưởng đến chương trình (ClassData &
class_k_means)
Hình 2 Use Case Diagram
Trang 9Bảng 2 Mô tả Use case diagram
TT Tên use case Ý nghĩa
1 Dùng dữ
liệu giả lập
Phân cụm
Người dùng (user) nhập vào tất cả các giá trị sau:số điểm được tạo ra trong mỗi cụm (m), số chiều (dim),
số cụm (k), số chiều của dữ liệu (dim), điều kiện dừng (minDist), khoảng giá trị toạ độ của mỗi điểm trong mỗi cụm (zonedata) cần tạo ra khớp với số cụm
Đủ các yêu cầu trên thì chương trình sẽ bắt đầu chạy chương trình sẽ tạo ra dữ liệu giả lập dựa trên dữ liệu nhập vào -> khởi tạo tâm -> phân cụm -> tính F1-score
Sau khi chạy chương trình, với dữ liệu 2 hoặc 3 chiều thì sẽ có bước vẽ đồ thị và xuất F1-score Còn với những dữ liệu nhiều chiều hơn thì sẽ không thể
vẽ đồ thị nhưng vẫn suất F1-score
2 Dùng dữ
liệu thực tế
(hình ảnh)
Phân cụm
Người dùng (user) nhập vào tất cả các giá trị sau: số
dữ liệu thuộc mỗi cụm của dữ liệu thực tế (m), số cụm của dữ liệu thực tế (k), số chiều của dữ liệu thực
tế (dim), điều kiện dừng (minDist), tên tên đường dẫn chứa dữ liệu thực tế (foder)
Đủ các yêu cầu trên thì chương trình sẽ bắt đầu chạy, chương trình đọc dữ liệu thật vào chương trình -> khởi tạo true_lb -> khởi tạo tâm -> phân cụm -> tính F1-score
Sau khi chạy chương trình sẽ xuất ra giá trị F1-score vì giá trị số chiều (dim) lớn = 1024 nên không thể vẽ
đồ thị
Trang 10II. Thực hiện
1 Thiết kế lớp
Bảng 3 Thiết kế lớp
TT Tên lớp Tên các sinh viên phụ trách viết Mục đích chính của lớp trong chương trình
1 ClassData Hứa Văn Lâm
Nguyễn Hoàng Kim
Dùng để tạo/đọc dữ liệu và vẽ đồ thị
2 Class_K_means Dùng để phân cụm dữ liệu và tínhF1-score.
Bảng 4 Các Phương Thức của lớp ClassData
TT Tên phương thức Mục đíchchính Tên file, sttdòng chứa
khai báo
Tên các
SV phụ trách viết 1
genData(obj,zonedata)
Input: obj(obj.m, obj.k, obj.dim),
zonedata
Output: dataAray, true_lb
Tạo dữ liệu giả lập
ClassData
m Dòng 11
Cả hai
2
PlotData(obj,b)
Input:obj(obj.dim,
obj.dataArray),b(b.learned)
Output: Đồ thị biểu diễn dữ liệu
Vẽ đồ thị cho dữ liệu
ClassData
m Dòng 36
Cả hai
3
docfile(obj)
Input: obj, image
Output: obj.dataArray
Đọc image
ClassData
m Dòng 19
Hứa Văn Lâm
Trang 11Bảng 5 Các phương thức của lớp Class_K_mean
TT Tên phương thức Mục đích chính Tên file, stt dòng chứa
khai báo
Tên các
SV phụ trách viết 1
Compute_Dist(pA,pB)
Input: pA, pB
Output: Dist
Tính khoảng cách giữa 2 điểm
Class_K_me ans.m
Dòng 13
Cả hai
1
initCenter(obj,a)
Input: obj(obj.k),
a(a.m,a.dataArray)
Output: Centers
Tạo trọng tâm ngẫu nhiên cho mỗi cụm
Class_K_me ans.m
Dòng 20
Hứa Văn Lâm
2
Clustering(obj,a)
Input: obj(obj.k, obj.dataCenter,
obj.minDist), a(a.m, a.dataArray)
Output: Trả về từng cụm dữ liệu và
label được học từ thuật toán
Thực hiện phân cụm
dữ liệu
Class_K_me ans.m
Dòng 28
Hứa Văn Lâm
3
Compute_F1_score(obj,a)
Input: obj(obj.learned_lb),
a(a.true_lb)
Output: Kết quả của F1 thuộc đoạn
[0;1]
Tính toán
độ chính xác của thuật toán
Class_K_me ans.m
Dòng 86
Cả hai
Trang 122 Cài đặt và kiểm thử
2.1 Phân cụm dữ liệu giả lập
Với dữ liệu là những điểm 2 chiều (x,y) và không chồng lấp lên nhau thì ta có kết quả F1_score luôn bằng = 1
Dữ liệu 2 chiều:
Với dữ liệu 3 chiều không chồng lấp ta cũng được kết quả tương tự:Hình 3 Kiểm thử với dữ liệu 2 chiều không chồng lấp F1_score = 1
Hình 4 Kiểm thử với dữ liệu 3 chiều không chồng lấp F1_score = 1
Trang 13Ở đây chúng em có ví dụ trên nhưng tập dữ liệu 2 và 3 chiều, qua đó không có nghĩa là nhiều chiều thì không thể phân cụm Mà chỉ là việc vẽ đồ thị cho những dữ liệu nhiều hơn 3 chiều là điều bất khả thi Chúng ta vẫn biết được F1_score của những tập dữ liệu nhiều hơn 3 chiều
Đối với những cụm dữ liệu chồng lấp: đây là một ví dụ mà thuật toán k-means sẽ chạy không hiệu quả Số điểm thuộc khu vực chồng lấp càng nhiều thì thuật toán càng không hiệu quả
Với dữ liệu 2 chiều chồng lấp ta thu được kết quả sau:
Hình 5 Kiểm thử với dữ liệu 2 chiều chồng lấp F1_score=0.6962
Trang 14Với dữ liệu 3 chiều cũng tương tự, qua nhiều lần kiểm thử thì kết quả F1-score không một lần nào có thể lên được giá trị 1:
2.1 Phân cụm dữ liệu thực tế
Trong thực tế, việc phân loại tự động những hình ảnh giống rất cần thiết Vì với số lượng hình ảnh lớn thì việc lựa chọn thủ công sẽ tốn nhiều thời gian
Trong thí nghiệm này, hình ảnh của các chữ số từ 0 – 9 được phân loại sử dụng thuật toán k-means Mỗi hình có kích cỡ 32 x 32 = 1024 pixels
Hình 6 Kiểm thử với dữ liệu 3 chiều chồng lấp F1_score=0.7976
Trang 15Hình 7 Ảnh chưa thêm nhiễu
Cách tạo các file hình: Những hình ảnh trên chúng em sử dụng phần mềm Paint để thiết kế với kích thước khung ảnh là 32*32 và gán ký tự số (từ 0->9) vào mỗi hình ảnh Vậy chúng em đã tạo ra 10 hình ban đầu và mỗi hình có 9 bản sao chép Và sau đó chúng
em sử dụng hàm Imnoise trong Matlab để thêm nhiễu vào những tấm hình đó nhằm mục đích tạo sự khác biệt cho 9 bản sao chép của mỗi hình Sau khi thêm nhiễu chúng em đã xuất tất cả những tấm hình đó ra một thư mục mới có tên là folder (thư mục chứa 100 ảnh
đã được thêm nhiễu) Vậy mỗi hình hoàn toàn khác nhau nhờ những điểm nhiễu được tạo ra một cách ngẫu nhiên
Hình 8 Cú pháp thêm nhiễu cho từng tấm hình
Những tấm hình đã được thêm nhiễu
Trang 16Hình 9 Tất cả hình ảnh đã được thêm nhiễu
Kiểm thử với dữ liệu mô phỏng là tất cả giá trị pixel của 100 hình đã được thêm nhiễu Ở đây phần mềm sẽ đáp ứng nhu cầu phân loại hình ảnh cho 100 hình này, bao
Hình 10 Một số ảnh của dữ liệu đầu vào
Trang 17gồm 10 cụm: hình 0, hình 1, hình 2, hình 3, hình 4, hình 5, hình 6, hình 7, hình 8, hình 9 Tập dữ liệu: folder (100 hình ảnh đã được thêm nhiễu)
Do hiệu suất của thuật toán k-means phụ thuộc vào việc khởi tạo tâm, nên khi khởi tạo tâm 1 cách ngẫu nhiên, chương trình cho ra kết quả khác nhau Cụ thể, trong những lần chạy thử chúng em thu được kết quả: giá trị F1_score nằm trong khoảng từ 0.5180
đến 1
Hình 12 Kiểm thử với dữ liệu thực tế F1_score có thể là nhỏ nhất = 0.5180 Hình 11 Kiểm thử với dữ liệu thực tế F1_score max = 1
Trang 18Ngược lại, khi khởi tạo tâm bằng các phần tử của các nhóm khác nhau, chương trình luôn hoạt động rất tốt F1_score=1 Có nghĩa là việc lựa chọn tâm ban đầu có sự ảnh hưởng lớn tới kết quả
III Phân công công việc của các thành viên
Bảng 6 Phân công công việc
Tên Sinh Viên Đóng góp Mô tả khái quát công việc Hứa Văn Lâm 70%
Tìm kiếm thông tin cho chương trình (những thông tin liên quan đến k-means), viết code cho chương trình, viết báo cáo
Nguyễn Hoàng Kim 30% Tìm hiểu một số thông tinliên quan đến k-means,
F1-score
Hình 13 Kiểm thử với dữ liệu thực tế (gán tâm) F1_score = 1
Trang 19IV Kết luận
Chương trình đã giải quyết được vấn đề phân cụm dữ liệu, giả lập và thực tế Cụ thể, chương trình đã có thể phân cụm dữ liệu và được kiểm chứng ở những dữ liệu kiểm thử ở trên Vậy nên chương trình đã phần nào được gọi là ổn định và khá tốt
Khó khăn lớn nhất của nhóm đó là giới hạn thời gian làm đồ án, khá ít và vào khoảng thời gian cuối kỳ nên có rất ít thời gian cho chương trình (ứng dụng) này Tuy nhiên nhờ có thầy Trần Nhật Quang, thầy đã đôn đốc, nhắc nhở chúng em nên vấn đề đã tạm được giải quyết
Ưu điểm của chương trình áp dụng thuật toán k-means này là: nó khá dễ cho việc cài đặt và sử dụng Ngôn ngữ Matlab cùng với IDE của nó khá dễ sử dụng vậy nên việc code khá dễ dàng Với chương trình này thì dữ liệu tách rời thì độ chính xác rất cao Và việc khởi tạo số cụm một cách hợp lý cũng đưa ra những kết quả tốt
Nhược điểm của chương trình: đối với dữ liệu chồng lấp thì không được cao Và việc yêu cầu số lượng cụm và khởi tạo tâm theo số cụm một cách ngẫu nhiên, thì cũng gây ảnh hưởng lớn đến kết quả, được minh chứng ở thí nghiệm phân cụm dữ liệu thực tế
ở trên, vậy nên việc phải khởi tạo tâm của từng cụm một cách hợp lý cũng cần được lưu
ý
Trang 20TÀI LIỆU THAM KHẢO
[1] Tiep Vu (2017, January 1) Bài 4: K-means Clustering Retrieved from
https://machinelearningcoban.com/2017/01/01/kmeans/
[2] Tiep Vu (2018, January 3) Bài 33: Các phương pháp đánh giá một hệ thống phân lớp Retrieved from
https://machinelearningcoban.com/2017/08/31/evaluation/
[3] ClustEval | F1-Score (n.d.) Retrieved from
https://clusteval.sdu.dk/1/clustering_quality_measures/18
[4] MacQueen, J (1967, June) Some methods for classification and analysis of
multivariate observations In Proceedings of the fifth Berkeley symposium on
mathematical statistics and probability (Vol 1, No 14, pp 281-297).
[5] Thuật toán K-Means với bài toán phân cụm dữ liệu - BIS (n.d.) Retrieved from http://bis.net.vn/forums/t/374.aspx
[6] Evaluation of clustering (n.d.) Retrieved from https://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html
[7] K-Mean và ứng Dụng (n.d.) Retrieved from https://www.ieev.org/2017/05/k-mean-va-ung-dung.html
[8] Clustering - K-means (n.d.) Retrieved from
https://home.deib.polimi.it/matteucc/Clustering/tutorial_html/kmeans.html