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:
|
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.
|
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'
|
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.