شرح StandardScaler في عملية تحسين الmodel لتعليم الاله

شرح StandardScaler في عملية تحسين الmodel لتعليم الاله

شرح StandardScaler في عملية تحسين الmodel لتعليم الاله

اليوم نتعرف على مصطلح جديد مستخدم بكثرة في البايثون وهو StandardScaler وهذا المصطلح يستخدم بكثرة في تعليم الالة حيث انه يقوم بتحجيم البيانات وجعلها مناسبة للاستخدام مع النموذج لكي لا يحدث مشاكل معك اثناء تكويد الخوارزمية والنموذج الذي تعمل عليه ولذلك نستخدم StandardScaler لحل هذة المشكلة وهو من مكتبة sklearn وهذة المكتبة سبق وتحدثنا عنه وهي لا غنى عنها اطلاقا في تعليم الاله بسبب المميزات التي تقدمها لنا هذة المكتبة الرائعه والتي لا غنى عنها اطلاقا .


يايثون او لغة الثعبان كما يطلق عليها واحده من اهم لغات البرمجه التي يجب على كل مبرمج معرفتها وذلك بسبب سهولتها ولدعمها للمطورين بشكل كبير وتسهل عليهم القيام بالعديد من ال functions المختلفه وتوفر الكثير من الوقت عليهم وايضا python تدخل في تعليم الاله وهذا من اكثر التي اصبحت مطلوبه في يومنا هذا والاقبال عليها كبير جدا .


يتمتع مبرمج python بإمكانية تطوير برمجيات سطح المكتب وتطبيقات الهواتف الذكية وايضا يمكنك عمل apis لانك تستطيع ان تقوم باعمال ال backend ، اليست كل تلك المميزات تجعلك ترغب بالبدء فيها ؟ ومحن نشرح لك كل شيئ فيها تقريبا حتى ال machine learning نشرحه لك وكل ذلك بالمجان .


ماهي StandardScaler وما الفائده منها ؟

بتحجم الداتا التي لديك بين -1 و 1 وذلك لكي اذا كان لديك اسعار منازل مثلا تكون فوق ال 100 ألف مثلا او اذا كان لديك feature اخر عن عدد الطوابق في البيت سيكون 2, 3 وهكذا فستلاحظ فرق الرقمين كبير جدا جدا وهذا غير جيد في الداتا لديك ف لذلك نستخدم أي طريقة من ال scale لكي تحصر الأرقام بين 0:1 او -1:1.


بمعنى اخر لو كان لديك بيانات بها 100 الف و 100 و 1.0 بالتالي سوف يهم النموذج ان 1.0 عبارة عن 100% وهذا خطأ لذلك يكون علينا تحويل جميع البيانات بين -1 الى 1 لكي لا تحدث هذة المشكلة مع النموذج الذي نعمل عليه ولا تحدث مشاكل في النتائج التي نحصل عليها .


تحجيم بيانات work datasets بين -1 و 1 باستخدام StandardScaler 

تحجيم بيانات work datasets بين -1 و 1 باستخدام StandardScaler

هل تتذكرون نموذج ال work datasets الذي قمنا بشرحه لكم من قبل في درس سابق وكان نتيجة هذا النموذج 0 اي انه اذا قام المستخدم بإدخال اي قيمة ستكون النتيجه النهائيه صفر وكان النموذج غير قابل للاستخدام اطلاقا لذلك تركنا العمل عليه , ولكن في هذة المقالة سوف نكمل عليه ونعدل عليه الى ان نصل الى بيانات نستطيع التعامل معها ولذلك سوف نقوم بتشغيل جميع الاكواد السابق وقبل عمل train للبيانات سوف نقوم بعمل لها scaler وهذا ما هو موجود في الخطوة 30 ونمرر البيانات التي قمنا بعمل لها scaler في train .

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scale_data = scaler.fit_transform(df)

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(scale_data,target,test_size=0.2,random_state=42,shuffle=True)



معرفة score بيانات الmodel بعد عمل StandardScaler لها

معرفة score بيانات الmodel بعد عمل StandardScaler لها

بعد ان قمنا بعمل StandardScaler نقوم الان بالكشف عن clf.score الخاص بالبيانات ومعرفة الاسكور الجديد وسوف مره للtest والاخرى لل train والذي يهمنا هو test لو نلاحظ ان النتيجة هي 83 وهذة نسبة لا بأس بها وتعتبر نوعا ما جيده ( يوجد خطأ بالصورة الاولى text والثانية train )


from sklearn.svm import SVC
clf=SVC()
clf.fit(x_train,y_train)
clf.score(x_train,y_train)
clf.score(x_test,y_test)


عمل predict للبيانات للتاكد من جودة النموذج

عمل predict للبيانات للتاكد من جودة النموذج

الان سوف نقوم بعمل predict للبيانات ولو نتذكر ان النتيجة كانت 87 للرفض و 0 للقبول بالتالي كانت اي بيانات نضعها تكون لا , ولكن بعد التعديل ان نسبة القبول 100 والرفض 88 اليست هذة النسبة افضل من السابقة ؟ وهذة هي فكرة StandardScaler انها قامت بتحجيم البيانات لكي نستطيع التعامل معها وتدريب النموذج عليها


y_pred=clf.predict(x_test)
print(classification_report(y_test,y_pred,target_names=["NO","Yes"]))


تحسين الmodel عن طريق Gridsearchcv

تحسين الmodel عن طريق Gridsearchcv

سوف نستخدم الان Gridsearchcv لكي نقوم بعمل بعض الاختبارات والاحتمالات التي نأمل ان تعطي لنا نتائج افضل للمودل الذي نعمل عليه وهذة النتائج في الاغلب تكون افضل لانك تجرب اكثر من احتمال وبالتالي قد يكون احتمال منهم افضل من السابق واقوى منه ولذلك نستخدمه افضل من السابق وهنا مررنا له مجموعه من الاحتمالات لكي نصل الى نسبة score اعلى من السابقة ولو نلاحظ ان افضل قيمة لنا كانت c=5 , gaama=0.1 , kernel=rbf وهذا افضل params للاحتمالات .


from sklearn.model_selection import GridSearchCV
gc = GridSearchCV(clf , {'kernel':["rbf"], 'C':[5], "gamma":[0.025 , 0.05 , 0.075]}, verbose=1 , scoring="f1_weighted" )
gc.fit(scale_data , target)
gc.best_score_
gc.best_params_


تصدير النموذج بعد التأكد من صحته في تعليم الاله

تصدير النموذج بعد التأكد من صحته في تعليم الاله

بعد التاكد من ان نتائج النموذج الذي تعمل عليه معقوله ونتائج مرضيه بالنسبة لك ياتي دور اخر خطوة وهي dump للنموذج نفسه لكي نستخدمه عن طريق مكتبة pickle وهي مكتبة مخصصه لعمل export للmodel بعد الانتهاء من عمل الtesting و training عليه والتاكد ان كل النتائج سلميه وتعديل المحتويات التي بها مشاكل من النموذج


best_model = SVC(kernel='rbf' , C=5 , gamma=0.05)
best_model.fit(x_train , y_train)

import pickle
pickle.dump(best_model , open("best_model.model" , "wb"))


تشغيل جميع models للوصول الى افضل score

تشغيل جميع models للوصول الى افضل score

في طبيعة الحال اذا كان لديك بيانات عنيده ونقصد هنا بالبيانات التي لا نصل لها الى نسبة score جيده ماذا نفعل ؟ في طبيعة الحال سوف نقوم بتشغيل كل الmodels مره واحده للوصول الى افضل نسبة وهذة الطريقة التي استعملها احد الmachine learning وتقاضى عليها ملايين الدولارت بكل بساطة سوف نجرب كل النماذج الى ان نعرف ماهو الانسب ورفع نسبة score للموديل وهنا سوف نستخدم KNeighborsClassifier وتجربة بعض الاحتمالات عليه وكانت اعلى نسبة حصلنا عليها من هذا النموذج كانت 80 لذلك نستبعده .


from sklearn.neighbors import KNeighborsClassifier
grid =GridSearchCV(KNeighborsClassifier() , {"n_neighbors":[3,5,7]}, verbose=1 , scoring="f1_weighted")
grid.fit(scale_data , target)
print(grid.best_score_)
print(grid.best_params_)


استخدام نموذج RandomForestClassifier لتحليل البيانات والوصول الى افضل accuracy

استخدام نموذج RandomForestClassifier لتحليل البيانات والوصول الى افضل accuracy

في هذة المرحلة سوف نلجأ الى تجربة RandomForestClassifier لمعرفة هل هذا النموذج مناسب ام لا واذا كان مناسب سوف نستخدم ونستخرج البيانات من خلاله ولكن مع الاسف بعد تجربة النموذج اتضح لنا ان نسبة النجاح كانت 80% في هذا النموذج لذلك سوف نستبعده ايضا من المقارنات التي نقوم بها بسبب فلة الاسكور واستهلاك الرامات التي يستهلكها هذا الmodel.


from sklearn.ensemble import RandomForestClassifier
random_class =GridSearchCV(RandomForestClassifier() , {"n_estimators":[20,30,50] , "max_depth":[3,5,7]}, verbose=1 , scoring="f1_weighted")
random_class.fit(scale_data , target)
print(random_class.best_score_)
print(random_class.best_params_)


تجربة GradientBoostingClassifier في الماشين ليرننج

تجربة GradientBoostingClassifier في الماشين ليرننج

اخر نموذج سوف نقوم بتجربة في هذة المقالة وهو GradientBoostingClassifier وهو واحد من النماذج المعقده والتي لا تستخدم بشكل كبير في تحليل البيانات لانها تستهلك معالجه نوعا ما كبيره ولكن في الاغلب تكون نتيجة هذا النموذج افضل من غيره لذلك نحن نتوقع ان النسبة هنا ربما تكون افضل من السابق وبعد القيام بالتجربة وتجربة بعض الخصائص وجدنا ان النسبة هنا كانت 85% لذلك سوف يخطر ببالك اعتماد هذا النموذج ولكن هل الفرق 2% هل هل كافي لكي تستغني عن SVM ؟ في الاغلب لا وذلك لان svm استهلاك اقل ومع ذلك كانت النسبة لا بأس بها .


from sklearn.ensemble import GradientBoostingClassifier
gradient_class =GridSearchCV(GradientBoostingClassifier() , {"n_estimators":[50, 70,90] , "max_depth":[3,5,7] , "learning_rate":[0.1,0.5,1] }, verbose=1 , scoring="f1_weighted")
gradient_class.fit(scale_data , target)
print(gradient_class.best_score_)
print(gradient_class.best_params_)


work_dataset.py

تعليقات