Scikit Learn - Mendukung Mesin Vektor

Bab ini membahas metode pembelajaran mesin yang disebut sebagai Support Vector Machines (SVM).

pengantar

Mesin vektor dukungan (SVM) adalah metode pembelajaran mesin yang diawasi dan kuat namun fleksibel yang digunakan untuk klasifikasi, regresi, dan, deteksi pencilan. SVM sangat efisien dalam ruang dimensi tinggi dan umumnya digunakan dalam masalah klasifikasi. SVM populer dan hemat memori karena menggunakan subset poin pelatihan dalam fungsi keputusan.

Tujuan utama SVM adalah untuk membagi dataset menjadi beberapa kelas untuk menemukan a maximum marginal hyperplane (MMH) yang dapat dilakukan dengan dua langkah berikut -

  • Support Vector Machines pertama-tama akan membuat hyperplanes secara iteratif yang memisahkan kelas dengan cara terbaik.

  • Setelah itu akan memilih hyperplane yang memisahkan kelas dengan benar.

Beberapa konsep penting dalam SVM adalah sebagai berikut -

  • Support Vectors- Mereka dapat didefinisikan sebagai titik data yang paling dekat dengan bidang-hiper. Vektor pendukung membantu dalam menentukan garis pemisah.

  • Hyperplane - Pesawat keputusan atau ruang yang membagi sekumpulan objek yang memiliki kelas berbeda.

  • Margin - Kesenjangan antara dua garis pada titik data lemari dari kelas yang berbeda disebut margin.

Diagram berikut akan memberi Anda wawasan tentang konsep SVM ini -

SVM di Scikit-learn mendukung vektor sampel renggang dan padat sebagai input.

Klasifikasi SVM

Scikit-learn menyediakan tiga kelas yaitu SVC, NuSVC dan LinearSVC yang dapat melakukan klasifikasi kelas multikelas.

SVC

Ini adalah klasifikasi vektor C-support yang implementasinya didasarkan pada libsvm. Modul yang digunakan oleh scikit-learn adalahsklearn.svm.SVC. Kelas ini menangani dukungan multikelas menurut skema satu-vs-satu.

Parameter

Tabel berikut berisi parameter yang digunakan oleh sklearn.svm.SVC kelas -

Sr Tidak Parameter & Deskripsi
1

C - float, opsional, default = 1.0

Ini adalah parameter hukuman dari istilah kesalahan.

2

kernel - string, opsional, default = 'rbf'

Parameter ini menentukan jenis kernel yang akan digunakan dalam algoritme. kita bisa memilih salah satu di antara,‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’. Nilai default kernel adalah‘rbf’.

3

degree - int, opsional, default = 3

Ini mewakili derajat fungsi kernel 'poli' dan akan diabaikan oleh semua kernel lainnya.

4

gamma - {'scale', 'auto'} atau float,

Ini adalah koefisien kernel untuk kernel 'rbf', 'poly' dan 'sigmoid'.

5

optinal default - = 'skala'

Jika anda memilih default yaitu gamma = 'scale' maka nilai gamma yang akan digunakan SVC adalah 1 / (_ ∗. ()).

Di sisi lain, jika gamma = 'auto', itu menggunakan 1 / _.

6

coef0 - float, opsional, Default = 0.0

Istilah independen dalam fungsi kernel yang hanya signifikan dalam 'poli' dan 'sigmoid'.

7

tol - float, opsional, default = 1.e-3

Parameter ini mewakili kriteria penghentian untuk iterasi.

8

shrinking - Boolean, opsional, default = True

Parameter ini menyatakan apakah kita ingin menggunakan heuristik menyusut atau tidak.

9

verbose - Boolean, default: false

Ini mengaktifkan atau menonaktifkan output verbose. Nilai defaultnya salah.

10

probability - boolean, opsional, default = true

Parameter ini mengaktifkan atau menonaktifkan perkiraan probabilitas. Nilai defaultnya salah, tetapi harus diaktifkan sebelum kita menyebutnya fit.

11

max_iter - int, opsional, default = -1

Seperti namanya, ini mewakili jumlah maksimum iterasi dalam pemecah. Nilai -1 artinya tidak ada batasan jumlah iterasi.

12

cache_size - float, opsional

Parameter ini akan menentukan ukuran cache kernel. Nilainya akan dalam MB (MegaBytes).

13

random_state - int, instance RandomState atau Tidak Ada, opsional, default = tidak ada

Parameter ini mewakili seed dari bilangan acak semu yang dihasilkan yang digunakan saat mengacak data. Berikut adalah pilihannya -

  • int- Dalam hal ini, random_state adalah seed yang digunakan oleh generator bilangan acak.

  • RandomState instance - Dalam hal ini, random_state adalah generator bilangan acak.

  • None - Dalam hal ini, generator nomor acak adalah instance RandonState yang digunakan oleh np.random.

14

class_weight - {dict, 'balanced'}, opsional

Parameter ini akan mengatur parameter C kelas j ke _ℎ [] ∗ untuk SVC. Jika kita menggunakan opsi default, itu berarti semua kelas seharusnya memiliki bobot satu. Di sisi lain, jika Anda memilihclass_weight:balanced, ini akan menggunakan nilai y untuk menyesuaikan bobot secara otomatis.

15

decision_function_shape - ovo ',' ovr ', default =' ovr '

Parameter ini akan menentukan apakah algoritma akan kembali ‘ovr’ (one-vs-rest) fungsi keputusan bentuk sebagai semua pengklasifikasi lainnya, atau aslinya ovo(satu-vs-satu) fungsi keputusan libsvm.

16

break_ties - boolean, opsional, default = false

True - Prediksi akan memutuskan hubungan sesuai dengan nilai kepercayaan dari fungsi_keputusan

False - Prediksi akan mengembalikan kelas pertama di antara kelas yang terikat.

Atribut

Tabel berikut berisi atribut-atribut yang digunakan oleh sklearn.svm.SVC kelas -

Sr Tidak Atribut & Deskripsi
1

support_ - seperti larik, bentuk = [n_SV]

Ini mengembalikan indeks vektor dukungan.

2

support_vectors_ - seperti larik, bentuk = [n_SV, n_features]

Ini mengembalikan vektor dukungan.

3

n_support_ - seperti larik, dtype = int32, bentuk = [n_class]

Ini mewakili jumlah vektor dukungan untuk setiap kelas.

4

dual_coef_ - larik, bentuk = [n_class-1, n_SV]

Ini adalah koefisien vektor pendukung dalam fungsi keputusan.

5

coef_ - larik, bentuk = [n_class * (n_class-1) / 2, n_features]

Atribut ini, hanya tersedia dalam kasus kernel linier, memberikan bobot yang ditetapkan ke fitur.

6

intercept_ - larik, bentuk = [n_class * (n_class-1) / 2]

Ini mewakili istilah independen (konstanta) dalam fungsi keputusan.

7

fit_status_ - int

Outputnya akan menjadi 0 jika dipasang dengan benar. Outputnya akan menjadi 1 jika tidak dipasang dengan benar.

8

classes_ - array bentuk = [n_class]

Ini memberi label kelas.

Implementation Example

Seperti pengklasifikasi lainnya, SVC juga harus dilengkapi dengan dua larik berikut -

  • Sebuah array Xmemegang sampel pelatihan. Ini adalah ukuran [n_samples, n_features].

  • Sebuah array Ymemegang nilai target yaitu label kelas untuk sampel pelatihan. Ini adalah ukuran [n_samples].

Mengikuti penggunaan skrip Python sklearn.svm.SVC kelas -

import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
SVCClf = SVC(kernel = 'linear',gamma = 'scale', shrinking = False,)
SVCClf.fit(X, y)

Output

SVC(C = 1.0, cache_size = 200, class_weight = None, coef0 = 0.0,
   decision_function_shape = 'ovr', degree = 3, gamma = 'scale', kernel = 'linear',
   max_iter = -1, probability = False, random_state = None, shrinking = False,
   tol = 0.001, verbose = False)

Example

Sekarang, setelah dipasang, kita bisa mendapatkan vektor bobot dengan bantuan skrip python berikut -

SVCClf.coef_

Output

array([[0.5, 0.5]])

Example

Demikian pula, kita bisa mendapatkan nilai atribut lain sebagai berikut -

SVCClf.predict([[-0.5,-0.8]])

Output

array([1])

Example

SVCClf.n_support_

Output

array([1, 1])

Example

SVCClf.support_vectors_

Output

array(
   [
      [-1., -1.],
      [ 1., 1.]
   ]
)

Example

SVCClf.support_

Output

array([0, 2])

Example

SVCClf.intercept_

Output

array([-0.])

Example

SVCClf.fit_status_

Output

0

NuSVC

NuSVC adalah Klasifikasi Vektor Dukungan Nu. Ini adalah kelas lain yang disediakan oleh scikit-learn yang dapat melakukan klasifikasi kelas jamak. Ini seperti SVC tetapi NuSVC menerima set parameter yang sedikit berbeda. Parameter yang berbeda dari SVC adalah sebagai berikut -

  • nu - float, opsional, default = 0,5

Ini mewakili batas atas pada pecahan kesalahan pelatihan dan batas bawah dari pecahan vektor dukungan. Nilainya harus dalam interval (o, 1].

Parameter dan atribut lainnya sama dengan SVC.

Contoh Implementasi

Kita dapat menerapkan contoh yang sama menggunakan sklearn.svm.NuSVC kelas juga.

import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import NuSVC
NuSVCClf = NuSVC(kernel = 'linear',gamma = 'scale', shrinking = False,)
NuSVCClf.fit(X, y)

Keluaran

NuSVC(cache_size = 200, class_weight = None, coef0 = 0.0,
   decision_function_shape = 'ovr', degree = 3, gamma = 'scale', kernel = 'linear',
   max_iter = -1, nu = 0.5, probability = False, random_state = None,
   shrinking = False, tol = 0.001, verbose = False)

Kita bisa mendapatkan keluaran dari atribut lainnya seperti yang dilakukan dalam kasus SVC.

LinearSVC

Ini adalah Klasifikasi Vektor Dukungan Linear. Ini mirip dengan SVC yang memiliki kernel = 'linear'. Perbedaan di antara mereka adalah ituLinearSVC diimplementasikan dalam bentuk liblinear sementara SVC diimplementasikan di libsvm. Itulah alasannyaLinearSVCmemiliki lebih banyak fleksibilitas dalam pemilihan fungsi penalti dan kerugian. Ini juga menskalakan lebih baik untuk sejumlah besar sampel.

Jika kita berbicara tentang parameter dan atributnya maka itu tidak mendukung ‘kernel’ karena diasumsikan linier dan juga kekurangan beberapa atribut seperti support_, support_vectors_, n_support_, fit_status_ dan, dual_coef_.

Namun, itu mendukung penalty dan loss parameter sebagai berikut -

  • penalty − string, L1 or L2(default = ‘L2’)

    Parameter ini digunakan untuk menentukan norma (L1 atau L2) yang digunakan dalam hukuman (regularisasi).

  • loss − string, hinge, squared_hinge (default = squared_hinge)

    Ini mewakili fungsi kerugian di mana 'engsel' adalah kerugian SVM standar dan 'squared_hinge' adalah kuadrat kerugian engsel.

Contoh Implementasi

Mengikuti penggunaan skrip Python sklearn.svm.LinearSVC kelas -

from sklearn.svm import LinearSVC
from sklearn.datasets import make_classification
X, y = make_classification(n_features = 4, random_state = 0)
LSVCClf = LinearSVC(dual = False, random_state = 0, penalty = 'l1',tol = 1e-5)
LSVCClf.fit(X, y)

Keluaran

LinearSVC(C = 1.0, class_weight = None, dual = False, fit_intercept = True,
   intercept_scaling = 1, loss = 'squared_hinge', max_iter = 1000,
   multi_class = 'ovr', penalty = 'l1', random_state = 0, tol = 1e-05, verbose = 0)

Contoh

Sekarang, setelah dipasang, model dapat memprediksi nilai baru sebagai berikut -

LSVCClf.predict([[0,0,0,0]])

Keluaran

[1]

Contoh

Untuk contoh di atas, kita bisa mendapatkan vektor bobot dengan bantuan skrip python berikut -

LSVCClf.coef_

Keluaran

[[0. 0. 0.91214955 0.22630686]]

Contoh

Demikian pula, kita bisa mendapatkan nilai intersep dengan bantuan skrip python berikut -

LSVCClf.intercept_

Keluaran

[0.26860518]

Regresi dengan SVM

Seperti dibahas sebelumnya, SVM digunakan untuk masalah klasifikasi dan regresi. Metode Support Vector Classification (SVC) Scikit-learn dapat diperluas untuk memecahkan masalah regresi juga. Metode yang diperluas itu disebut Support Vector Regression (SVR).

Kesamaan dasar antara SVM dan SVR

Model yang dibuat oleh SVC hanya bergantung pada subset data pelatihan. Mengapa? Karena fungsi biaya untuk membangun model tidak peduli dengan poin data pelatihan yang berada di luar margin.

Sedangkan model yang dihasilkan oleh SVR (Support Vector Regression) juga hanya bergantung pada subset dari data training. Mengapa? Karena fungsi biaya untuk membangun model mengabaikan poin data pelatihan yang dekat dengan prediksi model.

Scikit-learn menyediakan tiga kelas yaitu SVR, NuSVR and LinearSVR sebagai tiga implementasi SVR yang berbeda.

SVR

Ini adalah regresi vektor dukungan Epsilon yang implementasinya didasarkan pada libsvm. Kebalikan dariSVC Ada dua parameter gratis dalam model yaitu ‘C’ dan ‘epsilon’.

  • epsilon - float, opsional, default = 0,1

Ini mewakili epsilon dalam model epsilon-SVR, dan menentukan tabung-epsilon di mana tidak ada penalti yang dikaitkan dalam fungsi kerugian pelatihan dengan titik-titik yang diprediksi dalam jarak epsilon dari nilai sebenarnya.

Parameter dan atribut lainnya serupa seperti yang kita gunakan di SVC.

Contoh Implementasi

Mengikuti penggunaan skrip Python sklearn.svm.SVR kelas -

from sklearn import svm
X = [[1, 1], [2, 2]]
y = [1, 2]
SVRReg = svm.SVR(kernel = ’linear’, gamma = ’auto’)
SVRReg.fit(X, y)

Keluaran

SVR(C = 1.0, cache_size = 200, coef0 = 0.0, degree = 3, epsilon = 0.1, gamma = 'auto',
   kernel = 'linear', max_iter = -1, shrinking = True, tol = 0.001, verbose = False)

Contoh

Sekarang, setelah dipasang, kita bisa mendapatkan vektor bobot dengan bantuan skrip python berikut -

SVRReg.coef_

Keluaran

array([[0.4, 0.4]])

Contoh

Demikian pula, kita bisa mendapatkan nilai atribut lain sebagai berikut -

SVRReg.predict([[1,1]])

Keluaran

array([1.1])

Demikian pula, kita bisa mendapatkan nilai atribut lain juga.

NuSVR

NuSVR adalah Nu Support Vector Regression. Ini seperti NuSVC, tetapi NuSVR menggunakan parameternuuntuk mengontrol jumlah vektor dukungan. Dan terlebih lagi, tidak seperti NuSVC dimananu mengganti parameter C, ini dia menggantikan epsilon.

Contoh Implementasi

Mengikuti penggunaan skrip Python sklearn.svm.SVR kelas -

from sklearn.svm import NuSVR
import numpy as np
n_samples, n_features = 20, 15
np.random.seed(0)
y = np.random.randn(n_samples)
X = np.random.randn(n_samples, n_features)
NuSVRReg = NuSVR(kernel = 'linear', gamma = 'auto',C = 1.0, nu = 0.1)^M
NuSVRReg.fit(X, y)

Keluaran

NuSVR(C = 1.0, cache_size = 200, coef0 = 0.0, degree = 3, gamma = 'auto',
   kernel = 'linear', max_iter = -1, nu = 0.1, shrinking = True, tol = 0.001,
   verbose = False)

Contoh

Sekarang, setelah dipasang, kita bisa mendapatkan vektor bobot dengan bantuan skrip python berikut -

NuSVRReg.coef_

Keluaran

array(
   [
      [-0.14904483, 0.04596145, 0.22605216, -0.08125403, 0.06564533,
      0.01104285, 0.04068767, 0.2918337 , -0.13473211, 0.36006765,
      -0.2185713 , -0.31836476, -0.03048429, 0.16102126, -0.29317051]
   ]
)

Demikian pula, kita bisa mendapatkan nilai atribut lainnya juga.

LinearSVR

Ini adalah Regresi Vektor Dukungan Linear. Ini mirip dengan SVR yang memiliki kernel = 'linear'. Perbedaan di antara mereka adalah ituLinearSVR diterapkan dalam hal liblinear, sementara SVC diterapkan di libsvm. Itulah alasannyaLinearSVRmemiliki lebih banyak fleksibilitas dalam pemilihan fungsi penalti dan kerugian. Ini juga menskalakan lebih baik untuk sejumlah besar sampel.

Jika kita berbicara tentang parameter dan atributnya maka itu tidak mendukung ‘kernel’ karena diasumsikan linier dan juga kekurangan beberapa atribut seperti support_, support_vectors_, n_support_, fit_status_ dan, dual_coef_.

Namun, ini mendukung parameter 'kerugian' sebagai berikut -

  • loss - string, opsional, default = 'epsilon_insensitive'

Ini mewakili fungsi kerugian di mana kerugian epsilon_insensitive adalah kerugian L1 dan kerugian epsilon-insensitive kuadrat adalah kerugian L2.

Contoh Implementasi

Mengikuti penggunaan skrip Python sklearn.svm.LinearSVR kelas -

from sklearn.svm import LinearSVR
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 4, random_state = 0)
LSVRReg = LinearSVR(dual = False, random_state = 0,
loss = 'squared_epsilon_insensitive',tol = 1e-5)
LSVRReg.fit(X, y)

Keluaran

LinearSVR(
   C=1.0, dual=False, epsilon=0.0, fit_intercept=True,
   intercept_scaling=1.0, loss='squared_epsilon_insensitive',
   max_iter=1000, random_state=0, tol=1e-05, verbose=0
)

Contoh

Sekarang, setelah dipasang, model dapat memprediksi nilai baru sebagai berikut -

LSRReg.predict([[0,0,0,0]])

Keluaran

array([-0.01041416])

Contoh

Untuk contoh di atas, kita bisa mendapatkan vektor bobot dengan bantuan skrip python berikut -

LSRReg.coef_

Keluaran

array([20.47354746, 34.08619401, 67.23189022, 87.47017787])

Contoh

Demikian pula, kita bisa mendapatkan nilai intersep dengan bantuan skrip python berikut -

LSRReg.intercept_

Keluaran

array([-0.01041416])