Problem Matriks Konfusi Pada ChatGPT dan Solusinya

Peneliti machine learning pasti mengenal matriks konfusi. Matriks konfusi (confusion matrix) adalah sebuah tabel yang digunakan untuk mengevaluasi performa model klasifikasi. Matriks konfusi menunjukkan jumlah prediksi yang benar dan salah yang dilakukan oleh model pada setiap kelas yang ada.

Matriks dua dimensi ini memiliki kolom sebagai prediksi dan baris sebagai nilai aktual/real/ground truth. Untuk Anda yang ingin memanfaatkan ChatGPT dapat menjalankan instruksi berikut. Pertama-tama masukan elemen dari matriks konfusi dengan format (baris, kolom).

Tampak nama kelas dengan True Positive, True Negative, False Positive dan False Negative-nya. Untuk menghitung Presisi, Recall, F1-Score, dan total akurasi dapat juga minta bantuan AI tersebut, tapi ternyata banyak kesalahan dalam perhitungannya.

Perhatikan Presisi (precision) untuk Agricultural, hasilnya ngaco. Namun cara/langkahnya benar. Oleh karena itu tetap harus menghitung sendiri. Caranya gampang, buka saja Excel, lalu copas angka-angka di atas.

Hasilnya 0.838257 yang jauh berbeda dengan hitungan sebelumnya: 0.942720. Biasanya sih TP, TN, FP, dan FN untuk kelas biner, lihat video berikut.

Iklan

Naïve Bayes – Kalkulasi secara Manual dan dengan Komputer

Saat ini tidak dapat dipungkiri bahwa Deep Learning paling banyak diteliti dan digunakan dalam aplikasi-aplikasi artificial intelligence. Beberapa pengguna tidak menyukai metode tersebut karena karakteristiknya yang tidak dapat dilihat logika di dalam modelnya atau sering diistilahkan dengan black box walaupun akurasinya saat ini dengan model terbarunya hingga mendekati 100%. Selain itu, deep learning membutuhkan kinerja prosesor yang tinggi, terutama ketika proses pelatihan (learning).

Jika ingin membuat model yang dapat dilihat alur logikanya, naïve bayes merupakan salah satu pilihan yang baik. Walaupun kinerjanya menurut beberapa penelitian kalah dengan metode terkini seperti misalnya support vector machine (SVM), metode ini memiliki karakteristik statistik yang kental, yaitu probabilistik. Ada istilah confidence dalam metode ini.

Untuk perhitungan, naïve bayes lebih mudah menurut saya dibanding decision tree yang mengharuskan membuat model tree dengan konsep entropy dan gain informationnya. Pada naïve bayes, kita hanya menghitung probabilitas ketika menghitung confidence tiap-tiap kelas prediksi.

Plus Minus

Metode naïve bayes, dalam Scikit Learn diisitilahkan dengan Gaussian Naïve Bayes, karena dalam mengkonversi tabel kategorikal lewat pendekatan fungsi Gauss. Walaupun akurasinya kurang dibanding metode lain, sifat probabilistiknya sangat membantu penjelasan ke pengguna dalam aplikasinya. Misalnya dalam memprediksi sebuah sentimen dalam sentiment analysis, metode ini tidak hanya menjelaskan positif, negatif, atau netral saja, melainkan berapa kadar positif dan negatifnya dalam bentuk probabilitas. Terkadang jika dalam sistem dashboard menunjukan negatif dengan probabilitas yang tinggi bisa saja digambarkan dengan warna merah yang artinya warning, sehingga eksekutif segera mengambil tindakan yang perlu dalam manajemen.

Statistik merupakan bidang yang paling banyak dimanfaatkan dalam machine learning. Belakangan beberapa ahli machine learning enggan disebut ahli statistik karena belakangan metode-metode terbaru tidak terlalu mengadopsi konsep statistik, misalnya tensorflow yang cenderung ke arah tensor dan matriks dalam aljabar. Silahkan lihat penjelasan slide di atas dalam video youtube berikut ini, semoga bermanfaat.

Machine Learning dengan K-Nearest Neighbours (KNN)

Beberapa istilah terkadang membuat rancu seperti data mining, machine learning, dan deep learning. Wajar saja karena ketiganya masih dalam induk yang sama, yaitu data mining yang bermain dengan data yang akan dilatih/ditraining. Deep learning merupakan machine learning yang mengkhususkan diri dengan satu metode yaitu jaringan syaraf tiruan (neural network). Machine learning merupakan salah satu metode dalam data mining yang mengkhususkan diri dengan beragam metode untuk melatih data sehingga mampu digunakan sebagai mesin inferensi/prediksi maupun klasterisasi. Salah satu metode klasik yang mudah dimengerti adalah KNN. Metode ini berprinsip, suatu data akan menjadi anggota data lain jika di sekelilingnya kebanyakan anggota data tersebut.

Scikit Learn

Para pengembang dan peneliti dengan menggunakan bahasa Python bersama-sama membuat library untuk pengguna machine learning. Library tersebut dibuat dengan format kelas yang berisi metode/fungsi seperti fitting, predicting, dan juga alat untuk mengukur akurasi. Kode sumber dapat diakses dengan mudah sehingga memudahkan Anda yang mendapat tugas memodifikasi metode.

Untuk praktek menerapkan KNN dengan library dari Scikit Learn, Google Colab merupakan pilihan yang praktis karena hanya bermodalkan browser dengan koneksi internet saja. Berikut kode yang terdiri dari impor library, ambil data, training data dan validasi. Terakhir menggunakan fungsi prediksi pada library untuk memprediksi kelas suatu data. Untuk pemula ada baiknya Anda ketik sendiri untuk melatih keterampilan serta alur logika memrogram.


#Impor pustaka
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
#Mengambil data dari file csv
datasiswa=pd.read_csv('beasiswa.csv')
df=pd.DataFrame(datasiswa,columns=['Mahasiswa','IPK','Tingkat Kemiskinan (TM)','Beasiswa/Tidak'])
X=np.asarray(datasiswa)
x_train=X[:,1:3]
y_train=X[:,3:4]
#Memanggil KNN
knn=KNeighborsClassifier(n_neighbors=6,
weights='uniform',
algorithm='auto',
metric='euclidean')
#Fit model dengan data latih dan target/label
knn.fit(x_train,y_train)
#Mengambil data dari file csv
datavalidasi=pd.read_csv('validasibeasiswa.csv')
df2=pd.DataFrame(datasiswa,columns=['Mahasiswa','IPK','Tingkat Kemiskinan (TM)','Beasiswa/Tidak'])
X2=np.asarray(datavalidasi)
x_val=X2[:,1:3]
y_val=X2[:,3:4]
#Prediksi
y_pred=knn.predict(x_val)
print((y_val).T)
print(y_pred)
print(classification_report(y_val,y_pred))
#Menyiapkan sebuah data uji/testing
uji=np.asarray([[2.5,4.0]])
y_pred=knn.predict(uji)
print(y_pred)

Data yang dibutuhkan dua buah yaitu data beasiswa dan data validasi beasiswa dalam format CSV. Bagaimana cara unggah data tersebut ke Google Colab serta penerapannya silahkan lihat video Youtube saya berikut ini. Semoga bermanfaat.

Mempersiapkan Data dan Training Model ANFIS, JST dan SVM

Dalam machine learning dikenal beberapa jenis data antara lain: data training dan data testing. Terkadang data training dipisah menjadi data training dan target. Dalam prakteknya, data training menggunakan sebagaian prosentase dengan sisanya dijadikan data tasting untuk pengujian model.

Excel dapat digunakan untuk mempersiapkan data training walaupun memiliki beberapa keterbatasan dalam mengelola “big data”. Untuk data yang tidak terlalu besar, aplikasi bawaan ms office ini cukup dapat diandalkan.

Walaupun cross validation banyak diterapkan saat ini, tetapi dengan 80% data training dan sisanya untuk testing (20%) sudah cukup untuk mengukur akurasi model yang dirancang. Sebagai contoh data training berikut dapat digunakan, dengan data latihnya. Berikut langkah proses mempersiapkan data training dan data testing.

1. ANFIS

Untuk ANFIS data training dan target digabung menjadi satu. Formatnya karena sudah sesuai dengan format pentabelan di Excel maka cukup menyiapkan data training saja. Gunakan dua kode ini untuk mengimport data dengan Matlab.

  • load(‘data.dat’);
  • load(‘testing.dat’);

Untuk ANFIS, fungsi “anfisedit” disediakan Matlab untuk melatih ANFIS lewat data yang ada. Karena isian sudah dalam bentuk DAT maka sebenarnya dua kode di atas hanya digunakan nanti untuk testing dan training lewat model lainnya seperti JST, SVM, dll.

Pastikan training data muncul dengan tiga kelas sesuai dengan data (kelas 1, 2 dan 3). Berikutnya “Generate FIS” diklik untuk meramu FIS yang masih kosong.

Angka 3 di atas berarti ada 3 komponen MF di tiap input. Jumlah angka yang muncul menandakan jumlah masukan, di sini ada empat input yang merupakan variabel penentu output. Tipe MF ada banyak, di sini akan digunakan “trimf” yang paling sederhana (linear). Gunakan saja defaultnya (3 komponen di tiap inputan), yang merepresentasikan kondisi “low”, “medium”, dan “high”. Output gunakan saja konstan. ANFIS hanya tersedia di jenis fuzzy “Sugeno”. Tekan “Struktur” di sisi kanan untuk melihat sekilas Network yang siap dilatih.

Berikutnya masuk ke panel “Train FIS” untuk melatih Network. Ada dua pilihan pembelajaran: hybrid dan backpropagation. Gunakan saja “hybrid”. Berikut merupakan hasil training dengan 3 epoch (mirip iterasi).

Error tampak di layar utama (sekitar 0.1445). Simpan hasil pelatihan lewat “File” – “Export” – Pilih file.

Setelah nama fuzzy diisi (berekstensi *.fis) maka model siap diuji dengan data testing yang sudah ada. Misalnya diberi nama “anfisiris.fis”. Untuk testing gunakan kode berikut ini:

  • anfisiris=readfis(‘anfisiris.fis’);
  • prediksi=evalfis(testing(:,1:4);
  • tes=testing(:,1:4)
  • hasil=evalfis(tes,anfisiris)

Terakhir adalah menghitung akurasi dengan cara prosentase MAPE (Mean Average Percentage Error)-nya:

Jika dibandingkan maka akan tampak beberapa yang error, misalnya di sini ada satu yang error, jadi nilai MAPE-nya= 1/39 *100 = 2,56 %. Atau akurasinya = 100-2,56 = 97,44%. Sedangkan jika ingin mengetahui prediksi mana saja yang tidak akurat dapat menggunakan matriks confusion.

  • target=testing(:,5);
  • target=transpose(target);
  • prediksi=transpose(round(hasil));
  • c=confusionmat(target,prediksi)
  • c =
  • 13 0 0
  • 0 13 0
  • 0 1 12

Cara membaca matriks confusion adalah sebagai berikut. Kolom merupakan prediksi sementara baris adalah aktualnya (dalam hal ini sama dengan target (testing di kolom kelima). Fungsi “round” ditambahkan pada hasil untuk mencari kelas prediksi terdekat, misalnya 2.7 dikategorikan kelas “3”. Diagonal pada matriks confusion menyatakan akurasi. Perhatikan di baris kedua kolom ketiga, di sini harusnya 13 tetapi berisi 12 karena ada satu prediksi 3 (baris ketiga) tetapi kenyataannya 2 (kolom kedua).

2. Neural Networks (Jaringan Syaraf Tiruan)

JST perlu memisahkan data training dengan target (labelnya). Selain itu, formatnya juga berbeda dengan data pada ANFIS, dimana variabel berdasarkan baris. Untuk itu perlu modifikasi data yang ada berdasarkan “data.dat” dan “testing.dat”. Berikut ini kode untuk data training dan targetnya.

  • load(‘data.dat’);
  • load(‘testing.dat’);
  • datalatih=data(:,1:4);
  • datalatih=transpose(datalatih);
  • target=data(:,5);
  • target=transpose(target);

Coba cek dengan fungsi “size”, pastikan jumlah baris merepresentasikan jumlah variabel, sementara jumlah kolom merepresentasikan jumlah data. Berikutnya buat JST kosong dan latih.

  • network=newff(datalatih,target,[81 81]);
  • network=train(network,datalatih,target);

Perlu disiapkan data untuk testing.

  • tesdata=testing(:,1:4);
  • tesdata=transpose(tesdata);
  • targettes=testing(:,5);
  • targettes=transpose(targettes);

Selanjutnya menggunakan fungsi “sim” untuk memprediksi.

  • hasil=sim(network,tesdata);
  • aktual=targettes;
  • prediksi=round(hasil);
  • c=confusionmat(aktual,prediksi);
  • c =
  • 13 0 0 0
  • 0 11 2 0
  • 0 4 6 3
  • 0 0 0 0

Dari matriks confusion di atas dapat diketahui precision-nya (atau dikenal juga dengan nama MAPE). Caranya adalah membandingkan total yang benar (angka di sisi diagonal) dengan total data testing.

  • 13+11+6
  • ans =
  • 30
  • ans/39
  • ans =
  • 0.7692

Akurasi yang dihasilkan (MAPE) adalah 76.92%.

3. Support Vector Machine (SVM)

SVM hanya memisahkan dua kelas yang berbeda. Jika ada lebih dari dua kelas, maka perlu modifikasi dengan menggunakan lebih dari satu garis pemisah. Salah satu tekniknya adalah membuat pohon keputusan. Misalnya ada tiga kelas (kelas 1, kelas 2 dan kelas 3) maka perlu dibuat tiga garis pemisah, misalnya kita beri nama svm1, svm2 dan svm3.

  • svm1, pemisah antara kelas 1 dan kelas 2
  • svm 2, pemisah antara kelas 1 dan kelas 3, dan
  • svm 3, pemisah antara kelas 2 dan kelas 3

 

(source: link)

Selanjutnya, dibuat logika if-else untuk mengarahkan garis pemisah yang sesuai (atau dengan teknik lain yang sesuai). Berikut ini salah satu contohnya:

  • test1=svmclassify(svm1,datatesting)
  • if test1==1
  • test2=svmclassify(svm2,datatesting)
  • if test2==1
  • class=’1′
  • else
  • class=’3′
  • end
  • else
  • test3=svmclassify(svm3,datatesting)
  • if test3==2
  • class=’2′
  • else
  • class=’3′
  • end
  • end

Untuk membuat garis pemisah, Matlab menyediakan fungsi “svmtrain”. Jika ingin membuat garis pemisah antara kelas 1 dan kelas 2 (svm1) diperlukan data latih yang memiliki kelas 1 dan kelas 2 (tanpa menyertakan kelas 3) disertai dengan group-nya (dalam JST dikenal dengan istilah target).

  • svm1=svmtrain(train,group)

Di sini “train” merupakan data gabungan kelas 1 dan kelas 2, begitu pula “group” merupakan kelas yang sesuai dengan “train”. Gunakan excel untuk memilah-milah antara kelas 1 dengan kelas lainnya untuk membuat svm2, dan svm3.

 

Menyelesaikan masalah “Architecture Mismatch Driver & Application” ketika mengakses Database di Matlab

Melanjutkan postingan yang lalu tentang problematika explore database di Matlab yang melibatkan versi 64 atau 32 bit. Masalah incompatible ini sepertinya tidak direspon dengan baik. Baik oleh Windows maupun Matlab. Sepertinya ada sedikit “paksaan” bagi pengguna versi 32 bit untuk beralih ke versi 64 bit. Padahal banyak yang masih menerapkan versi 32 bit di sistem yang sedang berjalan.

Install Microsoft Access Versi 64 Bit

Pengguna Matlab 64 bit sepertinya sudah harus beralih ke versi 64 bit untuk semua hal yang terlibat dengan Matlab (environment), seperti OS dan sistem basis data-nya. Jika tidak maka akan muncul peringatan adanya ketidaksesuaian dari sisi arsitektur antara driver ODBC dan aplikasi. Perbedaan arsitektur merupakan perbedaan yang tidak sepele dalam suatu sistem perangkat lunak.

Repotnya untuk Microsoft Access, tidak bisa langsung memasang yang 64 bit tanpa meng-uninstall versi yang sebelumnya. Perlu diperhatikan jika ada visio versi 32 bit, windows meminta uninstall juga. Jadi kalau sayang dengan visio yang 32 bit atau tidak punya installer visio yang 64 bit, sebaiknya difikirkan terlebih dahulu, atau siapkan dulu visio versi 64 bitnya.

Tadinya saya masih ragu, jangan-jangan ketika uninstall yang 32 bit dan install yang 64 bit tetap saja database tidak bisa diakses Matlab 64 bit, tetapi ternyata Alhamdulillah bisa. Mungkin ini bisa menjawab pertanyaan dari pembeli buku saya tentang database di Matlab yang tidak bisa terkoneksi dengan access karena beda versi “bit”nya. Oiya, jangan khawatir, semua settingan di office 32 bit yang lalu tetap otomatis terbawa di versi 64 bit yang baru.

Mengecek Koneksi Database di Matlab

Ketika sudah menginstall versi 64 bit, pastikan di ODBC yang 64 bit terisi driver dan platform-nya yang baru (64 bit). Selalu gunakan driver untuk kedua versi access (*.mdb dan *.accdb). Pastikan ketika mengklik Configure… tida ada pesan “architecture mismatch ..” lagi.

Tambahkan satu User DSN baru dan coba buka dengan Matlab 64 bit. Setelah mengetik dexplore di command window Matlab, cari ODBC yang baru saja dibuat. Pastikan database yang dibuat dengan Access dapat dilihat isinya.

Sekian dulu info singkat ini, semoga bermanfaat dan semoga pula naskah tentang data spasial dan bigdata dengan Matlab dapat rampung secepatnya.

Problematika Explore Database pada Matlab

Matlab terkini sudah memiliki fasilitas untuk mengeksplore suatu database. Hampir semua database dapat diakses dengan Matlab, khususnya yang berbasis Windows. Hanya saja ada sedikit permasalahan dengan kompatibilitas antara 64 bit dengan yang 32 bit. Berikut beberapa kemungkinan yang terjadi antara Windows, Matlab, dan Sistem database yang digunakan.

Baik Windows, Matlab dan Database 32 Bit atau 64 Bit

Untuk kasus ini tidak ada masalah yang berarti. Banyak tutorial yang membahas bagaimana mengkoneksikan database dengan Matlab dengan versi bit yang sama. Kebanyakan database dapat digunakan dengan menggunakan fasilitas Open Database Connectivity (ODBC) bawaan Windows. Link youtube ini cukup baik menjelaskan bagaimana mengkoneksikan database ke Matlab 64 bit.

Windows 64 Bit, tetapi Matlab dan Database 32 Bit

Untuk kasus ini ada sedikit masalah ketika mengeset ODBC karena driver yang tidak muncul. Untungnya Windows 64 bit masih memberikan fasilitas untuk mengelola ODBC versi sebelumnya (ODBC 32 bit). Cara mudahnya adalah dengan mengetik: odbcad32 di menu RUN. Letak file ‘odbcad32.exe’ ada di: C:\Windows\SysWOW64\odbcad32.exe.

Windows dan Matlab 64 Bit, tetapi database 32 Bit

Masalah ini banyak ditanyakan oleh pengguna di internet. Hampir semua jawaban tidak memuaskan, bahkan ketika ditanyakan ke pihak Microsoft. Kebanyakan kasusnya adalah user menginstall microsoft access 32 bit sebagai database tetapi memiliki Matlab versi 64 bit, misalnya Matlab 2013b.

Dikatakan bahwa DSN pada ODBC yang dibuat tidak matching antara arsitektur dengan driver aplikasi. Saran yang paling ampuh adalah menginstall ulang Microsoft Access dengan versi yang sama dengan Matlab tersebut (versi 64 bit). Matlab sendiri menganjurkan menggunakan 64 bit karena memiliki keunggulan tersendiri dalam penggunaan RAM maksimalnya (melebihi 3 Gb).

Menggunakan Database non Microsoft

Sebenarnya saya mencari driver yang bisa menambahkan driver access di kolom isian driver 64 bit. Ternyata selalu saja ada instruksi error bahwa access yang diinstall tidak 64 bit. Jika enggan menguninstall office 32 bit, ada alternatif database lain yang bisa digunakan yaitu MySQL. Ketika menginstall ODBC untuk MySQL maka di driver pada ODBC 64 bit muncul driver baru seperti di bawah ini.

Tampak MySQL ODBC 5.3 pada driver. MySQL sendiri dapat menggunakan aplikasi XAMM yang ringan karena Apache tidak selalu “ON” ketika tidak digunakan. Untuk menjalankannya tinggal men-doble klick XAMM start di explore.

Untuk mengujinya silahkan menggunakan fasilitas dexplore pada Matlab dengan mengetikannya di command window. Tekan “connect” yang terletak di kiri atas Matlab (atau otomatis akan meminta koneksi ke ODBC yang diinginkan). Pilih ODBC yang sudah dibentuk sebelumnya dengan pilihan driver MySQL.

Kemudian pastikan tampak fields yang ada di tabelnya. Silahkan yang suka “ngetik coding” di command window mengecek apakah koneksi sudah berjalan seperti berikut ini.

Pastikan isconnection bernilai “1” yang menandakan bahwa database telah berhasil terkoneksi ke Matlab anda. Selamat mencoba dan semoga bermanfaat.

NB: Silahkan beli buku yang disertai source code untuk melakukan komputasi dengan Matlab yang terintegrasi dengan database (access dan mysql), online maupun di toko buku Gramedia (semoga stok masih ada): https://www.gramedia.com/pemrograman-basis-data-di-matlab-cd.html.

Riset Tentang Web Mining

Lanjutan dari postingan yang lalu. Semua orang pasti memiliki jawaban yang sama tentang pentingnya aplikasi web, yaitu sangat penting. Mulai dari facebook, google, baca berita, dan mencari informasi lainnya selalu menggunakan aplikasi berbasis web. Walaupun saat ini aplikasi android sudah menjamur, tetapi tetap saja web menjadi hub yang menghubungkan client dengan server aplikasi dan server data. Perkembangannya yang sangat cepat membuat riset di bidang ini harus secepat mungkin karena satu teknologi akan segera usang seiring berjalannya waktu.

Banyak Anak Muda yang Tertarik

Web mining merupakan ilmu yang baru. Anak-anak muda karena sudah mengenal web sejak sekolah menengah tidak akan merasa kesulitan untuk mempelajarinya. Terkadang mereka lebih mahir dari pada guru-guru bahkan dosennya. Ketika saya mengikuti wawancara untuk mendapatkan beasiswa S3, saya iseng meminjam proposal milik peserta yang kebanyakan masih muda. Kebanyakan mereka ingin riset yang ada hubungannya dengan web, misalnya semantik web.

Bukan hanya untuk riset, banyak orang menggunakan web untuk mencari uang (affiliate marketing) dengan teknologi-teknologi yang dikembangkan seperti web crawler ataupun robot-robot yang diistilahkan dengan nama bot.

Bidang-bidang Riset Web Mining

Sesuai dengan unsur katanya, web mining berarti menggali informasi yang ada di web. Berbeda dengan data mining yang menggali informasi dari data terstruktur, web mining menggali informasi dari data semi-structure bahkan unstructured. Web mining lebih sulit karena jenis datanya yang tidak terstruktur dan terkadang banyak data “sampah” yang mengganggu proses penggalian data.

Untuk melakukan riset, langkah pertama yang harus ditempuh adalah mempelajari prinsip-prinsip dasar yang sudah baku di buku teks. Jangan sampai kita melakukan riset terhadap sesuatu yang sudah “established”. Teori-teori di buku biasanya sudah fix dan diakui kebenarannya oleh hampir peneliti-peneliti di dunia. Biasanya mahasiswa S3 terkadang mengambil mata kuliah bidang yang akan diriset sebelum masuk ke kandidasi (syarat untuk diperbolehkan meneliti). Langkah berikutnya adalah men-searching jurnal-jurnal terkini tentang web mining.

Untuk buku silahkan baca buku-buku yang beredar, terutama yang bahasa Inggris, misalnya “Mining the web” dan buku-buku semantic web lainnya (Linoff & Berry, 2001; Yu, 2011). Di sini disebutkan ada tiga aktivitas Web mining yang penting:

  • Mining structure
  • Mining usage
  • Mining content

Structure Mining

Silahkan masuk ke salah satu bidang web mining di atas. Yang pertama adalah Mining structure. Penggalian ini bermaksud mencari struktur dari web, biasanya link-link yang ada dalam suatu halaman. Halaman mana saja yang kerap menjadi target dari halaman yang lain? Halaman mana yang menunjuk ke halaman-halaman lain? dan seterusnya. Grafik yang sering dibuat adalah graf berarah yang menunjukan hubungan satu halaman dengan halaman lainnya. Penerapan yang sering dibuat adalah menghitung sitasi terhadap suatu halaman. Istilah yang sering muncul adalah hub, authorities, dan populer site. Tidak hanya melibatkan halaman yang berbeda, struktur lokal pun masuk dalam domain structure mining asalkan melibatkan hubungan-hubungan link.

Mining Usage Pattern

Di sini ada tambahan kata “pattern” karena biasanya yang digali adalah pola penggunaan suatu page. Dua bidang utamanya adalah clickstream analysis dan web logs. Masalah-masalah yang muncul adalah bersih atau tidaknya page yang dikoleksi. Oleh karena itu diperlukan langkah-langkah sebagai berikut:

  • Filtering
  • Despidering (anti spider)
  • User identification
  • Sessionalization, dan
  • Path completian.

Mining Content

Menggali isi web-web yang berserakan di dunia maya membutuhkan keahlian dalam menangani text/string karena sebagian besar web tidak terstruktur. Baca dan pelajari information retrieval dari buku-buku yang tersedia, misalnya buku yang gratis didonlot dari penerbitnya ini. Konsep-konsep stemming, dan sejenisnya (recall, precission, dll) banyak di bahas di buku tersebut. Oiya, sebagian saya tulis di post tentang information retrieval. Silahkan riset jika tertarik, saya sendiri masih meraba-raba, jika tidak sanggup ya back to basic: spatial data optimization.

Ref:

  • Linoff, G. S., & Berry, M. J. A. (2001). Mining the Web. United States of America: Wiley.
  • Yu, L. (2011). A Developer’s Guide to the Semantic Web. New York: Springer.

 

Mining the Web – Bidang Yang Kian Penting Saat ini

Menurut Prof. Rhenald Kasali, beberapa perusahaan ternama akhir-akhir ini jatuh secara tiba-tiba karena fenomena “disruption”. Fenomena ini merupakan bagian dari konsep “the invisible hand” dari Adam Smith kira-kira se-abad yang lalu. Tapi fenome disruptive muncul karena kejatuhannya yang tiba-tiba tanpa adanya gejala-gejala, ibarat serangan jantung, perusahaan-perusahaan raksasa tumbang mengenaskan. Laporan keuangan yang ok, tidak ada indikasi penetrasi atau serangan dari pesaing, tapi entah mengapa tiba-tiba ditinggalkan konsumen dan hancur. Di sisi lain, digrebeknya grup saracen yang berbasis online, dipenjaranya seorang gubernur karena rekamannya yg beredar online, tokoh aliran tertentu yang masih menunggu diperiksa, dan hal-hal lainnya mewarnai dunia digital di tanah air.

Dulu sempat mengajar e-commerce dan data mining tetapi tidak begitu membahas masalah dampaknya di masyarakat. Ternyata sangat besar. Konsumen mulai bergeser dari offline menjadi online (elektronik). Demo besar-besaran perusahaan taksi ternama di tanah air merupakan suatu sinyal akan adanya perubahaan perilaku konsumen dari offline transaction menjadi online. Dari sisi data mining, yang saya ajarkan (maupun buku yang diterbitkan) hanya berfokus ke database konvensional saja (bukan berbasis web). Oleh karena itu, upgrade ke versi web untuk mendukung terapannya dalam e-commerce sepertinya harus dimulai.

Ketika main ke perpustakaan, saya menjumpai buku lama terbitan 2001 yang membahas data mining pada web. Tahun-tahun itu merupakan tahun mulai berkembangnya riset-riset berbasis web yang hasilnya adalah aplikasi-aplikasi yang banyak dijumpai oleh orang-orang seperti sosial media, entertainment, dan sejenisnya. Berikut intro yang sari sarikan dari buku tersebut.

E-Commerce

Sesuai dengan namanya, e-commerce menjembatani antara produsen dengan konsumen lewat kanal/saluran baru yaitu transaksi elektronik, itu saja. Tetapi ternyata dengan pemanfaat media online dampaknya sangat besar walaupun tidak ada yang berubah dari sistem produksi, penentuan harga, laproan penjualan, dan sebagainya. Hal-hal yang membedakannya adalah kemampuan media online untuk menyediakan layanan yang cepat dalam menawarkan barang lewa “search engine”nya dalam bentuk rekomendasi, mampu mengingat history seorang pelanggan di waktu yang lampau, dan mampu secara cepat mengontrol persediaan barang mengikuti tren pemesanan barang oleh konsumen. Itu saja sudah cukup menghajar pemain-pemain lama yang tidak sadar akan bahayanya lengah terhadap media elektronik online.

E-Media

Selain perdagangan barang real, ternyata media terkena imbas dari media online. Mungkin mereka bisa bertahan karena karakter media yang tajam dalam melihat gejala-gejala adanya suatu fenomena, sehingga beberapa surat kabar bisa dengan “smooth” beralih dari media cetak ke online. Tetapi tentu saja media online memiliki keunggulan dibanding versi cetak karena media cetak tidak bisa mengetahui siapa saja yang telah membaca berita di dalamnya. Media online bisa mengetahui berita-berita yang menarik minat konsumen sehingga di masa yang akan bisa menulis berita-berita yang disukainya itu. Selain itu, media online memiliki karakteristik khusus yang “custom” dimana konsumen bisa memilih berita mana yang ingin diakses, khususnya yang berupa video. Inilah sepertinya yang dikhawatirkan oleh televisi-televisi lokal yang berbasis gelombang frekuensi yang dalam satu waktu tertentu hanya menyiarkan satu acara tertentu. Tinggal menunggu iklan yang lewat, jika tidak ada yang beriklan sepertinya siap-siap mengucapkan kata “selamat tinggal” (mungkin masih bisa bertahan untuk kampanye pemilu).

E-Markets

Saya, atau mungkin kita, pernah kecewa ketika telah membeli sesuatu ternyata ada tempat lain yang menjual dengan harga lebih murah, sakitnya tuh di sini. Dengan e-markets beberapa situs telah menyediakan fasilitas yang membandingkan harga-harga produk, seperti tike pesawat, hotel, dan lain sebagainya. Konsumen tinggal menilai sendiri, cari yang murah atau yang mahal tapi lebih nyaman. Selain itu, situs e-markets bisa menawarkan sesuatu selain yang dibeli, sehingga lebih banyak kemungkinan barang yang berhasil dijual. Sebenarnya ini menguntungkan konsumen juga karena tidak perlu jalan atau naik ekskalator mencari produk tertentu, kecuali memang ingin jalan-jalan.

Brands/Merk

Ini merupakan hal penting yang menunjukan kualitas suatu produk terhadap konsumen. Dari jaman dulu, konsep tentang “branding” tidak berubah. Konsumen cenderung membeli produk yang telah dikenalnya lama. Kematian suatu merk terkadang mengindikasikan kematian suatu perusahaan. Namun saat ini kualitas merk sangat-sangat tergantung dengan media online. Dua kali kecelakaan pada maskapai MAS sudah cukup menurunkan brand maskapai itu. Dan sialnya lagi, maraknya media sosial terkadang menyediakan hoax-hoax yang mengganggu brand suatu produk. Oleh karena itu tiap perusahaan sepertinya menyediakan tim yang memantau pergerakan brand di media online.

Sungguh pembahasan yang menarik. Masih banyak aspek-aspek lain yang bisa dipelajari dari aplikasi web, seperti periklanan, target marketing, customer value, real time considerations, understanding customers and business processes, experimental design for marketing, dll. Semoga tulisan ini bisa berlanjut.

Ref

Linoff, G. S., & Berry, M. J. A. (2001). Mining the Web. United States of America.

Melihat Data Network Hasil Training JST – Versi GUI

Pada postingan yang lalu telah dibahas cara mengetahui hasil training Jaringan Syaraf Tiruan (JST) dengan command window. Begitu juga bagaimana mengupdate salah satu parameternya, misalnya bias dan bias, sudah dibahas. Tetapi beberapa pembaca sepertinya agak kesulitan dengan instruksi-instruksi lewat command window. Oleh karena itu di sini akan dibahas cara yang jauh lebih mudah yaitu dengan “nntool”, salah satu GUI bawaan Matlab untuk merakit JST.

Sebenarnya masalah ini muncul ketika saya mencari kembali hasil training JST untuk peramalan (lihat post peramalan dengan JST di sini). Masalah yang sering dijumpai adalah “lupa”, karena banyaknya yang harus dikerjakan terkadang membuat seseorang lupa. Untungnya saya aktif menulis, tinggal masukan kata kunci di kolom “search” blog, catatan terdahulu yang dicari langsung ketemu. Jadi blog itu seperti catatan yang disimpan di “awan (cloud)” yang bisa diakses di mana saja dan kapan saja. Buka Matlab dan ketik nntool di command window.

Sebelumnya load terlebih dahulu Mat-file hasil training yang berisi variabel-variabel network. Di sini saya ada 7 variabel network yang saya sendiri lupa konfigurasinya. Setelah menekan “Import” di nntool maka muncul pilihan variabel yang akan dilihat. Ambil salah satu variabel hasil loading yang ada di workspace Matlab, dilanjutkan dengan kembali menekan Import setelah memilihnya.

Tekan Ok ketika ada informasi bahwa netwok telah berhasil diimpor. Tutup lagi sementara jendela Import to network/Data Manger. Perhatikan nntool kini telah muncul Network1 hasil impor. Untuk melihat isi dari variabel itu dobel klik saja di variabel tersebut.

Sebenarnya gambar di atas sudah cukup untuk mengetahui struktur JST yang telah dilatih dahulu. Misalnya input yang berjumlah 4 variabel dengan 1 keluaran. Hidden layer yang terletak di tengah tampak berjumlah sembilan. Gambar di atas khusus untuk Matlab versi 2013 ke atas, sementara Matlab versi yang terdahulu tidak memunculkan informasi tentang neuron-neuronnya. Silahkan tekan View/Edit Weights jika ingin melihat konfigurasi bobot-bobotnya. Kebetulan saya memiliki 4 variabel data yang akan dicoba prediksi dengan JST tersebut. Atau jika tidak ada, buat saja sendiri di command window. Tambahkan data input di nntool.

Tekan tombol Simulate pada network untuk memprediksi. Cara ini bisa juga dengan command window lewat instruksi sim.

Ada pesan untuk melihat nntool karena hasilnya dikirim ke sana. Jika sudah kembali ke nntool, tekan dua kali Output. Tampak hasilnya.

Sepertinya dengan nntool tidak banyak mengetik, alias tinggal klak-klik mouse saja. Jadi dengan empat masukan pada data akan menghasilkan satu keluaran (0.48). Di sini sebaiknya kita menggunakan normalisasi data, kalau bisa normal Euclidean, karena matrix yang dibuat dengan normal euclidean ortogonal yang disukai JST.

Cluster Data dari ArcGIS ke Matlab

Postingan kali ini bermaksud mencoba membuat video tutorial bagaimana mengkluster data dari arcgis dengan software matlab. Iseng-iseng dengan pengisi suara dari translate google, ternyata oke juga. Hasilnya pun lumayan jelas dibanding saya yang ngomong .. haha.

Ada dua kandidat software perekam yang digunakan yaitu ‘screen-o-matic’ dan ‘microsoft expression’ yang keduanya gratis untuk menggunakannya. Hanya saja microsoft expression kali ini unggul karena bisa merekam suara dari ‘translate google’ dan saya belum berhasil dengan ‘screen-o-matic’ yang unggul jika ingin ada cam-nya. Silahkan lihat videonya.

Ups .. ternyata terpotong karena lebih 10 menit. Hasilnya adalah berikut ini.

Instal WEKA untuk Data Mining

Untuk yang berkecimpung dengan dunia Data Mining sepertinya tidak asing dengan software WEKA yang dibuat oleh Universitas Waikato Selandia Baru. Sebelumnya saya menggunakan Matlab yang “bisa diotak-atik” dan Microsoft SQL Server Development Management yang cukup tangguh menangani data besar (lihat kategori “data mining“). WEKA sendiri setahu saya banyak dipakai oleh mahasiswa pascasarjana bidang ilmu komputer di tanah air. Postingan ini sekedar sharing informasi WEKA yang kebetulan saya instal untuk membantu rekan yang ingin lulus M.Kom di satu universitas swasta komputer yang cukup terkenal di Jakarta.

Source Software Weka

WEKA dapat diunduh gratis di situs resminya (klik di sini) milik Waikato University, suatu kampus ternama di New Zealand yang menurut rangking “top univerisities” masuk 200 besar. Saat tulisan ini dibuat masuk versi 3.8 (walaupun ada yang 3.9 tapi masih beta). Pilih sistem operasi yang cocok ketika mengunduh, misalnya 64 bit windows seperti laptop saya. Ukurannya sekitar seratusan Mb.

Instalasi

Dobel klik file yang baru saja diunduh untuk menginstal Weka. Setelah proses ekstraksi selesai, lanjut dengan instalasi, klik saja Next

Tampak persetujuan lisensi untuk Weka versi 3.8.1 yang akan diinstal. Tekan saja “I Agree” untuk lanjut. Saat muncul menu pilihan komponen, pilih saja yang disarankan Weka.

Tunggu hingga proses ekstrasi dan menginstal selesai. Sepertinya Weka menggunakan bahasa pemrograman Java dalam kolaborasi.

Ikuti saja ketika diminta menginstal Java. NOTE: jika sebelumnya sudah terinstal Weka, biasanya ada permintaan untuk uninstalling Jave versi sebelumnya. Namun demikian, proses instalasi terus berlanjut. Proses instlasi selesai setelah ditekan Next, selamat mencoba, semoga bisa segera posting mengenai Weka ini.

 

Kluster Data Spasial dari ArcGIS/ArcView dengan Fuzzy C-Means (FCM)

Data spasial adalah data yang berupa koordinat geografis suatu elemen dalam peta. Data itu bisa berupa titik maupun polygon. Di sini kita akan mencoba data spasial berupa titik-titik lokasi berasal dari ArcGIS atau GIS tool lainnya sesuai dengan proyeksi yang digunakan. Apa itu proyeksi? Panjang ceritanya, sebaiknya baca buku tentang geographic information system (GIS). Untuk praktek dapat kita buat spasial data yang sudah ada dalam format shapefile (berekstensi *.shp). Untuk memudahkan proses operasi, siapkan direktori kerja di lokasi dimana shapefile itu berada.

Anda harus memiliki fungsi “shaperead” di Matlab, biasanya sudah include di dalamnya untuk versi-versi terbaru. Cara mengeceknya dengan mengetik “help shaperead” di command window, kalau tidak ada, Matlab akan memberi pesan bahwa fungsi shaperead tidak ada. Berikutnya kita akan mengkonversi data ini ke dalam data berekstensi “dat”.

Ok, pastikan file “commercial.dat” yang merupakan konversi workspace ke file “dat” berhasil tersimpan. Mengapa langkah ini diperlukan? Karena toolbox FCM yang kita gunakan berikut ini menggunakan data berekstensi dat ini. Sebenarnya jika menggunakan fungsi fcm dari command window tidak perlu mengkonversi ke dat file, bisa langsung dari workspace, tapi untuk pemula, lebih mudah menggunakan toolbox. Ketik “findcluster” di command window sehingga muncul jendela berikut ini.

Kebetulan toolbox tersedia dalam dua dimensi, sehingga cocok dengan data spasial. Untuk yang tiga dimensi sepertinya agak ribet dan harus mengatur sumbu x,y, z. Atau untuk dimensi >2 sebaiknya menggunakan fungsi dari command window. Ketik “load data” untuk memanggil data, pilih “commercial.dat” yang telah dibuat sebelumnya.

Perhatikan tiga titik hitam yang merupakan titik pusat tiga kluster yang akan kita bentuk. Anda bisa mengganti jumlah kluster, misalnya hanya dua saja dan tekan “start” kembali untuk mencari pusat kluster yang baru. Untuk menyimpan pusat kluster, dapat Anda lakukan dengan menekan “Save Center” lalu simpan dalam bentuk “dat”. Berikutnya tiga center ini akan coba kita buka dengan di ArcGIS di postingan yang akan datang, selamat mencoba. Lanjut baca : Konversi Mat-File ke Shapefile

Bikin Buku Lagi .. “Pemrograman Database dengan Matlab”

Menganggur saat bulan puasa ternyata enak juga buat menulis. Saat berada di “dunia” sendiri tiba-tiba adzan maghrib pertanda waktu berbuka puasa. Setelah berbuka, refresh lagi, dan siap meracik tulisan lagi. Setelah lebaran, jadilah satu buku “Pemrograman Basis Data dengan Matlab”. Belum tentu itu judulnya karena terkadang penerbit menyarankan untuk mengganti judul dengan judul yang menarik dari sisi pemasaran. Begitulah, harus terjadi kerjasama yang baik antara penulis dengan pemasaran, jika tidak, sudah dapat dipastikan buku tersebut tidak laku.

Sebenarnya buku yang sedang direview oleh penerbit (semoga lolos) tersebut berawal dari pertanyaan-pertanyaan di blog ini. Lalu muncul ide bagaimana jika dibuat dalam satu paket buku beserta contoh-contoh aplikasinya. Apalagi banyak yang masih sangsi bahwa Matlab bisa menghasilkan aplikasi yang terhubung dengan basis data seperti bahasa-bahasa yang lain seperti visual basic, java, dan bahasa pemrograman visual lainnya. Matlab selama ini dipuji karena tangguh di sisi komputasi. Bukan tangguh sih sebenarnya, tetapi mudah dan user friendly. Jadi jika bisa mengelola database, maka perancang bisa dengan baik menghubungkan komputasi teknis, soft computing, data mining, dengan basis data yang dimiliki. Database Management System (DBMS) yang dipilih adalah Microsoft Access sebagai perwakilan DBMS desktop dan MySQL untuk DBMS berbasis web. Sepertinya cukup karena keduanya merupakan DBMS yang paling banyak digunakan saat ini, terutama mahasiswa.

Untuk contoh aplikasi, dipilih kasus-kasus yang sering dijadikan tugas akhir (skripsi atau thessis) para mahasiswa yaitu data mining dengan clustering, enkripsi database, pengolahan citra, yang dirakit tentu saja dengan GUI. Tulisan diakhiri dengan lampiran-lampiran yaitu pembuatan executable program dan teori dasar struktur data di Matlab yang sangat penting karena proses perpindahan dari DBMS ke Matlab untuk diproses dan sebaliknya.

Seperti biasa, operasi dasar pada pemrograman basis data dipelajari yang dikenal dengan istilah CRUID (create, read, update, insert, dan delete). Pembuatan grafik setelah proses clustering dan pengolahan citra digital yang kemudian disimpan ke database dibahas dengan sederhana. Jika tombol “clustering” ditekan maka tiap record di database data langsung terupdate masuk kluster yang mana (kluster 0 atau 1). Tentu saja Anda bisa mengembangkan menjadi lebih dari dua kluster. Tanda tangan yang tadinya image kini dirubah menjadi biner (0 dan 1) yang bermanfaat untuk mengurangi kapasitas penyimpanan (dibandingkan penyimpanan dalam bentuk image utuh) yang biasanya diterapkan di perbankan.

Sepertinya pengolahan data dengan notepad atau excel yang bersifat offline dari database sudah mulai diganti dengan sistem yang online karena perubahan data terjadi secara cepat dengan jumlah yang besar (big data). Semoga buku seharga beberapa bungkus rokok tersebut segera terbit (whee lah …). Amiin.

Sumber Data untuk Riset Komputasi

Data merupakan komponen penting dalam suatu riset. Sumbernya bisa secara langsung (data primer), bisa juga berasal dari sumber lain (data sekunder). Untuk menguji akurasi dari metode yang kita temukan mau tidak mau harus diuji dengan data real. Dengan berkembangnya internet, saat ini banyak lembaga-lembaga riset yang menyediakan data secara cuma-cuma. Tentu saja khusus riset tentang metode perbaikan dari metode yang ada karena jika risetnya tertuju pada lokasi tertentu maka mau tidak mau kita mengambil data dari lokasi tersebut.

Salah satu situs yang dapat dijadikan sumber data adalah https://archive.ics.uci.edu/ml/datasets.html yang berfokus pada machine learning dan intelligent system yaitu teknik-teknik yang dipakai dalam proses data mining dan decision support system. Situs ini berisi data-data yang sudah digunakan sejak tahun 1987 oleh David Aha ketika masih menjadi mahasiswa di UC Irvin.

Situs lainnya ada yang unik karena selain menyediakan data juga sebagai tempat kontes akurasi dalam menangani “big data” dengan hadiah yang lumayan besar. Dapat di akses di http://www.kaggle.com/ dengan terlebih dahulu sign up jika Anda belum memiliki akun. Karena bekerja dengan format big data maka pastikan akses internet Anda cepat karena data yang di download besarnya terkadang dalam gigabyte.

Selain mendownload dan mengikuti kontes/lomba kita dapat juga menguji hasil olah data yang telah kita lakukan dengan mengupload data hasil oleh sesuai format yang diminta (biasanya csv) dan langsung mengetahui rankingnya walaupun kontes sudah tidak dilombakan lagi dan pemenangnya sudah diperoleh.

Term Frequency dan Invers Document Frequency (Tf-Idf)

Karena kelemahan scoring dengan Jaccard adalah tidak disertakannya frekuensi suatu term dalam suatu dokumen, maka diperlukan skoring dengan kombinasi dari Term Frequency dan Invers Document Frequency atau disingkat tf-idf.

Term Frequency (tf)

Tf menyatakan jumlah berapa banyak keberadaan suatu term dalam satu dokumen dan kemudian dilogaritmikan agar mengurangi besarnya bilangan, dimana logaritmik suatu bilangan akan mengurangi digit jumlah, misalnya 1000 dengan log (1000) hanya menghasilkan angka tiga. Rumus Tf adalah sebagai berikut:

Jadi jika suatu term terdapat dalam suatu dokumen sebanyak 5 kali maka diperoleh bobot = 1 + log (5) =1.699. Tetapi jika term tidak terdapat dalam dokumen tersebut, bobotnya adalah nol.

Inverse Document Frequency (Idf)

Terkadang suatu term muncul di hampir sebagian besar dokumen mengakibatkan proses pencarian term unik terganggu. Idf berfungsi mengurangi bobot suatu term jika kemunculannya banyak tersebar di seluruh koleksi dokumen kita. Rumusnya adalah dengan inverse document frequency. Document frequency adalah seberapa banyak suatu term muncul di seluruh document yang diselidiki.

Sehingga bobot akhir suatu term adalah dengan mengalikan keduanya yaitu tf x idf. Berikut ini kita mengambil contoh suatu kasus. Misalnya kita memiliki vocabulary sebagai berikut:

girl, cat, assignment, exam, peace

Dan kita diminta merangking suatu query: “girl exam” terhadap dua dokumen di bawah ini:

Document 1 : exam peace cat peace peace girl

Document 2 : assignment exam

Langkah pertama adalah kita membuat tabel dengan term urut abjad (lexicography) dan mengisi nilai bobotnya untuk document 1 dan document 2. Setelah itu menghitung score(q,d1) dan score(q,d2) yang menyatakan berturut-turut skor rangking query terhadap dokumen 1 dan dokumen 2.

Bagaimana angka-angka tf-idf tersebut muncul? Jawabannya adalah dengan menghitung bobotnya lewat rumus tf x idf di atas. Perhatikan exam dan girl yang merupakan query (ditandai kotak hitam). Tampak untuk dokumen 1 score-nya adalah 0 + 0.3 = 0.3, sementara untuk dokumen 2 score-nya 0 + 0 = 0, jadi jika diranking, yang pertama adalah dokumen 1 dan berikutnya dokumen 2. Bagaimana menghitung bobot Wt,d untuk girl pada document 2 di atas yang diperoleh hasil 0.3? berikut ini jalan lengkapnya:

Coba hitung bobot di kolom yang lainnya siapa tahu saya salah hitung. Berikut video tutorialnya: