Articles

Koding Algoritma K-Means Dengan Ecludian Distance Menggunakan Java

Langkah-langkah Algoritma K-Means
1.Tentukan jumlah cluster
2.Tentukan centroid awal dari tiap cluster (Using Lower and Upper bounds or Randomly)
3.Alokasikan data dengan jumlah cluster yang ditentukan berdasarkan jarak terdekat dengan centroid (menggunakan rumus Ecludien distance space atau Manhattan/City Block distance space)
4.Setelah cluster dan anggotanya terbentuk, hitung mean tiap cluster dan jadikan sebagai centroid baru
5.Kembali ke-3 apabila masih terdapat perpindahan data dari satu cluster ke cluster yang lain, atau apabila perubahan pada nilai centroid masih di atas nilai threshold yang ditentukan
Studi Kasus Perhitungan Algoritma K-Means
Misalkan terdapat data sebanyak 6 record dimana data tersebut memiliki atribut Nilai 1 dan Nilai 2. Pada dataset ini tidak memiliki label sehingga data ini cocok untuk kasus K-Means

 

Dari data diatas kodinnya sebagai berikut

import java.util.ArrayList;
public class KMeans_Ex4a
{
private static final int NUM_CLUSTERS = 2; // jumlah kluster
private static final int TOTAL_DATA = 6; // jumlah data

private static final double SAMPLES[][] = new double[][] {{1.0, 1.0},
{2.5, 2.0},
{3.0, 5.5},
{8.0, 7.0},
{4.0, 4.0},
{6.0, 5.0}};

private static ArrayList dataSet = new ArrayList();
private static ArrayList centroids = new ArrayList();

private static void initialize()
{
System.out.println("Centroids initialized at:");
centroids.add(new Centroid(1.0, 1.0)); // lowest set.
centroids.add(new Centroid(8.0, 7.0)); // highest set.
System.out.println(" (" + centroids.get(0).X() + ", " + centroids.get(0).Y() + ")");
System.out.println(" (" + centroids.get(1).X() + ", " + centroids.get(1).Y() + ")");
System.out.print(" ");
return;
}

private static void kMeanCluster()
{
final double bigNumber = Math.pow(10, 10);
double minimum = bigNumber;
double distance = 0.0;
int sampleNumber = 0;
int cluster = 0;
boolean isStillMoving = true;
Data newData = null;

// perhitungan data baru
while(dataSet.size() < TOTAL_DATA)
{
newData = new Data(SAMPLES[sampleNumber][0], SAMPLES[sampleNumber][1]);
dataSet.add(newData);
minimum = bigNumber;
for(int i = 0; i < NUM_CLUSTERS; i++)
{
distance = dist(newData, centroids.get(i));
if(distance < minimum){
minimum = distance;
cluster = i;
}
}
newData.cluster(cluster);

// kalkulasi centroid baru
for(int i = 0; i < NUM_CLUSTERS; i++)
{
int totalX = 0;
int totalY = 0;
int totalInCluster = 0;
for(int j = 0; j < dataSet.size(); j++)
{
if(dataSet.get(j).cluster() == i){
totalX += dataSet.get(j).X();
totalY += dataSet.get(j).Y();
totalInCluster++;
}
}
if(totalInCluster > 0){
centroids.get(i).X(totalX / totalInCluster);
centroids.get(i).Y(totalY / totalInCluster);
}
}
sampleNumber++;
}


while(isStillMoving)
{
// calculate new centroids.
for(int i = 0; i < NUM_CLUSTERS; i++)
{
int totalX = 0;
int totalY = 0;
int totalInCluster = 0;
for(int j = 0; j < dataSet.size(); j++)
{
if(dataSet.get(j).cluster() == i){
totalX += dataSet.get(j).X();
totalY += dataSet.get(j).Y();
totalInCluster++;
}
}
if(totalInCluster > 0){
centroids.get(i).X(totalX / totalInCluster);
centroids.get(i).Y(totalY / totalInCluster);
}
}


isStillMoving = false;

for(int i = 0; i < dataSet.size(); i++)
{
Data tempData = dataSet.get(i);
minimum = bigNumber;
for(int j = 0; j < NUM_CLUSTERS; j++)
{
distance = dist(tempData, centroids.get(j));
if(distance < minimum){
minimum = distance;
cluster = j;
}
}
tempData.cluster(cluster);
if(tempData.cluster() != cluster){
tempData.cluster(cluster);
isStillMoving = true;
}
}
}
return;
}
private static double dist(Data d, Centroid c)
{
return Math.sqrt(Math.pow((c.Y() - d.Y()), 2) + Math.pow((c.X() - d.X()), 2));
}

private static class Data
{
private double mX = 0;
private double mY = 0;
private int mCluster = 0;

public Data()
{
return;
}

public Data(double x, double y)
{
this.X(x);
this.Y(y);
return;
}

public void X(double x)
{
this.mX = x;
return;
}

public double X()
{
return this.mX;
}

public void Y(double y)
{
this.mY = y;
return;
}

public double Y()
{
return this.mY;
}

public void cluster(int clusterNumber)
{
this.mCluster = clusterNumber;
return;
}

public int cluster()
{
return this.mCluster;
}
}

private static class Centroid
{
private double mX = 0.0;
private double mY = 0.0;

public Centroid()
{
return;
}

public Centroid(double newX, double newY)
{
this.mX = newX;
this.mY = newY;
return;
}

public void X(double newX)
{
this.mX = newX;
return;
}

public double X()
{
return this.mX;
}

public void Y(double newY)
{
this.mY = newY;
return;
}

public double Y()
{
return this.mY;
}
}

public static void main(String[] args)
{
initialize();
kMeanCluster();

// Print out clustering results.
for(int i = 0; i < NUM_CLUSTERS; i++)
{
System.out.println("Cluster " + i + " includes:");
for(int j = 0; j < TOTAL_DATA; j++)
{
if(dataSet.get(j).cluster() == i){
System.out.println(" (" + dataSet.get(j).X() + ", " + dataSet.get(j).Y() + ")");
}
} // j
System.out.println();
} // i

// Print out centroid results.
System.out.println("Centroids finalized at:");
for(int i = 0; i < NUM_CLUSTERS; i++)
{
System.out.println(" (" + centroids.get(i).X() + ", " + centroids.get(i).Y());
}
System.out.print(" ");return;
}
}


Related Articles


43 Komentar :


Artikel Tentang Kegunaan Teripang Emas

04 Desember 2017 - 13:57 WIB

terimakasih atas informasinya
Daftar Harga Kaos Anak Murah di bandung

29 September 2017 - 14:31 WIB

website ini memberikan segala informasi yang bagus dan bermanfaat

grosir jilbab dress online

26 Agustus 2017 - 14:53 WIB

saya berterimakasih karena website ini selalu memberikan hal menarik kepada para pembaca

grosir jilbab arrafi online

23 Agustus 2017 - 14:24 WIB

informasi ini sangat bagus sekali untuk di baca

grosir jilbab murah online

21 Agustus 2017 - 14:15 WIB

Terimakasih atas informasinya yang bermanfaat ini semoga pembaca sangat kagum atas artikelnya

Tabung Pemadam Kebakaran Murah

05 Agustus 2017 - 09:28 WIB

makasih gan, lanjutkan update nya

Supplier Tabung Pemadam Kebakaran Murah

05 Agustus 2017 - 09:54 WIB

ditunggu update selanjutnya

Harga Tabung Pemadam Kebakaran Murah

05 Agustus 2017 - 10:22 WIB

pertamax gan terimakasih untuk infonya

Harga Tabung Pemadam Kebakaran

05 Agustus 2017 - 10:48 WIB

artikelnya sudah bagus, di tunggu update terbarunya terimakasih

Distributor Tabung Pemadam Kebakaran Murah

05 Agustus 2017 - 11:16 WIB

terimakasih karena telah setia menemani dan terus bertahan selama ini.

Distributor Tabung Pemadam Kebakaran

05 Agustus 2017 - 11:45 WIB

informasi yang bagus sekali semoga info ini bermanfaat bagi orang lain

Toko Tabung Pemadam Kebakaran Murah

05 Agustus 2017 - 13:33 WIB

Terimakasih atas informasinya yang bermanfaat ini semoga pembaca sangat kagum atas
Toko Tabung Pemadam Kebakaran

05 Agustus 2017 - 14:02 WIB

terimakasih atas informasinya

Jual Tabung Pemadam Kebakaran Portable

05 Agustus 2017 - 14:29 WIB

informasi ini sangat bagus sekali untuk di baca

Tabung Pemadam Kebakaran Portable

05 Agustus 2017 - 14:52 WIB

saya kagum dengan artikel ini banyak sekali yang berminat membaca artikel ini

Tabung Pemadam Kebakaran

28 Juli 2017 - 10:14 WIB

baik sekali agan membuat informasi yang bagus seperti ini lanjutkan

grosir jilbab murah

18 Juli 2017 - 14:36 WIB

saya berterimakasih karena website ini selalu memberikan hal menarik kepada para pembaca

Kaos Promosi

05 Juni 2017 - 14:51 WIB

This is very good information to read
prodipus leason

23 Mei 2017 - 12:09 WIB

great info
Dawud

22 Mei 2017 - 10:19 WIB

Catatan yang ada di blog ini sangat menarik untuk di ikuti karena mempunyai bobot yang bagus.
https://goo.gl/WJH1Ju | https://goo.gl/akQBWL | https://goo.gl/FI0Gub | https://goo.gl/pe5g9h | https://goo.gl/dMPdMq | https://goo.gl/9rG3N6 | https://goo.gl/giBtqa | https://goo.gl/BxBXcZ | https://goo.gl/0d7Kp4 | https://goo.gl/GWdiKV
Cara-membuat hotspot wifi di laptop

16 Februari 2017 - 09:55 WIB

Menarik artikelnya, mari kita berbagi ilmu
http://goo.gl/ndfy3B ; https://goo.gl/PxXhnY ; http://goo.gl/dxR19t ; http://goo.gl/QXXDw1
http://goo.gl/0Rq9KK
Cara Mengobati Penyakit Depetits Numularis

04 Februari 2017 - 10:21 WIB

Terimakasih banyak infonya, semoga bermanfaat
https://goo.gl/Mz1UK0
MADU PENYUBUR

30 Januari 2017 - 08:12 WIB

Saya salut dengan informasi yang ada di dalam website ini karena banyak sekali yang membaca artikel ini.

musttrie's blog

25 Januari 2017 - 08:15 WIB

Senang bisa mampir di tempat anda http://goo.gl/Zd0WV2
http://goo.gl/fClLM8
musttrie-art.blogspot

20 Januari 2017 - 08:22 WIB

Jika ada pembaca yang butuh info seputar komputer dan software silakan mampir di https://goo.gl/YMGwLc
Obat alami tradisional penyakit kista

09 Januari 2017 - 08:57 WIB

Harapannya website ini makin maju dan informatif http://goo.gl/Abtuqd
http://goo.gl/EmFQIA ; http://goo.gl/DNZqjy ; http://goo.gl/u5dJTW ; http://goo.gl/uy2X32
http://goo.gl/qDj57M ; http://goo.gl/Zd0WV2 ; http://goo.gl/fClLM8
Cara flash/upgrade-oppo-joy-r1001

04 Januari 2017 - 08:53 WIB

Sukses untuk websitenya https://goo.gl/imVWLI
https://goo.gl/ZHnUEo ; https://goo.gl/GTVSdT ; https://goo.gl/9I8WQz
https://goo.gl/xNCm8Y ; https://goo.gl/zUL5Hu ; https://goo.gl/rdmLzD
Cara instal Winrar 32bit/64bit menjadi full

11 Desember 2016 - 07:26 WIB

Semoga tambah sukses dan cerdas, https://goo.gl/5fp1c6 ; https://goo.gl/p1Rfu3
https://goo.gl/JdyDyP + https://goo.gl/uAH7ns + https://goo.gl/ZUgvw9 + https://goo.gl/xJTY9q
Muncul error-logon-process Initialization Failure & solusinya

21 November 2016 - 08:27 WIB

Websitenya bagus dan yang ditunggu selalu update http://goo.gl/AdUmZP
http://goo.gl/ndfy3B ; http://goo.gl/jirpO2 ; http://goo.gl/MEoa3A ; http://goo.gl/cT7pNJ ; http://goo.gl/U0Kcwo
Laptop bunyi beep saat dinyalakan

10 Oktober 2016 - 06:29 WIB

Semakin menarik untuk dipelajari, http://goo.gl/SDmFKo : http://goo.gl/SDmFKo
http://goo.gl/h8WXBD ; http://goo.gl/MEoa3A ; http://goo.gl/ndfy3B ; http://goo.gl/cT7pNJ
Cara Membuat Tempe Sendiri

20 September 2016 - 11:52 WIB

Keren banget nih artikel

Cara Membuat Susu Kedelai Sendiri

20 September 2016 - 11:52 WIB

Saya suka dengan web dan beritanya

Resep Nugget Mudah dan Praktis

20 September 2016 - 11:53 WIB

Beritanya sangat menarik

Resep Pizza Praktis dan Lezat

20 September 2016 - 11:54 WIB

Good job

Cara membuat sendiri cd/dvd instaler windows 100% berhasil

14 September 2016 - 06:36 WIB

Sangat menarik gan, ini memang harus diikuti http://goo.gl/tyMiwX
http://goo.gl/ojBwxS ; http://goo.gl/UPGm2O ; http://goo.gl/dbb7Bl ; http://goo.gl/opzRBz ; http://goo.gl/DNZqjy
ramalan nama

04 September 2016 - 00:05 WIB

keren abies
arti mimpi

01 September 2016 - 23:39 WIB

menarik dan informatif
dress batik modern

05 Agustus 2016 - 09:00 WIB

terimakasih gan
Cara mengaktifkan wifi laptop

19 Juli 2016 - 08:55 WIB

Sering berkunjung ke alamat ini, sangat membantu, menarik diikuti.
http://goo.gl/fCtDqp ; http://goo.gl/5C5Ig4 ; http://goo.gl/CF7baJ ; http://goo.gl/immltJ ; http://goo.gl/0kFtBk
http://goo.gl/pQMx7l ; http://goo.gl/Zdn15l ; http://goo.gl/Kb3ciR ; http://goo.gl/DdUlnp ; http://goo.gl/2pr8wc
Obat Atasi Mani Encer

04 Juni 2016 - 09:37 WIB

Bismillah, meunang vixion~ http://ow.ly/Qqiv300m7wP

Post Comments