Kamis, 24 November 2011

Contoh Aplikasi Data Mining Menggunakan Algoritma Prism dengan C#

Halo bang. . . .
Tutorial petang kali ini gue mau mbahas Aplikasi Data Mining Menggunakan Algoritma Prism. . .Ya banyak tmen2 yang tanya nih tentang Data Mining, DSS, dsb (dan saya bingung) dah. . . Lah mumpung gue punya nih, proyek lama satu tahun lalu waktu ngikutin mata kuliah AI (Artificial Intelegent) kalo gk slah se gitu tulisannya, cuman buat skedar contoh aja yah, cos gue masih newbie nih. .hihih :p
A : mudah2an pham nih gan. .
Q : ??????? pa tu data mining, prism??bingung!!!
A : oh. . .oke dah gue jelasin dikit yah. ..mudah mudahan membantu!!
Q : oyi kk. . .
Sebelum pnjelasannya ini program gue kemarin plus databasenya. .hehehe [disini]
Gue jelasin satu2 ya. .

A. Data Mining
"Data mining mengacu pada proses untuk menambang (mining) pengetahuan dari sekumpulan data yang sangat besar [Jiawei, 2001]. Sebenarnya data mining merupakan suatu langkah dalam knowlegde discovery in databases (KDD). Knowledge discovery sebagai suatu proses terdiri atas pembersihan data (data cleaning), integrasi data (data integration), pemilihan data (data selection), transformasi data (data transformation), data mining, evaluasi pola (pattern evaluation) dan penyajian pengetahuan (knowledge presentation)." disadur dari sini. . .
Ya intinya pengambilan data dari database yang sudah ada. .belum jelas?!! googling yah. .hehehe

B. Algoritma Prism
Prism bukan nma loh ya. .hehehehe sebuah algoritma untuk penentuan rule rule. .ya dri pda kepanjangan silahkan baca disini yah. .hehehe

Untuk pembuatan programnya ndiri gue nyoba nerapin algoritma yg dah da tu kesebuah program dg mnfaatin tabel temporary buat nyimpen data2 yg dah terpilih tadi. .so kalau untuk pseudocode nya gak sama dg yg diterangin di link atas. .cekidot gan gue disini gk nerangin mbikin koneksi lain2nya yah cuman fokus sama si kelas prismnya aja yah. . .


Untuk diskripsi awal yg gue bikin seperti ini yah...
Memilih kelas non target
Menghitung jumlah masing2 elemen pada tiap atribut pada kelas yang dipilih
Penyebut
Mengecek masing2 elemen (satu persatu), Jika elemen sama dengan elemen target maka
Pembilang + 1
Ulang langkah 3 selama elemen masih ada
Hitung nilai tiap elemen
Nilai = pembilang / penyebut 
Ulang langkah 3 selama elemen yang lain masih ada
Mencari nilai terbesar antar elemen
Ulang langkah 2 selama kolom non target masih ada
Mencari nilai terbesar antar kolom
Menyimpannya dalam kondisi
Menampilkan tabel selanjutnya dengan kunci elemen pada kolom yang memiliki nilai terbesar
Mencari elemen yang berbeda dari kondisi soal pada kolom target
Jika ada yang berbeda maka ulang langkah 2 dengan tabel baru
Jika tidak maka,
     a. Menampilkan kondisi
     b. Menghapus data yang sesuai dengan kondisi dari tabel utama
Mencari elemen yang sama dari kondisi soal
Jika ada maka ulang langkah 2
Jika tidak tampilkan semua kondisi

Soalnya data yg gue pake seperti dibawah ini. .(bukan dikolong meja oe) :D

Lanjut ke programnya. . .
Function ini buat ngambil rulenya dlu, sebelum dibandingkan. .
public string Prism(string[] dataJudul, string kelasIndux, string elemenIndux,string db, ArrayList kolomLama)
{
 string labelTmp = "";
 string dataPembanding = "";
 byte indekKelas = 0;
 bool cek = true;
 
 //menghitung jumlah elemen-----
 BACA ambilData = new BACA();
 DataTable tabelNama = new DataTable();
 
 //memilih kolom target
 for (int i = 0;i < dataJudul.Length;i++)
 {
  if (dataJudul[i] == kelasIndux) {
   indekKelas = Convert.ToByte(i);
  }
 }
  
 //membandingkan
 for (int i =0;i < dataJudul.Length - 1;i++)
 {
  if (i != indekKelas)  //tambah judul yang digunakan
  {
   cek = true;
   for(int j = 0;j < kolomLama.Count;j++)
   {
    if (dataJudul[i] == kolomLama[j].ToString())
    {
     cek = false;
    }
   }
   if (cek == true)
   {
    tabelNama = ambilData.DataAnalisa(dataJudul[i],db);
    dataPembanding = DataPembanding(tabelNama,dataJudul[i],kelasIndux,elemenIndux,db);  //harus dibandingkan lagi
    try
    {
     if (Convert.ToSingle(dataPembanding.Substring(dataPembanding.IndexOf("=")+1)) == 
Convert.ToSingle(labelTmp.Substring(labelTmp.IndexOf("=")+1)))
     {
      if (Convert.ToSingle(dataPembanding.Substring(dataPembanding.IndexOf("/")+1,1)) > Convert.ToSingle(labelTmp.Substring(labelTmp.IndexOf("/")+1,1)))
      {
       labelTmp = dataPembanding;
      }
     }
     else if (Convert.ToSingle(dataPembanding.Substring(dataPembanding.IndexOf("=")+1)) > Convert.ToSingle(labelTmp.Substring(labelTmp.IndexOf("=")+1)))
     {
      labelTmp = dataPembanding;
     }
    }
    catch (Exception)
    {
     labelTmp = dataPembanding;
    }
   }
  }
 }
 //---------------

 return labelTmp;
}

Function yg berikutnya buat mbandingin nilai dari recomendednya gan. .so dibandingin buat dimasukkan ke rule selanjutnya. ..
private string DataPembanding(DataTable namaElemen, string namaKolom, string kolomIndux, string elemenIndux,string db)
{
 BACA ambilElemen = new BACA();
 float[] nilaiPenyebut = new float[namaElemen.Rows.Count];
 float[] nilaiPembilang = new float[namaElemen.Rows.Count];
 string simpanElemen = "";
 float tmp = 0;
  
 for (int i = 0;i < namaElemen.Rows.Count;i++)
 {
  if(namaElemen.Rows[i][0].ToString() != "---")
  {
   nilaiPenyebut[i] = ambilElemen.DataElemen(namaKolom,namaElemen.Rows[i][0].ToString(),db);
   nilaiPembilang[i] = ambilElemen.DataElemenPembilang(namaKolom,namaElemen.Rows[i][0].ToString(),kolomIndux,elemenIndux,db);
   if (Convert.ToSingle(nilaiPembilang[i] / nilaiPenyebut[i]) == tmp)
   {
    try
    {
     if (nilaiPenyebut[i] > Convert.ToInt32(simpanElemen.Substring(simpanElemen.IndexOf("/") + 1,1)))
     {
      tmp = Convert.ToSingle(nilaiPembilang[i] / nilaiPenyebut[i]);
      simpanElemen = string.Format("({0}:{1}){2}/{3}={4}",namaKolom,namaElemen.Rows[i][0].ToString(),nilaiPembilang[i],nilaiPenyebut[i],tmp);
     }
    }
    catch {}
   }
   else if(Convert.ToSingle(nilaiPembilang[i] / nilaiPenyebut[i]) > tmp)
   {
    tmp = Convert.ToSingle(nilaiPembilang[i] / nilaiPenyebut[i]);
    simpanElemen = string.Format("({0}:{1}){2}/{3}={4}",namaKolom,namaElemen.Rows[i][0].ToString(),nilaiPembilang[i],nilaiPenyebut[i],tmp);
   }
  }
 }
 return simpanElemen;
}

Ya cukup segitu yah. . .klo masih bingung coba refrensi yg lain ya gan. .hehehehe gue masih bingung nih, soalnya satu tahun yg lalu, agak lupa dah, maklum masih newbie. .hihihihi :hammer:
Makasih dah mmpir ya gan. . .

3 comments:

great tutorial.... thank for sharing man! its usefully

Mantab... Terima Kasih sharingnnya

gan ada error pada script elemen = Convert.ToSingle(tabel.Rows[0][0].ToString());
error index out of range

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More