स्किकिट सीखें - स्टोचैस्टिक ग्रेडिएंट डिसेंट
यहाँ, हम स्केलेर में एक अनुकूलन एल्गोरिथ्म के बारे में जानेंगे, जिसे स्टोचैस्टिक ग्रैडिएंट डिसेंट (SGD) के रूप में जाना जाता है।
स्टोचस्टिक ग्रेडिएंट डिसेंट (SGD) एक सरल लेकिन कुशल अनुकूलन एल्गोरिथ्म है जिसका उपयोग फ़ंक्शंस के मानदंड / गुणांक के मानों को खोजने के लिए किया जाता है जो एक लागत फ़ंक्शन को कम करते हैं। दूसरे शब्दों में, इसका उपयोग एसवीएम और लॉजिस्टिक रिग्रेशन जैसे उत्तल हानि कार्यों के तहत रैखिक क्लासिफायर के भेदभावपूर्ण सीखने के लिए किया जाता है। इसे बड़े पैमाने पर डेटासेट में सफलतापूर्वक लागू किया गया है क्योंकि गुणांकों के लिए अद्यतन प्रत्येक प्रशिक्षण उदाहरण के लिए किया जाता है, बजाय उदाहरण के अंत में।
SGD क्लासिफायरफ़ायर
स्टोचस्टिक ग्रेडिएंट डिसेंट (SGD) क्लासिफायर मूल रूप से वर्गीकरण के लिए विभिन्न हानि कार्यों और दंडों का समर्थन करते हुए एक सादे SGD सीखने की दिनचर्या को लागू करता है। स्किकिट-सीख प्रदान करता हैSGDClassifier SGD वर्गीकरण को लागू करने के लिए मॉड्यूल।
मापदंडों
अनुसरण तालिका में उपयोग किए गए पैरामीटर शामिल हैं SGDClassifier मॉड्यूल -
अनु क्रमांक | पैरामीटर और विवरण |
---|---|
1 | loss - str, डिफ़ॉल्ट = 'काज' यह कार्यान्वयन करते समय उपयोग किए जाने वाले हानि फ़ंक्शन का प्रतिनिधित्व करता है। डिफ़ॉल्ट मान 'काज' है जो हमें एक रैखिक एसवीएम देगा। उपयोग किए जा सकने वाले अन्य विकल्प हैं -
|
2 | penalty - str, 'none', 'l2', 'l1', 'flexnet' यह मॉडल में उपयोग किया जाने वाला नियमितीकरण शब्द है। डिफ़ॉल्ट रूप से, यह L2 है। हम एल 1 या 'इलास्टिकनेट का उपयोग कर सकते हैं; साथ ही लेकिन दोनों मॉडल में स्पार्सिटी ला सकते हैं, इसलिए L2 के साथ प्राप्य नहीं है। |
3 | alpha - फ्लोट, डिफ़ॉल्ट = 0.0001 अल्फा, स्थिरांक जो नियमितीकरण शब्द को गुणा करता है, ट्यूनिंग पैरामीटर है जो यह तय करता है कि हम मॉडल को कितना दंडित करना चाहते हैं। डिफ़ॉल्ट मान 0.0001 है। |
4 | l1_ratio - फ्लोट, डिफ़ॉल्ट = 0.15 इसे ElasticNet मिश्रण पैरामीटर कहा जाता है। इसकी सीमा 0 <= l1_ratio <= 1. यदि l1_ratio = 1 है, तो जुर्माना L1 जुर्माना होगा। यदि l1_ratio = 0 है, तो जुर्माना L2 जुर्माना होगा। |
5 | fit_intercept - बूलियन, डिफ़ॉल्ट = सत्य यह पैरामीटर निर्दिष्ट करता है कि निर्णय फ़ंक्शन में एक स्थिर (पूर्वाग्रह या अवरोधन) जोड़ा जाना चाहिए। गणना में किसी भी अवरोधक का उपयोग नहीं किया जाएगा और डेटा पहले से ही केंद्रित माना जाएगा, अगर यह गलत पर सेट होगा। |
6 | tol - फ्लोट या कोई नहीं, वैकल्पिक, डिफ़ॉल्ट = 1.e-3 यह पैरामीटर पुनरावृत्तियों के लिए स्टॉपिंग मानदंड का प्रतिनिधित्व करता है। इसका डिफ़ॉल्ट मान गलत है, लेकिन यदि कोई नहीं पर सेट किया जाता है, तो पुनरावृत्तियों को रोक दिया जाएगाloss > best_loss - tol for n_iter_no_changeक्रमिक युग। |
7 | shuffle - बूलियन, वैकल्पिक, डिफ़ॉल्ट = सच यह पैरामीटर दर्शाता है कि हम चाहते हैं कि हमारे प्रशिक्षण डेटा को प्रत्येक युग के बाद फेरबदल किया जाए या नहीं। |
8 | verbose - पूर्णांक, डिफ़ॉल्ट = 0 यह क्रियात्मकता स्तर का प्रतिनिधित्व करता है। इसका डिफ़ॉल्ट मान 0 है। |
9 | epsilon - फ्लोट, डिफ़ॉल्ट = 0.1 यह पैरामीटर असंवेदनशील क्षेत्र की चौड़ाई को निर्दिष्ट करता है। यदि नुकसान = 'एप्सिलॉन-असंवेदनशील', वर्तमान भविष्यवाणी और सही लेबल के बीच किसी भी अंतर को, सीमा से कम अनदेखा किया जाएगा। |
10 | max_iter - int, वैकल्पिक, डिफ़ॉल्ट = 1000 जैसा कि नाम से पता चलता है, यह युगों से अधिक से अधिक संख्या अर्थात प्रशिक्षण डेटा का प्रतिनिधित्व करता है। |
1 1 | warm_start - बूल, वैकल्पिक, डिफ़ॉल्ट = गलत True पर सेट किए गए इस पैरामीटर के साथ, हम आरंभिक रूप में फिट होने के लिए पिछली कॉल के समाधान का पुन: उपयोग कर सकते हैं। यदि हम डिफ़ॉल्ट यानी गलत चुनते हैं, तो यह पिछले समाधान को मिटा देगा। |
12 | random_state - int, randomState उदाहरण या कोई नहीं, वैकल्पिक, डिफ़ॉल्ट = कोई नहीं यह पैरामीटर उत्पन्न छद्म यादृच्छिक संख्या के बीज का प्रतिनिधित्व करता है जिसका उपयोग डेटा को फेरबदल करते समय किया जाता है। अनुगमन विकल्प हैं।
|
13 | n_jobs - इंट या कोई नहीं, वैकल्पिक, डिफ़ॉल्ट = कोई नहीं यह बहु-वर्ग की समस्याओं के लिए ओवीए (वन वर्सेस ऑल) अभिकलन में उपयोग किए जाने वाले सीपीयू की संख्या का प्रतिनिधित्व करता है। डिफ़ॉल्ट मान वह नहीं है जिसका अर्थ 1 है। |
14 | learning_rate - स्ट्रिंग, वैकल्पिक, डिफ़ॉल्ट = 'इष्टतम'
|
15 | eta0 - डबल, डिफ़ॉल्ट = 0.0 यह उपर्युक्त अधिगम दर विकल्पों के लिए प्रारंभिक सीखने की दर का प्रतिनिधित्व करता है, अर्थात 'निरंतर', 'इनवेसलिंग', या 'अनुकूली'। |
16 | power_t - निष्क्रिय, डिफ़ॉल्ट = 0.5 यह सीखने की दर को बढ़ाने के लिए प्रतिपादक है। |
17 | early_stopping - बूल, डिफ़ॉल्ट = गलत यह पैरामीटर प्रशिक्षण को समाप्त करने के लिए प्रारंभिक रोक के उपयोग का प्रतिनिधित्व करता है जब सत्यापन स्कोर में सुधार नहीं होता है। इसका डिफ़ॉल्ट मान गलत है, लेकिन जब इसे सही किया जाता है, तो यह स्वचालित रूप से सत्यापन के रूप में प्रशिक्षण डेटा के एक स्तरीकृत अंश को अलग करता है और सत्यापन स्कोर में सुधार नहीं होने पर प्रशिक्षण रोक देता है। |
18 | validation_fraction - फ्लोट, डिफ़ॉल्ट = 0.1 इसका उपयोग केवल तभी किया जाता है जब शुरुआती_स्टॉपिंग सही हो। यह प्रशिक्षण डेटा के प्रारंभिक समाप्ति के लिए सत्यापन सेट के रूप में प्रशिक्षण डेटा के अनुपात का प्रतिनिधित्व करता है। |
19 | n_iter_no_change - int, default = ५ यह पुनरावृत्ति की संख्या का प्रतिनिधित्व करता है, जिसमें कोई सुधार नहीं होना चाहिए, एल्गोरिथम को जल्दी रोकने से पहले चलना चाहिए। |
20 | classs_weight - तानाशाह, {class_label: वजन} या "संतुलित", या कोई नहीं, वैकल्पिक यह पैरामीटर कक्षाओं से जुड़े भार का प्रतिनिधित्व करता है। यदि प्रदान नहीं किया जाता है, तो वर्गों का वजन 1 माना जाता है। |
20 | warm_start - बूल, वैकल्पिक, डिफ़ॉल्ट = गलत True पर सेट किए गए इस पैरामीटर के साथ, हम आरंभिक रूप में फिट होने के लिए पिछली कॉल के समाधान का पुन: उपयोग कर सकते हैं। यदि हम डिफ़ॉल्ट यानी गलत चुनते हैं, तो यह पिछले समाधान को मिटा देगा। |
21 | average - बूलियन या इंट, वैकल्पिक, डिफ़ॉल्ट = गलत यह बहु-वर्ग की समस्याओं के लिए ओवीए (वन वर्सेस ऑल) अभिकलन में उपयोग किए जाने वाले सीपीयू की संख्या का प्रतिनिधित्व करता है। डिफ़ॉल्ट मान वह नहीं है जिसका अर्थ 1 है। |
गुण
निम्न तालिका में उपयोग की जाने वाली विशेषताएँ हैं SGDClassifier मॉड्यूल -
अनु क्रमांक | विशेषताएँ और विवरण |
---|---|
1 | coef_ - सरणी, आकार (1, n_features) यदि n_classes == 2, (n_classes, n_features) यह विशेषता सुविधाओं को निर्दिष्ट भार प्रदान करती है। |
2 | intercept_ - सरणी, आकार (1), अगर n_classes == 2, अन्य (n_classes,) यह निर्णय समारोह में स्वतंत्र शब्द का प्रतिनिधित्व करता है। |
3 | n_iter_ - इंट यह स्टॉपिंग मानदंड तक पहुंचने के लिए पुनरावृत्तियों की संख्या देता है। |
Implementation Example
अन्य क्लासिफायर की तरह, स्टोचैस्टिक ग्रेडिएंट डिसेंट (SGD) को दो सरणियों के साथ फिट किया जाना है -
प्रशिक्षण के नमूने पकड़े हुए एक एक्स। यह आकार [n_samples, n_features] का है।
प्रशिक्षण के नमूनों के लिए लक्ष्य मानों अर्थात श्रेणी के लेबल रखने वाली एक सरणी Y। यह आकार [n_samples] का है।
Example
पायथन लिपि के बाद 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
अब, एक बार फिट होने के बाद, मॉडल नए मूल्यों की भविष्यवाणी कर सकता है -
SGDClf.predict([[2.,2.]])
Output
array([2])
Example
उपरोक्त उदाहरण के लिए, हम पायथन लिपि की मदद से वेट वेक्टर प्राप्त कर सकते हैं -
SGDClf.coef_
Output
array([[19.54811198, 9.77200712]])
Example
इसी प्रकार, हम निम्नलिखित लिपि की मदद से अवरोधन का मूल्य प्राप्त कर सकते हैं -
SGDClf.intercept_
Output
array([10.])
Example
हम उपयोग करके हाइपरप्लेन पर हस्ताक्षरित दूरी प्राप्त कर सकते हैं SGDClassifier.decision_function जैसा कि निम्नलिखित अजगर लिपि में किया गया है -
SGDClf.decision_function([[2., 2.]])
Output
array([68.6402382])
स्वदेश वापसी
स्टोकेस्टिक ग्रेडिएंट डिसेंट (SGD) रजिस्ट्रार मूल रूप से रैखिक सांद्रता मॉडल को फिट करने के लिए विभिन्न हानि कार्यों और दंडों का समर्थन करते हुए एक सादे SGD सीखने की दिनचर्या को लागू करता है। स्किकिट-सीख प्रदान करता हैSGDRegressor मॉड्यूल मॉड्यूल को लागू करने के लिए।
मापदंडों
द्वारा उपयोग किए गए पैरामीटर SGDRegressorलगभग वही हैं जो SGDClassifier मॉड्यूल में उपयोग किए गए थे। अंतर 'नुकसान' पैरामीटर में है। के लियेSGDRegressor मॉड्यूल के नुकसान पैरामीटर सकारात्मक मान निम्नानुसार हैं -
squared_loss - यह साधारण से साधारण वर्ग को संदर्भित करता है।
huber: SGDRegressor- एप्सिलॉन की दूरी से पहले रैखिक नुकसान से चुकता करके आउटलेर्स को सही करें। 'हब्बर' का काम 'स्क्वेरड_लॉस' को संशोधित करना है ताकि एल्गोरिथ्म आउटलेर्स को सही करने पर कम ध्यान केंद्रित करे।
epsilon_insensitive - दरअसल, यह एप्सिलॉन से कम त्रुटियों को नजरअंदाज करता है।
squared_epsilon_insensitive- यह epsilon_insensitive के समान है। अंतर केवल इतना है कि यह एप्सिलॉन की सहिष्णुता के कारण चुकता नुकसान बन जाता है।
एक और अंतर यह है कि 'power_t' नाम के पैरामीटर में 0.5 के बजाय 0.25 का डिफ़ॉल्ट मान है SGDClassifier। इसके अलावा, इसमें 'class_weight' और 'n_jobs' पैरामीटर नहीं हैं।
गुण
SGDRegressor की विशेषताएँ भी वही हैं जो SGDClassifier मॉड्यूल की थीं। बल्कि इसकी तीन अतिरिक्त विशेषताएं हैं -
average_coef_ - सरणी, आकार (n_features,)
जैसा कि नाम से पता चलता है, यह सुविधाओं को सौंपे गए औसत वजन प्रदान करता है।
average_intercept_ - सरणी, आकार (1)
जैसा कि नाम से पता चलता है, यह औसतन इंटरसेप्ट टर्म प्रदान करता है।
t_ - इंट
यह प्रशिक्षण चरण के दौरान किए गए वजन अपडेट की संख्या प्रदान करता है।
Note - विशेषताएँ औसत_coef_ और average_intercept_ पैरामीटर 'एवरेज' को True पर सक्षम करने के बाद काम करेंगे।
Implementation Example
पायथन लिपि का उपयोग करता है SGDRegressor रैखिक मॉडल -
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
अब, एक बार फिट होने के बाद, हम पायथन लिपि की मदद से वेट वेक्टर प्राप्त कर सकते हैं -
SGDReg.coef_
Output
array([-0.00423314, 0.00362922, -0.00380136, 0.00585455, 0.00396787])
Example
इसी प्रकार, हम निम्नलिखित लिपि की मदद से अवरोधन का मूल्य प्राप्त कर सकते हैं -
SGReg.intercept_
Output
SGReg.intercept_
Example
हम निम्नलिखित अजगर स्क्रिप्ट की मदद से प्रशिक्षण चरण के दौरान वजन अपडेट की संख्या प्राप्त कर सकते हैं -
SGDReg.t_
Output
61.0
पेशेवरों और बुरा के विपक्ष
SGD के पेशेवरों के बाद -
स्टोचस्टिक ग्रेडिएंट डिसेंट (SGD) बहुत कुशल है।
इसे लागू करना बहुत आसान है क्योंकि कोड ट्यूनिंग के लिए बहुत सारे अवसर हैं।
SGD की सहमति के बाद -
स्टोचैस्टिक ग्रैडिएंट डिसेंट (SGD) को नियमितीकरण मापदंडों जैसे कई हाइपरपैरामीटर की आवश्यकता होती है।
यह स्केलिंग सुविधा के प्रति संवेदनशील है।