Scikit Learn - Stokastik Gradyan İniş

Burada, Stokastik Gradient Descent (SGD) olarak adlandırılan Sklearn'daki bir optimizasyon algoritması hakkında bilgi edineceğiz.

Stokastik Gradient Descent (SGD), bir maliyet fonksiyonunu en aza indiren fonksiyonların parametrelerinin / katsayılarının değerlerini bulmak için kullanılan basit ama etkili bir optimizasyon algoritmasıdır. Diğer bir deyişle, doğrusal sınıflandırıcıların SVM ve Lojistik regresyon gibi dışbükey kayıp fonksiyonları altında ayırt edici öğrenimi için kullanılır. Büyük ölçekli veri kümelerine başarıyla uygulandı çünkü katsayılarda güncelleme, örneklerin sonundan ziyade her eğitim örneği için gerçekleştirildi.

SGD Sınıflandırıcı

Stokastik Gradient Descent (SGD) sınıflandırıcı temelde, sınıflandırma için çeşitli kayıp fonksiyonlarını ve cezaları destekleyen basit bir SGD öğrenme rutini uygular. Scikit-learn sağlarSGDClassifier modül SGD sınıflandırmasını uygulamak için.

Parametreler

Aşağıdaki tablo, tarafından kullanılan parametreleri içerir. SGDClassifier modül -

Sr.No Parametre ve Açıklama
1

loss - str, varsayılan = 'menteşe'

Gerçekleştirilirken kullanılacak kayıp fonksiyonunu temsil eder. Varsayılan değer, bize doğrusal bir SVM verecek olan 'menteşe'dir. Kullanılabilecek diğer seçenekler şunlardır:

  • log - Bu kayıp bize lojistik regresyon, yani olasılıksal sınıflandırıcı verecektir.

  • modified_huber - Olasılık tahminleriyle birlikte aykırı değerlere tolerans getiren yumuşak bir kayıp.

  • squared_hinge - 'menteşe' kaybına benzer, ancak ikinci dereceden cezalandırılır.

  • perceptron - adından da anlaşılacağı gibi, algılayıcı algoritması tarafından kullanılan doğrusal bir kayıptır.

2

penalty - str, "yok", "l2", "l1", "elastik ağ"

Modelde kullanılan regülasyon terimidir. Varsayılan olarak L2'dir. L1 veya 'Elasticnet; aynı zamanda ancak her ikisi de modele seyreklik getirebilir, dolayısıyla L2 ile elde edilemez.

3

alpha - float, varsayılan = 0.0001

Düzenlileştirme terimini çarpan sabit olan Alpha, modeli ne kadar cezalandırmak istediğimize karar veren ayarlama parametresidir. Varsayılan değer 0.0001'dir.

4

l1_ratio - float, varsayılan = 0.15

Buna ElasticNet karıştırma parametresi denir. Aralığı 0 <= l1_ratio <= 1'dir. L1_ratio = 1 ise, ceza L1 cezası olacaktır. L1_ratio = 0 ise, ceza L2 cezası olacaktır.

5

fit_intercept - Boolean, Varsayılan = Doğru

Bu parametre, karar fonksiyonuna bir sabitin (önyargı veya kesişim) eklenmesi gerektiğini belirtir. Hesaplamada hiçbir kesinti kullanılmayacak ve yanlış olarak ayarlanacaksa verilerin zaten ortalanmış olduğu varsayılacaktır.

6

tol - float veya none, isteğe bağlı, varsayılan = 1.e-3

Bu parametre, yinelemeler için durdurma kriterini temsil eder. Varsayılan değeri False'dır ancak Yok olarak ayarlanırsa yinelemeler dururloss > best_loss - tol for n_iter_no_changeardışık dönemler.

7

shuffle - Boolean, isteğe bağlı, varsayılan = Doğru

Bu parametre, eğitim verilerimizin her dönemden sonra karıştırılmasını isteyip istemediğimizi gösterir.

8

verbose - tamsayı, varsayılan = 0

Ayrıntı düzeyini temsil eder. Varsayılan değeri 0'dır.

9

epsilon - float, varsayılan = 0.1

Bu parametre, hassas olmayan bölgenin genişliğini belirtir. Kayıp = 'epsilon-duyarsız' ise, mevcut tahmin ile doğru etiket arasındaki herhangi bir fark, eşikten daha düşük olması göz ardı edilecektir.

10

max_iter - int, isteğe bağlı, varsayılan = 1000

Adından da anlaşılacağı gibi, dönemler üzerinden maksimum geçiş sayısını, yani eğitim verilerini temsil eder.

11

warm_start - bool, isteğe bağlı, varsayılan = yanlış

Bu parametre True olarak ayarlandığında, önceki çağrının çözümünü başlangıç ​​olarak sığdırmak için yeniden kullanabiliriz. Varsayılan yani yanlış seçersek, önceki çözümü silecektir.

12

random_state - int, RandomState örneği veya Yok, isteğe bağlı, varsayılan = yok

Bu parametre, verileri karıştırırken kullanılan sözde rasgele sayının tohumunu temsil eder. Seçenekler şunlardır.

  • int - Bu durumda, random_state rastgele sayı üreteci tarafından kullanılan tohumdur.

  • RandomState instance - Bu durumda, random_state rastgele sayı üreticisidir.

  • None - Bu durumda, rastgele sayı oluşturucu, np.random tarafından kullanılan RandonState örneğidir.

13

n_jobs - int veya none, isteğe bağlı, Varsayılan = Yok

Çok sınıflı problemler için OVA (One Versus All) hesaplamasında kullanılacak CPU sayısını temsil eder. Varsayılan değer hiçbiri, yani 1'dir.

14

learning_rate - dize, isteğe bağlı, varsayılan = 'optimum'

  • Öğrenme hızı 'sabit' ise, eta = eta0;

  • Öğrenme oranı 'optimal' ise, eta = 1.0 / (alpha * (t + t0)), burada t0 Leon Bottou tarafından seçilir;

  • Öğrenme hızı = 'invscalling' ise, eta = eta0 / pow (t, power_t).

  • Öğrenme hızı = 'uyarlanabilir' ise, eta = eta0.

15

eta0 - çift, varsayılan = 0.0

Yukarıda belirtilen öğrenme hızı seçenekleri için ilk öğrenme oranını temsil eder, yani 'sabit', 'ölçeklenebilir' veya 'uyarlanabilir'.

16

power_t - boş, varsayılan = 0,5

Öğrenme oranını 'artırma' için üs.

17

early_stopping - bool, varsayılan = Yanlış

Bu parametre, doğrulama puanı iyileşmediğinde eğitimi sonlandırmak için erken durdurmanın kullanımını temsil eder. Varsayılan değeri yanlıştır ancak doğru olarak ayarlandığında, eğitim verilerinin katmanlara ayrılmış bir bölümünü doğrulama olarak otomatik olarak ayırır ve doğrulama puanı iyileşmediğinde eğitimi durdurur.

18

validation_fraction - float, varsayılan = 0.1

Yalnızca early_stopping doğru olduğunda kullanılır. Eğitim verilerinin erken sonlandırılması için doğrulama seti olarak ayrılacak eğitim verilerinin oranını temsil eder.

19

n_iter_no_change - int, varsayılan = 5

Algoritmanın erken durdurmadan önce çalışması gereken iyileştirme olmadan yineleme sayısını temsil eder.

20

classs_weight - dikte, {class_label: ağırlık} veya "dengeli" veya Yok, isteğe bağlı

Bu parametre, sınıflarla ilişkili ağırlıkları temsil eder. Sağlanmazsa, sınıfların ağırlığı 1 olmalıdır.

20

warm_start - bool, isteğe bağlı, varsayılan = yanlış

Bu parametre True olarak ayarlandığında, önceki çağrının çözümünü başlangıç ​​olarak sığdırmak için yeniden kullanabiliriz. Varsayılan yani yanlış seçersek, önceki çözümü silecektir.

21

average - iBoolean veya int, isteğe bağlı, varsayılan = yanlış

Çok sınıflı problemler için OVA (One Versus All) hesaplamasında kullanılacak CPU sayısını temsil eder. Varsayılan değer hiçbiri, yani 1'dir.

Öznitellikler

Aşağıdaki tablo, tarafından kullanılan öznitelikleri içermektedir. SGDClassifier modül -

Sr.No Öznitelikler ve Açıklama
1

coef_ - dizi, şekil (1, n_features) eğer n_class == 2, else (n_classes, n_features)

Bu özellik, özelliklere atanan ağırlığı sağlar.

2

intercept_ - dizi, şekil (1,) eğer n_class == 2, değilse (n_class,)

Karar fonksiyonunda bağımsız terimi temsil eder.

3

n_iter_ - int

Durdurma kriterine ulaşmak için yineleme sayısını verir.

Implementation Example

Diğer sınıflandırıcılar gibi, Stokastik Gradyan İniş (SGD) aşağıdaki iki dizi ile donatılmalıdır -

  • Eğitim örneklerini tutan bir dizi X. [N_samples, n_features] boyutundadır.

  • Hedef değerleri, yani eğitim örnekleri için sınıf etiketlerini tutan bir Y dizisi. [N_samples] boyutunda.

Example

Aşağıdaki Python betiği SGDClassifier doğrusal modelini kullanır -

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

Şimdi, bir kez takıldığında model yeni değerleri şu şekilde tahmin edebilir -

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

Output

array([2])

Example

Yukarıdaki örnek için, aşağıdaki python betiğinin yardımıyla ağırlık vektörünü elde edebiliriz -

SGDClf.coef_

Output

array([[19.54811198, 9.77200712]])

Example

Benzer şekilde, aşağıdaki python betiğinin yardımıyla kesişimin değerini alabiliriz -

SGDClf.intercept_

Output

array([10.])

Example

Alt düzleme olan işaretli mesafeyi kullanarak elde edebiliriz. SGDClassifier.decision_function aşağıdaki python komut dosyasında kullanıldığı gibi -

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

Output

array([68.6402382])

SGD Regresörü

Stokastik Gradyan İniş (SGD) regresör temelde, doğrusal regresyon modellerine uyması için çeşitli kayıp fonksiyonlarını ve cezaları destekleyen basit bir SGD öğrenme rutini uygular. Scikit-learn sağlarSGDRegressor SGD regresyonunu uygulamak için modül.

Parametreler

Tarafından kullanılan parametreler SGDRegressorSGDC sınıflandırıcı modülünde kullanılanla hemen hemen aynıdır. Fark, 'kayıp' parametresindedir. İçinSGDRegressor modüllerin kayıp parametresi pozitif değerler aşağıdaki gibidir -

  • squared_loss - Sıradan en küçük kareleri ifade eder.

  • huber: SGDRegressor- epsilon mesafesini aşan kareden doğrusal kayba geçerek aykırı değerleri düzeltin. "Huber" ın işi, algoritmanın aykırı değerleri düzeltmeye daha az odaklanması için "kare_ kayıp" ı değiştirmektir.

  • epsilon_insensitive - Aslında epsilon'dan daha az hataları görmezden geliyor.

  • squared_epsilon_insensitive- epsilon_insensitive ile aynıdır. Tek fark, epsilon toleransını aşan kayıpların karesi haline gelmesidir.

Diğer bir fark, 'power_t' adlı parametrenin, varsayılan değer olarak 0.5 yerine 0.25 olmasıdır. SGDClassifier. Ayrıca, 'class_weight' ve 'n_jobs' parametrelerine sahip değildir.

Öznitellikler

SGDRegressor özellikleri de SGDC sınıflandırıcı modülünün özellikleriyle aynıdır. Bunun yerine aşağıdaki gibi üç ekstra özelliği vardır -

  • average_coef_ - dizi, şekil (n_features,)

Adından da anlaşılacağı gibi, özelliklere atanan ortalama ağırlıkları sağlar.

  • average_intercept_ - dizi, şekil (1,)

Adından da anlaşılacağı gibi, ortalama kesme terimini sağlar.

  • t_ - int

Egzersiz aşamasında gerçekleştirilen ağırlık güncellemelerinin sayısını sağlar.

Note - average_coef_ ve average_intercept_ öznitelikleri, 'ortalama' parametresi True olarak etkinleştirildikten sonra çalışacaktır.

Implementation Example

Python komut dosyası kullanımlarının ardından SGDRegressor doğrusal model -

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

Şimdi, bir kez takıldıktan sonra ağırlık vektörünü aşağıdaki python betiğinin yardımıyla elde edebiliriz -

SGDReg.coef_

Output

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

Example

Benzer şekilde, aşağıdaki python betiğinin yardımıyla kesişimin değerini alabiliriz -

SGReg.intercept_

Output

SGReg.intercept_

Example

Aşağıdaki python betiğinin yardımıyla eğitim aşamasında ağırlık güncellemelerinin sayısını alabiliriz -

SGDReg.t_

Output

61.0

SGD'nin Artıları ve Eksileri

SGD'nin artılarını takiben -

  • Stokastik Gradyan İniş (SGD) çok etkilidir.

  • Kod ayarlama için birçok fırsat olduğu için uygulaması çok kolaydır.

SGD'nin eksilerini takiben -

  • Stokastik Gradyan İnişi (SGD), düzenlileştirme parametreleri gibi birkaç hiperparametre gerektirir.

  • Özellik ölçeklendirmeye duyarlıdır.