loading...

Minggu, 07 Januari 2018

Matlab Clustering Data with Fuzzy C Means

Teori

Ide dasar dari clustering untuk untuk melakukan prediksi seperti halnya clasification, tapi lebih kepada mencoba untuk melakukan grouping terhadap beberapa item yang mirip sesuai dengan batas kondisi yang ada.
Contoh kasus grouping
  1. Grouping tipe dokumen dengan kemiripan bahasa (beberapa dokumen dijadikan 1 group bila ditemukan bahasa yang sama)
  2. Grouping artikel/berita yang sama

 

 Algoritma Clustering

Terbagi menjadi 2 utama yaitu algoritma linear dan nonlinear
Linear clustering algorithm
  1. k-means clustering algorithm
  2. Fuzzy c-means clustering algorithm
  3. Hierarchical clustering algorithm
  4. Gaussian(EM) clustering algorithm
  5. Quality threshold clustering algorithm
Non-linear clustering algorithm
  1. MST based clustering algorithm
  2. kernel k-means clustering algorithm
  3. Density-based clustering algorithm
Penerapan Algoritma Clustering
  1. Recommender systems
  2. Anomaly detection
  3. Human genetic clustering
  4. Genom Sequence analysis
  5. Analysis of antimicrobial activity
  6. Grouping of shopping items
  7. Search result grouping
  8. Slippy map optimization
  9. Crime analysis
  10. Climatology

Setelah anda memahami overview diatas, jadi jangan salah untuk menggunakan algoritma dalam menangani kasus yang anda temui!

Persiapan Data

Biar paham, akan saya berikan contoh di link berikut untuk datasetnya http://www.softscients.web.id/2017/12/matlab-classification-learner-example.html
Gunakan data iris yaitu The Fisher Iris dataset consists of samples from three species of iris (Iris setosa, Iris virginica, and Iris versicolor). Features such as the length and the width of the sepals and petals were measured in centimeters.
Number of predictors: 4
Number of observations: 150
Number of classes: 3
Adalah data yang diambil dari 3 jenis bunga dengan genus iris, sebagai contoh (https://en.wikipedia.org/wiki/Iris_setosa) Iris Setosa dengan detail berikut

Dengan paramater nya yaitu petal dan sepal yang terdiri dari panjang dan lebarnya
https://en.wikipedia.org/wiki/Petal


Bila sudah memahami data yang akan kita olah, untungnya matlab  sudah menyediakan data yang kita butuhkan, cukup kita panggil dengan function berikut

clc;clear all;close all;
load iris.dat 
Terdiri dari 5 kolom yaitu

 Seperti berikut
 Dimana kode iris  (pada kolom ke 5)
1 setosa
2 versicolor
3 virginica

Visualisasi Data

Setelah kita paham, kita akan visualisasikan dalam bentuk 2 Dimensi yaitu sumbu X dan sumbu Y, kita akan menggunakan 2 paramater yaitu



clc;clear all;close all;
load iris.dat               
x = [iris(:,1), iris(:,end)];
y = [iris(:,3),iris(:,end)];
 
setosa_x = x(x(:,end)==1);
setosa_y = y(y(:,end)==1);
 
versicolor_x = x(x(:,end)==2);
versicolor_y = y(y(:,end)==2);
 
virginica_x = x(x(:,end)==3);
virginica_y = y(y(:,end)==3);

 
figure, 
scatter(setosa_x,setosa_y,'fill'); %setosa
hold on
scatter(versicolor_x,versicolor_y,'fill'); %versicolor
scatter(virginica_x,virginica_y,'fill'); %virginica
legend('setosa','versicolor','virginica')
xlabel('sepal length');
ylabel('petal length');
title('Visualisasi Data Iris'); 

menghasilkan

Clustering

Kita akan mencari Center masing-masing paramater menggunakan Fuzzy C-Means Clustering, silahkan untuk mempelajari code matlab berikut


clc;clear all;close all;
load iris.dat               
x = [iris(:,1), iris(:,end)];
y = [iris(:,3),iris(:,end)];
 
setosa_x = x(x(:,end)==1);
setosa_y = y(y(:,end)==1);
 
versicolor_x = x(x(:,end)==2);
versicolor_y = y(y(:,end)==2);
 
virginica_x = x(x(:,end)==3);
virginica_y = y(y(:,end)==3);
 
 
 
figure, 
scatter(setosa_x,setosa_y,'fill'); %setosa
hold on
scatter(versicolor_x,versicolor_y,'fill'); %versicolor
scatter(virginica_x,virginica_y,'fill'); %virginica
legend('setosa','versicolor','virginica')
xlabel('sepal length');
ylabel('petal length');
title('Visualisasi Data Iris');
 
cluster_n = 3;                          % Number of clusters
expo = 2.0;                             % Exponent for U
max_iter = 100;                         % Max. iteration
min_impro = 1e-6;                       % Min. improvement
min_display = 5;
opsi  = [expo max_iter min_impro min_display];
 
data = [x(:,1),y(:,1)];
[U, center, obj] = fcm(data,cluster_n,opsi);
for i=1:size(U,1)
    text(U(i,1),U(i,2),num2str(i),'FontWeight', 'bold','FontSize',20);
end
 
Jika run berkali-kali, akan menghasilkan berbeda-beda
 Karena kita menggunakan bilangan random sehingga nilainya berpindah-pindah, tapi itu bukan fokus kita, yang menjadi fokus kita adalah kita sudah menemukan center untuk ketiga jenis iris

Titik Center sebagai penentu jenis iris

Lalu bagaimana cara menggunakan nya? Bila sudah ditemukan center? Misalkan kita menggunakan sample no 3 (seharusnya termasuk iris setosa), mari kita cek




sample = data(3,:); %misalkan kita ambil data no 3
jarak = [];
for i =1:3
    jarak(i) = norm(U(i,:) - sample);
end
 
[value,indeks] = sort(jarak);
indeks_terkecil = indeks(1);
if indeks_terkecil == 1
    disp('Jenis Versicolor')
elseif indeks_terkecil ==2
     disp('Jenis Setosa')
elseif indeks_terkecil==3 
    disp('Jenis Virginica');
end

menghasilkan

Jenis Setosa 

Tidak ada komentar: