Tutorial Support Vector Machine (SVM) Dengan Mudah

Ayo ke Bondowoso - Setelah tim Statsbot mempublikasikan posting tentang deteksi anomali seri waktu, banyak pembaca meminta kami untuk memberi tahu mereka tentang pendekatan Support Vector Machines. Saatnya untuk mengejar dan memperkenalkan Anda kepada SVM tanpa matematika yang sulit dan membagikan pustaka dan sumber daya yang berguna untuk memulai.

Jika Anda telah menggunakan pembelajaran mesin untuk melakukan klasifikasi, Anda mungkin pernah mendengar tentang Dukungan Vector Machines (SVM). Diperkenalkan lebih dari 50 tahun yang lalu, mereka telah berevolusi dari waktu ke waktu dan juga telah disesuaikan dengan berbagai masalah lain seperti regresi, analisis outlier, dan peringkat.

SVM adalah alat favorit di gudang banyak praktisi pembelajaran mesin. Pada [24] 7, kami juga menggunakannya untuk menyelesaikan berbagai masalah.

Dalam posting ini, kami akan mencoba untuk mendapatkan pemahaman tingkat tinggi tentang cara kerja SVM. Saya akan fokus mengembangkan intuisi daripada ketelitian. Apa yang pada dasarnya berarti adalah kita akan melewati sebanyak mungkin matematika dan mengembangkan intuisi yang kuat dari prinsip kerja.

Masalah Klasifikasi
Katakanlah ada kursus pembelajaran mesin (ML) yang ditawarkan di universitas Anda. Instruktur kursus telah mengamati bahwa siswa mendapatkan hasil maksimal dari itu jika mereka pandai Matematika atau Statistik. Seiring waktu, mereka telah mencatat skor siswa yang terdaftar dalam mata pelajaran ini. Juga, untuk masing-masing siswa ini, mereka memiliki label yang menggambarkan kinerja mereka di kursus ML: "Baik" atau "Buruk."

Sekarang mereka ingin menentukan hubungan antara skor Matematika dan Statistik dan kinerja dalam kursus ML. Mungkin, berdasarkan apa yang mereka temukan, mereka ingin menentukan prasyarat untuk mendaftar di kursus.

Bagaimana mereka akan melakukannya? Mari mulai dengan mewakili data yang mereka miliki. Kita bisa menggambar plot dua dimensi, di mana satu sumbu mewakili nilai dalam Matematika, sementara satu sumbu mewakili nilai dalam Statistik. Seorang siswa dengan nilai tertentu ditampilkan sebagai titik pada grafik.


Warna titik - hijau atau merah - mewakili bagaimana dia melakukannya di kursus ML: "Baik" atau "Buruk" masing-masing.

Seperti inilah plot yang terlihat:

Ketika seorang siswa meminta pendaftaran, instruktur kami akan memintanya untuk memberikan nilai Matematika dan Statistiknya. Berdasarkan data yang mereka miliki, mereka akan membuat tebakan tentang kinerjanya di kursus ML.

Yang pada dasarnya kami inginkan adalah semacam "algoritme", yang Anda masukkan dalam "tupel skor" formulir (math_score, stats_score). Ini memberitahu Anda apakah siswa adalah titik merah atau hijau di plot (merah / hijau atau dikenal sebagai kelas atau label). Dan tentu saja, algoritma ini mewujudkan, dalam beberapa cara, pola-pola yang ada dalam data yang sudah kita miliki, juga dikenal sebagai data pelatihan.

Dalam hal ini, menemukan garis yang melewati antara gugus merah dan hijau, dan kemudian menentukan sisi mana dari baris ini tuple skor berada, adalah algoritma yang baik. Kami mengambil sisi - sisi hijau atau sisi merah - sebagai indikator yang baik dari kemungkinan kinerjanya dalam kursus.

Garis di sini adalah batas pemisah kami (karena memisahkan label) atau penggolong (kami menggunakannya mengklasifikasikan poin). Angka ini menunjukkan dua pengklasifikasi yang mungkin untuk masalah kita.

Good vs Bad Classifier
Inilah pertanyaan yang menarik: kedua garis di atas memisahkan gugus merah dan hijau. Adakah alasan bagus untuk memilih yang lain?

Ingat bahwa nilai dari penggolong tidak seberapa baik memisahkan data pelatihan. Kami akhirnya ingin mengklasifikasikan titik data yang belum terlihat (dikenal sebagai data uji). Karena itu, kami ingin memilih garis yang menangkap pola umum dalam data pelatihan, jadi ada peluang bagus itu baik pada data uji.

Baris pertama di atas tampaknya sedikit "miring." Di dekat bagian bawahnya tampaknya berjalan terlalu dekat dengan gugus merah, dan di bagian atasnya berjalan terlalu dekat dengan gugus hijau. Tentu, ini memisahkan data pelatihan dengan sempurna, tetapi jika melihat titik uji yang sedikit lebih jauh dari kluster, ada peluang bagus bahwa label itu salah.

Baris kedua tidak memiliki masalah ini. Sebagai contoh, lihat titik tes ditampilkan sebagai kotak dan label yang diberikan oleh pengklasifikasi pada gambar di bawah.

Baris kedua tetap sejauh mungkin dari kedua kelompok saat mendapatkan pemisahan data pelatihan dengan benar. Dengan berada tepat di tengah-tengah dua kelompok, itu kurang "berisiko," memberikan distribusi data untuk setiap kelas beberapa ruang gerak sehingga untuk berbicara, dan dengan demikian menggeneralisasi dengan baik pada data uji.

SVM mencoba mencari jenis baris kedua. Kami memilih penggolong yang lebih baik secara visual, tetapi kami perlu mendefinisikan filosofi yang mendasari sedikit lebih tepat untuk menerapkannya dalam kasus umum. Berikut ini versi yang disederhanakan dari apa yang dilakukan SVM:

Temukan garis yang mengklasifikasikan data pelatihan dengan benar
Di antara semua garis seperti itu, pilih salah satu yang memiliki jarak terbesar ke titik terdekat dengannya.
Titik-titik terdekat yang mengidentifikasi garis ini dikenal sebagai vektor dukungan. Dan wilayah yang mereka definisikan di sekitar garis itu dikenal sebagai margin.

Berikut adalah baris kedua yang ditampilkan dengan vektor dukungan: titik dengan tepi hitam (ada dua) dan margin (wilayah yang diarsir).


Support Vector Machines memberi Anda cara untuk memilih di antara banyak pengklasifikasi yang mungkin dengan cara yang menjamin peluang lebih tinggi untuk melabeli data pengujian Anda dengan benar. Cukup rapi, kan?

Sementara plot di atas menunjukkan garis dan data dalam dua dimensi, harus dicatat bahwa SVM bekerja dalam sejumlah dimensi; dan dalam dimensi-dimensi ini, mereka menemukan analog dari garis dua dimensi.

Sebagai contoh, dalam tiga dimensi mereka menemukan sebuah bidang (kita akan melihat contoh ini sebentar), dan dalam dimensi yang lebih tinggi mereka menemukan sebuah hyperplane - sebuah generalisasi dari garis dua dimensi dan bidang tiga dimensi ke sejumlah dimensi yang acak.

Data yang dapat dipisahkan oleh garis (atau secara umum, hyperplane) dikenal sebagai data yang terpisah secara linier. Hyperplane bertindak sebagai classifier linier.

Membiarkan Kesalahan
Kami melihat kasus mudah dari data yang terpisah secara linear sempurna di bagian terakhir. Data dunia nyata, bagaimanapun, biasanya berantakan. Anda hampir selalu memiliki beberapa contoh yang tidak dapat dipastikan oleh penggolong linier.

Berikut contoh data tersebut:

Jelas, jika kita menggunakan classifier linear, kita tidak akan dapat memisahkan label secara sempurna. Kami juga tidak ingin membuang classifier linier sama sekali karena sepertinya cocok untuk masalah kecuali untuk beberapa poin yang salah.

Bagaimana SVM menangani ini? Mereka memungkinkan Anda untuk menentukan berapa banyak kesalahan yang Anda bersedia terima.

Anda dapat memberikan parameter yang disebut "C" ke SVM Anda; ini memungkinkan Anda mendikte tradeoff antara:

Memiliki margin yang lebar.
Klasifikasi data pelatihan dengan benar. Nilai C yang lebih tinggi mengimplikasikan Anda menginginkan kesalahan yang lebih kecil pada data pelatihan.
Ini mengulang bahwa ini adalah tradeoff. Anda mendapatkan klasifikasi data pelatihan yang lebih baik dengan mengorbankan margin yang lebar.

Plot berikut menunjukkan bagaimana classifier dan margin bervariasi ketika kita meningkatkan nilai C (vektor dukungan tidak ditampilkan):

Perhatikan bagaimana garis "miring" saat kita meningkatkan nilai C. Pada nilai tinggi, ia mencoba untuk mengakomodasi label sebagian besar titik merah yang ada di kanan bawah plot. Ini mungkin bukan yang kami inginkan untuk data uji. Plot pertama dengan C = 0,01 tampaknya menangkap tren umum lebih baik, meskipun menderita dari akurasi yang lebih rendah pada data pelatihan dibandingkan dengan nilai yang lebih tinggi untuk C.

Dan karena ini adalah trade-off, perhatikan bagaimana lebar margin menyusut saat kita meningkatkan nilai C.
Dalam contoh sebelumnya, margin adalah "tanah tak bertuan" untuk poin. Di sini, kita melihat tidak mungkin lagi untuk memiliki batas pemisah yang baik dan margin bebas titik terkait. Beberapa poin merambat ke margin.

Masalah praktis yang penting adalah memutuskan nilai yang baik dari C. Karena data dunia nyata hampir tidak pernah terpisahkan dengan rapi, kebutuhan ini sering muncul. Kami biasanya menggunakan teknik seperti validasi silang untuk memilih nilai yang baik untuk C.

Data Terpisah Non-linear
Kami telah melihat bagaimana Support Vector Machines secara sistematis menangani data yang sempurna / hampir linier terpisah. Bagaimana cara menangani kasus-kasus di mana data benar-benar tidak terpisah secara linear? Afterall, banyak data dunia nyata jatuh dalam kategori ini. Tentunya, menemukan hyperplane tidak dapat berfungsi lagi. Ini tampaknya disayangkan mengingat bahwa SVM unggul dalam tugas ini.

Berikut adalah contoh data yang tidak dapat dipisahkan secara linear (ini adalah varian dari kumpulan data XOR yang terkenal), ditampilkan dengan pengukur SVM linier:


Anda setuju ini tidak terlihat bagus. Kami hanya memiliki akurasi 75% pada data pelatihan - yang terbaik dengan garis. Dan lebih lagi, garis tersebut melewati sangat dekat dengan beberapa data. Akurasi terbaik tidak besar, dan untuk mendapatkan bahkan di sana, garis hampir mengangkangi beberapa poin.

Kita harus melakukan yang lebih baik.

Di sinilah salah satu bagian favorit saya tentang SVM. Inilah yang kami miliki sejauh ini: kami memiliki teknik yang sangat bagus dalam menemukan hyperplanes. Tapi kemudian kami juga memiliki data yang tidak dapat dipisahkan secara linear. Jadi apa yang kita lakukan? Memproyeksikan data ke ruang di mana ia dapat dipisahkan secara linier dan menemukan hyperplane di ruang ini!

Saya akan mengilustrasikan ide ini selangkah demi selangkah.

Source : DISINI

Terima kasih telah mengunjungi website ini dan selalu kunjungi website bendebesah, jangan lupa share agar lebih bermanfaat.

Artikel Terkait