Professional Documents
Culture Documents
Thành viên:
LỜI CẢM ƠN
Trước tiên với tình cảm sâu sắc và chân thành nhất, cho phép chúng em xin gửi
lòng biết ơn đến quý thầy cô tại Học viện Công nghệ Bưu chính Viễn thông đã
tạo điều kiện hỗ trợ, giúp đỡ chúng em suốt quá trình học tập và nghiên cứu vừa
qua.
Đặc biệt, trong học kỳ này, học viện đã tổ chức cho chúng em được tiếp cận với
các môn học rất hữu ích đối với sinh viên. Chúng em xin chân thành cảm ơn cô
Nguyễn Quỳnh Chi đã tận tâm hướng dẫn chúng em trong môn học Kho dữ liệu
và Khai phá dữ liệu. Cô đã luôn bên cạnh, tạo điều kiện trong suốt quá trình
nghiên cứu, động viên và giúp đỡ để chúng em hoàn thành tốt báo cáo này.
Do kiến thức còn nhiều hạn chế và khả năng tiếp thu thực tế còn nhiều bỡ ngỡ
chưa hoàn hảo nên bài báo cáo sẽ còn nhiều thiếu sót, kính mong sự góp ý và
giúp đỡ từ cô.
Cuối cùng chúng em xin kính chúc quý thầy cô dồi dào sức khỏe, niềm tin để
tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến thức cho thế hệ
mai sau.
I. Giới thiệu 4
1. Phân cụm dữ liệu 4
1.1. Định nghĩa 4
1.2. Thế nào là phân cụm tốt? 5
1.3. Bài toán phân cụm 5
1.4. Các ứng dụng của phân cụm 6
1.5. Các yêu cầu đối với phân cụm dữ liệu 6
2. Bộ dữ liệu sử dụng 6
3. Mô tả bộ dữ liệu 6
II. Tiền xử lý 7
III. Triển khai thuật toán: 7
1. Thuật toán K-Means 7
1.1. Giới thiệu thuật toán 7
1.2. Triển khai thuật toán K-Means: 8
2.3. So sánh với kết quả khi sử dụng thư viện 13
2. Thuật toán DBSCAN 16
2.1. Giới thiệu thuật toán 16
2.2. Triển khai thuật toán DBSCAN 19
2.3. So sánh với kết quả khi sử dụng thư viện 24
3. Thuật toán BRICH 24
3.1. Giới thiệu thuật toán: 24
3.2. Triển khai thuật toán 26
3.3. So sánh kết quả với khi sử dụng thư viện 29
IV. Đánh giá các thuật toán 30
So sánh các thuật toán: 30
Phân công công công việc cho các thành viên trong nhóm
- Phân cụm dữ liệu là bài toán thuộc vào lĩnh vực học máy không giám sát
và đang được ứng dụng rộng rãi để khai thác thông tin hữu ích từ dữ liệu.
Phân cụm dữ liệu là quá trình phân chia một tập dữ liệu ban đầu thành
các cụm sao cho các đối tượng trong cùng một cụm “tương tự” nhau. Vì
vậy phải xác định được một phép đo “khoảng cách” hay phép đo tương tự
giữa các cặp đối tượng để phân chia chúng vào các cụm khác nhau. Dựa
vào hàm tính độ tương tự này cho phép xác định được hai đối tượng có
tương tự hay không. Theo quy ước, giá trị của hàm tính độ đo tương tự
càng lớn thì sự tương đồng giữa các đối tượng càng lớn và ngược lại.
Hàm tính độ phi tương tự tỉ lệ nghịch với hàm tính độ tương tự.
2. Bộ dữ liệu sử dụng
- Sử dụng bộ dữ liệu shopping – data bao gồm 200 quan sát về điểm chi
tiêu của khách hàng. Bộ dữ liệu bao gồm các trường thông tin đầu vào
như giới tính, độ tuổi, thu nhập và điểm chi tiêu. Một quan sát được đặc
trưng bởi trường CustomerID đại diện cho mã khách hàng.
- Link download: Mall Customer Segmentation Data | Kaggle
- Số bản ghi: 200
- Số thuộc tính: 5
+ CustomerID: mã ID duy nhất của khách hàng
+ Genre: giới tính
+ Age: độ tuổi
+ Annual Income: thu nhập hàng năm
+ Spending Score: điểm do trung tâm mua sắm chỉ định dựa trên
hành vi của khách hàng
=> Trong bài báo cáo này, ta sử dụng 2 thuộc tính Annual Income
và Spending Score để phân cụm các điểm cho bài toán do đây là 2 yếu tố
chính ảnh hưởng đến chi tiêu của khách hàng và việc quan sát tọa độ các
điểm trong không gian 2 chiều là trực quan hơn
II. Tiền xử lý
- Có rất nhiều phương pháp để chuẩn hóa dữ liệu. Đối với bài toán phân
cụm, ta cần chú ý đến 2 phương pháp là Normalize và Phát hiện, loại bỏ
điểm ngoại lai (nhiễu). Tuy nhiên ở bài toán này, dữ liệu mang tính demo
nên sẽ chỉ sử dụng phương pháp Normalize để chuẩn hóa dải giá trị các
thuộc tính về đoạn [0;1] để khi tính độ tương đồng bằng cách áp dụng các
hàm tính khoảng cách sẽ thu được độ chính xác cao hơn; biết được thuật
toán nào hoạt động tốt trên các điểm ngoại lai.
- Các bước thực hiện Normalize bao gồm:
+ Tính trung bình giá trị thuộc tính:
+ Chuẩn hóa lại từng giá trị thuộc tính cho từng bản ghi:
* Đầu tiên, xây dựng các hàm con để phục vụ tính toán.
- Hàm đọc dữ liệu từ file .csv, sử dụng thư viện pandas
- Hàm tính toán giá trị min, max của từng thuộc tính bằng cách duyệt qua
tất cả các điểm
- Hàm khởi tạo giá trị k tâm cụm có giá trị ngẫu nhiên nằm trong giải giá
trị của các thuộc tính
- Hàm tính khoảng cách Euclide để tính toán khoảng cách giữa 2 điểm
- Từ kết quả tâm cụm thu được, ta hoàn toàn tính được các điểm thuộc các
cụm đó bằng cách duyệt qua các điểm dữ liệu và phân từng điểm vào cụm
có khoảng cách đến tâm ngắn nhất
2.3. So sánh với kết quả khi sử dụng thư viện
Sử dụng mô hình KMeans trong thư viện sklearn chạy với đầu vào
dữ liệu, số cụm đầu vào giống với khi xây dựng thuật toán bằng tay. Kết
quả thu được sẽ được so sánh trực quan và bằng độ đo SSE (Sum of
Square Error): SSE càng nhỏ, độ phân cụm càng tốt
Các kết quả của 2 bên khá tương đồng nhau. Tuy nhiên, khi sử
dụng thư viện, thuật toán “k-means++” (là thuật toán giúp khởi tạo
centroid thông minh hơn và cải thiện chất lượng của phân cụm) đã được
áp dụng nên chắc chắn độ chính xác cao hơn, SSE nhỏ hơn so với khi sử
dụng thuật toán tự xây dựng mà kết quả 2 bên chênh lệch không lớn
=> Thuật toán tự xây dựng đã đạt được kết quả tốt
Trong đó D là tập hợp tất cả các điểm dữ liệu của tập huấn luyện.
- Định nghĩa 2: Khả năng tiếp cận trực tiếp mật độ (directly
density-reachable) đề cập tới việc một điểm có thể tiếp cận trực tiếp tới
một điểm dữ liệu khác. Cụ thể là một điểm Q được coi là có thể tiếp cận
trực tiếp bởi điểm P tương ứng với tham số epsilon và minPts nếu như nó
thoả mãn hai điều kiện:
🡪 một điểm dữ liệu có thể tiếp cận được trực tiếp tới một điểm
khác không chỉ dựa vào khoảng cách giữa chúng mà còn phụ thuộc
vào mật độ các điểm dữ liệu trong vùng lân cận epsilon phải tối
thiểu bằng minPts. Khi đó vùng lân cận được coi là có mật độ cao
và sẽ được phân vào các cụm.
🡪 Trái lại thì vùng lân cận sẽ có mật độ thấp. Trong trường hợp
mật độ thấp thì điểm dữ liệu ở trung tâm được coi là không kết nối
trực tiếp tới những điểm khác trong vùng lân cận và những điểm
này có thể rơi vào biên của cụm hoặc là một điểm dữ
liệu nhiễu không thuộc về cụm nào
- Định nghĩa 3: Khả năng tiếp cận mật độ (density-reachable) liên quan
đến cách hình thành một chuỗi liên kết điểm trong cụm. Cụ thể là trong
một tập hợp chuỗi điểm {Pi}i=1-> n ⊂D mà nếu như bất kì một điểm Pi nào
cũng đều có thể tiếp cận trực tiếp mật độ (định nghĩa 2) bởi Pi-1 theo tham
số epsilon và minPts thì khi đó ta nói điểm P=Pn có khả năng kết nối mật
độ tới điểm Q=P1
− Bước 1: Thuật toán lựa chọn một điểm dữ liệu bất kỳ. Sau đó tiến hành
xác định các điểm lõi và điểm biên thông qua vùng lân cận epsilon bằng
cách lan truyền theo liên kết chuỗi các điểm thuộc cùng một cụm.
− Bước 2: Cụm hoàn toàn được xác định khi không thể mở rộng được
thêm. Khi đó lặp lại đệ quy toàn bộ quá trình với điểm khởi tạo trong số
các điểm dữ liệu còn lại để xác định một cụm mới.
epsilon = 0.1127
minpts = 10
epsilon = 0.1209
minpts = 10
Hình dưới đây là một ví dụ về cây CF. Một cây CF chứa các nút
trong và nút lá. Nút trong lưu trữ tổng các đặc trưng cụm của các nút con
của nó.
def distance(self,other):
distance = 0
num = 0
matching = []
for key,val in self.items():
num += 1
if key in other:
matching.append(key)
distance += (val - other[key]) ** 2
else:
distance += val ** 2
return sqrt(distance)
dist = item.distance(node)
#if not force:
# print "d:",dist,len(node),len(list)
if not min_item:
min_item = item
min_dist = dist
elif dist < min_dist:
min_dist = dist
min_item = item
return min_item
# refresh CF vector
self.update_cf(vector)
closest = self.closest(vector,self.children)
if closest:
closest.trickle(vector)
else:
l = Leaf()
l.trickle(vector)
self.add_node(l)
c1,c2 = self.farthest_pair(self.children)
old_children.remove(c1)
old_children.remove(c2)
while old_children:
c = old_children.pop()
if node1.distance(c) > node2.distance(c):
node2.add_node(c,True)
else:
node1.add_node(c,True)
Kết quả thu được khi chạy thuật toán thủ công(bên phải) và sử dụng thư viện(bên
trái)