بسم الله الرحمن الرحيم الصلاة والسلام على رسول
الله أهلا وسهلا بكم في لقاءٍ من جديد من لقاءات
مساق تنقيب البيانات، وإن شاء الله اليوم سأتكلم
معكم عن .. سأشتغل معكم عمليًا زي ما اشتغلت في الـ
preprocessing سأعمل فيديو قصيرًا عن الـ
classification وماذا أريد أن أفعل في عمل الـ
classification، وشكله على الكاجل كـ Environment ممكن
أنتم تستخدموها في موضوع الـ Data Mining أو الـ
Data Science وحاجات كتيرة فقط بـ Classifier راح
والـ Classifier هذا له خصوصية شوية ضمن كل فيديو
هذه تساعدكم في فهم أو في عمل الواجب بشكل صحيح
أتممنى في الواجب تستخدموا الـ data set تبعكم
وتقارنوا الـ performance تبع الـ three classifiers من
الأربعة، أخذنا الـ Canary Sniper والـ Naive Bison
والـ Neural Network والـ Decision Tree، هدول
الأربعة، أنا شرحتهم في تسجيلات سابقة، المضمون أنكم
تختاروا الثلاثة وتطبقوهم على الـ data set اللي
موجودة عندكم، الآن إن شاء الله تعالى هبدأ أعمل
sharing للشاشة اللي موجودة عندي، أحاول في الفيديو
أنتقل لموضوع الـ Sharing وأتكلم على الـ Data Set
أو على الـ Element اللي أنا .. البرنامج
اللي أنا بدأ أشتغل عليه، بداية خليني أنا أروح أعمل
Share للـ Desktop، هي
Share للـ Desktop بالكامل، وبعد التسجيل المفروض للـ
Desktop وأنا الآن
بسم الله، هي kaggle.com، أنا أيه الحساب على الكاجل؟
اللي أنشأته، من تبقى الإحساب آخر، لكن هذا أنا أنشأته
من فترة، بخصوص الـ الـ الـ الـ الـ
الـ الـ الـ الـ الـ الـ الـ الـ الـ
الـ الـ الـ الـ الـ
الـ الـ الـ الـ
الـ الـ، أُحدد الـ database هي Pima Indians Diabetes
الـ database هي مشهورة عالميًا، أنا مش هروح أحملها
كمان مرة، فاللي already إذا حملتها بكون انتهيت من
الملف اللي موجود عندي، وهنتقل للخطوة التالية، هروح
أنا أقوله في الـ data set اللي موجودة عندي هي Pima
Indians Diabetes
وأنا بدي أستخدم الـ Dataset، طبعًا الـ
الـ Dataset جميلة جدًا، عشان نفهمها بشكل سريع، الـ
Dataset هي ناتجة عن المركز الوطني لأمراض السكري
والحمية والأمراض المزمنة، الهدف منها إنه فعليًا
يحاولوا يتنبؤوا هل المريض هذا هو مصاب بسكري أو لا
بناءً على التشخيصات اللي هي موجودة في الـ database
اللي موجودة قدامنا، هي موجودة، مكوّنة من ثمانية
attributes زي اللي هنشوفها كمان شوية، "several
constraints were placed on the solution of the
ice"، وهذه الـ database مكوّنة، بتتناول الـ female
patients only، all the patients here are females at
least، على الأقل يكونوا 21 سنة، يعني 21 سنة من Pima
المنطقة اللي موجودة فيها، طبعًا هذا كل الكلام أنا ما
إلا اللي شفته عندما تعرفت على الـ database
والآن بدي أروح أقول له New Notebook
الآن الـ New Notebook هو Jupyter Notebook، أنشأته
على الـ Kaggle، والآن جاب لي هذا الكود عشان يعمل
import للـ database اللي موجودة عندي، طبعًا
هذا الفرق الوحيد ما بين الـ Online، الـ Python
Jupyter Notebook أو الـ Local، اللي في الآخر أنت لما
بنعمل import كنا بنضيف له المسار اللي موجود، طب من
يحدد المسار؟ هذا موجود على cloud أو على driver
فاحنا بنختاره بكل بساطة بدون إيش؟ بدون ما يكون في
عندنا الـ .. عفواً، فبتروح بتزوّدنا إياه على Kaggle
بدون ما يكون في عندنا مشاكل، الأصل إحنا هذا الـ code
إذا بدنا نشتغل Online نرفعه أو نتعلمه أو نحفظه لأنه
هذا الـ code هيلزمنا مع الكاجل، وغالباً هو نفسه
موجود مع الـ colab، ما علينا، الآن لو أنا طبعًا
لاحظت أنه عمل كمان import لأهم two libraries اللي
هم على الـ database أو في الـ dataset، الـ numpy
والـ pandas، طبعًا إحنا معظم شغلنا من خلال الـ pandas
لكن في مثال اليوم هيلزمنا الـ numpy كذلك لمرة واحدة
أو لمرتين، خلينا نعمل run للـ code اللي موجود عندي
عمل run، طبعًا سرعة الاستجابة بتعتمد على سرعة الـ
connection اللي موجود عندك، طبعًا هنا بيقول لك قد ايش
أنت استخدمت من الـ hardest، قد ايش عندك CPU أو إشغال
للـ CPU، قد ايش إذا كان عندك إشغال للـ رابط ممكن تطفيه
ممكن تعمل restart للجهة بتاعت الـ notebook هذا
الـ رابط، بعد ما عملت run أداني رابط في diabetes.csv
طبعًا خليني أنا أسمي الـ notebook تبعي diabetes
عند الـ score specification
وأجي آخذ Notebook جديدة، وأروح أنا أقول له الـ
DataFrame، طب أنا خلاص بدي أقرأ الـ database بـ pandas
.read_csv اللي زي ما إحنا بنقرأ، وهي الـ
single quotation، وهي المسار اللي أنا نسخته، هي كده
الأمور تمت، عملية المفروض تمت عملية القراءة عشان أنا
أتأكد، وراح أقول DataFrame.head، والـ head ممكن أنا
أزودها زي ما قلنا سابقاً، بتعرض أول صفوف من الـ
DataFrame اللي أنا قريته، الـ DataFrame هذا مكوّن
من حوالي الـ 768 صف، الـ By default
الـ head بتجيب عشرة، عفواً، بتجيب خمسة، إذا أنا بدي
عشرة أو بدي خمسة أو بدي ثلاثة أو بدي خمسة عشر ممكن
أنا أروح أغيره مرة ثانية، فهي راح قرأ لي إياها، اللي
قال لي هي البيانات اللي موجودة عندك، بس خليني أقول
لكم قدرة الـ Pima Indians Classification، الآن تعرفوا
على الـ Attributes بشكل سريع اللي موجودة عنهم، بما
أن كل الـ Database أو كل الـ Data Sets مكوّنة من
الـ، فعلاً بيسألني عن الـ Pregnancy، عدد مرات
الحمل، نسبة الجلوكوز في الدم، ضغط الدم، كم كان،
سماكة الجلد، طبعًا سماكة الجلد مهمة جدًا
لأنه بيمثل لي طبقة الدهون، كمية نسبة الأنسولين
أو كمية الأنسولين الموجودة، الـ Body Mass Index
مؤشر كتلة الجسم، قد ايش؟ طبعًا المفروض كل الناس اللي
فوق الـ 30 أو فوق الـ 32 أو 35، أعتقد، إذا أنا مش
غلطان يعني، بقول عنهم أصحاب سمنة، الـ DiabetesPedigreeFunction
و High Function بتقيس ليه؟ هل
المرض هذا مرتبط بعامل وراثي من الأبوين أو من أحد
من العائلة؟ قد ايش نسبة الناس اللي في العائلة موجودين
أو مصابين بالمرض، المرض السكري، والـ Age الأعمار زي
ما قلنا، والـ Outcome اللي هو الـ label أو الـ target
تبعنا، The binary classification صفر واحد، واحد
مصاب، صفر غير مصاب، وإحنا بدنا نعمل prediction
نشوف هل فعليًا اللي هو أنا زودته ببيانات معينة
هيقول إنه هذا مصاب أو غير مصاب، تمام، الآن عشان
أتعرف على الـ Database بشكل كويس بقول ممكن أنا
أروح أقول له الـ DataFrame.describe، والـ
Describe بقول لنا هذا بتدينا Simple Statistics، لكن
المرحلة هذه بدي Transpose، والناس اللي درست
رياضيات منفصلة بتعرف إن الـ Transpose أو دراسة
مصفوفات بتعرف إن الـ Transpose بعمل تبديل للصفوف
والأعمدة، أخيرًا هي راح جاب لي إياها هون، وبحيث إن الـ
statistics الـ count بتمثل عدد الصفوف اللي فيها
values، طبعًا كله فيه values عندي هون 768 عدد الـ
values، الـ mean المتوسط الحسابي، الـ standard
deviation، الـ minimum value، طبعًا جماعة الخير الـ
minimum value زي الجلوكوز وضغط الدم، الـ skin
thickness، والأنسولين، والـ body mass index، هذه
كلها بالنسبة لنا المفروض تكون هذه missing values
بس بدها معالجة، لأن مستحيل يكون عندي الـ body mass
index صفر، مستحيل يكون الجلوكوز في الدم صفر،
مستحيل blood pressure يكون صفر، بس أنا الآن مش هشتغل
على الـ database، مش هعملها pre-processing، بينما أنت
ملزم إنك تعمل pre-processing للـ database، الـ
database ده مش مناسب، أقول لك خذ database ثانية إذا
في حد مختار قدر الله، طيب، الآن أنا بحاجة زي ما قلنا
عن الـ Database هذه، على علاتها وحافظها، أروح أجهز
الـ Data Set للـ Classification، وأهم شغلة
في الـ Classification إنه أنا أعمل يا جماعة الخير
Split ما بين الـ Data Set، Attribute، آخذ الـ
Attributes أو الـ Data Attributes لحال، وآخذ الـ
Target Attribute لحالي، وهذا الكلام أنا بدي أروح
أسميه تحت "Data" أو "Data Set" "Splitting"
"Splitting" أو "Splitting"
"Splitting" "Splitting" "Splitting" "Splitting"
"Splitting" "Splitting" "Splitting" "Spl
Target_Attribute، كيف أنا بدي أعمل الـ
Splitting الآن؟ عملية الـ Splitting هي عبارة عن
آخذ نسخة من الـ Attributes، أنا ما بدي أخرّب في
الـ DataFrame الأصلي اللي موجود عندي هنا، فبأخذ
نسخة منه، وراح أقول له أنا هنا الـ Data أو ممكن أسميها الـ
Attributes مباشرة، Attribute
DataFrame.copy()
بدي أحدث الـ Outcome
وهذا موجود على الـ Axis رقم واحد، فعلياً مش هيحدثه
لأنه ما قلت له إنه copy، فبدي آخذ نسخة من الـ
DataFrame هذا وأحدث الـ Outcome، وبدي آخذ منه
مين؟ اللي هم في الـ Attributes تمام؟ وفي عندي Target
"attribute = DataFrame.drop(the outcome)", وهكذا أصبح لدي two arrays تمثل
الـ "attributes" من الـ "age" إلى الـ "pregnancy"
والأخير بيمثل الـ Outcome، أنا سميته ايش؟ الـ Target
هذا الفصل مهم جدًا يا جماعة الخير بالنسبة لنا لأنه
من خلاله أنا بقدر أقول والله إن الـ data تبعتي تمت
طبعًا أنا الآن البرنامج جاب لي إنه okay، أخذت رقم
أربعة، هذه نفذت بدون أي مشاكل، إذا حابب أنت تعمل
الـ attribute describe أو تشوف
الخطوة التالية اللي أنا بدي أسويها في الـ
preparation، برضه من تحت الـ preparation، اللي أنا 177
أو لـ train size 70 تمام؟ وبيمشي الحال، الآن الـ Y
train هي عبارة عن 70% من الـ target بناء على الـ
index اللي تم أخذها، والـ Y-test هي عبارة عن الـ
sample اللي موجودة عندنا طبعاً عشان نتأكد أن الأمور
تمام، والـ splitting صح تمت، سأروح أنا أقول له X
train.
head، وبدي أقول له بس يعرض الأول ثلاثة منهم أو مش
قضية، هي الأول عشرة بس عشان نشوف الـ indices اللي
موجودة فيها، ولاحظوا زي ما حكينا هذا عبارة عن الـ
index. الآن في المقابل، لو أنا روحت عرضت الـ Y
-Train، وقلت له هي في السلة اللي بعدها، بس عشان
أؤكد لكم الـ Ytrain.head
وخليني على عشرة كذلك، Run، طلع معي في الـ index
و Y train
أنا أخطأت ثانية يا جماعة الخير في التسمية، هي المفروض
X test، X test
thirty three five green، سيعمل run مرة ثانية.
سيعمل run للـ high أه، هيك تمام. أنا اللي أختار في
تركيب العناصر اللي فوق، أبدأ بالـ X test، بالـ
attributes، وبالـ Y، الـ target طبعاً، هي ميزة أنه
أنا فعلياً بضل أتبّع الـ data شو صار فيها، ما بخطئش،
لاحظوا 155، 155 هي نفس الـ index اللي موجود يعني،
فأنا أموري من ناحية الـ database الآن أو الـ
splitting للـ data جاهزة، بحيث أنه أنا جسمت الـ
data، فصلت الـ attributes، الـ data attributes
والـ target attributes، فصلت كل واحد فيهم في data
file، هو روحت للـ data set أو الـ two data frames
دول فصلتهم كمان لـ test set وفوقه train set، وهأبدأ
أستخدم train set في موضوع الـ classification الآن.
سأبدأ أستخدم الـ K nearest neighbor (KNN)
أو ما يعرف بالـ K nearest neighbor
هنا، جماعة الخير، في الـ K nearest neighbor model
يقول إنها أهم شغلة تريد التعرف عليها، من أين تريد
أن تعمل الـ import؟ لأن من الـ scikit-learn.
طبعاً هنا عندي عائلة اسمها neighbors أو الـ
library، عشان ما أحد يقول ليه عائلة neighbors، سأروح
أقول له import
from sklearn.neighbors import KNeighborsClassifier as KN
as KN
الآن هذا الموديل أنا ممكن أنشئه مباشرة KNN
والخطوة التالية اللي بعد هيك أنا ممكن أحدد له
الـ model أو أروح أعمله fit اللي كان المفروض
أحدد له الـ dataset اللي بده يعمل عليها training
أو مقارنة، هي المفروض الـ train dataset لكن في
ملاحظة مهمة جداً قبل ما نكمل، طبعاً بإمكاني أنا أوقف
هذه وأعلقها.
الأسماء، جماعة الخير، هي من أجل الاختصار، الـ AS من أجل
الاختصار عشان ما أضطر أكتب الاسم بالكامل، يعني لو
أنا بدي أكتبها، سأروح أقول KN_model
equals
KNeighborsClassifier، وKN_model equals
خمسة، عفواً، خمسة، خليني أعمل نفسي، أمشي على نفس
الـ style هذه، واللي فوق نفس المعنى، بس أنا هنا
أختصر في الكتابة بناءً على... بعمل alias name
وبأستخدم الـ alias name، الآن بضل أقول لهم الـ KNN
_model.fit
وفي الـ training، شو بياخد؟ بياخد الـ X_train والـ Y
train، لأن هذه هي الـ data اللي أنا بعمل عليها أو
من خلالها الـ training. لو أنا اشتغلت، عملت له run
وشكلي
أنا أخطأت في الـ KNeighborsClassifier
KNeighborsClassifier، صح الصح، الـ spelling صح
"EG", "EI", "GH", "D", "O", "R", "S"
ليش؟
ممكن عشان أنا حطيت الـ alias name فوق، عشان
حطيت الـ alias name، عشان حطيت الـ alias name، لأن
الـ alias name بديله، لكن لو أنا صححت هذا وعلّقت
هذه
مش هيكون في خطأ، فممكن
أنا أستخدم هاي أو هاي حسب الحالة اللي موجودة
عليها، تمام. فالـ model أصبح جاهز يتعرف على الـ
test data أو الـ test set اللي أنا بدي أشتغل
عليها، وهي بطبيعة الحال مجسّمة لـ attributes وطبعاً
الخطوة التالية، أنا عم بدي أروح أعمل أو بدي أشوف
الـ measures، إيش ممكن يسوي لهالـ element اللي موجود
أو الـ model اللي أنا أنشأته، لكن عشان أنا أختبر الـ
model، جماعة الخير، أو بدي أجرب الـ model، خليني أشوف
أو آخذ عينة من الـ data اللي موجودة عندي في موضوع
من
الـ dataset بشكل عام، أنا بدي أروح وأقول له أنا
طبعاً، أول شيء هيكون استخدام الـ numpy اللي
موجودة فوق، سأروح أقول له T1، هذه الـ array مكونة من
مجموعة أرقام، وليكن
على سبيل المثال الصف الأول، وهذه الـ class موجودة
هنا.
الـ tabs هذه بدي أستبدلها بـ commas.
طبعاً، يا عزيزي، في شغل مهم لازم نقوله الآن، أنه
مش ضروري الـ prediction دائماً، يعني ما أحد بيقول
الـ prediction بيكون صحيح أو بيكون حقيقي 100%،
لازم يكون في أخطاء عندي دائماً أو في معظم الأحيان،
يكون في عندك أخطاء، وكل ما ارتفع أو كل ما كانت الـ
prediction تبعته، الـ score تبعها أعلى بيكون كويسة.
Doc reshaping، كل هذا اعتمد المصفوفة هذه على إي واحد
سالب واحد، وطبعاً هاي الـ target، سأحط هنا target equals
one، وخليني أنا أنسخ هذه، هيك Ctrl V، وابدأ أجي على
الـ raw اللي رقمه خمسة، أنسخه، والـ target تبعته صفر،
هذا بدي أسميه T5.
بنفس الكلام الـ
rows اللي عندي، بكمّس عشان تتحول الـ rows اللي عندي لـ
مصفوفة، تمام، بنفس العدد.
تمام، ليس مشكلة لأن عندما أنا أعمل train للـ model
اللي أنا أنشأته، model.kneighbors لديه method
اسمها model.kneighbors، أنا هايه الـ model تبعي KNN
_model.kneighbors
ولا مين؟ وأعطيه مين؟ وأعطيه الـ test element اللي
أنا بدي أفحصه، وليكن T1 كمُدخل، ومع عدد عناصر الجوار
خمسة، عدد عناصر الجوار خمسة. بتحس في لحظة من اللحظات
أن الـ K الخمسة اللي أنا عنها، ما لها علاقة بهذه الـ
method اللي موجودة. خليني أشوف، وأروح طبعاً هذه الـ
method بترجع لي two vectors، الفكتور الأول يمثل الـ
distances، كما
والفكتور الثاني الـ indices، تمام؟ الـ indices أو الـ
indices، نفس المصطلحات، indices لمن؟
لـ indices
للـ raw اللي هي صاحبة أقصر مسافة، يعني الـ
kneighbors هدول بيروحوا بيجيبوا لي أقرب خمسة للـ element
لـ T1، أقرب خمسة لـ T1، وبما أنه المفروض T1 يمثل
الـ raw الأول في الـ dataset اللي عندي، فسيروح
يقول لي الـ index رقم صفر، أو الـ index رقم صفر، هيكون
هذا الـ distance تبعك صفر، وهيجيب لي الـ index في
مصفوفة ثانية. أنا الآن سأروح أقول له event، خلينا
نشوفها في مجال آخر. هي run، الآن المفروض تم التنفيذ.
سآخذ كود جديد، وبدي أروح أطبع الـ distances.
لاحظوا يا جماعة الخير، صفر، عشرة، خمسة وخمسين،
تسعة وعشرة، تسعة وعشرة، عشرين، عشرة
وعشرة، وعشرة وعشرة، وعشرة وعشرة، وعشرة وعشرة،
عشرة وعشرة، وعشرة وعشرة، وعشرة وعشرة، وعشرة
وعشرة، وعشرة وعشرة، وعشرة وعشرة، وعشرة وعشرة، عشرة
وعشرة، وعشرة وعشرة، وعشرة وعشرة، وعشرة وعشرة،
عشرة وعشرة، وعشرة وعشرة، وعشرة وعشرة، وعشرة
وعشرة، وعشرة وعشرة، وعشرة وعشرة، وعشرة وعشرة. هذه
أقرب distances، لأنه بيرتب لي إياها ترتيب تصاعدي حسب
الأقرب، فالأقرب. طيب، الآن إذا أنا بدي أشوف الـ
indices تبع العناصر اللي موجودة عندي، أو بدي أشوف
الـ target تبع الـ indices اللي موجودة عندي، ممكن
أنا أروح أقول له target of
I from
الـ I موجودة أين؟ أو عفواً، for الـ I for
I in، الـ indices، أنا
هذه مصفوفة برضه من بعدي، سأروح أقول له بعد أيام،
فأشرح
target غلط طبعاً.
هان لما كنت بحاول أن أطبع الـ element، بيقول لي إن
هذا عبارة عن object، طب الـ object أنا بدي أجيب الـ
contents تبعته، أو محتوى الـ object اللي عندي هان.
فهينطبع لي بالشكل اللي موجود عندي هان، جلبناها على
السبعة اللي موجودة فوق، الـ indices تبعتهم، أو الـ
classes بناءً على الـ indices اللي موجودة عندي.
يعني احنا اتفقنا الـ indices هي عبارة عن الـ index
تبع الـ train set أو الـ X-train القريبة من، أو
الأقرب لـ T1، فكان صفر، وصفر، وهذه الـ labels تبعتهم
لأن أنا بدي أعمل voting، سأروح أعدّ أنا هدول، هي واحد،
اثنين، ثلاثة، أربعة، خمسة، خمسة من سبعة zero، واثنين
من سبعة one، معناته أن الـ class اللي موجود عندي هنا
سبعة. طب لو أنا بدي أعيد التجربة هي لخمسة، وهي run
السطر اللي بعديها، وهي الـ cell اللي بعديها،
فجائني أنه الآن برضه صفر، بس القيم اللي عندي فوق
اختلفت، مش قضية لأن هي في الآخر الـ values اللي
عندها اختلفت. طب لو أنا فكرت أنه أغير في الـ values
اللي عندها، حأروح أعمل run عشان آخذها، okay، هي
خليني أقول هنا 30، هي run، لاحظوا الـ distance
اختلافها، اختلفت الـ distance كلياً، الآن والأخير هي
run، وهيكون في عندي ثلاثة one وأربعة zero، فهو في
الآخر هيعمل الـ classification على أنه zero،
ممتاز، لكن هذا برضه مش هو الشغل اللي احنا فعلياً
محتاجينه، بس نحط بعض الـ comments هنا.
print target of
the most of
the nearest neighbors
or
"الأزدهار"، "الأزدهار".
الآن سأنتقل لجزئية أكثر أهمية عشان نتكلم عنها،
classification، عشان أشتغل على classification من
نفس الـ library "from sklearn.neighbors import"
"import" في عندي الـ "K nearest neighbor" أو الـ 399 00:3
الـ Confusion Matrix الموجودة هنا، في عندي
الـ classification model evaluation، هنبدأ
الآن، من الـ ASCII layer import matrix
الآن بدي أجيب الـ Matrix، إيش الـ Matrix جامعة
الخيار؟ تحتوي على أنه من خلالها أنا ممكن أنشأ الـ
confusion matrix، أحسب الـ accuracy، أحسب الـ
precision، أحسب الـ recall، أحسب الـ F-measure، كل هذه
لدى الـ attribute، عفواً، للكلاسيفاير اللي موجود
عندها، وخليني أنا أبدأ مع الـ confusion matrix،
الـ M، الـ CM، إيش معنى CM؟
هنا كل الـ evaluation functions الموجودة عندنا
هتاخد مني شغلتين: هتاخد مني الـ y_test اللي هو الـ
label الحقيقي، والـ y_predicted أو الـ predicted
الـ y_predict، وهي
بدي أروح أقول له اطبع لي الـ matrix اللي عندنا اللي
هي الـ Confusion Matrix، الـ Test Set حجمها
هي 120, 25، True Positive، True Negative، False Positive، False
Negative، False Positive، False Negative، بس إيش الـ
classes الموجودة عندي يا جماعة الخير؟ الـ
classes يا إخواننا ويا أخواتي بيكونوا تنتبهوا
بشكل كويس، لأنه أنا ما حددت له إيش الـ classes، فإيش
هو بياخدهم مباشرةً، بيروح بيعتمد على الآن أول ما قرأت
data set، أول ما قرأت data set، إيش أول class واجهه؟
طبعاً أنا بتكلم في الـ test set هذا، لأن أول ما
زودته، زودته غلط في الـ Y_predict، أول element في
الـ Y_test
كان واحد، فخلاص، بيعتبر أنه هذا للـ Class الأول،
تمام؟ وهذا للـ Class الثاني، طبعاً هذه العناصر
معناته أنها الـ confusion matrix، ومن خلالها أنا
بنطلق وبحسب كل حاجة، طب إذا أنا بدي أحسب الـ
accuracy الآن،
اذكروا، الـ accuracy كانت إيش بتساوي؟ الـ true
positive زائد الـ true negative على كل العناصر
المجموعة هنا
سأقوم بإعادة الـ Accuracy، ACC بتساوي
(repeating "تساوي متركز" is removed)
بتساوي 72.72، الـ Accuracy للـ Model الموجودة عندنا
هان، Matrix.precision (dot instead of underscore)
72.27 ممتاز، بدي أنتقل للخطوة اللي بعدها، لو أنا بدي
أحسب الـ F1-score أو الـ precision للـ first
class الموجودة عندي هنا
بنفس الطريقة الموجودة عندي هنا، بدي أسميها
precision = matrix.precision_score (dot instead of underscore)
وبدي أعطيه المجموعتين، ولما أنا بدي أقول له
(Corrected sentence: print(precision))
بتحملوني، شو رأيكم؟ يعني 65، اللي بعدها أحسن من الـ
recall، الأمور كلها بالشكل هذا اللي هتتجمع، طبعاً
لاحظوا الـ classification Model، ككل، الـ Precision، الـ
First Class، الـ Recall للـ First Class، هيك هيك هيك (Repeating "هيك" is removed)
(Repeating "هيك" is removed)
بالنسبة، رأيي صارت بدلعة ودنيا، يا جماعة الخير، No
attribute
recall_score أو
الـ F1-score
F1 = matrix.F1_score (dot instead of underscore)
(underscore added)
آخر شغلة، أنا ممكن أجيب كل الـ values مع بعضها من
خلال شغلة نسميها الـ Classification Report
الـ Classification Report ممكن يساعدني بشكل كبير
بحيث أنه أنا ما احتاجش أن أكتب كل حاجة مع بعضها
Classification
Report
أو الـ cls_report = matrix.classification (underscore added and "dot" instead of "underscore")
_report (underscore added)
بدي أدّيله الـ method أو عفواً
الـ to function أو أزوده بالـ predicted، بالـ true
label والـ predicted label، وحروح أقول له هنا، اطبع لي
الـ classifier
"Classification Report"، وهنا جاب لي الرابورت
الكامل، بدأ بالـ "Precision"، والـ "Recall"، والـ "F1
Score"، أي القيم الثلاث اللي موجودة عندها للـ
"Class"، طبعاً للـ "Class Zero"، لأن الـ "Report"
لازم يبين كل القيم، لازم يبين كل حاجة، الآن الـ
"Recall"، الـ "Precision"
83، الـ Recall 78، الـ F1-score
والـ Accuracy وينها؟ ليش هي كترت داخلات مع بعض؟
الـ Accuracy بشكل عام هي 73، لماذا
72.72؟ هنا في الـ robot عمل الـ rounding أو
القيم الموجودة عندك هنا، فهي فعلياً 72.72، فبعمل
الـ rounding، الآن الـ Recall للـ Zero زي ما قلنا
83، الـ Precision والـ Recall للـ Class الأول
هي الـ Class number one لما
قلت له احسب الـ precision، جالي 66، هذه هي تقريباً الـ
55.كذا، الـ 56، الـ recall اللي هي 55.8، بعملها
تقريباً، الـ F1-score اللي كانت بتمثل الـ 60، تمام؟
والـ support لـ values الموجودة عندها فهي في الـ
report هذا، أنا جيبت كل الـ values بالنسبة لي لمرة
واحدة، بتمنى يكون الفيديو هذا يوضح لكم فعلياً إيش
أنا محتاج في الـ classification، طبعاً هذا الكلام
بيطبق مع كل data set أو مع كل classification
model، وكل classification model فيه خاصية معينة،
يمكن يكون الشغل الوحيد الآن في الاختلاف عندكم اللي
هو استدعاء الـ classifier، باريخ الاستفعال الـ
classifier، بينما الـ fit حتظل ثابتة للجميع، الـ
predict حتظل ثابتة للجميع، والـ measurement حتظل
موجودة لكل العناصر، لكل الـ classifiers بنفس
الطريقة، أنا هيك خلصت، بتمنى إن شاء الله تعالى
أتمنى من الله تبارك وتعالى أن أكون فعلاً وفقت
في أني خلال التسجيل هذا أني أوضح لكم موضوع
الـ classification، ومن خلاله استخدمت الـ Canary
Snapper واستخدمت الـ Kaggle كـ Tool مختلفة عن الـ
IPython في الـ local machine الموجودة عندي، إذا في
أي سؤال، احفظوه لـ next session، الـ online session
of the discussion، وعسى أن نكون وفقنا
دائماً وأبداً، والسلام عليكم ورحمة الله وبركاته