Thuật toán K-Means và K-Medoids

Một phần của tài liệu Machine Learning Toolbox trong MatLab (Trang 166)

8 Clustering Phân cụm

8.3 Thuật toán K-Means và K-Medoids

Thuật tốn phân cụm khơng phân cấp được thiết kế để phân cụm bộ dữ liệu ban đầu thành K cụm (clusters) và từ K cụm đầu ra tiến hành quản lý bộ dữ liệu. Do thuật tốn này khơng cần xác định ma trận khoảng cách giữa các điểm dữ liệu và các điểm dữ liệu cơ sở không cần phải được lưu trữ trong q trình chạy thuật tốn nên nó có thể được sử dụng với bộ dữ liệu lớn hơn nhiều so với thuật toán phân cụm phân cấp.

Một trong các thuật toán phân cụm khơng phân cấp nổi tiếng và phổ biến nhất đó chính là thuật tốn K-Means và phiên bản cải tiến của nó: Thuật tốn K-Means++. Có 2 hướng tiếp cận để khởi tạo thuật tốn K-Means đó là:

1. Chia bộ dữ liệu thành các cụm sẵn.

2. Khởi tạo các điểm trung tâm (center) của từng cụm.

8.3.1 Thuật tốn K-Means

Mơ hình tổng qt

Giả sử cóN điểm dữ liệu là:XXX = [xxx111,xxx222, ...,xxxNNN]∈Rd∗N vàK <N là số cụm mà ta muốn phân chia. Chúng ta cần tìm các điểm trung tâmccc111,ccc222, ...,ccckkk∈Rd∗1 và nhãn của các điểm dữ

8 CLUSTERING- PHÂN CỤM

liệu (nhãn biểu thị cho dữ liệu thuộc cụm nào). Với mỗi điểm dữ liệuxxxiii vàyyyiii=[yi1,yi2, ...,yik]là vector nhãn của nó, trong đóxxxiii được phân vào cụm kthìyik=1vàyi j=0 ∀j̸=k.

Nếu một điểm dữ liệuxxxiiiđược phân vào cụm có điểm trung tâm làccckkkthì sai số là(xxxiii−ccckkk).Ta

cần làm cực tiểu hóa giá trị hàm sai số:

yik∥xxxiii−ccckkk∥22 = K ∑ j=1

yi j∥xxxiii−ccckkk∥22

Khi đó sai số cho tồn bộ bộ dữ liệu là: L(YYY,CCC)= N ∑ i=1 K ∑ j=1 yi j∥xxxiii−ccckkk∥22.

Trong đóY=[yyy111,yyy222, ...,yyyNNN]là ma trận nhãn,C=[ccc111,ccc222, ...,ccckkk]là ma trận các điểm trung tâm. Để tối ưu hàm mất mát thì ta cần tìm các ma trậnY,Csao cho:

Y,CY,CY,C=argminY,CY,CY,C N ∑ i=1 K ∑ j=1 yi j∥xxxiii−cccjjj∥22 (1) v.d.k yi j∈ {0; 1} ∀i,j; K ∑ j=1 yi j=1 ∀i

Bài toán(1)thuộc loại mix-integer programming (điều kiện biến là số ngun) khá khó tìm nghiệm tối ưu tồn cục, nhưng ta vẫn có thể tìm được nghiệm gần đúng hoặc các nghiệm tối ưu địa phương. Một phương pháp đơn giản thường dùng để giải bài tốn này là xen kẽ tìmY, Ckhi có một yếu tố cố định. Đây là một thuật toán lặp, cũng là kỹ thuật phổ biến khi giải bài toán tối ưu. Chúng ta sẽ lần lượt giải quyết hai bài tốn sau đây:

TH1Giả sử đã tìm được các điểm trung tâm, hãy tìm các vector nhãn cho từng điểm sao cho hàm mất mát nhỏ nhất. yi yi yi =argminyiyyii K ∑ j=1 yi j∥xxxiii−cccjjj∥22 (2) v.d.k yi j∈ {0; 1} ∀i,j; K ∑ j=1 yi j=1 ∀i

Vì chỉ có một phần tử của vector nhãnyi =1nên ta có thể giản lược bài tốn (2) thành:

j=argminj∥xxxiii−cccjjj∥2 2

=⇒Mỗi điểmxxxiii cần thuộc vào cụm có điểm trung tâm gần nó nhất

TH2: Giả sử đã tìm được cụm cho từng điểm, ta cập nhật lại điểm trung tâm sao cho giá

trị hàm mất mát nhỏ nhất cj cj cj=argmincccjjj N ∑ i=1 yi j∥xxxiii−cccjjj∥22

8 CLUSTERING- PHÂN CỤM

Đặtl(cccjjj)là hàm bên trong dấu argmin, ta có đạo hàm:

∂l(cccjjj) ∂cccjjj =2 N ∑ i=1 yi j(cccjjj−xxxiii)

Giải phương trình đạo hàm bằng 0 để tìm nghiệm tối ưu

cccjjj N ∑ i=1 yi j = N ∑ i=1 yi jxxxiii ⇒cccjjj= ∑ N i=1yi jxxxiii ∑Ni=1yi j

Dựa vào mơ hình trên, MacQueen đề xuất thuật toán K-Means dựa trên ý tưởng phân chia từng điểm dữ liệu trong bộ dữ liệu χ vào cụm mà có điểm trung tâm gần nó nhất.

Thuật tốn cơ bản:

Algorithm 4Thuật toán K-Means

1: Chọn ngẫu nhiên các điểm tạo ra tậpCgồmKđiểm trung tâmC={ccc111,ccc222, ...,cccKKK}.

2: Với mỗii∈ {1,2, ..,K}, ta tạo ra cụmCigồm những điểm trongχ gần với điểm trung tâmccciiinhất (gần hơn so với các điểm trung tâmcccjjjcòn lại với j#i).

3: Với mỗii∈ {1,2, ..,K}, đặt lạiccciii= 1

|Ci| ∑

xxx∈Ci

xxxlà điểm trung tâm của cụmCi.

4: Lặp lại bước 2 và bước 3 đến khi khơng cịn sự thay đổi trong tập các điểm trung tâmC.

Thuật toán cải tiến K-Means++ với độ hiệu quảO(logk)với K là số cụm như sau, thuật toán này thường được chạy để tạo ra bộ điểm trung tâm trước khi chạy thuật toán K-Means. Các bước của thuật toán:

Algorithm 5Thuật toán K-Means++

1: Chọn ngẫu nhiên một điểm trung tâm đầu tiên từ bộ dữ liệu

2: Tính khoảng cáchD(x)với mỗi điểm dữ liệu x đến điểm trung tâm gần nó nhất

3: Chọn điểm trung tâm mới với xác suất D(x)

2

∑x∈χD(x)2 lớn nhất

4: Lặp lại bước2và bước3đến khi chọn đượcKđiểm dữ liệu

5: Chạy thuật toán K-Means vớiKđiểm trung tâm được khởi tạo

Cài đặt code

1. idx = kmeans(X,k)phân cụm dữ liệu X thành k cụm. 2. [idx,C]trả thêm về ma trận C chứa các điểm trung tâm.

8 CLUSTERING- PHÂN CỤM Ví dụ minh họa load fisheriris X = meas(:,3:4); rng(1); % For reproducibility [idx,C] = kmeans(X,3); x1 = min(X(:,1)):0.01:max(X(:,1)); x2 = min(X(:,2)):0.01:max(X(:,2)); [x1G,x2G] = meshgrid(x1,x2);

Sau khi vẽ hình xong ta thu được hình ảnh các điểm sau khi phân cụm là

8.3.2 Thuật toán K-Medoids

Tương tự như thuật toán K-Means, thuật toán K-Medoids cũng thuộc phân lớp NP-Hard và tiến hành phân cụm theo các điểm Medoids và chọn các điểm vào trong 1 cụm sao cho các điểm dữ liệu đó gần điểm Medoids nhất. Medoid khác với centroid (điểm trung tâm) của thuật toán K-Means ở điểm Medoid là điểm dữ liệu thực của bộ dữ liệu. Trong 1 cụm Medoid của cụm đó là điểm sao cho tổng khoảng cách trong 1 cụm của điểm đó là nhỏ nhất (Khoảng cách trong 1 cụm của 1 điểm là tổng các khoảng cách nối điểm đó với các điểm còn lại của bộ dữ liệu).

8 CLUSTERING- PHÂN CỤM

Algorithm 6Thuật toán K-Medoids

1: BuildChọn ra K điểm Medoids theo cách chọn điểm trung tâm của thuật toán K-Means++. Phân cụm các điểm dữ liệu vào cụm có điểm Medoids gần nó nhất.

2: Swap-StepCập nhật điểm Medoids trong cụm sao cho khoảng cách trong 1 cụm của điểm đó nhỏ nhất. Cập nhật lại cụm bằng cách phân cụm các điểm dữ loại cịn lại vào cụm có điểm Medoids gần nó nhất.

Cài đặt code

1. idx = kmedoids(X,k)phân bộ dữ liệu X thành k cụm theo phương pháp K-Medoids.

2. [idx,C] = kmedoids(X,k)trả thêm về ma trận chứa tọa độ các điểm medoid của bộ dữ liệu.

Ví dụ minh họa

rng(’default’); % For reproducibility

X = [randn(100,2)*0.75+ones(100,2);

randn(100,2)*0.55-ones(100,2)];

opts = statset(’Display’,’iter’);

[idx,C,sumd,d,midx,info] = kmedoids(X,2,’Distance’,’cityblock’,’Options’,opts);

8 CLUSTERING- PHÂN CỤM

8.4 Thuật tốn phân cụm theo mơ hình xác suất thống kê Gaussian Mixture

Về mặt trực quan, các phương pháp được thảo luận ở trên, bao gồm các phương pháp như phương pháp kết nối đơn, kết nối toàn phần, kết nối trung bình, phương pháp Ward hay là phương pháp K-means, cho ta một cách phân cụm hợp lí dựa vào các quan sát trong bộ dữ liệu. Tuy vậy, các cách phân cụm đó khơng cho ta biết được các quan sát đó được hình thành như thế nào, hay cụ thể hơn là ta không biết được phân phối của bộ dữ liệu. Các nghiên cứu đã chỉ ra rằng, hầu hết các phương pháp phân cụm nâng cao đều được xây dựng, phân tích và đánh giá dựa trên một mơ hình xác suất thống kê tốn học nào đó. Do đó, trong phần này, chúng ta sẽ xem xét một mơ hình xác suất thống kê hay được sử dụng để phân tích phân phối của bộ dữ liệu, đồng thời chỉ ra phương pháp phân cụm đối với mơ hình tốn học này. chúng ta sẽ xem xét một mơ hình tốn học biểu diễn phân phối của bộ dữ liệu. Ta sẽ xem xét mơ hình tốn học sau. XétX là biến ngẫu nhiênDchiều biểu diễn dữ liệu. Biến ngẫu nhiênX có hàm mật độ l:

fMix= K k=1 pkf(x;àk;k) (7) trong ú:

ã pk[0,1]l xỏc sut ca mt im d liu thuc vo phõn cmk.

ã f(x;àk;k)l hm mt xỏc suất của biến ngẫu nhiên biểu diễn dữ liệu thuộc phân cụm

k.

Một trong những mơ hình hay được sử dụng cho các phân phối thành phần là phân phối chuẩn nhiều chiềuN (µ,Σ), vớiµ và Σlần lượt là kì vọng và ma trận hiệp phương sai. Trong bài báo cáo này, chúng em sẽ xét các phân phối thành phần là các phân phối chuẩn nhiều chiều. Cụ thể,

f(x,µk,Σk)∼N (µk,Σk). Khi đó hàm mật độ fMix(x)sẽ có dạng: fMix= K ∑ k=1 pkf(x;µk;Σk) = K ∑ k=1 pk 1 (2π)D/2|Σk|1/2exp −1 2(x−µk)T Σ−1k (x−µk)

Quay trở lại bài tốn phân cụm, bây giờ ta cóN điểm dữ liệuxj Nj=1 và nhiệm vụ của ta bây giờ là phải phân cụm các điểm dữ liệu đó. Vậy áp dụng mơ hình tốn học ở trên, với số phân cụmK cố định, ta sẽ đi tìm các hệ số{pi}Ki=1,{µi}Ki=1,{Σi}Ki=1 để cực đại hóa hàm hợp lí sau:

8 CLUSTERING- PHÂN CỤM

L

{pi}Ki=1,{µi}i=1K ,{Σi}Ki=1= N ∏ j=1

fMix

xj | {pi}Ki=1,{µi}Ki=1,{Σi}Ki=1= N ∏ j=1 K ∑ k=1 pkf(xj;µk;Σk)

Để đơn giản về mặt kí hiệu, ta sẽ đặtθ ={pi}Ki=1,{µi}Ki=1,{Σi}Ki=1

Vậy khi đó ta sẽ phát biểu bài tốn như sau. Tìmθ để cực đại hóa hàm:

L(θ) = N ∏ j=1 K ∑ k=1 pkf(xj;µk;Σk) (P)

với điều kiện

(

∑Ki=1pi=1

pi≥0 ∀i={1,2, ..,K}

Áp dụng thuật tốn cực đại hóa kỳ vọng EM vào việc giải bài tốn (P), thuật tốn cực đại hóa kì vọng sẽ có đầu vào và đầu ra lần lượt là:

Đầu vào: Số phân cụmK, N điểm dữ liệu, phân phối tiền nghiệm fMix(x).

Đầu ra: Bộ hệ sốθb= {pbi}Ki=1,{µbi}Ki=1, n b Σi oK i=1 tối ưu Cài đặt code

1. GMModel = fitgmdist(X,k)phân cụm dữ liệu X với số cụm là k theo mơ hình GMM.

2. GMModel = fitgmdist(X,k,Name,Value)thay đổi các tham số liên quan đến mơ hình như là cách tính khoảng cách, số cụm,... Ví dụ minh họa mu1 = [1 2]; Sigma1 = [2 0; 0 0.5]; mu2 = [-3 -5]; Sigma2 = [1 0;0 1]; rng(1); % For reproducibility X = [mvnrnd(mu1,Sigma1,1000); mvnrnd(mu2,Sigma2,1000)];

8 CLUSTERING- PHÂN CỤM

Bộ dữ liệu X gồm 2 mẫu quan sát nhiều chiều kết hợp lại

GMModel = fitgmdist(X,2);

figure

y = [zeros(1000,1);ones(1000,1)]; h = gscatter(X(:,1),X(:,2),y);

hold on

gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(GMModel,[x0 y0]),x,y); g = gca;

fcontour(gmPDF,[g.XLim g.YLim])

title(’{\bf Scatter Plot and Fitted Gaussian Mixture Contours}’) legend(h,’Model 0’,’Model1’)

hold off

Trong không gian bộ dữ liệu tuân theo phân phối chuẩn nhiều chiều sẽ được phân bố theo dạng eliptic. Hình ảnh thu được sau khi phân cụm là:

8.5 Biểu diễn và đánh giá cách chia cụm

Do có rất nhiều cách biểu diễn và đánh giá nên trong bài báo cáo này, chúng em xin phép trình bày phương pháp phân tích Silhoutte một cách đánh giá hay được dùng trong thuật tốn phân cụm. Phân tích Silhoutte dùng để đo độ phân biệt giữa các cụm, tính chỉ số Silhoutte cho từng điểm trong cụm sau đó lấy trung bình lại cho ta giá trị Silhoutte trung bình để đánh giá độ phân biệt giữa các cụm. Ta xét:

8 CLUSTERING- PHÂN CỤM

I(i) = b(i)−a(i)

max(a(i),b(i)

Với a(i)là trung bình của khoảng cách từ điểm i đến tất cả các điểm khác trong một cụm.

b(i)là trung bình của khoảng cách từ điểm i đến tất cả các điểm trong một cụm gần nhất với cụm đang xét.

I(i)nhận giá trị trong khoảng[−1; 1]nên lấy trung bình tồn bộ chỉ số Silhoutte cho các điểm trong bộ dữ liệu ta đượcI là chỉ số Silhoutte trung bình.

• NếuI =1thì2cụm đang xét cách xa nhau. • NếuI =0thì2cụm đang xét đang rất gần nhau. • NếuI =−1 thì các điểm đã bị gán sai nhãn.

Sau khi xác định được chỉ số Silhoutte trung bình ta có thể đánh giá được cách phân cụm đó đã đủ tốt hay chưa.

8.5.1 Biểu diễn phân cụm

Ngoài cách biểu diễn phân cụm bằng dendogram, biểu diễn bằng phân tích Silhouette cũng là một phương pháp hay dùng

Cài đặt code

1. silhouette(X,clust)vẽ biểu đồ phân tích Silhoutte với bộ dữ liệu X và clust là vector chứa nhãn của các dữ liệu đấy

2. silhouette(X,clust,Distance) chuyển cách tính khoảng cách giữa các điểm theo kiểu

Distance.

Ví dụ minh họa

rng(’default’) % For reproducibility

X = [randn(10,2)+3;randn(10,2)-3]; clust = kmeans(X,2);

8 CLUSTERING- PHÂN CỤM

Ta có thể thấy chỉ số Silhoutte trung bình của số cụm là 2 thì cao hơn số cụm là 1 nên cách chia bộ dữ liệu thành 2 cụm tốt hơn.

8.5.2 Đánh giá cách phân cụm

Tiến hành đánh giá Silhoutte cho số phân cụm khác nhau cho 1 bộ dữ liệu để đưa ra số cụm hợp lý.

rng(’default’); % For reproducibility

mu1 = [1 1]; sigma1 = [0.9 -0.05; -0.05 0.9]; mu2 = [2 2]; sigma2 = [0.5 0 ; 0 0.3]; mu3 = [-2, -2]; sigma3 = [1 0 ; 0 0.9]; N = 200; X = [mvnrnd(mu1,sigma1,N);... mvnrnd(mu2,sigma2,N);... mvnrnd(mu3,sigma3,N)]; E = evalclusters(X,’kmeans’,’silhouette’,’klist’,[1:6]); figure; plot(E)

Sử dụng cách phân cụm theo thuật toán K-Means với số cụm trong klisttừ 1 đến 6. Ta vẽ được đồ thị thể hiện chỉ số Silhoutte trung bình của bộ dữ liệu theo số cụm K như sau:

8 CLUSTERING- PHÂN CỤM

Khi đó ta chọn số cụm có chỉ số Silhoutte trung bình lớn nhất là 3 làm cách chia cụm dữ liệu tốt nhất.

9 ỨNG DỤNG VÀO PROJECT CỤ THỂ

9 Ứng dụng vào Project cụ thể

9.1 Giới thiệu vấn đề

Neural Style Transfer là một bài toán khá thú vị trong vấn đề xử lý ảnh thuộc khối kiến thức Machine Learning. Bài toán đặt ra là từ 1 ảnh nội dung (content) ta sẽ vẽ lại ảnh đó theo phong cách hội họa hay theo phong cách vẽ tranh (style image) để làm bức ảnh ban đầu trở lên sinh động hơn. Các kết quả ảnh đầu ra của mơ hình thường rất đẹp và đã có nhiều bức ảnh được đấu giá lên tới nghìn đơ la Mỹ.

9 ỨNG DỤNG VÀO PROJECT CỤ THỂ

9.2 Lý thuyết chung

9.2.1 Mơ hình VGG 19

Mơ hình VGG 19 là một trong các mơ hình xử lý ảnh, phân loại ảnh rất nổi tiếng. Gồm các lớp nhân tích chập (convolution layer), lớp xử lý pooling, các hàm activation như Relu hay Softmax với đầu ra cuối cùng là phân loại ảnh vào đúng nhãn.

Mơ hình VGG 19 đã được training với bộ dữ liệu ảnh khổng lồ để đưa ra các tham số tối ưu cho các hàm activation, các tham số của mơ hình được cập nhật qua số lần epoch tương đối lớn (epoch là 1 lần chạy foward mơ hình + backward mơ hình).

Mơ hình VGG19 có thể học được các đường nét các đặc điểm của các ảnh qua từng Layer, các Layer đầu tiên mơ hình học các đường nét của ảnh, các Layer sâu hơn sẽ học đến các đặc diểm phức tạp trong ảnh như trong ảnh có những gì (người,đồ vật, con vật,...) và cuối cùng sẽ đi qua 2 lớp Fully Connected chuyển đổi các khối ma trận thành các vecto node kết nối với nhau và đi qua hàm activation Softmax để phân loại ảnh vào các nhãn.

Trong bài tốn này, ta sẽ cài đặt mơ hình VGG 19 đã được traing với bộ dữ liệu lớn để xử lý vấn đề "học" các đường nét của ảnh. Bài toán này sẽ bỏ đi các lớp Fully Connected những Layer cuối của mơ hình vì đầu ra khơng phải là phân loại ảnh. Đầu vào là 3 ảnh content, style và 1 ảnh được khởi tạo với các pixel ngẫu nhiên. Sau mỗi lần epoch ảnh khởi tạo sẽ học được những đường nét của cả ảnh content và ảnh style.

9 ỨNG DỤNG VÀO PROJECT CỤ THỂ

Ý tưởng chínhHàm mất mát:

J(G) =αJcontent(C,G) +βJstyle(S,G).

Dùng thuật tốn Gradient Decent để tìmminJ(G).

Một phần của tài liệu Machine Learning Toolbox trong MatLab (Trang 166)

Tải bản đầy đủ (PDF)

(184 trang)