MLflow সহ গ্রিড অনুসন্ধান

Mlflow Saha Grida Anusandhana



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

গ্রিড অনুসন্ধানের সুবিধা

  • স্বয়ংক্রিয় হাইপারপ্যারামিটার টিউনিং: গ্রিড অনুসন্ধান হাইপারপ্যারামিটার টিউনিংকে স্বয়ংক্রিয় করে যা ম্যানুয়াল ট্রায়াল এবং ত্রুটি ছাড়াই পদ্ধতিগত অনুসন্ধানের অনুমতি দেয়।
  • পুনরুত্পাদনযোগ্যতা: গ্রিড অনুসন্ধান পুনরুত্পাদনযোগ্য ফলাফলগুলি প্রাপ্ত করার মাধ্যমে পরীক্ষার বৈধতা নিশ্চিত করে যা যোগাযোগ এবং নির্ভরযোগ্যতা বাড়ায়।
  • সম্পূর্ণ অনুসন্ধান: GS দক্ষতার সাথে একটি মডেলের জন্য সর্বোত্তম হাইপারপ্যারামিটার খুঁজে বের করে সম্পূর্ণভাবে সংমিশ্রণ অনুসন্ধান করে।
  • দৃঢ়তা: গ্রিড অনুসন্ধান একটি শক্তিশালী কৌশল যা ডেটা গোলমাল প্রতিরোধী যা অতিরিক্ত ফিটিং হ্রাস করে।
  • ব্যবহার করা সহজ: গ্রিড অনুসন্ধান ব্যবহার করা এবং বোঝার জন্য সহজ যা এটিকে হাইপারপ্যারামিটার টিউনিংয়ের জন্য একটি কার্যকর পদ্ধতি করে তোলে।
  • মডেল তুলনা: গ্রিড অনুসন্ধান মডেল তুলনা এবং মূল্যায়ন মেট্রিক্স নির্বাচনকে সহজ করে।

গ্রিড অনুসন্ধানের ত্রুটি

  • গণনামূলক খরচ: বিপুল সংখ্যক হাইপারপ্যারামিটার টিউন করার জন্য গ্রিড অনুসন্ধান গণনাগতভাবে ব্যয়বহুল।
  • সময় সাপেক্ষ: জটিল হাইপারপ্যারামিটার সমন্বয়ের জন্য এটি সময়সাপেক্ষ।
  • সবসময় প্রয়োজনীয় নয়: এটা এখন সবসময় প্রয়োজন; র্যান্ডম অনুসন্ধান এটির সেরা বিকল্প।

উদাহরণ: বিশ্ববিদ্যালয় ভর্তি সিস্টেমের জন্য সেরা মডেল সেটিংস খোঁজা

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

গ্রিড অনুসন্ধানের জন্য MLflow ব্যবহার করে অনলাইন ভর্তি সিস্টেমের জন্য একটি র্যান্ডম ডেটা তৈরি করুন

পাইথনের পান্ডা এবং এলোমেলো প্যাকেজগুলি ভর্তি সিস্টেমের জন্য একটি কাল্পনিক ডেটাসেট তৈরি করতে ব্যবহার করা যেতে পারে। APP_NO, GPA, SAT স্কোর, ACT স্কোর, এক্সট্রা কারিকুলার অ্যাক্টিভিটিস, এবং ভর্তির স্থিতি কলামগুলির জন্য এলোমেলো মান সহ, এই কোডটি একটি সিন্থেটিক ভর্তি ডেটাসেট তৈরি করে৷ num_students ভেরিয়েবল নিয়ন্ত্রণ করে ডেটাসেটে কতগুলো সারি আছে।







ভর্তির স্থিতি 70% গ্রহণযোগ্যতার হারের উপর ভিত্তি করে এলোমেলোভাবে সেট করা হয় এবং র্যান্ডম মডিউলটি বেশ কয়েকটি কলামের জন্য র্যান্ডম মান তৈরি করতে ব্যবহৃত হয়। প্রদর্শনের উদ্দেশ্যে, নিম্নলিখিত কোডটি এলোমেলো মান সহ একটি জাল ভর্তি ডেটাসেট তৈরি করে এবং std_admission_dataset.csv ফাইলে সংরক্ষিত হয়:



টুকিটাকি সংকেতলিপি:



# পান্ডা এবং র্যান্ডম লাইব্রেরি আমদানি করুন
panda_obj হিসাবে পান্ডা আমদানি করুন
random_obj হিসাবে র্যান্ডম আমদানি করুন

# ছাত্র ডেটাসেট তৈরি করার জন্য রেকর্ডের সংখ্যা সেট করুন
ছাত্রদের_রেকর্ড = 1000

# ডেটা সংরক্ষণের জন্য তালিকা তৈরি করুন
std_application_numbers = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) _ এর মধ্যে (ছাত্রদের_রেকর্ড)]
std_gpa = [বৃত্তাকার(random_obj.uniform( 2.5 , 4.0 ), 2 ) _ পরিসরের জন্য (ছাত্রদের_রেকর্ড)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) _ পরিসরের জন্য (ছাত্রদের_রেকর্ড)]
std_act_scores = [random_obj.randint( বিশ , 36 ) _ পরিসরের জন্য (ছাত্রদের_রেকর্ড)]
std_extra_curriculars = [random_obj.choice([ 'হ্যাঁ' , 'না' ]) _ এর মধ্যে (ছাত্রদের_রেকর্ড)]

# এলোমেলো গ্রহণযোগ্যতার হারের উপর ভিত্তি করে ভর্তির স্থিতি গণনা করুন
std_admission_status = [ 1 যদি random_obj.random() < 0.7 অন্য 0 _ পরিসরে (ছাত্রদের_রেকর্ড)]

# শিক্ষার্থীদের ডেটা রাখার জন্য একটি অভিধান তৈরি করুন
std_data = {

'আবেদন নম্বর' : std_আবেদন_সংখ্যা,

'জিপিএ' : std_gpa,

'SAT_স্কোর' : std_sat_scores,

'ACT_স্কোর' : std_act_scores,

'পাঠক্রম বহির্ভূত কার্যক্রম' : std_extra_curriculars,

'ভর্তি_স্থিতি' : std_admission_status

}

# অভিধান থেকে একটি DataFrame DataFrame_Student তৈরি করুন
DataFrame_Student = panda_obj.DataFrame(std_data)

# std_admission_dataset.csv নামের একটি CSV ফাইলে DataFrame DataFrame_Student সংরক্ষণ করুন
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , index=False)
ছাপা( 'শিক্ষার্থীদের ডেটা সফলভাবে CSV ফাইলে রপ্তানি হয়েছে!' )

কোড এক্সিকিউশন:

কোড কম্পাইল করতে পাইথন কমান্ড ব্যবহার করুন, তারপর একটি নির্দিষ্ট মডিউল ইনস্টল করতে পিপ কমান্ড ব্যবহার করুন যদি আপনি একটি মডিউল ত্রুটির সম্মুখীন হন। পাইথন সংস্করণ 3.X বা উচ্চতর হলে প্রদত্ত লাইব্রেরি ইনস্টল করতে pip3 install কমান্ডটি ব্যবহার করুন।





সফল সম্পাদন:



নমুনা ডেটা স্ক্রিনশট:

ধাপ 1: লাইব্রেরি আমদানি করুন

  • মেশিন লার্নিং এক্সপেরিমেন্ট ট্র্যাকিংয়ের জন্য MLflow লাইব্রেরি
  • ডাটা প্রসেসিং এবং বিশ্লেষণ পরিচালনার জন্য পান্ডাস লাইব্রেরি, সেইসাথে Scikit-Learn মডেলগুলিকে একীভূত করার জন্য mlflow.sklearn প্যাকেজ
  • চতুর্থ লাইন ত্রুটিগুলি দমন করতে 'সতর্কতা' লাইব্রেরি আমদানি করে
  • sklearn.model_selection মডিউলে গ্রিড অনুসন্ধানের জন্য প্যারামিটারগ্রিড ক্লাস
  • গ্রিড অনুসন্ধান এবং গ্রেডিয়েন্ট বুস্টিং ক্লাসিফায়ার মডেলগুলির জন্য যথাক্রমে sklearn.model_selection এবং ensemble থেকে GridSearchCV এবং GradientBoostingClassifier
  • মডেলের নির্ভুলতা গণনা করতে এবং শ্রেণীবিভাগ রিপোর্ট তৈরি করতে sklearn.metrics মডিউল থেকে accuracy_score এবং classification_report ফাংশন
  • কোডটি OS মডিউল আমদানি করে এবং GIT_PYTHON_REFRESH এনভায়রনমেন্ট ভেরিয়েবলকে শান্ত করতে সেট করে।

টুকিটাকি সংকেতলিপি:

# ধাপ-I প্রয়োজনীয় লাইব্রেরি আমদানি করুন
এমএলফ্লো আমদানি করুন
mlflow.sklearn আমদানি করুন
সতর্কতা হিসাবে আমদানি সতর্কতা
panda_obj হিসাবে পান্ডা আমদানি করুন
sklearn.model_selection থেকে tts হিসেবে train_test_split, pg হিসেবে প্যারামিটারগ্রিড, gscv হিসেবে GridSearchCV আমদানি করুন
আমাদের আমদানি করুন
sklearn.ensemble থেকে GBC হিসাবে GradientBoostingClassifier আমদানি করুন
sklearn.metrics থেকে accuracy_score as acs, classification_report cr হিসাবে আমদানি করুন
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'শান্ত'

ধাপ 2: ট্র্যাকিং URI সেট করুন

MLflow সার্ভারের ট্র্যাকিং URI mlflow.set_tracking_uri() ফাংশন ব্যবহার করে সেট করা হয়েছে, পরীক্ষা এবং মডেলের জন্য পোর্ট 5000-এ একটি স্থানীয় মেশিন নিশ্চিত করে।

mlflow.set_tracking_uri( 'http://localhost:5000' )

ধাপ 3: ভর্তি ডেটাসেট লোড করুন এবং প্রস্তুত করুন

ডেটা ম্যানিপুলেশন এবং বিশ্লেষণের জন্য পান্ডাস লাইব্রেরিটিকে panda_obj হিসাবে আমদানি করুন। read_csv() ফাংশন ভর্তি ডেটাসেট লোড করার জন্য প্রয়োগ করা হয়। ডেটাসেটের পাথ হল একমাত্র আর্গুমেন্ট যা read_csv() ফাংশনের জন্য প্রয়োজন। এই উদাহরণে ডেটাসেটের পথ হল std_admission_dataset.csv। read_csv() ফাংশন ব্যবহার করে, ডেটাসেটটি একটি পান্ডাস ডেটাফ্রেমে লোড করা হয়।

std_admissions_data DataFrame থেকে Admission_Status কলামটি প্রথমে কোড দ্বারা মুছে ফেলা হয়। যেহেতু এই কলামে টার্গেট ভেরিয়েবল রয়েছে তাই প্রিপ্রসেসিং এর প্রয়োজন নেই।

তারপর, কোড দুটি নতুন ভেরিয়েবল তৈরি করে: “F” এবং “t”। বৈশিষ্ট্যগুলি 'F' ভেরিয়েবলের মধ্যে থাকে, যখন লক্ষ্য ভেরিয়েবলটি 't' ভেরিয়েবলের মধ্যে থাকে।

ডেটা তারপর পরীক্ষা এবং প্রশিক্ষণ সেটে বিতরণ করা হয়। এটি sklearn.model_selection প্যাকেজ থেকে tts() ফাংশন ব্যবহার করে সম্পন্ন করা হয়। বৈশিষ্ট্য, লক্ষ্য পরিবর্তনশীল, পরীক্ষার আকার এবং র্যান্ডম অবস্থা হল চারটি আর্গুমেন্ট যা tts() ফাংশনের জন্য প্রয়োজন। test_size প্যারামিটারটি ডেটার অংশ নির্ধারণ করে যা পরীক্ষার উদ্দেশ্যে ব্যবহার করা হয়। যেহেতু এই উদাহরণে পরীক্ষার আকার 0.2 সেট করা হয়েছে, তাই পরীক্ষার জন্য 20% ডেটা ব্যবহার করা হবে।

random_state বিকল্পটি র্যান্ডম নম্বর জেনারেটর বীজ নির্দিষ্ট করে। এটি নিশ্চিত করার জন্য করা হয় যে ডেটা এলোমেলোভাবে আলাদা করা হয়। প্রশিক্ষণ এবং পরীক্ষার সেটগুলি এখন F_training, F_testing, t_training, এবং t_testing ভেরিয়েবলগুলিতে সংরক্ষণ করা হয়েছে। এই সেটগুলি মেশিন লার্নিং মডেলগুলির মূল্যায়ন এবং প্রশিক্ষণের জন্য ব্যবহার করা যেতে পারে।

টুকিটাকি সংকেতলিপি:

# ধাপ-৩: ভর্তি ডেটাসেট লোড করুন
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# ডেটা প্রিপ্রসেস করুন এবং বৈশিষ্ট্য (F) এবং লক্ষ্য (t) এ বিভক্ত করুন
F = std_admissions_data.drop([ 'ভর্তি_স্থিতি' ], অক্ষ= 1 )
t = std_admissions_data[ 'ভর্তি_স্থিতি' ]

# এক-হট এনকোডিং ব্যবহার করে শ্রেণীগত ভেরিয়েবলকে সংখ্যাসূচকে রূপান্তর করুন
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0.2 , random_state= 42 )

ধাপ 4: MLflow পরীক্ষার নাম সেট করুন

adm_experiment_name = 'বিশ্ববিদ্যালয়_ভর্তি_পরীক্ষা'
mlflow.set_experiment(adm_experiment_name)

ধাপ 5: গ্রেডিয়েন্ট বুস্টিং ক্লাসিফায়ার সংজ্ঞায়িত করুন

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

gbc_obj = GBC(random_state= 42 )

ধাপ 6: হাইপারপ্যারামিটার গ্রিড সংজ্ঞায়িত করুন

কোডটি প্রাথমিকভাবে param_grid অভিধান তৈরি করে। গ্রিড অনুসন্ধানের মাধ্যমে সমন্বয় করা হাইপারপ্যারামিটারগুলি এই অভিধানে রয়েছে। তিনটি কী প্যারাম_গ্রিড অভিধান তৈরি করে: n_estimators, learning_rate, এবং max_depth. এগুলি হল গ্রেডিয়েন্ট-বুস্টিং ক্লাসিফায়ার মডেলের হাইপারপ্যারামিটার৷ মডেলে গাছের সংখ্যা হাইপারপ্যারামিটার n_estimators দ্বারা নির্দিষ্ট করা হয়েছে। মডেলের শেখার হার লার্নিং_রেট হাইপারপ্যারামিটারের মাধ্যমে নির্দিষ্ট করা হয়েছে। হাইপারপ্যারামিটার max_depth মডেলের গাছের সর্বোচ্চ সম্ভাব্য গভীরতা নির্ধারণ করে।

টুকিটাকি সংকেতলিপি:

param_grid = {

'n_estimators' :[ 100 , 150 , 200 ],

'শেখার_হার' :[ 0.01 , 0.1 , 0.2 ],

'সর্বোচ্চ গভীরতা' :[ 4 , 5 , 6 ]

}

ধাপ 7: MLflow ট্র্যাকিং সহ গ্রিড অনুসন্ধান সম্পাদন করুন৷

কোডটি তখন param_grid অভিধানে পুনরাবৃত্তি করে। অভিধানে হাইপারপ্যারামিটারের প্রতিটি সেটের জন্য, কোডটি নিম্নলিখিতগুলি করে:

  • একটি নতুন MLflow রান শুরু করে
  • হাইপারপ্যারামিটারগুলিকে একটি তালিকায় রূপান্তর করে যদি তারা ইতিমধ্যে একটি তালিকা না হয়
  • MLflow এ হাইপারপ্যারামিটার লগ করে
  • নির্দিষ্ট হাইপারপ্যারামিটার সহ একটি গ্রিড অনুসন্ধান মডেল প্রশিক্ষণ দেয়
  • গ্রিড অনুসন্ধান থেকে সেরা মডেল পায়
  • টেস্টিং ডেটার উপর ভবিষ্যদ্বাণী করে যা সর্বোত্তম মডেলে কাজ করে
  • মডেলের নির্ভুলতা গণনা করে
  • হাইপারপ্যারামিটার, নির্ভুলতা এবং শ্রেণীবিভাগ রিপোর্ট প্রিন্ট করে
  • MLflow এ নির্ভুলতা এবং মডেল লগ করে

টুকিটাকি সংকেতলিপি:

warn.catch_warnings() সহ:
warn.filterwarnings( 'উপেক্ষা' , শ্রেণী=ব্যবহারকারী সতর্কতা, মডিউল= '।*ডিস্টুটিল।*' )
pg(param_grid) এ প্যারামের জন্য:
mlflow.start_run(run_name=) সহ 'ভর্তি_স্ট্যাটাস রান' ):
# একক মানকে তালিকায় রূপান্তর করুন
params = {কী: [মান] যদি না হয় তাহলে isinstance(value, list) else value for key, value in params.items()}
mlflow.log_params(params)
grid_search = gscv(gbc_obj, param_grid=params, cv= 5 )
grid_search.fit(F_training, t_training)
std_best_model = grid_search.best_estimator_
মডেল_প্রেডিকশন = std_best_model.predict(F_testing)
মডেল_অ্যাকুরেসি_স্কোর = acs(t_টেস্টিং, মডেল_পূর্বাভাস)
ছাপা( 'হাইপারপ্যারামিটার:' , পরম)
ছাপা( 'সঠিকতা:' , মডেল_নির্ভুলতা_স্কোর)
# স্পষ্টভাবে UndefinedMetric Warning উপেক্ষা করুন
warn.catch_warnings() সহ:
warn.filterwarnings( 'উপেক্ষা' , বিভাগ=সতর্কতা)
ছাপা( 'শ্রেণীবিন্যাস প্রতিবেদন:' )
প্রিন্ট(cr(t_টেস্টিং, মডেল_প্রেডিকশন, শূন্য_বিভাগ= 1 ))
mlflow.log_metric( 'সঠিকতা' , মডেল_নির্ভুলতা_স্কোর)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

ধাপ 8: পাইথন ব্যবহার করে প্রোগ্রামটি চালান

এখানে MLflow সার্ভারে আউটপুট আছে:

উপসংহার

MLflow-এর গ্রিড সার্চ টুল স্বয়ংক্রিয়ভাবে টুইকিং, ফলাফল ট্র্যাকিং এবং মেশিন লার্নিং মডেলে হাইপারপ্যারামিটার পরিবর্তন করে। এটি আদর্শ হাইপারপ্যারামিটার নির্ধারণ করতে সাহায্য করে এবং নির্ভরযোগ্য ফলাফল নিশ্চিত করে তবে ব্যাপক হাইপারপ্যারামিটার পরীক্ষার জন্য গণনাগতভাবে ব্যয়বহুল হতে পারে।