Tải bản đầy đủ (.docx) (8 trang)

Bài giữa kỳ môn khai thác dữ liệu và ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (279.34 KB, 8 trang )

Bài Kiểm Tra giữa kì Khai thác Dữ liệu & Ứng dụng

1/ Mơ tả bài tốn
K-mean clustering là một phương pháp để tìm các cụm và hạt nhân - trung tâm
của cụm trong một tập hợp dữ liệu không được gắn nhãn. Người ta chọn số lượng
hạt nhân cụm mong muốn phân chẳng hạn như k cụm. Thuật toán K-mean di
chuyển lặp đi lặp lại các hạt nhân để giảm thiểu tổng số trong phương sai cụm. Với
một tập hợp các hạt nhân ban đầu, thuật toán Kmeans lặp lại hai bước:
-

Đối với mỗi hạt nhân, tính tốn khoảng cách giữa các training ponit với nó
và nếu gần nó hơn -> sẽ gán là cụm của hạt nhân đấy.
Sau khi phân được cụm như ở bước trên, thì tiếp theo các training point của
các cụm tính tốn vector trung bình để được vị trí của hạt nhân mới và lặp
lại bước trên đến khi không thể thay đổi được vị trí hạt nhân nữa.

Phân cụm có nhiều hữu ích đặc biệt và cực kỳ phổ biến trong ngành khoa học dữ
liệu. Trong đó như :
-

-

Phân tích cụm được sử dụng rộng rãi trong nghiên cứu thị trường, nhận dạng
mẫu, phân tích dữ liệu và xử lý ảnh.
Phân tích cụm cũng có thể giúp các nhà khoa học dữ liệu khám phá ra các
nhóm khác hàng của họ. Và họ có thể mơ tả đặc điểm nhóm khách hàng của
mình dựa trên lịch sử mua hàng.
Trong lĩnh vực sinh học, nó có thể được sử dụng để xác định phân loại thực
vật và động vật, phân loại các gen có chức năng tương tự và hiểu sâu hơn về
các cấu trúc vốn có của quần thể.


2/ Mơ tả giải thuật


3/ Dựa vào thuật tốn (cơng thức, model), từng bước tính ra kết quả.
3.1/ Model tổng quan

3.2/ Bài làm chi tiết
1/ Khởi tạo ngẫu nhiên k tâm cụm μ1,μ2,…,μk.
2/ Lặp lại quá trình cập nhật tâm cụm cho tới khi dừng:


a/ Xác định nhãn cho từng điểm dữ liệu ci dựa vào khoảng cách tới từng tâm cụm:

b/ Tính tốn lại tâm cho từng cụm theo trung bình của tồn bộ các điểm dữ liệu
trong một cụm:

Trong công thức 2.a thì ‖x‖22 là bình phương của norm chuẩn bậc 2, kí hiệu
là L2, norm chuẩn bậc 2 là một độ đo khoảng cách thường được sử dụng trong
machine learning.
Trong công thức 2.b chúng ta sử dụng hàm 1(.), hàm này có giá trị trả về là 1
nếu nhãn của điểm dữ liệu ci được dự báo thuộc về cụm j, trái lại thì trả về giá trị
0. Như vậy tử số của vế phải trong cơng thức 2.b chính là tổng khoảng cách của
toàn bộ các điểm dữ liệu nằm trong cụm j trong khi mẫu số chính là số lượng các
điểm dữ liệu thuộc cụm j. μj chính là vị trí của tâm cụm j mà ta dự báo tại thời
điểm hiện tại. Trong thuật tốn trên thì tham số mà chúng ta cần lựa chọn chính là
số lượng cụm k. Thời điểm ban đầu ta sẽ khởi tạo k điểm dữ liệu một cách ngẫu
nhiên và sau đó gán các tâm bằng giá trị của k điểm dữ liệu này
4/ Nhận xét
Thuật tốn K-means có ưu điểm là dễ dàng cài đặt cho kết quả dễ hiểu,
nhưng lại có nhược điểm là phải chỉ ra số lượng cluster và yêu cầu CSDL cần phân

nhóm phải xác định được tâm. Thuật tốn này khơng phù hợp với việc khai phá các
dữ liệu gồm các cluster có hình dạng khơng lồi và KMeans hay gặp lỗi với các dữ
liệu có phần tử ngoại lai (outliers). Đối với các tập dữ liệu có số chiều lớn dữ liệu
có nhiều phần tử nhiễu như các tập dữ liệu biểu hiện gien thì giải thuật Kmeans
thực hiện không đạt hiệu quả cao
Một trong những nhược điểm chính của k- có nghĩa là phân cụm là một thực
tế rằng bạn phải xác định số lượng các cụm như là một đầu vào cho thuật toán.


Theo thiết kế, thuật tốn khơng có khả năng xác định số cụm thích hợp và phụ
thuộc vào người dùng để xác định điều này trước.
Ví dụ: nếu bạn có một nhóm người sẽ được nhóm dựa trên nhận dạng giới
tính nhị phân là nam hoặc nữ, hãy gọi thuật tốn k- có nghĩa là sử dụng đầu vào k
= 3 sẽ buộc mọi người thành ba cụm khi chỉ có hai hoặc một đầu vào của k = 2, sẽ
cung cấp một sự phù hợp tự nhiên hơn. Tương tự, nếu một nhóm các cá nhân dễ
dàng được nhóm lại dựa trên trạng thái nhà và bạn gọi là thuật tốn k- có nghĩa là
với đầu vào k = 20, kết quả có thể quá tổng quát để có hiệu quả.
5/ Code mẫu
Code bằng Python được chạy trên ứng dụng Colaboratory
from google.colab import drive
drive.mount('/content/gdrive')
import numpy as np
import matplotlib.pyplot as plt
from __future__ import print_function
# tinh toan khoang cach cap diem trong 2 tap hop hieu qua
from scipy.spatial.distance import cdist
#print(np.random.seed(11))
# 3 center
means = [[2,2], [8,3], [3,6]]
# khoi tao ma tran hiep phuong sai la ma tran don vi

cov = [[1,0], [0,1]]
# so du lieu moi cluster
N=500
# khoi tao cac cluster
X0 = np.random.multivariate_normal(means[0], cov, N)
X1 = np.random.multivariate_normal(means[1], cov, N)
X2 = np.random.multivariate_normal(means[2], cov, N)
# join
X = np.concatenate((X0,X1,X2), axis = 0)
K = 3
original_label = np.asarray([0]*N + [1]*N + [2]*N).T
print(original_label)

def kmeans_display(X, label):
K = np.amax(label) +1
X0 = X[label == 0,:]


X1 = X[label == 1,:]
X2 = X[label == 2, :]
plt.plot(X0[:, 0], X0[:, 1],
plt.plot(X1[:, 0], X1[:, 1],
plt.plot(X2[:, 0], X2[:, 1],
# thiet lap ti le 2 cot bang
plt.axis('equal')
plt.plot()
plt.show()

'b^', markersize=4, alpha =.8)
'go', markersize=4, alpha =.8)

'rs', markersize=4, alpha =.8)
nhau

kmeans_display(X,original_label)

Kết quả in ra:

# khoi tao center ban dau
def kmeans_init_centers(X, k):
# randomly pick k rows of X as initial centers [chọn ngẫu nhiên k hàng
X làm tâm ban đầu] x
return X[np.random.choice(X.shape[0], k, replace=False)]
# gan nhan moi cho cac diem khi biet conter
def kmeans_assign_labels(X, centers):
# calculate pairwise distances btw [tính tốn khoảng cách theo cặp btw
] x data and centers
D = cdist(X, centers)
# return index of the closest center [chỉ mục trả về của trung tâm gần
nhất] x
return np.argmin(D, axis = 1)
# để cập nhật các centers mới dua trên dữ liệu vừa được gán nhãn.


def kmeans_update_centers(X, labels, K):
centers = np.zeros((K, X.shape[1]))
for k in range(K):
# collect all points assigned to the k-th cluster [thu thập tất cả
các điểm được giao cho cụm thứ k] x
Xk = X[labels == k, :]
# take average [lấy trung bình] x

centers[k,:] = np.mean(Xk, axis = 0)
return centers
# kiem tra dieu kiem dung cua thuat toan
def has_converged(centers, new_centers):
# return True if two sets of centers are the same [trả về True nếu hai
tập trung tâm giống nhau] x
return (set([tuple(a) for a in centers]) ==
set([tuple(a) for a in new_centers]))
def kmeans(X,K):
centers = [kmeans_init_centers(X,K)]
labels = []
it =0
while True:
labels.append(kmeans_assign_labels(X, centers[-1]))
new_centers = kmeans_update_centers(X, labels[-1],K)
if has_converged(centers[-1], new_centers):
break
centers.append(new_centers)
it += 1
return (centers, labels, it)

def loss(label, original_label):
l =0
for i in range(len(original_label)):
if label[i] != original_label[i]:
l +=1
return l
(centers, labels, it) = kmeans(X,K)
print('Centers found by our algorithm: ')
print(centers[-1])

original_label = np.asarray([2]*N + [0]*N + [1]*N).T
print(loss(labels[-1],original_label))
kmeans_display(X, labels[-1])


In ra kết quả :

from sklearn.cluster import KMeans
# khoi tao model va fit du lieu
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
print('Center found by sckit-learn:')
print(kmeans.cluster_centers_)
# prediction du lieu
pred_label = kmeans.predict(X)
kmeans_display(X, pred_label)

Kết quả cuối cùng:




×