220 likes | 417 Views
Pengenalan Image Bola dengan metode Naïve Bayes. Kelompok : Rosangelina Desbry (741004004) Prasetia Adi Putra (7410040022) Dimas Fanny H. P. (7410040023). Latar belakang.
E N D
Pengenalan Image Bola denganmetode Naïve Bayes Kelompok : RosangelinaDesbry (741004004) PrasetiaAdi Putra (7410040022) Dimas Fanny H. P. (7410040023)
Latarbelakang • Bola terdapatbanyaksekalimacamnya. Misalkan bola sepak, bola basket, bola golf, bola baseball, bola tenis, bola rugby, dll. • Sebagai computer untukmengenalimasing – masing bola diperlukan data training dan proses komputasi yang tepat.
Tujuan • Penerapan algoritma naïve bayesuntuk mengklasifikasikan jenis- jenis bola yang ada • Pengujian akurasi algoritma naïve bayesterhadap banyak data training danberdasarkan clustering image. • untuk mengklasifikasikan jenis – jenis bolaberdasarkan warna Red, Green, Blue danberdasarkanukurandari bola tersebut.
Manfaat • Dapat mengetahui tingkat akurasi pada algoritma pengujian akurasi algoritma naïve bayesterhadap banyak data training dan clustering image terhadapgambarinputan.
Metode naïve bayes • Metode probabilistic sederhanadenganmengklasifikasikansuatu data training denganmetodeteoremabayessian. • Metodeinimenggunakanperhitungandari probabilistic darisuatu data training yang ada.
Image clustering • Pengelompokkan data/gambarpadasuatu data training berdasarkandengankarakteristik yang samasesuaidengan variable yang ada. • Untukpadasuatugambar variable yang ditentukanbiasanyaterhadapwarna, pixel dan lain – lain.
Data training public String[] kelas = {"Sepak", "Voli", "Basket", "Golf", "Baseball", "Tenis", "Rugby"}; private ArrayList<Dataset> dataset; private Data temp; public NaiveBayesClassifier() { //Buat dataset per kelas dataset = new ArrayList<>(); for (inti = 0; i < kelas.length; i++) { dataset.add(new Dataset(kelas[i])); } } Data dataTesting; ImageHelperimageTesting = new ImageHelper(); imageTesting.setImage(input); double[] rgb = {imageTesting.getR(),imageTesting.getG(),imageTesting.getB()}; dataTesting = new Data(rgb[0], rgb[1], rgb[2], imageTesting.getDiameter()); double[] sampel = dataTesting.getMatrik();
Penjelasan source code data training • Untuksebagaipenginisialisasian data awalpadaobjekselanjutnyadalam string kelas []. Selanjutnya data disimpanpada array tersebut • Selanjutnya data testing tersebutdicarinilai mean danvarianuntukmendapatkanhasilnilai Red, Green, Blue dan diameter padasuatugambar bola • Selanjutnyadiklasifikasikanpadakelasyang bersangkutanberdasarkannilai yang dihasilkandari mean danvariantersebut (Red, Green, Blue, dan diameter) semuakemungkinannilai yang ada.
Mencarinilai mean meanTemp = new double[data[0].length]; for (baris = 0; baris < data.length; baris++) { for (kolom = 0; kolom < data[0].length; kolom++) { meanTemp[kolom] += data[baris][kolom]; } } for (inti = 0; i < kolom; i++) { meanTemp[i] /= baris; }
Mencarinilaivarian varianTemp = new double[data[0].length]; for (baris = 0; baris < data.length; baris++) { for (kolom = 0; kolom < data[0].length; kolom++) { varianTemp[kolom] += Math.pow((data[baris][kolom] - meanTemp[kolom]),2); } } for (int j = 0; j < kolom; j++) { varianTemp[j] /= (baris - 1); }
//Buat Classifier Mean & Varian ArrayList<Classifier> cl = new ArrayList<>(); for (inti = 0; i < kelas.length; i++) { cl.add(new Classifier(kelas[i], dataset.get(i).getMatrix())); } //Kalkulasiprobabilitaskemungkinan ArrayList<Likelihood> lk = new ArrayList<>(); for(int j = 0; j < kelas.length; j++) { lk.add(new Likelihood(kelas[j], cl.get(j), sampel)); } //Kalkulasiprobabilitasposterior/ujung ArrayList<Posterior> pt = new ArrayList<>(); for(int k = 0; k < kelas.length; k++) { pt.add(new Posterior(kelas[k], lk.get(k), getProbKelas(k))); } //KeputusanAkhir Posterior terpilih = pt.get(0); for(int m = 1; m < kelas.length; m++) { if(terpilih.getProbabilitas() < pt.get(m).getProbabilitas()) { terpilih = pt.get(m); } } System.out.println("Keputusannyaadalah " + terpilih.getNamaKelas()); return terpilih.getNamaKelas(); Pengklasifikasiangambarinputan • Berdasarkan source code tersebutkitadapatmengklasifikasikangambarinputandanberdasarkan data training
private void hitungMeanRGB() { int length = koordObjek.size(); double red = 0; double green = 0; double blue = 0; int x, y; Color before; String xy[]; for (inti = 0; i < length; i++) { xy = koordObjek.get(i).toString().split(","); //System.out.println(xy[0] + "-" + xy[1]); x = Integer.parseInt(xy[0]); y = Integer.parseInt(xy[1]); before = new Color(this.realImage.getRGB(x, y) & 0x00ffffff); red += before.getRed(); blue += before.getBlue(); green += before.getGreen(); } red /= length; blue /= length; green /= length; this.meanR = red; this.meanG = green; this.meanB = blue; } Mendapatkannilai RGB • Berdasarkan source code tersebut, kitamendapatkannilai R,G,B padagambardari data training ataupuninputan
private void hitungDiameter() { intxKanan; intxKiri; //daritepikiri outloop: for (xKiri = 0; xKiri < lebarCitra; xKiri++) { for (intyKiri = 0; yKiri < tinggiCitra; yKiri++) { Color c = new Color(binaryImage.getRGB(xKiri, yKiri) & 0x00ffffff); if (c.getGreen() == 255) { break outloop; } } } //daritepikanan outloop2: for (xKanan = lebarCitra - 1; xKanan > 0; xKanan--) { for (intyKanan = 0; yKanan < tinggiCitra; yKanan++) { Color d = new Color(binaryImage.getRGB(xKanan, yKanan) & 0x00ffffff); if (d.getGreen() == 255) { break outloop2; } } } //Kembalikannilaiselisih x this.diameterObjek = (xKanan - xKiri); } Mendapatkannilai diameter gambar • Untukmendapatkannilaidari diameter suatugambarberupacitrabinerhitamputih. • Selainitujugaharusmelakukanpendeteksiannilaiwarnadarinilaitepipadasuatugambar
Hasilnilai mean danvarian • Berdasarkangambartersebut, nilaidari mean danvarianakan di cocokkandengan data training yang telahadadarigambarinputan yang telahdikalkulasinilai Red, Green, Blue, Diameter nya. • Nilai mean yaitunilaiuntukmencarikesamaannilaidengan data training • Nilaivarianadalahnilaikemungkinan yang cocokdengan data training dari data gambarinputan • Selanjutnyanilaitertinggipadavariandaritiapklasifikasinilaiakandiperhitungkandanmendapatkanhasilkeputusantermasukkelasmana.
KalkulasiProbabilitas likelihood • Untuksebagaiperhitunganprobabilitaspadasuatuobjekuntukmendapatkannilaivariandan mean (rata - rata) darisetiapgambarinputan yang di sesuaikandengan data training
Kodingnya public Likelihood(String kelas, Classifier cl, double[] dataInput) { this.classifier = cl; this.dataTesting = dataInput; this.namaKelas = kelas; double[] pFiturKelasTemp; pFiturKelasTemp = new double[classifier.getJumlahFitur()]; for(inti = 0; i < classifier.getJumlahFitur(); i++) { double varian = classifier.getVarian()[i]; double mean = classifier.getMean()[i]; double nilai = dataTesting[i]; pFiturKelasTemp[i] = (1 / (Math.sqrt(2 * Math.PI * varian))* (Math.pow(Math.E,(-(Math.pow((nilai - mean),2))/(2 * varian))))); } this.pFiturKelas = pFiturKelasTemp; //Untuk log this.cetakProbabilitas();
Menampilkanhasilprobabilitas public void cetakProbabilitas() { System.out.println("Prob. Likelihood " + this.namaKelas + " :"); for(inti = 0; i < pFiturKelas.length; i++) { System.out.print(pFiturKelas[i] + " "); System.out.println(""); } System.out.println("----------------------------"); } • Pada source code tersebutakanmenampilkannilaiprobabilitaspadakelas– kelas yang ada.
Probabilitas posterior public class Posterior { private String namaKelas; private double ProbPosterior; public Posterior(String kelas, Likelihood likelihood, double probKelas) { double tempProbPosterior = probKelas; for(inti = 0; i < likelihood.getPFiturKelas().length; i++) { tempProbPosterior *= likelihood.getPFiturKelas()[i]; } this.namaKelas = kelas; this.ProbPosterior = tempProbPosterior; //Untuk log this.cetakProbabilitas(); } public double getProbabilitas() { return this.ProbPosterior; } public String getNamaKelas() { return this.namaKelas; } public void cetakProbabilitas() { System.out.println("Probabilitas Posterior " + namaKelas + " : " + this.ProbPosterior); } • Padabagianberikutdigunakanuntukmendapatkanhasilkeputusanakhirdannilai yang telahdikalkulasi.