SVM হাইপারপ্যারামিটার বোঝা

SVM হাইপারপ্যারামিটার বোঝা

ভূমিকা

এই নির্দেশিকাটি সাপোর্ট ভেক্টর মেশিন (SVMs) সম্পর্কে তিনটি গাইডের দ্বিতীয় অংশ। এই নির্দেশিকায়, আমরা জাল ব্যাঙ্ক নোট ব্যবহারের ক্ষেত্রে কাজ চালিয়ে যাব, বুঝতে পারব যে SVM প্যারামিটারগুলি ইতিমধ্যেই Scikit-learn দ্বারা সেট করা হচ্ছে, C এবং Gamma হাইপারপ্যারামিটারগুলি কী এবং ক্রস ভ্যালিডেশন এবং গ্রিড অনুসন্ধান ব্যবহার করে কীভাবে তাদের টিউন করা যায়।

এসভিএম গাইডের সম্পূর্ণ সিরিজে, এসভিএম হাইপারপ্যারামিটার ছাড়াও, আপনি সাধারণ এসভিএম সম্পর্কেও শিখবেন, একটি ধারণা কার্নেল কৌশল, এবং অন্যান্য ধরনের SVM অন্বেষণ করুন।

আপনি যদি সমস্ত নির্দেশিকা পড়তে চান, প্রথম নির্দেশিকাটি একবার দেখুন, অথবা দেখুন কোনটি আপনার সবচেয়ে বেশি আগ্রহী, নীচে প্রতিটি গাইডে কভার করা বিষয়গুলির সারণী রয়েছে:

  1. Python এর Scikit-Learn-এর সাথে SVM এবং Kernel SVM বাস্তবায়ন করা
  • কেস ব্যবহার করুন: ব্যাংক নোট ভুলে যান
  • SVM-এর পটভূমি
  • সরল (লিনিয়ার) SVM মডেল
    • ডেটাসেট সম্পর্কে
    • ডেটাসেট আমদানি করা হচ্ছে
    • ডেটাসেট অন্বেষণ
  • Scikit-Learn এর সাথে SVM বাস্তবায়ন করা
    • ট্রেন/পরীক্ষা সেটে ডেটা ভাগ করা
    • মডেল প্রশিক্ষণ
    • ভবিষ্যদ্বাণী করা
    • মডেল মূল্যায়ন
    • ফলাফল ব্যাখ্যা

2. SVM হাইপারপ্যারামিটার বোঝা

  • সি হাইপারপ্যারামিটার
  • গামা হাইপারপ্যারামিটার

3. Python's Scikit-Learn-এর সাথে অন্যান্য SVM ফ্লেভার প্রয়োগ করা (শীঘ্রই আসছে!)

  • এসভিএমের সাধারণ ধারণা (একটি সংক্ষিপ্ত বিবরণ)
  • কার্নেল (কৌশল) SVM
  • Scikit-Learn-এর সাথে নন-লিনিয়ার কার্নেল SVM বাস্তবায়ন করা
  • লাইব্রেরি আমদানি করা হচ্ছে
    • ডেটাসেট আমদানি করা হচ্ছে
    • বৈশিষ্ট্য (X) এবং লক্ষ্য (y) মধ্যে ডেটা ভাগ করা
    • ট্রেন/পরীক্ষা সেটে ডেটা ভাগ করা
    • অ্যালগরিদম প্রশিক্ষণ
  • বহুপদী কার্নেল
    • ভবিষ্যদ্বাণী করা
    • অ্যালগরিদম মূল্যায়ন
  • গাউসিয়ান কার্নেল
    • ভবিষ্যদ্বাণী এবং মূল্যায়ন
  • সিগময়েড কার্নেল
    • ভবিষ্যদ্বাণী এবং মূল্যায়ন
  • নন-লিনিয়ার কার্নেল পারফরম্যান্সের তুলনা

চলুন জেনে নিই কিভাবে ক্রস ভ্যালিডেশন বাস্তবায়ন করা যায় এবং হাইপারপ্যারামিটার টিউনিং করা যায়।

SVM হাইপারপ্যারামিটার

স্কিট-লার্ন এবং এর ডিফল্ট মান দ্বারা ইতিমধ্যে সেট করা সমস্ত মডেল প্যারামিটার দেখতে, আমরা ব্যবহার করতে পারি get_params() পদ্ধতি:

svc.get_params()

এই পদ্ধতিটি প্রদর্শন করে:

{'C': 1.0, 'break_ties': False, 'cache_size': 200, 'class_weight': None, 'coef0': 0.0, 'decision_function_shape': 'ovr', 'degree': 3, 'gamma': 'scale', 'kernel': 'linear', 'max_iter': -1, 'probability': False, 'random_state': None, 'shrinking': True, 'tol': 0.001, 'verbose': False}

লক্ষ্য করুন যে ইতিমধ্যেই মোট 15টি হাইপারপ্যারামিটার সেট করা হয়েছে, এটি ঘটে কারণ SVM অ্যালগরিদমের অনেক বৈচিত্র রয়েছে৷ আমরা একটি লিনিয়ার ফাংশন পেতে লিনিয়ার কার্নেল ব্যবহার করেছি, তবে এমন কার্নেলও রয়েছে যা অন্যান্য ধরণের ফাংশন বর্ণনা করে এবং সেই কার্নেলগুলিকে বিভিন্ন উপায়ে প্যারামেট্রিজ করা হয়।

এই বৈচিত্রগুলি মডেলটিকে আরও নমনীয় এবং ডেটার বিভিন্ন আকারের মধ্যে একটি পৃথকীকরণ খুঁজে পাওয়ার জন্য উপযুক্ত করে তোলে। যদি আমরা আমাদের ক্লাসগুলিকে আলাদা করার জন্য একটি রেখা আঁকতে পারি, তাহলে ক রৈখিক কার্নেল একটি ভাল বিকল্প হবে, যদি আমরা একটি বক্ররেখা প্রয়োজন, তারপর একটি বহুপদী কার্নেল সেরা পছন্দ হতে পারে, যদি আমাদের ডেটার বৃত্তাকার আকার থাকে, তাহলে ক রেডিয়াল বেসিস ফাংশন or RBF একটি থ্রেশহোল্ডের উপরে এবং নীচে মান থাকলে কার্নেল ডেটার জন্য আরও ভালভাবে উপযুক্ত হবে, a সিগমায়েড কার্নেল ক্লাসগুলিকে আরও ভালভাবে আলাদা করতে পারে। আমরা আমাদের ডেটাতে যা অন্বেষণ করেছি তা থেকে মনে হচ্ছে যে একটি RBF বা একটি বহুপদী কার্নেল একটি লিনিয়ার কার্নেলের চেয়ে বেশি উপযুক্ত হবে।

এখন যেহেতু আমাদের ধারণা আছে যে 4 ধরনের বিভিন্ন কার্নেল ফাংশন আছে, আমরা প্যারামিটারে ফিরে যেতে পারি। যখন SVM অ্যালগরিদম ক্লাসগুলির মধ্যে একটি বিচ্ছেদ খুঁজে বের করার চেষ্টা করে, আমরা ইতিমধ্যেই বুঝতে পেরেছি যে এটি একটি শ্রেণিবিন্যাস আঁকে মার্জিন সমর্থন ভেক্টর এবং বিচ্ছেদ লাইন (বা বক্ররেখা) মধ্যে।

এই মার্জিনটি এক অর্থে বিচ্ছেদ রেখা এবং বিন্দুর মধ্যে একটি বাফারের মতো। মার্জিন আকার পরিবর্তিত হতে পারে, যখন মার্জিন হয় ক্ষুদ্রতর, বিন্দুগুলির জন্য কম জায়গা রয়েছে যা মার্জিনের বাইরে পড়ে, ক্লাসগুলির মধ্যে বিচ্ছেদকে আরও পরিষ্কার করে, তাই আরও নমুনা তৈরি করা হচ্ছে সঠিকভাবে শ্রেণীবদ্ধ, বিপরীতভাবে, যখন মার্জিন হয় বৃহত্তর, ক্লাসের মধ্যে বিচ্ছেদ কম স্পষ্ট, এবং আরও নমুনা হতে পারে ভুল শ্রেণীবদ্ধ. অন্য কথায়, একটি ছোট মার্জিন মানে আরও সঠিকভাবে শ্রেণীবদ্ধ নমুনা, এবং আরও একটি অনমনীয় ক্লাসিফায়ার, যখন একটি বড় মার্জিন, আরও ভুল শ্রেণীবদ্ধ নমুনাগুলিকে বোঝায়, তবে আরও বেশি নমনীয় শ্রেণিবিন্যাসকারী

যখন সেই মার্জিনগুলি বেছে নেওয়া হয়, তখন যে প্যারামিটারটি তাদের নির্ধারণ করে তা হল C প্যারামিটার।

সি হাইপারপ্যারামিটার

সার্জারির C পরামিতি মার্জিন আকারের বিপরীতভাবে সমানুপাতিক, এর মানে হল যে বৃহত্তর মুল্য C, দ্য ক্ষুদ্রতর মার্জিন, এবং, বিপরীতভাবে, ক্ষুদ্রতর মুল্য C, দ্য বৃহত্তর মার্জিন দ্য C যে কোন কার্নেলের সাথে প্যারামিটার ব্যবহার করা যেতে পারে, এটি অ্যালগরিদমকে বলে যে প্রতিটি প্রশিক্ষণের নমুনাকে ভুল শ্রেণিবদ্ধ করা এড়াতে কতটা এড়াতে হবে, সেই কারণে, এটি নামেও পরিচিত নিয়মিতকরণ. আমাদের লিনিয়ার কার্নেল SVM ব্যবহার করেছে a C 1.0 এর, যা a বড় মান এবং দেয় একটি ছোট মার্জিন.

SVM হাইপারপ্যারামিটার প্ল্যাটোব্লকচেন ডেটা ইন্টেলিজেন্স বোঝা। উল্লম্ব অনুসন্ধান. আ.

আমরা একটি সঙ্গে পরীক্ষা করতে পারেন ক্ষুদ্রতর 'C' এর মান এবং অনুশীলনে বুঝতে পারি a এর সাথে কী ঘটে বড় মার্জিন. এটি করার জন্য, আমরা একটি নতুন ক্লাসিফায়ার তৈরি করব, svc_c, এবং শুধুমাত্র এর মান পরিবর্তন করুন C থেকে 0.0001. এর পুনরাবৃত্তি করা যাক fit এবং predict পদক্ষেপ:

svc_c = SVC(kernel='linear', C=0.0001)
svc_c.fit(X_train, y_train)
y_pred_c = svc_c.predict(X_test)

এখন আমরা পরীক্ষার ডেটার ফলাফল দেখতে পারি:

print(classification_report(y_test, y_pred_c)) cm_c = confusion_matrix(y_test, y_pred_c)
sns.heatmap(cm_c, annot=True, fmt='d').set_title('Confusion matrix of linear SVM with C=0.0001')

এই আউটপুট:

 precision recall f1-score support 0 0.82 0.96 0.88 148 1 0.94 0.76 0.84 127 accuracy 0.87 275 macro avg 0.88 0.86 0.86 275
weighted avg 0.88 0.87 0.86 275

SVM হাইপারপ্যারামিটার প্ল্যাটোব্লকচেন ডেটা ইন্টেলিজেন্স বোঝা। উল্লম্ব অনুসন্ধান. আ.

একটি ছোট ব্যবহার করে C এবং একটি বৃহত্তর মার্জিন প্রাপ্ত করার ফলে, শ্রেণীবিভাগকারী আরও নমনীয় হয়ে উঠেছে এবং আরও শ্রেণীবিভাগের ভুলের সাথে। শ্রেণীবিভাগ রিপোর্টে, আমরা দেখতে পাচ্ছি যে f1-score, পূর্বে উভয় শ্রেণীর জন্য 0.99, ক্লাস 0.88 এর জন্য 0 এবং ক্লাস 0.84 এর জন্য 1 এ নেমে এসেছে। বিভ্রান্তি ম্যাট্রিক্সে, মডেলটি 2 থেকে 6টি মিথ্যা ইতিবাচক এবং 2 থেকে 31টি মিথ্যা নেতিবাচক থেকে গেছে।

আমরা পুনরাবৃত্তি করতে পারেন predict ট্রেন ডেটা ব্যবহার করার সময় এখনও ওভারফিট আছে কিনা তা পরীক্ষা করতে ধাপে ধাপে ফলাফল দেখুন:

y_pred_ct = svc_c.predict(X_train) cm_ct = confusion_matrix(y_train, y_pred_ct)
sns.heatmap(cm_ct, annot=True, fmt='d').set_title('Confusion matrix of linear SVM with C=0.0001 and train data') print(classification_report(y_train, y_pred_ct))

এর ফলে:

 precision recall f1-score support 0 0.88 0.96 0.92 614 1 0.94 0.84 0.88 483 accuracy 0.90 1097 macro avg 0.91 0.90 0.90 1097
weighted avg 0.91 0.90 0.90 1097

SVM হাইপারপ্যারামিটার প্ল্যাটোব্লকচেন ডেটা ইন্টেলিজেন্স বোঝা। উল্লম্ব অনুসন্ধান. আ.

একটি ছোট সঙ্গে ফলাফল দেখে C এবং ট্রেনের ডেটা, আমরা দেখতে পাচ্ছি যে ওভারফিটের উন্নতি হয়েছে, কিন্তু একবার ট্রেনের ডেটার জন্য বেশিরভাগ মেট্রিক্স এখনও বেশি হয়ে গেলে, মনে হয় ওভারফিটের সমাধান করা হয়নি। সুতরাং, শুধু পরিবর্তন C মডেলটিকে আরও নমনীয় করতে এবং এর সাধারণীকরণ উন্নত করতে পরামিতি যথেষ্ট ছিল না।

বিঃদ্রঃ: ডেটা থেকে অনেক দূরে থাকা, খুব বেশি স্থির হওয়া বা থাকার মধ্যে ভারসাম্য খোঁজার চেষ্টা করা উচ্চ পক্ষপাত অথবা এটি বিপরীত, একটি ফাংশন ডেটা বন্ধ করার জন্য উপযুক্ত, খুব নমনীয় হচ্ছে, বা থাকা উচ্চ বৈচিত্র্য সাধারণত হিসাবে উল্লেখ করা হয় পক্ষপাত বৈষম্য বাণিজ্য বন্ধ. সেই ভারসাম্য খুঁজে পাওয়া অ তুচ্ছ, কিন্তু যখন এটি অর্জন করা হয়, ডেটাতে মডেলটির কোন আন্ডারফিটিং বা ওভারফিটিং নেই। বৈচিত্র্য হ্রাস এবং অতিরিক্ত ফিটিং প্রতিরোধের উপায় হিসাবে, ডেটাকে আরও নিয়মিত এবং সরলীকৃত করার জন্য এটিকে বর্ণনা করে এমন একটি ফাংশন পাওয়ার সময় সমানভাবে সঙ্কুচিত করা যেতে পারে। যে প্যারামিটার কি C যখন এটি SVM-এ ব্যবহার করা হয় তখন করে, সেই কারণে, এটিও বলা হয় এল 2 নিয়মিতকরণ or রিজ রিগ্রেশন.

এই মুহুর্তে, আমরা SVM-এর মার্জিন সম্পর্কে বুঝতে পেরেছি এবং কীভাবে তারা অ্যালগরিদমের সামগ্রিক ফলাফলকে প্রভাবিত করে, কিন্তু কীভাবে ক্লাসগুলিকে আলাদা করে সেই লাইন (বা বক্ররেখা) সম্পর্কে? এই লাইন হল সিদ্ধান্তের সীমানা. সুতরাং, আমরা ইতিমধ্যে জানি যে মার্জিনগুলি ভুলের প্রতি সিদ্ধান্তের সীমানার নমনীয়তার উপর প্রভাব ফেলে, আমরা এখন অন্য একটি প্যারামিটারের দিকে নজর দিতে পারি যা সিদ্ধান্তের সীমানাকেও প্রভাবিত করে।

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

বিঃদ্রঃ: সিদ্ধান্তের সীমানাকেও বলা যেতে পারে ক হাইপারপ্লেন. একটি হাইপারপ্লেন হল একটি জ্যামিতিক ধারণা যা একটি স্থান বিয়োগ এক (dims-1) এর মাত্রার সংখ্যা নির্দেশ করে। যদি স্থানটি 2-মাত্রিক হয়, যেমন x এবং y স্থানাঙ্ক সহ একটি সমতল, 1-মাত্রিক রেখা (বা বক্ররেখা) হল হাইপারপ্লেন। মেশিন লার্নিং প্রসঙ্গে, যেহেতু মডেলটিতে ব্যবহৃত কলামের সংখ্যা হল এর সমতল মাত্রা, আমরা যখন 4টি কলাম এবং একটি SVM ক্লাসিফায়ার নিয়ে কাজ করছি, তখন আমরা একটি 3-মাত্রিক হাইপারপ্লেন খুঁজে পাচ্ছি যা ক্লাসের মধ্যে আলাদা করে।

গামা হাইপারপ্যারামিটার

অসীম সিদ্ধান্তের সীমানা বেছে নেওয়া যেতে পারে, এই সীমানাগুলির মধ্যে কিছু ক্লাস আলাদা করবে এবং অন্যরা করবে না। একটি কার্যকর সিদ্ধান্তের সীমানা নির্বাচন করার সময় প্রতিটি শ্রেণীর প্রথম 10টি নিকটতম পয়েন্ট বিবেচনা করা উচিত? নাকি আরও পয়েন্ট বিবেচনা করা উচিত, যে পয়েন্টগুলি দূরে রয়েছে? এসভিএম-এ, পরিসরের সেই পছন্দটি অন্য হাইপারপ্যারামিটার দ্বারা সংজ্ঞায়িত করা হয়, gamma.

মত C, gamma এর দূরত্বের সাথে কিছুটা বিপরীতভাবে সমানুপাতিক। দ্য ঊর্ধ্বতন এর মান, নিকটস্থ সিদ্ধান্ত সীমানা জন্য বিবেচনা করা হয় যে পয়েন্ট, এবং অধম দ্য gamma, দ্য অধিকতর সিদ্ধান্তের সীমানা বেছে নেওয়ার জন্য পয়েন্টগুলিও বিবেচনা করা হয়।

SVM হাইপারপ্যারামিটার প্ল্যাটোব্লকচেন ডেটা ইন্টেলিজেন্স বোঝা। উল্লম্ব অনুসন্ধান. আ.

গামার আরেকটি প্রভাব হল যে, এর মান যত বেশি হবে, সিদ্ধান্তের সীমানার পরিধি তার চারপাশের বিন্দুগুলির কাছে তত বেশি হবে, এটিকে আরও জ্যাগড এবং ওভারফিট করার প্রবণতা তৈরি করবে - এবং এর মান সবচেয়ে কম, সিদ্ধান্তের সীমানা মসৃণ এবং নিয়মিত হবে। পৃষ্ঠ পায়, এছাড়াও, কম ওভারফিট প্রবণ. এটি যেকোনো হাইপারপ্লেনের জন্য সত্য, কিন্তু উচ্চ মাত্রায় ডেটা আলাদা করার সময় এটি সহজে পর্যবেক্ষণ করা যেতে পারে। কিছু ডকুমেন্টেশনে, gamma হিসাবেও উল্লেখ করা যেতে পারে sigma.

SVM হাইপারপ্যারামিটার প্ল্যাটোব্লকচেন ডেটা ইন্টেলিজেন্স বোঝা। উল্লম্ব অনুসন্ধান. আ.

আমাদের মডেলের ক্ষেত্রে, এর ডিফল্ট মান gamma ছিল scale. যেমন দেখা যায় স্কিট-লার্ন এসভিসি ডকুমেন্টেশন, এর মানে হল এর মান হল:

$$
গামা = (1/ পাঠ্য{n_features} * X.var())
$$

or

$$
গামা = (1/ পাঠ্য{number_of_features} * পাঠ্য{features_variance})
$$

আমাদের ক্ষেত্রে, আমাদের এর বৈচিত্র গণনা করতে হবে X_train, এটিকে 4 দ্বারা গুণ করুন এবং ফলাফলটিকে 1 দ্বারা ভাগ করুন। আমরা নিম্নলিখিত কোড দিয়ে এটি করতে পারি:

number_of_features = X_train.shape[1] features_variance = X_train.values.var()
gamma = 1/(number_of_features * features_variance)
print('gamma:', gamma)

এই আউটপুট:

gamma: 0.013924748072859962

এর মান দেখার আরেকটি উপায় আছে gamma, ক্লাসিফায়ার এর অবজেক্ট অ্যাক্সেস করে gamma সঙ্গে পরামিতি ._gamma:

svc._gamma 

আমরা দেখতে পাচ্ছি যে gamma আমাদের ক্লাসিফায়ারে ব্যবহৃত কম ছিল, তাই এটি আরও দূরের পয়েন্টগুলি বিবেচনা করে।

বিঃদ্রঃ: যেমন আমরা দেখলাম, C এবং gamma মডেলের কিছু সংজ্ঞার জন্য গুরুত্বপূর্ণ। আরেকটি হাইপারপ্যারামিটার, random_state, প্রায়শই Scikit-এ ব্যবহৃত হয় মডেলের জন্য ডেটা শাফলিং বা এলোমেলো বীজের গ্যারান্টি দিতে শিখুন, তাই আমাদের সবসময় একই ফলাফল থাকে, কিন্তু এটি SVM-এর জন্য একটু ভিন্ন। বিশেষ করে, দ random_state অন্য হাইপারপ্যারামিটার হলেই এর প্রভাব আছে, probability, সত্য সেট করা হয়. কারণ এটি সম্ভাব্যতা অনুমান প্রাপ্ত করার জন্য ডেটা এলোমেলো করবে। যদি আমরা আমাদের ক্লাসের জন্য সম্ভাব্যতা অনুমান না চাই এবং সম্ভাব্যতা মিথ্যা সেট করা হয়, SVM এর random_state মডেল ফলাফলের উপর প্যারামিটারের কোন প্রভাব নেই।

সি এবং গামার মতো হাইপারপ্যারামিটারের জন্য মানগুলি কীভাবে চয়ন করতে হয় তার কোনও নিয়ম নেই - এটি নির্ভর করবে বিভিন্ন হাইপারপ্যারামিটার মান নিয়ে পরীক্ষা করার জন্য কতক্ষণ এবং কী সংস্থান উপলব্ধ, ডেটাতে কী রূপান্তর করা যেতে পারে এবং কী ফলাফল প্রত্যাশিত। . হাইপারপ্যারামিটার মানগুলি অনুসন্ধান করার স্বাভাবিক উপায় হল প্রস্তাবিত মানগুলির প্রতিটি একত্রিত করা গ্রিড অনুসন্ধান একটি পদ্ধতির সাথে যা সেই হাইপারপ্যারামিটার মানগুলিকে প্রয়োগ করে এবং কল করা ডেটার বিভিন্ন অংশের জন্য মেট্রিক্স প্রাপ্ত করে ক্রস বৈধতা. স্কিট-লার্নে, এটি ইতিমধ্যেই হিসাবে প্রয়োগ করা হয়েছে GridSearchCV (ক্রস ভ্যালিডেশন থেকে সিভি) পদ্ধতি।

ক্রস বৈধতা সহ একটি গ্রিড অনুসন্ধান চালানোর জন্য, আমাদের আমদানি করতে হবে GridSearchCV, হাইপারপ্যারামিটারের মানগুলির সাথে একটি অভিধান সংজ্ঞায়িত করুন যা নিয়ে পরীক্ষা করা হবে, যেমন ধরন kernel, জন্য পরিসীমা C, এবং জন্য gamma, এর একটি উদাহরণ তৈরি করুন SVC, সংজ্ঞায়িত করুন score অথবা মেট্রিক মূল্যায়নের জন্য ব্যবহার করা হবে (এখানে আমরা নির্ভুলতা এবং রিকল উভয়ের জন্য অপ্টিমাইজ করতে বেছে নেব, তাই আমরা ব্যবহার করব f1-score), অনুসন্ধান চালানোর জন্য ডেটাতে কতগুলি বিভাগ তৈরি করা হবে cv - ডিফল্ট 5, কিন্তু কমপক্ষে 10 ব্যবহার করা একটি ভাল অভ্যাস - এখানে, ফলাফল তুলনা করার সময় আমরা 5টি ডেটা ভাঁজ ব্যবহার করব এটিকে আরও পরিষ্কার করতে।

সার্জারির GridSearchCV আছে fit পদ্ধতি যা আমাদের ট্রেন ডেটা গ্রহণ করে এবং ক্রস বৈধতার জন্য ট্রেন এবং পরীক্ষা সেটে আরও বিভক্ত করে। আমরা সেট করতে পারি return_train_score ফলাফলের তুলনা করতে এবং গ্যারান্টি দিতে হবে যে কোন অতিরিক্ত ফিট নেই।

ক্রস বৈধতা সহ গ্রিড অনুসন্ধানের জন্য এটি কোড:

from sklearn.model_selection import GridSearchCV parameters_dictionary = {'kernel':['linear', 'rbf'], 'C':[0.0001, 1, 10], 'gamma':[1, 10, 100]}
svc = SVC() grid_search = GridSearchCV(svc, parameters_dictionary, scoring = 'f1', return_train_score=True, cv = 5, verbose = 1) grid_search.fit(X_train, y_train)

এই কোড আউটপুট:

Fitting 5 folds for each of 18 candidates, totalling 90 fits
# and a clickable GridSeachCV object schema

হাইপারপ্যারামিটার অনুসন্ধান করার পরে, আমরা ব্যবহার করতে পারি best_estimator_, best_params_ এবং best_score_ সেরা মডেল, পরামিতি মান এবং সর্বোচ্চ f1-স্কোর পেতে বৈশিষ্ট্য:

best_model = grid_search.best_estimator_
best_parameters = grid_search.best_params_
best_f1 = grid_search.best_score_ print('The best model was:', best_model)
print('The best parameter values were:', best_parameters)
print('The best f1-score was:', best_f1)

এর ফলে:

The best model was: SVC(C=1, gamma=1)
The best parameter values were: {'C': 1, 'gamma': 1, 'kernel': 'rbf'}
The best f1-score was: 0.9979166666666666

ডেটা দেখে আমাদের প্রাথমিক অনুমান নিশ্চিত করে, সেরা মডেলটিতে একটি রৈখিক কার্নেল নেই, তবে একটি ননলাইনার, RBF।

উপদেশ: আরও তদন্ত করার সময়, এটি আকর্ষণীয় যে আপনি গ্রিড অনুসন্ধানে আরও নন-লিনিয়ার কার্নেল অন্তর্ভুক্ত করেন।

উভয় C এবং gamma 1 এর মান আছে, এবং f1-score খুব বেশি, 0.99। যেহেতু মানটি বেশি, চলুন দেখে নেওয়া যাক কোন ওভারফিট ছিল কি না গড় পরীক্ষা এবং ট্রেনের স্কোর দেখে আমরা ফিরে এসেছি, cv_results_ বস্তু:

gs_mean_test_scores = grid_search.cv_results_['mean_test_score']
gs_mean_train_scores = grid_search.cv_results_['mean_train_score'] print("The mean test f1-scores were:", gs_mean_test_scores)
print("The mean train f1-scores were:", gs_mean_train_scores)

গড় স্কোর ছিল:

The mean test f1-scores were: [0.78017291 0. 0.78017291 0. 0.78017291 0. 0.98865407 0.99791667 0.98865407 0.76553515 0.98865407 0.040291 0.98656 0.99791667 0.98656 0.79182565 0.98656 0.09443985] The mean train f1-scores were: [0.78443424 0. 0.78443424 0. 0.78443424 0. 0.98762683 1. 0.98762683 1. 0.98762683 1. 0.98942923 1. 0.98942923 1. 0.98942923 1. ]

গড় স্কোর দেখে, আমরা দেখতে পাচ্ছি যে সর্বোচ্চ 0.99791667 দুবার দেখা যাচ্ছে, এবং উভয় ক্ষেত্রেই, ট্রেন ডেটাতে স্কোর ছিল 1। এটি নির্দেশ করে যে ওভারফিট টিকে আছে। এখান থেকে, ডেটা প্রস্তুতিতে ফিরে যাওয়া এবং ডেটা স্বাভাবিক করা, অন্য কিছু ডেটা ট্রান্সফরমেশন করা এবং ফিচার ইঞ্জিনিয়ারিংয়ের সাথে নতুন বৈশিষ্ট্যগুলি তৈরি করা বোধগম্য কিনা তা বোঝা আকর্ষণীয় হবে।

আমরা মডেল হাইপারপ্যারামিটারগুলি খুঁজে বের করার একটি কৌশল দেখেছি, এবং আমরা ইতিমধ্যে রৈখিক বিভাজ্যতা, সমর্থন ভেক্টর, সিদ্ধান্তের সীমানা, মার্জিনের সর্বাধিকীকরণ এবং কার্নেল কৌশল সম্পর্কে কিছু উল্লেখ করেছি। SVM হল একটি জটিল অ্যালগরিদম, যেখানে সাধারণত প্রচুর গাণিতিক ধারণা জড়িত থাকে এবং ছোট ছোট টুইকেবল অংশগুলিকে সামগ্রিকভাবে একত্রিত করার জন্য সামঞ্জস্য করতে হবে।

আসুন আমরা এখন পর্যন্ত যা দেখেছি তা একত্রিত করি, SVM-এর সমস্ত অংশগুলি কীভাবে কাজ করে তার একটি সংক্ষিপ্ত বিবরণ তৈরি করি এবং তারপরে তাদের ফলাফল সহ অন্যান্য কার্নেল বাস্তবায়নের দিকে নজর দিন।

উপসংহার

এই নিবন্ধে আমরা Scikit-Learn-এর SVM বাস্তবায়নের পিছনে ডিফল্ট পরামিতিগুলি সম্পর্কে বুঝতে পেরেছি। আমরা বুঝতে পেরেছি যে সি এবং গামা প্যারামিটারগুলি কী এবং কীভাবে তাদের প্রতিটি পরিবর্তন SVM মডেলকে প্রভাবিত করতে পারে।

আমরা সেরা C এবং গামা মানগুলি সন্ধান করার জন্য গ্রিড অনুসন্ধান সম্পর্কেও শিখেছি, এবং আমাদের ফলাফলগুলিকে আরও ভালভাবে সাধারণীকরণ করতে এবং গ্যারান্টি দিতে যে কোনও ধরণের ডেটা ফাঁস নেই।

গ্রিড অনুসন্ধান এবং ক্রস যাচাইকরণের সাথে একটি হাইপারপ্যারামিটার টিউনিং করা ডেটা বিজ্ঞানে একটি সাধারণ অভ্যাস, তাই আমি দৃঢ়ভাবে পরামর্শ দিচ্ছি যে আপনি কৌশলগুলি প্রয়োগ করুন, কোডটি চালান এবং হাইপারপ্যারামিটার মান এবং SVM পূর্বাভাসের পরিবর্তনগুলির মধ্যে লিঙ্কগুলি দেখুন৷

সময় স্ট্যাম্প:

থেকে আরো Stackabuse