AdityaDees: algoritma

Hot

https://publishers.chitika.com/

Contact us for advertising.
Showing posts with label algoritma. Show all posts
Showing posts with label algoritma. Show all posts

20 November 2016

Ask Algoritma Naive Bayes Classifier Menggunakan Java AdityaDees

23:36 0
algoritma naive bayes classifier menggunakan java
Bismillah…

Sempat pada beberapa waktu yang lalu ada pengunjung blog saya meminta untuk membahas sebuah materi tentang algoritma Naive Bayes. Kemudian dialanjutkan dengan membuat contoh perhitungan sederhana algoritma tersebut menggunakan bahasa java. Dan alhamdulillah, sekarang saya bisa menyempatkan waktu untuk menulis materi yang dimintanya tersebut.

Seperti diketahui bahwa Naive Bayes adalah salah satu machine learning yang sampai saat ini masih digunakan untuk kasus klasifikasi data. Naive Bayes ditemukan oleh seorang ilmuan Inggris bernama Thomas Bayes. Pada perhitungannya, Naive Bayes menggunakan probabilitas dengan konsep dasar Teorema Bayes, yaitu teorema dalam ilmu statistik untuk menghitung peluang sebuah kejadian.

Teori Bayesian : Sebagai Dasar
  • X adalah data sampel dengan kelas (label) yang tidak diketahui
  • adalah hipotesa bahwa X adalah data dengan kelas (label) C. P(H) adalah peluang dari hipotesa H.
  • P(X) adalah peluang data sampel yang akan diamati.
  • P(X|H) merupakan peluang data sampel X, bila diasumsikan bahwa hipotesa benar (valid).
  • Untuk masalah klasifikasi, yang dihitung adalah P(H|X), yaitu peluang bahwa hipotesa benar (valid) untuk data sampel yang diamati :


Berikut ini adalah contoh sampel data yang akan kita gunakan untuk perhitungan algoritma Naive Bayes.
Age
Income
Student
Credit Rating
Buy Com
<=30
high
no
fair
no
<=30
high
no
excellent
no
31 s.d 40
high
no
fair
yes
>40
medium
no
fair
yes
>40
low
yes
fair
yes
31 s.d 40
low
yes
excellent
yes
<=30
medium
no
fair
no
<=30
low
yes
fair
yes
>40
medium
yes
fair
yes
<=30
medium
yes
excellent
yes
31 s.d 40
medium
no
excellent
yes
31 s.d 40
high
yes
fair
yes
>40
medium
no
excellent
no

Kemudian jika ada sebuah data baru yang belum memiliki kelas misalnya : x = (age<=30, income = medium, student = yes, credit_rating = fair), maka kelas dari data baru ini dapat dicari dengan cara berikut :
  • Hitung P(Xk|Ci) untuk setiap kelas i :
    P(age<=30 | buy_com = yes) = 2/9 = 0.222
    P(age<=30 | buy_com = no) = 3/5 = 0.6
    P(income = medium | buy_com = yes) = 4/9 = 0.444
    P(income = medium | buy_com = no) = 2/5 = 0.4
    P(student = yes | buy_com = yes) = 6/9 = 0.667
    P(student = yes | buy_com = no) = 1/5 = 0.2
    P(credit_rating = fair | buy_com = yes) = 6/9 = 0.667
    P(credit_rating = fair | buy_com = no ) = 2/5 = 0.4


  • Hitung P(X|Ci) untuk setiap kelas.
    P(X|buy_com = yes) = 0.222*0.444*0.667*0.667 = 0.044
    P(X|buy_com = no) = 0.6*0.4*0.2*0.4 = 0.019
  • P(X|Ci) * P(Ci)
    P(X|buy_com = yes) * P(buy_com = yes) = 0.028
    P(X|buy_com = no) * P(buy_com = no) = 0.007
  • Sehingga diketahui kelas dari data yang dimasukkan berada pada kelas (yes) karena memiliki nilai probabilitas yang besar.

Nah, sesudah tahu langkah perhitungannya selanjutnya adalah implementasi algoritma diatas kedalam program java. Data sampel diatas akan kita ambil dari database langsung. Untuk mengunduh data tersebut dalam format .sql bisa membuka link ini http://adf.ly/1fy60F. Jika sudah langsung saja kita ikuti langkah-langkah pembuatannya :

  1. Terlebih dahulu buat kelas Koneksi.java yang digunakan untuk koneksi ke database yang di unduh tadi dan masukkan kode dibawah ini.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class Koneksi {
    public static Connection getConnection(){
    Connection con=null;
    try{
    Class.forName("com.mysql.jdbc.Driver");
    con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bayes","root","");
    }
    catch(ClassNotFoundException | SQLException e){
    e.printStackTrace();
    }
    return con;
    }
    }
    Untuk nama database, sesuaikan dengan database yang telah anda buat sebelumnya.
  2. Setelah itu buat lagi sebuah kelas dengan nama Key.java. Kelas ini digunakan untuk memasukkan informasi kelas atau label yang terdapat pada database.

    public class Key {
    private int k;
    private String info;
    private double value;

    public Key(){
    this.k = 0;
    this.info = null;
    this.value = 0;
    }
    public Key(int k, String info){
    this.k = k;
    this.info = info;
    }

    public Key(int k, String info, double value){
    this.k = k;
    this.info = info;
    this.value = value;
    }

    public int getK(){
    return k;
    }

    public String getInfo(){
    return info;
    }

    public double getValue(){
    return value;
    }

    public void setK(int k) {
    this.k = k;
    }

    public void setInfo(String info) {
    this.info = info;
    }

    public void setValue(double value) {
    this.value = value;
    }
    }


  3. Setelah itu selanjutnya adalah membuat kelas inti yang memuat algoritma Naive Bayes. Nama kelas ini beri saja dengan nama Bayes.java.

    import java.text.DecimalFormat;
    import java.util.ArrayList;

    public class Bayes {
    private Object[][] data;
    private Object[] category;
    private Object[][] input;
    private double[][] temp;
    public ArrayList key = new ArrayList<>();
    private DecimalFormat df = new DecimalFormat("#.####");
    public ArrayList dataBaru = new ArrayList<>();

    public Bayes(Object[][] data, Object[] category, Object[][] input, int label, int jlhAtt){
    this.data = data;
    this.category = category;
    this.input = input;
    temp = new double[label][jlhAtt];
    }

    public void classify(int sum[]){
    int label[];
    int total = 0;
    for(int t = 0; t < sum.length; t++)
    total+=sum[t];

    for(int k = 0; k < input.length; k++){
    for(int y = 0; y < input[k].length; y++){
    label = new int[sum.length];
    for(int i = 0; i < data.length; i++){
    for(int j = 0; j < data[i].length; j++){
    if(data[i][j].equals(input[k][y])){
    for(int v = 0; v < key.size(); v++)
    if(category[i].equals(key.get(v).getInfo()))
    label[key.get(v).getK()]++;
    }
    }
    }

    //P(Xk|Ci)
    for(int l = 0; l < label.length; l++){
    temp[l][y] = (double)label[l]/sum[l];
    System.out.println("P(Xk|Ci) variabel ke "+(y+1)+" = "
    + "("+(double)label[l]+"/"+sum[l]+"="+df.format(temp[l][y])+")");
    }
    System.out.println("------------------------------------------");
    }

    // P(X|Ci)
    double X[] = new double[sum.length];
    for(int i = 0; i < temp.length; i++){
    for(int j = 0; j < temp[i].length; j++){
    if(j!=0) // (47)
    X[i] *= (double)temp[i][j];
    else
    X[i] = (double)temp[i][j];
    }
    System.out.println("P(X|Ci) : kelas ke ("+(i+1)+") = "+df.format(X[i]));
    }
    System.out.println("------------------------------------------");
    // P(X|Ci) * P(Ci)
    double c[] = new double[sum.length];
    for(int i = 0; i < X.length; i++){
    c[i] = (double)sum[i]/total;
    }
    addNewLabel(c, X, k);
    }
    }

    public void addNewLabel(double c[], double X[], int k){
    double max = -1;
    String info = "";
    for(int i = 0; i < c.length; i++){
    if(c[i]*X[i] > max){
    max = c[i]*X[i];
    info = key.get(i).getInfo();
    }
    if(i==c.length-1)
    dataBaru.add(new Key(k, info, max));

    System.out.println("P(X|Ci) * P(Ci) kelas ke ("+(i+1)+") = "+df.format(c[i]*X[i]));
    }
    }

    public ArrayList getNewLabel(){
    return dataBaru;
    }
    }


  4. Terakhir buat sebuah kelas dengan nama Main.java untuk mencoba menjalankan algoritma Naive Bayes yang sudah kita buat diatas.

    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.HashSet;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    public class Main {
    private Object[][] data;
    private Object[] category;
    private Object[][] klasifikasi = {{"<=30","medium","yesn","fair"}};// isi data input yang akan di klasifikasi disini
    private HashSet hash = new HashSet<>();
    int sum[];
    private Bayes b;

    public void read_db()throws Exception{
    String Query = "select * from data_bayes";
    Statement st = Koneksi.getConnection().createStatement();
    ResultSet rs = st.executeQuery(Query);
    data = new Object[getRow()][5];

    System.out.println("Data :");
    int i = 0;
    while(rs.next()){
    for(int j = 0; j < data[0].length; j++){
    data[i][j] = rs.getString(j+1);
    System.out.print(data[i][j]+", ");
    }
    System.out.println();
    i++;
    }
    System.out.println("-----------------------------------");
    category = new Object[data.length];
    for(i = 0; i < data.length; i++){
    category[i] = data[i][data[i].length-1];
    hash.add(String.valueOf(category[i]));
    }
    sum = new int[hash.size()];
    }

    public void proses(){
    b= new Bayes(data, category, klasifikasi, hash.size(), 4);
    if(!b.dataBaru.isEmpty()){
    b.dataBaru.clear();
    b.key.clear();
    }
    int idx = 0;
    for(String s:hash){
    for(int ii = 0; ii < category.length; ii++){
    if(s.equals(String.valueOf(category[ii]))){
    sum[idx]+=1;
    }
    }
    b.key.add(new Key(idx, s));
    idx++;
    }
    b.classify(sum);
    System.out.println("\nHasil Klasifikasi :");
    int row = 0;
    for(Key key:b.getNewLabel()){
    System.out.println("Data ke "+(row+1)+" diklasifikasikan ke kelas :\t"+key.getInfo());
    row++;
    }
    }

    public Main(){
    try {
    read_db();
    proses();
    } catch (Exception ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
    }

    public int getRow()throws Exception{
    int row = 0;
    String Query = "SELECT COUNT(*) as baris FROM data_bayes";
    Statement st = Koneksi.getConnection().createStatement();
    ResultSet rs = st.executeQuery(Query);
    while(rs.next())
    row = rs.getInt("baris");
    st.close();
    rs.close();
    return row;
    }

    public static void main(String[]args){
    new Main();
    }
    }


  5. Setelah dijalankan terlihat hasilnya seperti gambar dibawah ini :
    hasil running naive bayes

Demikianlah tutorial Algoritma Naive Bayes Classifier Menggunakan Java. Semoga ada manfaatnya bagi anda dan saya. Jika ada pertanyaan mengenai tutorial diatas, silahkan bertanya melalui form komentar dibawah. Kemudian jika ingin meng-update secara rutin artikel yang kami posting dari blog ini, silahkan isi email anda pada isian Follow by Email dibawah.
Project program diatas bisa anda unduh melalui link ini http://adf.ly/1fusYL.

Terima kasih... wassalam
Read More

12 November 2016

Ask Simple Liniear Regression Menggunakan Java AdityaDees

11:44 0
simple linear regression
Bismillah...

Untuk yang pernah kuliah di jurusan ilmu komputer pasti sudah tahu dengan materi yang satu ini. Sebenarnya materi ini adalah materi umum yang jurusan-jurusan lain juga mempelajarinya. Hanya saja di jurusan ilmu komputer materi ini akan anda temukan di mata kuliah metode numerik. Berbeda dengan jurusan lain dimana mereka mendapatkannya pada mata kuliah Statistik seingat saya. Juga tidak menutup kemungkinan bahwa jurusan imu komputer pun akan mendapatinya pada mata kuliah Statistik.

Nah, yang masih kuliah sudah ambil belum tuh mata kuliahnya ? Oke, buat yang belum ambil pasti belum tahu kan apa itu regresi ? Kalau begitu mari kita pelajari sedikit tentang regresi dimulai dari pengertian regresi itu sendiri. "Regresi merupakan sebuah metode analisis statistik yang digunakan untuk melihat pengaruh antara variabel bebas dengan variabel tak bebas". Secara umum, regresi terbagi menjadi dua buah yaitu regresi linier sederhana (simple liniear regression) dan regresi linier berganda (multiple liniear regression). Regresi linier sederhana melibatkan 1 buah variabel bebas terhadap sebuah variabel tak bebas. Sedangkan regresi linier berganda melibatkan 1 atau beberapa variabel bebas terhadap variabel tak bebas.

Pada postingan saya kali ini hanya membahas regresi linier sederhana saja, insya Allah pada postingan selanjutnya saya juga akan membahas tentang regresi linier berganda. Kita lanjutkan pembahasan selanjutnya mengenai regresi linier sederhana. Regresi linier sederhana diformulasikan dengan model linier berikut :



dimana :





Harga b0 dan b1 dapat dicari dengan rumus berikut :





Untuk lebih jelasnya langsung saja kita coba dengan studi kasus berikut :
Sebagai contoh : Kita ambil studi kasus pada pohon mahoni. Dimana kita ingin mengetahui apakah ada hubungan antara tinggi pohon dengan diameter batang. Pada contoh ini akan diambil sample data sebanyak 8 buah.


Maka harga b0 dan b1 dapat dicari dengan





Didapatlah sebuah persamaan regresi seperti berikut ini :


Dengan artian misalkan diketahui diameter X = 15, maka nilai tinggi pohon Y melalui persamaan regresi diatas didapat :


Untuk selanjutnya kita akan mengukur koefisien determinasi atau R2 dari model regresi yang telah dibuat. R2 itu sendiri merupakan parameter yang digunakan untuk mengukur seberapa besar kemampuan variabel bebas dalam menjelaskan variasi dari variabel tak bebas. Rumus untuk mencari R2 adalah sebagai berikut :





Sehingga dapat diambil kesimpulan bahwa sekitar 78,5% variasi variabel diameter batang pohon dapat menjelaskan variasi dari variabel tinggi pohon mahoni.

Kemudian terakhir kita juga akan menghitung standard error estimate dari persamaan regresi tersebut dengan persamaan berikut :




Standard error yang didapat diatas menunjukkan bahwa penyimpangan data-data terhadap garis regresi cukup kecil yakni sebesar 6,6364 saja.
Sebenarnya masih ada tahapan terakhir dari regresi yakni uji statistik. Uji statistik terdapat dua bagian yaitu Uji t dan Uji F. Karena kedua-dua uji tersebut memakai nilai t-tabel, maka ini akan saya buat terpisah mengingat nilai t-tabel itu sendiri kita harus memanfaatkan library tambahan untuk perhitungannya.

Baiklah, sesudah mengetahui perhitungan manual regresi linier sederhana. Sekarang kita akan masuk ketahap pembuatan aplikasinya.
  1. Buat sebuah project baru. Nama project tersebut terserah anda namakan dengan apa.
  2. Lalu buat sebuah kelas dengan nama "SimpleLinearRegression" pada project tersebut.
  3. Pada kelas tersebut, deklarasi dan inisialisasi terlebih dahulu variabel-variabel berikut ini.

    private double x[] = {8,9,7,6,13,7,11,12};// variabel prediktor/bebas
    private double y[] = {35,49,27,33,60,21,45,51};//variabel respon/tak bebas
    private double b_0, b_1;
    private double r_square;
    private double s_e;
    private double sig_x, sig_y, sig_xy, sig_x_square, sig_y_square;


  4. Kemudian buat sebuah method void dengan nama run, dan masukkan kode dibawah ini.

    for(int i = 0; i < x.length; i++){
    sig_x +=x[i];
    sig_y +=y[i];
    sig_xy +=x[i]*y[i];
    sig_x_square+=Math.pow(x[i], 2);
    sig_y_square+=Math.pow(y[i], 2);
    }

    b_0 = ((sig_y*sig_x_square)-(sig_x*sig_xy))/
    ((x.length*(sig_x_square))-(Math.pow(sig_x, 2))); // rumus menghitung nilai b0

    b_1 = ((x.length*sig_xy)-(sig_x*sig_y))/
    ((x.length*sig_x_square)-Math.pow(sig_x, 2)); // rumus menghitung nilai b0

    r_square = Math.pow(((x.length*sig_xy)-(sig_x*sig_y))/
    Math.sqrt(((double)(x.length*sig_x_square)-Math.pow(sig_x, 2))*
    (double)((x.length*sig_y_square)-Math.pow(sig_y, 2))),2); // rumus menghitung nilai R2

    s_e = Math.sqrt((sig_y_square-(b_0*sig_y)-(b_1*sig_xy))/(x.length-2));// rumus untuk menghitung standard error Se


  5. Sebagai tambahan untuk menampilkan hasil regresi buat sebuah method void dengan nama print, lalu masukkan kode dibawah ini didalam method tersebut.

    public void print(){
    System.out.println("Persamaan regresi : Y = "+b_0+" + "+b_1+" X\n"
    + "Koefisien determinasi (R2) = "+r_square+"\n"
    + "Standard error (Se) = "+s_e);
    }


  6. Untuk menjalankan algoritma yang sudah dibuat. Pada kelas SimpleLinearRegression.java buat sebuah method main dan masukkan kode dibawah.

    SimpleLinearRegression slr = new SimpleLinearRegression();
    slr.run();
    slr.print();


  7. Jalankan aplikasi, dan hasil yang didapat kurang lebih seperti gambar dibawah ini.
    hasil running


Demikianlah tutorial pembuatan aplikasi Simple Liniear Regression Menggunakan Java. Jika ada pertanyaan mengenai tutorial diatas, silakan bertanya melalui form komentar dibawah. Kemudian jika ingin mengupdate secara rutin artikel yang kami posting dari blog ini, silahkan isi email anda pada Follow by Email dibawah.
Aplikasi diatas bisa diunduh melalui link ini adf.ly/1faiYr.

Terima kasih... wassalam
Read More

https://payclick.com/

Contact us for advertising.