UPDATE: 01 FEBRUARI 2019
BAHASA: C#
SYSTEM:
a. Windows 10
b. IDE : SharpDevelop Version : 5.1.0.5216-0e58df71
c. .NET Version : 4.7.03056
PENGANTAR:
Clustering adalah bahasan cukup sering kita dengar pada teknik data minning. Ada banyak teknik yang bisa kita gunakan, mulai dari algoritma kmeans clustering, k-nearest neighbor, ataupun fuzzy c-means clustering, kohonen (versi LVQ unsupervisi). Penulis menggunakan fuzzy c-means clustering untuk menentukan center tiap kelompok data. Kamu bisa membaca tutorial di https://edrianhadinata.wordpress.com/2013/12/19/metode-clustering-algoritma-fuzzy-cmeans/.DATASET:
Berikut contoh dataset yang kita gunakan, terdiri 2 parameter saja X dan YBila kita plotkan menjadi berikut
Mari kita lihat satu-satu, dari data diatas, tugas C Means Clustering yaitu mencari Centroid untuk masing-masing kelas
Atau dalam bentuk grafik
Penulis mengimplementasikan nya menggunakan bahasa C#, kamu bisa melihat potongan kode berikut
Console.WriteLine("Demo Learning Vector Quantization");
double[,] data = new double[,] {
{10,8},
{4,5},
{2,3},
{9,7},
{0,1}
};
int data_n = data.GetLength(0); //jumlah data
int in_n = data.GetLength(1); //jumlah paramater
int cluster_n = 2; //jumlah cluster
int max_iterasi = 10;
double min_impro = 0.0001;
int expo = 2; //sering disebut bobot
//sebagai nilai keanggotaan awal
double [,] U = new double[,] {
{0.3000, 0.6000, 0.7000, 0.4000,0.8000},
{0.7000, 0.4000, 0.3000, 0.6000, 0.2000}
};
FCM fcm = new FCM();
fcm.Hitung(data, U, cluster_n,expo, min_impro,max_iterasi);
double[,] UNew = fcm.UNew;
double[,] center = fcm.Center;
int[] kelas = fcm.Kelas;
Program.Cetak("Center ",center);
Program.Cetak("U Baru ",UNew);
Program.Cetak("Kelas ",kelas);
Console.ReadKey();
output
Demo Learning Vector Quantization
Center
1.751 2.75
9.349 7.428
U Baru
0.008 0.773 0.998 0.004 0.955
0.992 0.227 0.002 0.996 0.045
Kelas
1 0 0 1 0
Terlihat bahwa C Means Clustering sudah memberikan nilai Centroid sekaligus labeling kelas tiap data, akan tetapi untuk kasus diatas, inisialisasi nilai U (bobot dilakukan secara manual), bagaimana jika menggunakan data yang cukup besar?
Console.WriteLine("Demo Learning Vector Quantization");
double[,] data = new double[,] {
{7,8,1},
{4,13,1},
{8,7,1},
{8,9,1},
{3,12,1},
{3,1,1},
{5,3,1},
{3,13,1},
{9,8,1},
{3,5,1},
{8,8,1},
{2,13,1},
{1,3,1},
{3,14,1}
};
int data_n = data.GetLength(0); //jumlah data
int in_n = data.GetLength(1); //jumlah paramater
int cluster_n = 4; //jumlah cluster
int max_iterasi = 10;
double min_impro = 0.0001;
int expo = 2; //sering disebut bobot
FCM fcm = new FCM();
double [,] U = fcm.InisiasiU(cluster_n, data_n); //jika bilangan random
fcm.Hitung(data, U, cluster_n,expo, min_impro,max_iterasi);
double[,] UNew = fcm.UNew;
double[,] center = fcm.Center;
int[] kelas = fcm.Kelas;
Program.Cetak("Data ",data);
Program.Cetak("Center ",center);
Program.Cetak("U Baru ",UNew);
Program.Cetak("Kelas ",kelas);
Console.ReadKey();
Output
Demo Learning Vector Quantization
Data
7 8 1
4 13 1
8 7 1
8 9 1
3 12 1
3 1 1
5 3 1
3 13 1
9 8 1
3 5 1
8 8 1
2 13 1
1 3 1
3 14 1
Center
2.806 2.783 1
8.049 8.282 1
2.995 12.996 1
7.756 7.178 1
U Baru
0.013 0.009 0.002 0.007 0.011 0.896 0.729 0 0.01 0.717 0.001 0.009 0.887 0.008
0.5 0.025 0.052 0.852 0.024 0.037 0.095 0 0.679 0.098 0.897 0.016 0.038 0.017
0.014 0.946 0.001 0.011 0.945 0.02 0.034 1 0.011 0.056 0.001 0.961 0.028 0.962
0.473 0.02 0.944 0.131 0.02 0.047 0.141 0 0.3 0.13 0.1 0.014 0.047 0.014
Kelas
1 2 3 1 2 0 0 2 1 0 1 2 0 2
No comments:
Post a Comment