पायथन के स्किकिट-लर्न के साथ अन्य एसवीएम स्वादों को लागू करना

पायथन के स्किकिट-लर्न के साथ अन्य एसवीएम स्वादों को लागू करना

परिचय

यह मार्गदर्शिका सपोर्ट वेक्टर मशीन (एसवीएम) के बारे में तीन मार्गदर्शिकाओं का तीसरा और अंतिम भाग है। इस गाइड में, हम जाली बैंक नोटों के उपयोग के मामले के साथ काम करना जारी रखेंगे, एसवीएम के पीछे के सामान्य विचार के बारे में एक त्वरित पुनर्कथन करेंगे, समझेंगे कि कर्नेल ट्रिक क्या है, और स्किकिट-लर्न के साथ विभिन्न प्रकार के नॉन-लीनियर कर्नेल को लागू करें।

एसवीएम गाइड की पूरी श्रृंखला में, अन्य प्रकार के एसवीएम के बारे में सीखने के अलावा, आप सरल एसवीएम, एसवीएम पूर्व-निर्धारित पैरामीटर, सी और गामा हाइपरपैरामीटर के बारे में भी जानेंगे और कैसे उन्हें ग्रिड खोज और क्रॉस सत्यापन के साथ ट्यून किया जा सकता है।

यदि आप पिछली मार्गदर्शिकाओं को पढ़ना चाहते हैं, तो आप पहले दो मार्गदर्शिकाओं पर एक नज़र डाल सकते हैं या देख सकते हैं कि कौन से विषय आपकी सबसे अधिक रुचि रखते हैं। नीचे प्रत्येक गाइड में शामिल विषयों की तालिका दी गई है:

  1. पायथन के स्किकिट-लर्न के साथ एसवीएम और कर्नेल एसवीएम को लागू करना
  • उदाहरण का प्रयोग करें: बैंक नोट भूल जाओ
  • एसवीएम की पृष्ठभूमि
  • सरल (रैखिक) एसवीएम मॉडल
    • डेटासेट के बारे में
    • डेटासेट आयात करना
    • डेटासट की खोज
  • एसवीएम को स्किकिट-लर्न के साथ लागू करना
    • डेटा को ट्रेन/टेस्ट सेट में विभाजित करना
    • मॉडल को प्रशिक्षित करना
    • पूर्वानुमान करना
    • मॉडल का मूल्यांकन
    • व्याख्या परिणाम
  1. एसवीएम हाइपरपैरामीटर को समझना
  • सी हाइपरपैरामीटर
  • गामा हाइपरपैरामीटर

3. पायथन के स्किकिट-लर्न के साथ अन्य एसवीएम स्वादों को लागू करना

  • एसवीएम का सामान्य विचार (एक पुनर्कथन)
  • कर्नेल (ट्रिक) एसवीएम
  • स्किकिट-लर्न के साथ नॉन-लीनियर कर्नेल एसवीएम को लागू करना
  • पुस्तकालयों का आयात करना
    • डेटासेट आयात करना
    • डेटा को सुविधाओं (X) और लक्ष्य (y) में विभाजित करना
    • डेटा को ट्रेन/टेस्ट सेट में विभाजित करना
    • एल्गोरिथम प्रशिक्षण
  • बहुपद कर्नेल
    • पूर्वानुमान करना
    • एल्गोरिथ्म का मूल्यांकन
  • गाऊसी कर्नेल
    • भविष्यवाणी और मूल्यांकन
  • सिग्मॉइड कर्नेल
    • भविष्यवाणी और मूल्यांकन
  • गैर रेखीय कर्नेल प्रदर्शनों की तुलना

कुछ दिलचस्प SVM कर्नेल विविधताओं को देखने से पहले आइए याद करें कि SVM क्या है।

एसवीएम का सामान्य विचार

दो आयामों में रैखिक रूप से वियोज्य डेटा के मामले में (जैसा कि चित्र 1 में दिखाया गया है) विशिष्ट मशीन लर्निंग एल्गोरिथम दृष्टिकोण डेटा को इस तरह से विभाजित करने वाली सीमा को खोजने का प्रयास करना होगा ताकि गलत वर्गीकरण त्रुटि कम से कम हो। यदि आप आकृति 1 को करीब से देखते हैं, तो ध्यान दें कि कई सीमाएँ (अनंत) हो सकती हैं जो डेटा बिंदुओं को सही ढंग से विभाजित करती हैं। दो धराशायी रेखाएँ और साथ ही ठोस रेखा डेटा के सभी मान्य वर्गीकरण हैं।

एकाधिक निर्णय सीमाएँ

चित्र 1: एकाधिक निर्णय सीमाएँ

जब SVM चुनता है निर्णय सीमा, यह एक सीमा चुनता है जो अपने और कक्षाओं के निकटतम डेटा बिंदुओं के बीच की दूरी को अधिकतम करता है। हम पहले से ही जानते हैं कि निकटतम डेटा बिंदु समर्थन वैक्टर हैं और दोनों द्वारा दूरी को पैरामीट्रिज किया जा सकता है C और gamma हाइपरपैरामीटर.

उस निर्णय सीमा की गणना करने में, एल्गोरिथ्म चुनता है कि कितने बिंदुओं पर विचार करना है और मार्जिन कितनी दूर जा सकता है - यह एक मार्जिन अधिकतमकरण समस्या को कॉन्फ़िगर करता है। उस मार्जिन अधिकतमकरण समस्या को हल करने में, एसवीएम सपोर्ट वैक्टर (जैसा कि चित्र 2 में देखा गया है) का उपयोग करता है और यह पता लगाने की कोशिश करता है कि कौन से इष्टतम मूल्य हैं जो मार्जिन दूरी को बड़ा रखते हैं, जबकि उपयोग किए जा रहे फ़ंक्शन के अनुसार अधिक बिंदुओं को सही ढंग से वर्गीकृत करते हैं। डेटा अलग करें।

समर्थन वैक्टर के साथ निर्णय सीमा

चित्र 2: समर्थन सदिशों के साथ निर्णय सीमा

यही कारण है कि एसवीएम अन्य वर्गीकरण एल्गोरिदम से अलग है, एक बार यह केवल एक निर्णय सीमा नहीं पाता है, लेकिन यह इष्टतम निर्णय सीमा खोजने के अंत में समाप्त होता है।

सपोर्ट वैक्टर खोजने, निर्णय सीमा और सपोर्ट वैक्टर के बीच मार्जिन की गणना करने और उस मार्जिन को अधिकतम करने के पीछे शामिल आंकड़ों और कम्प्यूटेशनल विधियों से प्राप्त जटिल गणित है। इस बार, हम इस बात के विवरण में नहीं जाएंगे कि गणित किस तरह काम करता है।

यह हमेशा महत्वपूर्ण होता है कि गहराई में जाएं और सुनिश्चित करें कि मशीन लर्निंग एल्गोरिदम किसी प्रकार का रहस्यमय मंत्र नहीं है, हालांकि इस समय हर गणितीय विवरण को न जानना आपको एल्गोरिदम को निष्पादित करने और परिणाम प्राप्त करने में सक्षम होने से नहीं रोकता है।

सलाह: अब जब हमने एल्गोरिथम प्रक्रिया का एक सारांश बना लिया है, तो यह स्पष्ट है कि डेटा बिंदुओं के बीच की दूरी SVM द्वारा चुनी गई निर्णय सीमा को प्रभावित करेगी, इस वजह से, डेटा स्केलिंग एसवीएम क्लासिफायर का उपयोग करते समय आमतौर पर आवश्यक होता है। प्रयोग करके देखें स्किकिट-लर्न की स्टैंडर्ड स्केलर विधि डेटा तैयार करने के लिए, और फिर कोड को फिर से चलाने के लिए यह देखने के लिए कि क्या परिणामों में कोई अंतर है।

कर्नेल (ट्रिक) एसवीएम

पिछले अनुभाग में, हमने एसवीएम के सामान्य विचार को याद और व्यवस्थित किया है - यह देखते हुए कि इसका उपयोग रैखिक रूप से अलग करने योग्य डेटा के लिए इष्टतम निर्णय सीमा खोजने के लिए कैसे किया जा सकता है। हालाँकि, गैर-रैखिक रूप से वियोज्य डेटा के मामले में, जैसे कि चित्र 3 में दिखाया गया है, हम पहले से ही जानते हैं कि एक सीधी रेखा को निर्णय सीमा के रूप में उपयोग नहीं किया जा सकता है।

गैर-रैखिक रूप से वियोज्य डेटा

चित्र 3: गैर-रैखिक रूप से वियोज्य डेटा

इसके बजाय, हम एसवीएम के संशोधित संस्करण का उपयोग कर सकते हैं जिसकी हमने शुरुआत में चर्चा की थी, जिसे कर्नेल एसवीएम कहा जाता है।

मूल रूप से, कर्नेल एसवीएम जो करेगा वह निम्न आयामों के गैर-रैखिक रूप से वियोज्य डेटा को उच्च आयामों में इसके संबंधित रूप में प्रोजेक्ट करना है। यह एक चाल है, क्योंकि उच्च आयामों में गैर-रैखिक रूप से वियोज्य डेटा को प्रोजेक्ट करते समय, डेटा का आकार इस तरह से बदल जाता है कि यह वियोज्य हो जाता है। उदाहरण के लिए, जब 3 आयामों के बारे में सोचते हैं, तो प्रत्येक वर्ग के डेटा बिंदुओं को अलग-अलग आयामों में आवंटित किया जा सकता है, जिससे इसे अलग किया जा सकता है। डेटा आयामों को बढ़ाने का एक तरीका इसकी व्याख्या करके हो सकता है। फिर, इसमें जटिल गणित शामिल है, लेकिन आपको एसवीएम का उपयोग करने के लिए इसके बारे में चिंता करने की ज़रूरत नहीं है। इसके बजाय, हम गैर-रैखिक गुठली को उसी तरह लागू करने और उपयोग करने के लिए पायथन की स्किकिट-लर्न लाइब्रेरी का उपयोग कर सकते हैं, जिस तरह से हमने रैखिक का उपयोग किया है।

स्किकिट-लर्न के साथ नॉन-लीनियर कर्नेल एसवीएम को लागू करना

इस खंड में, हम पहले से ही ज्ञात चार विशेषताओं के अनुसार बैंक नोट के असली या जाली होने का अनुमान लगाने के लिए उसी डेटासेट का उपयोग करेंगे।

आप देखेंगे कि शेष चरण सामान्य मशीन सीखने के चरण हैं और जब तक हम उस हिस्से तक नहीं पहुंच जाते हैं जहां हम अपने गैर-रैखिक कर्नेल एसवीएम को प्रशिक्षित करते हैं, तब तक बहुत कम स्पष्टीकरण की आवश्यकता होती है।

पुस्तकालयों का आयात करना

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split

डेटासेट आयात करना

data_link = "https://archive.ics.uci.edu/ml/machine-learning-databases/00267/data_banknote_authentication.txt"
col_names = ["variance", "skewness", "curtosis", "entropy", "class"] bankdata = pd.read_csv(data_link, names=col_names, sep=",", header=None)
bankdata.head()mes)

डेटा को सुविधाओं (X) और लक्ष्य (y) में विभाजित करना

X = bankdata.drop('class', axis=1)
y = bankdata['class']

डेटा को ट्रेन/टेस्ट सेट में विभाजित करना

SEED = 42 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = SEED)

एल्गोरिथम प्रशिक्षण

कर्नेल एसवीएम को प्रशिक्षित करने के लिए, हम उसी का उपयोग करेंगे SVC स्किकिट-लर्न्स का वर्ग svm पुस्तकालय। अंतर कर्नेल पैरामीटर के मान में निहित है SVC वर्ग.

सरल एसवीएम के मामले में हमने कर्नेल पैरामीटर के मान के रूप में "रैखिक" का उपयोग किया है। हालाँकि, जैसा कि हमने पहले उल्लेख किया है, कर्नेल SVM के लिए, हम गॉसियन, बहुपद, सिग्मॉइड या कंप्यूटेबल कर्नेल का उपयोग कर सकते हैं। हम बहुपद, गॉसियन और सिग्मॉइड गुठली को लागू करेंगे और इसके अंतिम मेट्रिक्स को देखेंगे कि कौन सा उच्च मीट्रिक के साथ हमारी कक्षाओं में फिट बैठता है।

1. बहुपद कर्नेल

बीजगणित में, एक बहुपद रूप की अभिव्यक्ति है:

$$
2ए*बी^3 + 4ए - 9
$$

इसमें चर हैं, जैसे a और b, स्थिरांक, हमारे उदाहरण में, 9 और गुणांक (चर के साथ स्थिरांक), जैसे 2 और 43 बहुपद की डिग्री मानी जाती है।

ऐसे प्रकार के डेटा होते हैं जिन्हें बहुपद फ़ंक्शन का उपयोग करते समय सबसे अच्छा वर्णित किया जा सकता है, यहां कर्नेल क्या करेगा हमारे डेटा को बहुपद में मैप करना है जिसके लिए हम डिग्री का चयन करेंगे। डिग्री जितनी अधिक होगी, फ़ंक्शन उतना ही अधिक डेटा के करीब आने की कोशिश करेगा, इसलिए निर्णय सीमा अधिक लचीली होती है (और ओवरफिट होने की संभावना अधिक होती है) - डिग्री जितनी कम होगी, उतनी ही कम लचीली होगी।

सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!

तो, लागू करने के लिए बहुपद कर्नेल, चुनने के अलावा poly कर्नेल, हम इसके लिए एक मान भी पास करेंगे degree का पैरामीटर SVC कक्षा। नीचे कोड है:

from sklearn.svm import SVC
svc_poly = SVC(kernel='poly', degree=8)
svc_poly.fit(X_train, y_train)

पूर्वानुमान करना

अब, एक बार जब हमने एल्गोरिथम को प्रशिक्षित कर लिया है, तो अगला कदम परीक्षण डेटा पर भविष्यवाणियां करना है।

जैसा कि हमने पहले किया है, हम ऐसा करने के लिए निम्न स्क्रिप्ट निष्पादित कर सकते हैं:

y_pred_poly = svclassifier.predict(X_test)

एल्गोरिथ्म का मूल्यांकन

हमेशा की तरह, अंतिम चरण बहुपद कर्नेल पर मूल्यांकन करना है। चूंकि हमने वर्गीकरण रिपोर्ट और भ्रम मैट्रिक्स के लिए कोड को कुछ बार दोहराया है, चलिए इसे एक फ़ंक्शन में बदलते हैं display_results संबंधित प्राप्त करने के बाद y_test, y_pred और सीबॉर्न के भ्रम मैट्रिक्स के साथ शीर्षक cm_title:

def display_results(y_test, y_pred, cm_title): cm = confusion_matrix(y_test,y_pred) sns.heatmap(cm, annot=True, fmt='d').set_title(cm_title) print(classification_report(y_test,y_pred))

अब, हम फ़ंक्शन को कॉल कर सकते हैं और बहुपद कर्नेल से प्राप्त परिणामों को देख सकते हैं:

cm_title_poly = "Confusion matrix with polynomial kernel"
display_results(y_test, y_pred_poly, cm_title_poly)

आउटपुट इस तरह दिखता है:

 precision recall f1-score support 0 0.69 1.00 0.81 148 1 1.00 0.46 0.63 127 accuracy 0.75 275 macro avg 0.84 0.73 0.72 275
weighted avg 0.83 0.75 0.73 275

पायथन के स्किकिट-लर्न प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ अन्य एसवीएम फ्लेवर को लागू करना। लंबवत खोज. ऐ.

अब हम गॉसियन और सिग्मॉइड गुठली के लिए समान चरणों को दोहरा सकते हैं।

2. गॉसियन कर्नेल

गॉसियन कर्नेल का उपयोग करने के लिए, हमें केवल 'आरबीएफ' को मान के रूप में निर्दिष्ट करने की आवश्यकता है kernel एसवीसी वर्ग के पैरामीटर:

svc_gaussian = SVC(kernel='rbf', degree=8)
svc_gaussian.fit(X_train, y_train)

जब इस कर्नेल को और एक्सप्लोर किया जाता है, तो आप इसे अलग-अलग के साथ संयोजित करने के लिए ग्रिड खोज का भी उपयोग कर सकते हैं C और gamma मूल्यों.

भविष्यवाणी और मूल्यांकन

y_pred_gaussian = svc_gaussian.predict(X_test)
cm_title_gaussian = "Confusion matrix with Gaussian kernel"
display_results(y_test, y_pred_gaussian, cm_title_gaussian)

गॉसियन कर्नेल एसवीएम का आउटपुट इस तरह दिखता है:

 precision recall f1-score support 0 1.00 1.00 1.00 148 1 1.00 1.00 1.00 127 accuracy 1.00 275 macro avg 1.00 1.00 1.00 275
weighted avg 1.00 1.00 1.00 275

पायथन के स्किकिट-लर्न प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ अन्य एसवीएम फ्लेवर को लागू करना। लंबवत खोज. ऐ.

3. सिग्मॉइड कर्नेल

अंत में, कर्नेल एसवीएम को लागू करने के लिए सिग्मॉइड कर्नेल का उपयोग करें। निम्नलिखित स्क्रिप्ट पर एक नज़र डालें:

svc_sigmoid = SVC(kernel='sigmoid')
svc_sigmoid.fit(X_train, y_train)

सिग्मॉइड कर्नेल का उपयोग करने के लिए, आपको 'सिग्मॉइड' को मान के रूप में निर्दिष्ट करना होगा kernel का पैरामीटर SVC वर्ग.

भविष्यवाणी और मूल्यांकन

y_pred_sigmoid = svc_sigmoid.predict(X_test)
cm_title_sigmoid = "Confusion matrix with Sigmoid kernel"
display_results(y_test, y_pred_sigmoid, cm_title_sigmoid)

सिग्मॉइड कर्नेल के साथ कर्नेल एसवीएम का आउटपुट इस तरह दिखता है:

 precision recall f1-score support 0 0.67 0.71 0.69 148 1 0.64 0.59 0.61 127 accuracy 0.65 275 macro avg 0.65 0.65 0.65 275
weighted avg 0.65 0.65 0.65 275

पायथन के स्किकिट-लर्न प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ अन्य एसवीएम फ्लेवर को लागू करना। लंबवत खोज. ऐ.

गैर रेखीय कर्नेल प्रदर्शनों की तुलना

यदि हम संक्षेप में विभिन्न प्रकार के गैर-रैखिक कर्नेल के प्रदर्शन की तुलना करते हैं, तो ऐसा लग सकता है कि सिग्मॉइड कर्नेल में सबसे कम संकेतक हैं, इसलिए प्रदर्शन सबसे खराब है।

गॉसियन और बहुपद गुठली के बीच, हम देख सकते हैं कि गॉसियन कर्नेल ने एक पूर्ण 100% भविष्यवाणी दर हासिल की है - जो आमतौर पर संदिग्ध है और एक ओवरफिट का संकेत दे सकती है, जबकि बहुपद कर्नेल ने कक्षा 68 के 1 उदाहरणों को गलत तरीके से वर्गीकृत किया।

इसलिए, कोई कठोर और तेज़ नियम नहीं है कि कौन सा कर्नेल प्रत्येक परिदृश्य में या हमारे वर्तमान परिदृश्य में हाइपरपेरामीटर की खोज किए बिना, प्रत्येक फ़ंक्शन आकार के बारे में समझने, डेटा की खोज करने, और ट्रेन और परीक्षण परिणामों की तुलना करने के लिए एल्गोरिथ्म को देखने के लिए सबसे अच्छा प्रदर्शन करता है। सामान्यीकरण कर रहा है।

यह सभी गुठली का परीक्षण करने और पैरामीटर और डेटा तैयारी के संयोजन के साथ एक का चयन करने के बारे में है जो आपकी परियोजना के संदर्भ के अनुसार अपेक्षित परिणाम देता है।

आगे जा रहे हैं - हैंड-हेल्ड एंड-टू-एंड प्रोजेक्ट

आपका जिज्ञासु स्वभाव आपको और आगे जाना चाहता है? हम अनुशंसा करते हैं कि हमारी जाँच करें निर्देशित परियोजना: "हैंड्स-ऑन हाउस प्राइस प्रेडिक्शन - पायथन में मशीन लर्निंग".

पायथन के स्किकिट-लर्न प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ अन्य एसवीएम फ्लेवर को लागू करना। लंबवत खोज. ऐ.

इस निर्देशित परियोजना में - आप सीखेंगे कि शक्तिशाली पारंपरिक मशीन लर्निंग मॉडल के साथ-साथ डीप लर्निंग मॉडल कैसे बनाए जाते हैं, एसेकिट-लर्न और केरास मॉडल के बैग से घर की कीमतों की भविष्यवाणी करने के लिए एन्सेम्बल लर्निंग और प्रशिक्षण मेटा-लर्नर्स का उपयोग कैसे करें।

Tensorflow के शीर्ष पर बने डीप लर्निंग एपीआई केरस का उपयोग करते हुए, हम आर्किटेक्चर के साथ प्रयोग करेंगे, स्टैक्ड मॉडल का एक समूह बनाएंगे और एक को प्रशिक्षित करेंगे। मेटा-लर्नर तंत्रिका नेटवर्क (स्तर -1 मॉडल) एक घर के मूल्य निर्धारण का पता लगाने के लिए।

गहन शिक्षण अद्भुत है - लेकिन इसका सहारा लेने से पहले, यह सलाह दी जाती है कि समस्या को सरल तकनीकों के साथ हल करने का प्रयास करें, जैसे कि उथली शिक्षा एल्गोरिदम हमारा आधारभूत प्रदर्शन a . पर आधारित होगा यादृच्छिक वन प्रतिगमन कलन विधि। इसके अतिरिक्त - हम स्किकिट-लर्न के माध्यम से तकनीकों के माध्यम से मॉडल के समूह बनाने का पता लगाएंगे जैसे कि ऊलजलूल का कपड़ा और मतदान.

यह एक एंड-टू-एंड प्रोजेक्ट है, और सभी मशीन लर्निंग प्रोजेक्ट्स की तरह, हम इसके साथ शुरुआत करेंगे - with अन्वेषणात्मक डेटा विश्लेषण, द्वारा पीछा डेटा प्रीप्रोसेसिंग और अंत में भवन उथला और डीप लर्निंग मॉडल उस डेटा को फिट करने के लिए जिसे हमने पहले खोजा और साफ किया है।

निष्कर्ष

इस लेख में हमने एसवीएम पर एक त्वरित पुनर्कथन किया, कर्नेल ट्रिक के बारे में अध्ययन किया और गैर-रैखिक एसवीएम के विभिन्न स्वादों को लागू किया।

मेरा सुझाव है कि आप प्रत्येक कर्नेल को लागू करें और आगे बढ़ते रहें। आप प्रत्येक अलग-अलग कर्नेल को बनाने के लिए उपयोग किए जाने वाले गणित का पता लगा सकते हैं कि वे क्यों बनाए गए थे और उनके हाइपरपैरामीटर के बारे में अंतर। इस तरह, आप तकनीकों के बारे में जानेंगे और संदर्भ और उपलब्ध डेटा के आधार पर किस प्रकार के कर्नेल को लागू करना सबसे अच्छा है।

प्रत्येक कर्नेल कैसे काम करता है और उनका उपयोग कब करना है, इसकी स्पष्ट समझ निश्चित रूप से आपकी यात्रा में आपकी सहायता करेगी। हमें बताएं कि प्रगति कैसी चल रही है और खुश कोडिंग!

समय टिकट:

से अधिक स्टैकब्यूज