Scikit Learn - Penurunan Gradien Stochastic

Di sini, kita akan belajar tentang algoritma pengoptimalan di Sklearn, disebut sebagai Stochastic Gradient Descent (SGD).

Stochastic Gradient Descent (SGD) adalah algoritma optimasi sederhana namun efisien yang digunakan untuk mencari nilai parameter / koefisien fungsi yang meminimalkan suatu fungsi biaya. Dengan kata lain, ini digunakan untuk pembelajaran diskriminatif pengklasifikasi linier di bawah fungsi kerugian konveks seperti SVM dan regresi logistik. Ini telah berhasil diterapkan ke kumpulan data skala besar karena pembaruan pada koefisien dilakukan untuk setiap instance pelatihan, bukan di akhir instance.

Pengklasifikasi SGD

Pengklasifikasi Stochastic Gradient Descent (SGD) pada dasarnya mengimplementasikan rutinitas pembelajaran SGD biasa yang mendukung berbagai fungsi kerugian dan penalti untuk klasifikasi. Scikit-learn menyediakanSGDClassifier modul untuk menerapkan klasifikasi SGD.

Parameter

Tabel berikut berisi parameter yang digunakan oleh SGDClassifier modul -

Sr Tidak Parameter & Deskripsi
1

loss - str, default = 'engsel'

Ini mewakili fungsi kerugian yang akan digunakan saat menerapkan. Nilai defaultnya adalah 'engsel' yang akan memberi kita SVM linier. Opsi lain yang dapat digunakan adalah -

  • log - Kerugian ini akan memberi kita regresi logistik yaitu pengklasifikasi probabilistik.

  • modified_huber - kerugian halus yang membawa toleransi pada pencilan bersama dengan perkiraan probabilitas.

  • squared_hinge - mirip dengan kerugian 'engsel' tetapi dikenai sanksi kuadrat.

  • perceptron - seperti namanya, ini adalah kerugian linier yang digunakan oleh algoritma perceptron.

2

penalty - str, 'none', 'l2', 'l1', 'elasticnet'

Ini adalah istilah regularisasi yang digunakan dalam model. Secara default, ini adalah L2. Kita bisa menggunakan L1 atau 'elasticnet; juga, tetapi keduanya mungkin membawa ketersebaran ke model, sehingga tidak dapat dicapai dengan L2.

3

alpha - float, default = 0,0001

Alpha, konstanta yang mengalikan suku regularisasi, adalah parameter tuning yang menentukan seberapa besar kita ingin menghukum model. Nilai defaultnya adalah 0,0001.

4

l1_ratio - float, default = 0.15

Ini disebut parameter pencampuran ElasticNet. Kisarannya adalah 0 <= l1_ratio <= 1. Jika l1_ratio = 1, hukumannya adalah penalti L1. Jika l1_ratio = 0, hukumannya adalah penalti L2.

5

fit_intercept - Boolean, Default = Benar

Parameter ini menetapkan bahwa konstanta (bias atau intersep) harus ditambahkan ke fungsi keputusan. Tidak ada intersep yang akan digunakan dalam penghitungan dan data akan dianggap sudah berada di tengah, jika disetel ke false.

6

tol - float atau tidak ada, opsional, default = 1.e-3

Parameter ini mewakili kriteria penghentian untuk iterasi. Nilai defaultnya adalah False tetapi jika disetel ke None, iterasinya akan berhenti jikaloss > best_loss - tol for n_iter_no_changezaman yang berurutan.

7

shuffle - Boolean, opsional, default = True

Parameter ini menyatakan apakah kita ingin data pelatihan kita diacak setelah setiap periode atau tidak.

8

verbose - bilangan bulat, default = 0

Ini mewakili tingkat verbositas. Nilai defaultnya adalah 0.

9

epsilon - float, default = 0,1

Parameter ini menentukan lebar dari daerah tidak sensitif. Jika loss = 'epsilon-insensitive', perbedaan apa pun, antara prediksi saat ini dan label yang benar, kurang dari ambang batas akan diabaikan.

10

max_iter - int, opsional, default = 1000

Seperti yang disarankan namanya, ini mewakili jumlah maksimum lintasan selama periode, yaitu data pelatihan.

11

warm_start - bool, opsional, default = false

Dengan parameter ini disetel ke True, kita dapat menggunakan kembali solusi dari panggilan sebelumnya agar sesuai sebagai inisialisasi. Jika kita memilih default yaitu false, itu akan menghapus solusi sebelumnya.

12

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 benih yang digunakan oleh generator bilangan acak.

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

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

13

n_jobs - int atau tidak ada, opsional, Default = Tidak Ada

Ini mewakili jumlah CPU yang akan digunakan dalam komputasi OVA (One Versus All), untuk masalah multi-kelas. Nilai defaultnya adalah none yang artinya 1.

14

learning_rate - string, opsional, default = 'optimal'

  • Jika kecepatan pembelajaran 'konstan', eta = eta0;

  • Jika kecepatan pembelajaran 'optimal', eta = 1.0 / (alpha * (t + t0)), di mana t0 dipilih oleh Leon Bottou;

  • Jika kecepatan pembelajaran = 'invscalling', eta = eta0 / pow (t, power_t).

  • Jika kecepatan pembelajaran = 'adaptif', eta = eta0.

15

eta0 - ganda, default = 0,0

Ini mewakili kecepatan pembelajaran awal untuk opsi kecepatan pembelajaran yang disebutkan di atas, yaitu 'konstan', 'invscalling', atau 'adaptif'.

16

power_t - idouble, default = 0,5

Ini adalah eksponen untuk kecepatan pembelajaran 'incscalling'.

17

early_stopping - bool, default = False

Parameter ini mewakili penggunaan penghentian awal untuk menghentikan pelatihan jika skor validasi tidak meningkat. Nilai defaultnya salah tetapi jika disetel ke true, secara otomatis akan menyisihkan sebagian kecil dari data pelatihan sebagai validasi dan menghentikan pelatihan ketika skor validasi tidak meningkat.

18

validation_fraction - float, default = 0,1

Ini hanya digunakan jika early_stopping benar. Ini mewakili proporsi data pelatihan untuk disisihkan sebagai set validasi untuk penghentian awal data pelatihan.

19

n_iter_no_change - int, default = 5

Ini mewakili jumlah iterasi tanpa peningkatan jika algoritme harus dijalankan sebelum penghentian awal.

20

classs_weight - dict, {class_label: weight} atau “balanced”, atau None, opsional

Parameter ini mewakili bobot yang terkait dengan kelas. Jika tidak disediakan, kelas seharusnya memiliki bobot 1.

20

warm_start - bool, opsional, default = false

Dengan parameter ini disetel ke True, kita dapat menggunakan kembali solusi dari panggilan sebelumnya agar sesuai sebagai inisialisasi. Jika kita memilih default yaitu false, itu akan menghapus solusi sebelumnya.

21

average - iBoolean atau int, opsional, default = false

Ini mewakili jumlah CPU yang akan digunakan dalam komputasi OVA (One Versus All), untuk masalah multi-kelas. Nilai defaultnya adalah none yang artinya 1.

Atribut

Tabel berikut berisi atribut yang digunakan oleh SGDClassifier modul -

Sr Tidak Atribut & Deskripsi
1

coef_ - larik, bentuk (1, n_features) jika n_classes == 2, lain (n_classes, n_features)

Atribut ini memberikan bobot yang ditetapkan ke fitur.

2

intercept_ - larik, bentuk (1,) jika n_class == 2, lain (n_classes,)

Ini mewakili istilah independen dalam fungsi keputusan.

3

n_iter_ - int

Ini memberikan jumlah iterasi untuk mencapai kriteria penghentian.

Implementation Example

Seperti pengklasifikasi lainnya, Stochastic Gradient Descent (SGD) harus dilengkapi dengan dua larik berikut -

  • Larik X yang menyimpan sampel pelatihan. Ini adalah ukuran [n_samples, n_features].

  • Larik Y yang memegang nilai target yaitu label kelas untuk sampel pelatihan. Ini adalah ukuran [n_samples].

Example

Mengikuti skrip Python menggunakan model linier SGDClassifier -

import numpy as np
from sklearn import linear_model
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
Y = np.array([1, 1, 2, 2])
SGDClf = linear_model.SGDClassifier(max_iter = 1000, tol=1e-3,penalty = "elasticnet")
SGDClf.fit(X, Y)

Output

SGDClassifier(
   alpha = 0.0001, average = False, class_weight = None,
   early_stopping = False, epsilon = 0.1, eta0 = 0.0, fit_intercept = True,
   l1_ratio = 0.15, learning_rate = 'optimal', loss = 'hinge', max_iter = 1000,
   n_iter = None, n_iter_no_change = 5, n_jobs = None, penalty = 'elasticnet',
   power_t = 0.5, random_state = None, shuffle = True, tol = 0.001,
   validation_fraction = 0.1, verbose = 0, warm_start = False
)

Example

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

SGDClf.predict([[2.,2.]])

Output

array([2])

Example

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

SGDClf.coef_

Output

array([[19.54811198, 9.77200712]])

Example

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

SGDClf.intercept_

Output

array([10.])

Example

Kita bisa mendapatkan jarak yang ditandatangani ke hyperplane dengan menggunakan SGDClassifier.decision_function seperti yang digunakan dalam skrip python berikut -

SGDClf.decision_function([[2., 2.]])

Output

array([68.6402382])

Regresor SGD

Stochastic Gradient Descent (SGD) regressor pada dasarnya mengimplementasikan rutin pembelajaran SGD biasa yang mendukung berbagai fungsi kerugian dan penalti agar sesuai dengan model regresi linier. Scikit-learn menyediakanSGDRegressor modul untuk mengimplementasikan regresi SGD.

Parameter

Parameter yang digunakan oleh SGDRegressorhampir sama dengan yang digunakan di modul SGDClassifier. Perbedaannya terletak pada parameter 'loss'. UntukSGDRegressor parameter kerugian modul nilai positif adalah sebagai berikut -

  • squared_loss - Ini mengacu pada fit kotak terkecil biasa.

  • huber: SGDRegressor- perbaiki pencilan dengan beralih dari kerugian kuadrat ke linier melewati jarak epsilon. Pekerjaan 'huber' adalah memodifikasi 'squared_loss' sehingga algoritme kurang fokus pada koreksi pencilan.

  • epsilon_insensitive - Sebenarnya, ini mengabaikan kesalahan kurang dari epsilon.

  • squared_epsilon_insensitive- Ini sama dengan epsilon_insensitive. Satu-satunya perbedaan adalah bahwa itu menjadi kerugian kuadrat melewati toleransi epsilon.

Perbedaan lainnya adalah bahwa parameter bernama 'power_t' memiliki nilai default 0,25 daripada 0,5 seperti pada SGDClassifier. Selain itu, ia tidak memiliki parameter 'class_weight' dan 'n_jobs'.

Atribut

Atribut SGDRegressor juga sama dengan atribut modul SGDClassifier. Melainkan memiliki tiga atribut tambahan sebagai berikut -

  • average_coef_ - larik, bentuk (n_features,)

Seperti namanya, ini memberikan bobot rata-rata yang ditetapkan ke fitur.

  • average_intercept_ - larik, bentuk (1,)

Seperti namanya, ini memberikan istilah intersep rata-rata.

  • t_ - int

Ini memberikan jumlah pembaruan beban yang dilakukan selama fase pelatihan.

Note - atribut average_coef_ dan average_intercept_ akan bekerja setelah mengaktifkan parameter 'average' ke True.

Implementation Example

Mengikuti penggunaan skrip Python SGDRegressor model linier -

import numpy as np
from sklearn import linear_model
n_samples, n_features = 10, 5
rng = np.random.RandomState(0)
y = rng.randn(n_samples)
X = rng.randn(n_samples, n_features)
SGDReg =linear_model.SGDRegressor(
   max_iter = 1000,penalty = "elasticnet",loss = 'huber',tol = 1e-3, average = True
)
SGDReg.fit(X, y)

Output

SGDRegressor(
   alpha = 0.0001, average = True, early_stopping = False, epsilon = 0.1,
   eta0 = 0.01, fit_intercept = True, l1_ratio = 0.15,
   learning_rate = 'invscaling', loss = 'huber', max_iter = 1000,
   n_iter = None, n_iter_no_change = 5, penalty = 'elasticnet', power_t = 0.25,
   random_state = None, shuffle = True, tol = 0.001, validation_fraction = 0.1,
   verbose = 0, warm_start = False
)

Example

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

SGDReg.coef_

Output

array([-0.00423314, 0.00362922, -0.00380136, 0.00585455, 0.00396787])

Example

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

SGReg.intercept_

Output

SGReg.intercept_

Example

Kami bisa mendapatkan jumlah pembaruan bobot selama fase pelatihan dengan bantuan skrip python berikut -

SGDReg.t_

Output

61.0

Pro dan Kontra SGD

Mengikuti kelebihan SGD -

  • Stochastic Gradient Descent (SGD) sangat efisien.

  • Ini sangat mudah diterapkan karena ada banyak peluang untuk penyetelan kode.

Mengikuti kontra SGD -

  • Stochastic Gradient Descent (SGD) membutuhkan beberapa hyperparameter seperti parameter regularisasi.

  • Ini sensitif terhadap penskalaan fitur.