Wednesday, January 24, 2018

Buku Pemrograman Python- Menghitung Confusion matrix

Buku Pemrograman Python- Menghitung Confusion matrix

Sinopsis

Confusion matrix merupakan salah satu metode yang dapat digunakan untuk mengukur kinerja suatu metode klasifikasi. Pada dasarnya confusion matrix mengandung informasi yang membandingkan hasil klasifikasi yang dilakukan oleh sistem dengan hasil klasifikasi yang seharusnya

  1. TN : merupakan data negatif yang terdeteksi dengan benar
  2. FP : merupakan data negatif namun terdeteksi sebagai data positif
  3. TP: merupakan data positif terdeteksi benar
  4. FN :merupakan data positif terdeteksi sebagai data negatif
Buku Pemrograman Python- Menghitung Confusion matrix

Sehingga jumlah
TN = 0
FP =2
FN = 1
TP = 1

$$akurasi=\frac{TP+TN}{TP+TN+FP+FN}*100%$$
$$presisi=\frac{TP}{FP+TP}*100%$$
$$recall=\frac{TP}{FN+TP}$$


Kalian bisa menggunakan sklearn untuk mempermudah perhitungan diatas, seperti kode berikut

from sklearn.metrics import confusion_matrix
import numpy as np

target = np.array([0,1,0,1])
prediksi =  np.array([1, 1, 1, 0])

tn, fp, fn, tp = confusion_matrix(target, prediksi).ravel()
tn = float(tn)
fp = float(fp)
fn = float(fn)
tp = float(tp)
print (tn, fp, fn, tp)

akurasi = ((tp+tn)/(tp+tn+fp+fn))*100
presisi = (tp/(fp+tp))*100
recall = (tp/(fn+tp))*100
print (akurasi,presisi, recall)


Menghasilkan

(0.0, 2.0, 1.0, 1.0)
(25.0, 33.33333333333333, 50.0)
 

ref:
http://achmatim.net/2017/03/19/mengukur-kinerja-algoritma-klasifikasi-dengan-confusion-matrix/
https://en.wikipedia.org/wiki/Confusion_matrix


Friday, January 12, 2018

Buku Belajar Machine Learning dengan Python-Classification with Support Vector Machines


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link

kalian bisa lanjut baca di  http://softscients.com/2020/03/25/buku-belajar-machine-learning-dengan-python-classification-with-support-vector-machines/

Buku Belajar Machine Learning dengan Python-Classification with Support Vector Machines

[Teori]

SVM adalah algoritma supervisi untuk melakukan klasifikasi baik linear maupun nonlinear tergantung pada margin maksimalisasi diantara titik suporrt, mapping data dapat ditransformasi kedalam dimensi yang lebih tinggi. SVM dibangun oleh Vapnik dan Cortes pada 1992, SVM telah sukses diaplikasikan kebanyak kasus seperti pengenalan tulisan tangan, prediksi runtun waktu, pengenalan suara
Implementasi Support Vector Machine
Pada tulisan ini akan diberikan mengenai
1.    Cara training SVM
2.    Mengukur kinerja nya
3.    Prediksi hasil klasifikasi dengan menggunakan data asing (data yang belum pernah digunakan untuk pelatihan)
Karena tulisan ini agak cukup panjang, siapkan waktu yang cukup!

Sunday, January 7, 2018

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/26/buku-belajar-machine-learning-dengan-matlab-penerapan-fuzzy-c-means-clustering/


buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering

Sinopsis

Algoritma Clustering yang paling sering dibahas dan digunakan yaitu K-Mean Clustering, namum algoritma tersebut kurang robust jika menghadapi dataset yang bersifat non linear karena hanya mengandalkan jarak ke titik centroid tanpa ada atribut yang lainnya. Hal ini berbeda dengan Algoritma Fuzzy C-Means Clustering yang mempunyai atribut jarak juga mempunyai nilai keanggotannya sehingga sangat diandalkan dan cocok jika ditemui dataset yang bersifat non linear seperti dibawah ini

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering

Hal yang akan sulit dilakukan oleh K-Means Clustering.  Sekedar kalian tahu selain 2 algoritma tersebut ada banyak sekali algoritma clustering yaitu
  1. k-means clustering algorithm
  2. Fuzzy c-means clustering algorithm
  3. Hierarchical clustering algorithm
  4. Gaussian(EM) clustering algorithm
  5. Quality threshold clustering algorithm
  6. MST based clustering algorithm
  7. kernel k-means clustering algorithm
  8. Density-based clustering algorithm

Penerapan Algoritma Clustering

Algoritma clustering sangat membantu pekerjaan manusia dalam banyak hal terutama untuk menganalisis perilaku data seperti 
  1. Recommender systems
  2. Anomaly detection
  3. Human genetic clustering
  4. Genom Sequence analysis
  5. Analysis of antimicrobial activity
  6. Grouping of shopping items
  7. Search result grouping
  8. Slippy map optimization
  9. Crime analysis
  10. Climatology

Contoh Dataset

Ok setelah kalian membaca sinopsisnya yang lumayan singkat diatas. Kalian akan diajak untuk penerapan Fuzzy C-Means Clustering untuk Iris Data (http://www.softscients.web.id/2017/12/matlab-classification-learner-example.html)   yang terdiri dari 4 atribut input dan 3 kelas target dengan jumlah data sebanyak 150 record. Gambaran umum mengenai Iris Data yaitu (https://en.wikipedia.org/wiki/Iris_setosa) Iris Setosa dengan detail berikut

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering
Dengan paramater nya yaitu petal dan sepal yang terdiri dari panjang dan lebarnya
https://en.wikipedia.org/wiki/Petal

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering

Bila sudah memahami data yang akan kita olah. Kalian tidak perlu download datanya karena Matlab  sudah menyediakan data yang kita butuhkan, cukup kita panggil dengan function berikut

clc;clear all;close all;
load iris.dat 

Terdiri dari 5 kolom yaitu

 Seperti berikut

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering
Dimana kode iris / target kelas (pada kolom ke 5)
  1. setosa
  2. versicolor
  3. virginica

Visualisasi Data

Setelah paham, kita akan visualisasikan dalam bentuk 2 Dimensi yaitu sumbu X dan sumbu Y, kita akan menggunakan 2 paramater yaitu

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering


clc;clear all;close all;
load iris.dat               
x = [iris(:,1), iris(:,end)];
y = [iris(:,3),iris(:,end)];
 
setosa_x = x(x(:,end)==1);
setosa_y = y(y(:,end)==1);
 
versicolor_x = x(x(:,end)==2);
versicolor_y = y(y(:,end)==2);
 
virginica_x = x(x(:,end)==3);
virginica_y = y(y(:,end)==3);

 
figure, 
scatter(setosa_x,setosa_y,'fill'); %setosa
hold on
scatter(versicolor_x,versicolor_y,'fill'); %versicolor
scatter(virginica_x,virginica_y,'fill'); %virginica
legend('setosa','versicolor','virginica')
xlabel('sepal length');
ylabel('petal length');
title('Visualisasi Data Iris'); 

menghasilkan

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering

Clustering

Kita akan mencari Center masing-masing paramater menggunakan Fuzzy C-Means Clustering,  silahkan untuk mempelajari code matlab berikut yaitu menggunakan function \(fcm\) yang sudah tersedia di Matlab

fcm Data set clustering using fuzzy c-means clustering.
 
    [CENTER, U, OBJ_FCN] = fcm(DATA, N_CLUSTER) finds N_CLUSTER number of
    clusters in the data set DATA. DATA is size M-by-N, where M is the number of
    data points and N is the number of coordinates for each data point. The
    coordinates for each cluster center are returned in the rows of the matrix
    CENTER. The membership function matrix U contains the grade of membership of
    each DATA point in each cluster. The values 0 and 1 indicate no membership
    and full membership respectively. Grades between 0 and 1 indicate that the
    data point has partial membership in a cluster. At each iteration, an
    objective function is minimized to find the best location for the clusters
    and its values are returned in OBJ_FCN.
 
    [CENTER, ...] = fcm(DATA,N_CLUSTER,OPTIONS) specifies a vector of options
    for the clustering process:
        OPTIONS(1): exponent for the matrix U             (default: 2.0)
        OPTIONS(2): maximum number of iterations          (default: 100)
        OPTIONS(3): minimum amount of improvement         (default: 1e-5)
        OPTIONS(4): info display during iteration         (default: 1)
    The clustering process stops when the maximum number of iterations
    is reached, or when the objective function improvement between two
    consecutive iterations is less than the minimum amount of improvement
    specified. Use NaN to select the default value.

Kalian bisa terapkan pada Data Iris

clc;clear all;close all;
load iris.dat               
x = [iris(:,1), iris(:,end)];
y = [iris(:,3),iris(:,end)];
 
setosa_x = x(x(:,end)==1);
setosa_y = y(y(:,end)==1);
 
versicolor_x = x(x(:,end)==2);
versicolor_y = y(y(:,end)==2);
 
virginica_x = x(x(:,end)==3);
virginica_y = y(y(:,end)==3);
 
 
 
figure, 
scatter(setosa_x,setosa_y,'fill'); %setosa
hold on
scatter(versicolor_x,versicolor_y,'fill'); %versicolor
scatter(virginica_x,virginica_y,'fill'); %virginica
legend('setosa','versicolor','virginica')
xlabel('sepal length');
ylabel('petal length');
title('Visualisasi Data Iris');
 
cluster_n = 3;                          % Number of clusters
expo = 2.0;                             % Exponent for U
max_iter = 100;                         % Max. iteration
min_impro = 1e-6;                       % Min. improvement
min_display = 5;
opsi  = [expo max_iter min_impro min_display];
 
data = [x(:,1),y(:,1)];
[U, center, obj] = fcm(data,cluster_n,opsi);
for i=1:size(U,1)
    text(U(i,1),U(i,2),num2str(i),'FontWeight', 'bold','FontSize',20);
end
 

Jika run berkali-kali, akan menghasilkan berbeda-beda

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering

Karena kita menggunakan bilangan random sehingga nilainya berpindah-pindah, tapi itu bukan fokus kita, yang menjadi fokus kita adalah kita sudah menemukan center untuk ketiga jenis iris

buku belajar machine learning dengan matlab - Penerapan Fuzzy C-Means Clustering

Titik Center sebagai penentu jenis iris

Lalu bagaimana cara menggunakan nya? Bila sudah ditemukan center? Misalkan kita menggunakan sample no 3 (seharusnya termasuk iris setosa), mari kita cek


sample = data(3,:); %misalkan kita ambil data no 3
jarak = [];
for i =1:3
    jarak(i) = norm(U(i,:) - sample);
end
 
[value,indeks] = sort(jarak);
indeks_terkecil = indeks(1);
if indeks_terkecil == 1
    disp('Jenis Versicolor')
elseif indeks_terkecil ==2
     disp('Jenis Setosa')
elseif indeks_terkecil==3 
    disp('Jenis Virginica');
end


menghasilkan

Jenis Setosa 


Sangat mudah sekali bukan? penggunakan dengan memanfaatkan function \(fcm\) pada Matlab

Saturday, January 6, 2018

buku belajar machine learning dengan matlab - Klasifikasi Dataset dengan KNN


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link

Kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/26/buku-belajar-machine-learning-dengan-matlab-klasifikasi-dataset-dengan-knn/


Sinopsis

Menurut wikipedia diterangkan sebagai berikut: Algoritma k-nearest neighbor (k-NN atau KNN) adalah sebuah metode untuk melakukan klasifikasi terhadap objek berdasarkan data pembelajaran yang jaraknya paling dekat dengan objek tersebut.Data pembelajaran diproyeksikan ke ruang berdimensi banyak, dimana masing-masing dimensi merepresentasikan fitur dari data. Ruang ini dibagi menjadi bagian-bagian berdasarkan klasifikasi data pembelajaran. Sebuah titik pada ruang ini ditandai kelas c jika kelas c merupakan klasifikasi yang paling banyak ditemui pada k buah tetangga terdekat titk tersebut. Dekat atau jauhnya tetangga biasanya dihitung berdasarkan jarak Euclidean. Ref: https://id.wikipedia.org/wiki/KNN,  Kalian bisa mengunjungi link berikut mengenai perhitungan dan langkah-langkahnya

  1. http://www.scholarpedia.org/article/K-nearest_neighbor
  2. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2243774/?page=1
  3. https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Original)
  4. http://me.seekingqed.com/files/intro_KNN.pdf
  5. http://dataaspirant.com/2016/12/23/k-nearest-neighbor-classifier-intro/
  6. untuk lebih jelasnya di http://people.revoledu.com/kardi/tutorial/KNN/KNN_Numerical-example.html

Persiapan Data

Agar lebih mudah memahami, saya sediakan contoh. Didapatkan sebuah hasil mengenai sebuah survey mengenai kualitas jenis tisu yaitu bagus dan jelek yang didasarkan pada 2 paramater yaitu tingkat keasamaan dan kekuatan mudah robek

Perusahaan ingin membuat tisu dengan karakteristik X1= 3, dan X2 = 7, termasuk manakah jenis tersebut? Berdasarkan informasi mengenai table diatas?

Normalisasi Data

Tentu kita harus mengubah data diatas untuk bisa dipahami oleh komputer dengan mengubah good menjadi bernilai 1 dan bad menjadi 0.
Lebih mudah jika kita simpan dalam bentuk excel seperti berikut disimpan dengan nama data latih.xlsx

Code Matlab

Berikut kode dan function yang digunakan didalam matlab yaitu classify

clc;clear all;close all;
[data,header] = xlsread('data latih.xlsx');
X1 = 3;
X2 = 7;
test = [X1 X2];
hasil =classify(test,[data(:,1),data(:,2)],data(:,3));
if hasil==1
    disp(['good']);
else 
    disp(['bad']);
end

menghasilkan

good 

Cukup mudah bukan?
Bila kita membuat dalam versi GUI akan menjadi mudah seperti berikut