Data scaling dalam SVM

Dari diskusi di milis sc-ina

Roy Andre wrote:

…deleted…

Apa yg menjadi bahan pertanyaan saya saat ini adalah masalah scaling untuk data SVM, input maupun ouput.  Berdasarkan literatur yg saya punyai (online literatur, dan saya baru mendapatkan sedikit sekali) bahwa masalah scaling ini juga merupakan masalah krusial yg menentukan hasil SVM, apalagi mengingat SVM sangat sensitif terhadap noise.

Dari literatur yg di posting di  http://www.csie.ntu.edu.tw/~cjlin/libsvm/ – ” A Practial Guide to Support Vector Classification”, dikatakan bahwa scaling diperlukan untuk menghilangkan pengaruh feature yg memiliki range besar mendominasi feature yg memiliki range kecil, sehingga disarankan untuk melakukan scaling (kadang dapat juga disebut normalisasi). Scaling yg digunakan disini adalah ada dua macam range [0,1] atau [-1,+1] dgn menggunakan formula yg sederhana.

Pada literatur lain ftp://ftp.sas.com/pub/neural/FAQ2.html#A-std di ungkapkan bahwa normalisasi bukan hanya diberlakukan untuk feature input, tetapi juga kadang output.

Nah apa yg ingin saya tanyakan disini adalah apakah seluruh feature input perlu dinormalisasi, jika misalnya dari 10 feature input yg kita miliki, kita memiliki 5 memiliki range besar2, sebutlah sampe antara 0 sampe jutaan ada juga yang range 0 – ribuan,  sementara yg lain hanya range 0-5, bahkan ada feature yg telah masuk range 0-1.

Nah normalisasinya cukup dilakukan untuk setiap feature atau cukup yg besar2 saja? Bagaimana dengan feature yg masuk dalam range kecil, misalkan yg telah masuk range 0-1, bukankah feature tersebut telah normal dengan sendirinya?  Lalu bagaimana dengan output (target) yg juga misalnya memiliki range besar, harusnya dinormalisasi, lalu bagaimana jika target memiliki range kecil 0-1 misalnya.

Kemudian dalam kasus regresi kadang bisa testing data yg kita miliki memilki range yg lebih besar dari yg tertera pada data training, bagaimana hal ini diantisipasi dengan proses normalisasi.  Apakah perlu ada adjusted normalisasi, bagaimana melakukan normalisasi adjusted.

…deleted…

Anto:

Normalisasi perlu dilakukan kepada semua input feature, untuk memberikan jaminan bahwa data itu berada pada range yang sama. Range data dapat dibagi 3:

  1. data dg range besar, misalnya “suhu” dengan interval nilai [0,100]
  2. data dg range yang diinginkan [-1,+1]  (misalnya kita ingin pakai range ini untuk normalisasi)
  3. data dg range yang sangat kecil seperti ukuran mikroorganisma,  [-0.1, +0.1]

Untuk data yang range-nya besar (1) jelas perlu dilakukan normalisasi. Adapun data yang range-nya kecil (3), perlu juga dilakukan normalisasi, agar efeknya dalam proses training sama dengan feature yang lain.

Terlebih dalam SVM yang komputasinya berpusat pada dot product, feature yang memiliki range nilai besar berpotensi mendominasi hasil perhitungan akhir. Ini yang harus dihindari.

Contoh:
2 vector a & b : a=[100 1 0.1] b=[70 0.5 0.05]
dot product kedua vector <a,b> = 7000+0.5+0.005 = 7000.505
Hasil ini memperlihatkan bahwa feature pertama “suhu” sangat mendominasi hasil perhitungan, dan feature yang lain tidak memiliki peranan sama sekali.

Sesudah normalisasi, a & b misalnya menjadi
a=[1 1 1] b=[0.7 0.5 0.5]
Dot product <a,b> = 0.7+0.5+0.5= 1.7 yang nilainya sangat jauh berbeda dengan hasil pertama, dan tiap feature punya kontribusi yang sama terhadap hasil akhir.

Normalisasi yang dilakukan pada training data, harus dilakukan juga dengan cara yg sama terhadap testing data. Misalnya normalisasi dilakukan  dengan mengurangi suatu nilai feature (misalnya x) dengan nilai mean feature, dan kemudian dibagi dengan standard deviationnya.
new_x = (x – mean) / SD
mean dan SD diatas hitung dari data yang terdapat pada training data.

Selanjutnya pada testing data, hal yang sama dilakukan juga
new_x = (x – mean) / SD
tetapi mean dan SD bukan dihitung dari testing data, melainkan harus nilai yang sama dengan yang dipakai pada normalisasi training data. Hal ini sangat penting, karena akan menjamin bahwa data training dan testing ditransformasikan linear oleh operasi yang sama.

Tentang Anto Satriyo Nugroho

My name is Anto Satriyo Nugroho. I am working as research scientist at Center for Information & Communication Technology, Agency for the Assessment & Application of Technology (PTIK-BPPT : Pusat Teknologi Informasi & Komunikasi, Badan Pengkajian dan Penerapan Teknologi). I obtained my doctoral degree (Dr.Eng) from Nagoya Institute of Technology, Japan in 2003. My office is located in Serpong, Tangerang Selatan City.Since 2015, I was appointed as Program Director of R&D activities in Intelligent Computing Laboratory (former name: Digital Signal Processing Laboratory). The activities in the laboratory are organized into three groups : (i) Natural Language Processing (ii) Multimodal biometrics Identification (iii) ICT solution for Tropical Disease. I also enjoy to teach the students, as a part time lecturer in Swiss German University Serpong & UNS Sebelas Maret Surakarta. Should you want to know further information on my academic works, please visit my professional site at http://asnugroho.net
Pos ini dipublikasikan di neuro. Tandai permalink.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s