بسم الله والحمد لله والصلاة والسلام على رسول الله
أهلا وسهلا بكم يا شباب في محاضرتنا الثانية في
موضوع الـclassification. كنا حكينا في المحاضرة
الماضية أن موضوع الـclassification هي عبارة عن
تحديد عضوية المجموعات المعروفة. على سبيل المثال لو
قلت أنا بدي... في عندي تلك مجموعات طلاب... في عندي
تلك مجموعات للطلاب: مجموعات الامتياز، ومجموعات
الجيد جداً، ومجموعة الجيد. الآن جئنا قلنا والله
في عندنا سين من الناس أو سين من الطلاب. الآن سين من
الطلاب هذا لازم يصنف أو لازم ينتمي لوحدة من
المجموعات الثلاث بناءً على ماذا؟ على معدله، ولا
لا، على المعدل. إن كان شرطنا أن المعدلات هذه معروفة
تبعاً لمستواهم أو تحصيلهم العلمي. لأن هذا التصنيف
لاحظ أن أنا ماليش سلطة كثيرة على المجموعات.
المجموعات already predefined. الآن بدي أحاول أعرف
خصائص كل مجموعة، ماذا... ما معدلات الامتياز، أو ماذا
خصائص الأشخاص أصحاب الامتياز، خصائص المجموعة
الأولى، ما خصائص المجموعة الثانية، ما خصائص
المجموعة الثالثة. وسين من الطلاب هذا هو الـ
instance اللي عندي اللي أنا بدي أضيفه لمجموعة من
المجموعات الثلاث. بدي أشوف إيش الخصائص اللي عنده،
و التي تتقاطع مع أي خصائص من المجموعات الثلاث. وبناءً
عليه، هكذا أنا أصنفُه للمجموعة التي لدينا.
وكنا قد تكلمنا في الـlearning، الـmachine learning
كون تقنيات بشكل عام فيها supervised و unsupervised
تبعاً هل الإنسان متدخل أو غير متدخل في الموضوع.
و قلنا أن موضوع الـlearning أيضاً incrementally، هل
هو batch أو online؟ وقلنا أيضاً في عندي model based
أو instance based، بناءً على هل الـalgorithm هذا يُخرج
تبع الـalgorithm، الـmachine learning، يُعطيني model
أو لا يُعطيني model. قلنا في الآخر بكل الأحوال أنا
عندي خيطين في أي عملية classification: الـmodel
construction: كيف أنا بدي أكون في عندي function لما
أنا أُعطِيها الـobject، تذهب وتصنفُه تحت المصنفات
المعروفة مسبقاً، و الـmodel usage: كيف أنا بدي
أستخدم الـmodel الموجود هنا. وقلنا عادةً أنا بأقسم
الـdata set تبعتي لـtraining set و testing set
عشان أعمل evaluation. ومن أهم الـconcept اللي لازم
أنا أعرفه الـaccuracy، وهي المقدار أو الـratio تبع
الـcorrect prediction، الـcorrect classification
على كل الـinstances اللي عملت لها classification.
وقلنا لـspeed و robustness، جدّيش بيُعطيني result
صحيحة مع وجود الـnoisy data. الـscalability والـ
interpretability حكينا عليهم، وكان المفروض اليوم
إن شاء الله تعالى نبدأ مع الـalgorithms، ونشوف كيف
الـalgorithm قاعدة بتشتغل مع العناصر التي موجودة
عندي أو في الـclassification. وأول algorithm بيشتغل
أو هنتكلم عليه الـK nearest neighbor. الآن K
nearest neighbor، شو يعني nearest neighbor في الأول؟
أقرب جار. أقرب جار. لو أنا جئت اسمك هاني، هاني بدي
أعرف هاني جيداً.
ماذا يمكن أن أفعل؟ أذهب وأطبق، من هم أصحاب هاني، من
هم أصحاب هاني المقربون. وبناءً عليه نقول إن هاني صفاته
بصفات الناس اللي أنا بعرفهم من مين؟ من أصحابه أو من
جيرانه. Can your neighbor. يعني أنا بدي أحط لهم عدد
من الأقرب: اثنين لهاني، من الأقرب ثلاثة، من الأقرب خمسة، و
هنتكلم لماذا الـK هذه، وما أهميتها. الـnaive bayesian
هو أنا بعتمد على probability. decision tree. هنتشوف
كيف ممكن أنا أبني decision بناءً على العناصر هذه، و
بعدين ننتقل لباقي الـpropagate، الـneural network. نبدأ
مع الـK nearest neighbor. الـK nearest neighbor هو
عبارة عن instance based learning. التصنيف الأخير
خالص، لما قلت إنه هل الـalgorithm تبعي بيبني لي
model أم لا يُبني لي model؟ يُعطيني value مباشرةً. الـ
K nearest neighbor من الـalgorithms اللي ما بتعطيني
model، بتعطيني نتيجة... بتعطيني نتيجة، وبالتالي it
doesn't use any model to fit... لا يُبني model
مطلقاً... it's only based on memory. فقط تعتمد على
الذاكرة. لماذا الذاكرة؟ لأنه فعلياً عملية الحساب كلها
تتم في الـmemory. وكلما كانت الـmemory أكبر، لأن
الـdata set أكبر، يكون أنسب الـK-nearest neighbor ك
classification algorithm. بتعطيني نتيجة أو نتيجة
تبعته أو الـclass بناءً على الـmajority أو الأغلبية
في جيران العنصر هذا. لو أنا جئت قلت في عندي مجموعة
من الأشخاص.
قلنا أخونا هذا أو صاحبنا هذا بدنا نحطه لمجموعة من
المجموعتين، ماذا سنفعل؟ الـ
K-nearest neighbor algorithm أو الـKNN algorithm
يشتغل كالتالي: يقول احسب الفرق ما بين العنصر هذا و
كل العناصر التي موجودة. يعني أقارن أنا العنصر هذا
مع هذا، ومع هذا، ومع هذا، ومع هذا، ومع هذا، ومع
هذا كـinstance، كـobject، بغض النظر عن طريقة
المقارنة، وأقارنه أيضاً مع
كل الأشخاص هؤلاء. لاحظ أن أنا ضمنت كل الـdata set
التي موجودة عندي. أُصبت؟ يعني إذا كانت هؤلاء هم الـ
data set في الـtwo classes، فأنا ضمنت كل الـdata
set. الآن نشوف، يذهب ويقول لي الـK nearest neighbor
من هم أقرب الناس كانوا إليه؟ أقرب الناس كانوا إليه، أقرب
ثلاثة.
هؤلاء.
مضبوط؟ أقرب ثلاثة هؤلاء للناس، فهو سينتمي لنفس
المجموعة التي فيها غالبية الـclosest neighbors.
هؤلاء، ما الغالبية هنا؟ أزرق. فأخونا هذا ينضم لمن؟
للأزرق بناءً على مبدأ الـvoting للمجاورة أو حساب
المجاورة أو الأغلبية تبع الأشخاص أو تبع العناصر
الموجودة عنده. يعني يا إيهاب، تأخذ وقت كثير أكيد، أو
تشوف الـmean مثلاً من الجهة الأولى، والـmean
الثانية، وتشوف من أقرب درجة. اه، بس الآن هاي
الـcenter، صحيح؟
وهي الـcenter تبع المجموعة الثانية. إذا أنا هنا
أو بلاش إذا، أنا هنا المسافة للـcenter أكبر من
المسافة للـcenter، بينما كعناصر أنا أقرب هنا. نعم.
خليناها.
ونشوف من أبعد واحد من أنا، مراقبة، يعني مش أنه
مقارنة كذلك، بس المهم أنا الآن كريم... كريم يحمل
صفات صاحبه القريب منه الذي دائماً ملازم له، مش على
الذي بعيد، ولا؟ يعني زي النقطة، نحن بنعمل زي الـ
cut للـpicture اللي بدنا، والغراف ده، طيب، أعطيني
كلام، اترك لي من الـdimension معين، عشان... أعطيني كلام
أبسط، عشان أنا في الغراف مجد... طيب، طبعاً عندنا كثير
يعني مثلاً عندنا مئة ألف، تمام. والنقطة اللي بدنا
نعرفها، فإنهي، وفإنهي. وواحدة ضابطة حوالي مثلاً عشرين، اه.
طيب، ماهي... مهمش... بقى أنت الرسم ال... الوجد اللي
أنت أخذته في رسم العناصر هو عبارة عن computation
لما ذهبت جلبت العشرين... لا، لما أنت ذهبت جلبت العشرين
ووضعت النقطة هذه بينهم، أنت already عملت الـ
computation كله. عشان تقدر تجيبهم في نفس النقطة.
بقعه على الرسم، ولا كيف؟ إن وضعت النقطة هذه أبعد من
هذه بالمسافة هذه بالتحديد، وهذه أبعد، برضه أنت
عملت هنا قياس بالمثل.
كيف حددت المائتي ألف أن هؤلاء هم الأقرب؟ المائتي؟
اه، أو المائتي عنصر هؤلاء... كيف أنت حددتهم أن هؤلاء
الأقرب؟ كيف عرفت الـposition تبعها أن هؤلاء الـ
مائتي هم الأقرب لها؟ فعلياً مررت عليهم جميعاً؟ مضبوط؟
أم أنا مخطئ؟ أنت الآن أيضاً، مرة أخرى، أنا عندي مئة ألف
عندي
مئة ألف instance، أنت تعمل وتقول لي أنا حددت الـ
مئتي نقطة الأقرب، كيف حددت المئتي نقطة الأقرب من
المئة ألف؟ مرت عليهم جميعاً، أنت تقول أنا اعتمدت
الرسم. ما هو الرسم أيضاً هو نفسه لنفس الكلام، هو عبارة
عن تحديد النقاط، ويجب أن يرسم لك إياهم أو يعمل لهم
simulation تبع للـdistance أو قربهم من بعضهم، تمام.
تمام.
إذا لم يوجد، يعني صفر فقط، كم نزيد؟ عشرين، ممتاز، ممتاز.
يعني أنت بدأت بشكل random مع عشرة سم، وهل في
عناصر في العشرة سم، أم لا؟ ماشي الحال، وبعد
هذا ماذا فعلت؟ زدت المسافة. طيب، إيه أساساً أساساً
النقطة تبعك، النقطة تبعك أين موجودة؟ ستقول التي
موجودة في XY، صحيح؟
أصبت، لا، ليس أسهل، أنا أُدقق أنني لست أسهل، هي
النقطة هنا، عشان تحدد النقاط التي في القطر عشرة
سم أو نصف قطر عشرة، بدك تمر على كل النقاط عشان
تعرف من هي النقاط التي تبعد عن القطر هذا، وتجيبهم.
مش بعد المحاولة، أنا أظل أُناقش معك، لماذا؟ لأنه في
الآخر، الشغل اللي أنت غائب عنه أن الـgraph أو الرسم
هذا ما جاء إلا بعملية حسابية، تمام؟ والعملية
الحسابية هي هي نفسها، أنا عمال أُمر على كل العناصر
عشان أُحدد من المئتي. الآن أنا ماذا أعرفني؟ عندي
نقطة هيها موجودة هنا، صحيح؟ هي نقطة، مجموعة الـ
attributes هؤلاء، أو بلاش X وY، النقطة هذه ضمن المحيط
وهذه ليست من ضمن المحيط، ماذا أفعل؟ ماذا أفعل؟ بدي
أحسب الفرق ما بينه وبين النقطة هذه، مضبوط؟ التي هي
الـdistance. حسبت الـdistance، لا، طلعت برا، فأنا
أُتْرِك الحسبة هذه، صحيح؟ سأذهب إلى الـX واحد والـY واحد،
اه، هذه كانت في المنطقة هذه، فأنت العناصر هذه ليست
ستقدر تحصر من بينهم النقاط الموجودة التي تمر على كل
الـdata set، صحيح؟ لما
تجد طريقة أخرى، نستطيع أن نتناقش أنا وإياك فيها
بالمنطق هذا الـ
two dimension، البرنامج الجامعي يعكس صورة الـdata set
تبعك، كم attribute؟
الـdata set تبعك كم attribute؟ الـinstance
تبعك فيها عشرة attributes، تستطيع رسمها؟
على أنها two values التي موجودة عندي: الـpoint والـ
label، فقط one attribute والـlabel تبعته والعشرة؟
العشرة تستطيع رسمها كيف؟
ماشي، ماشي، سأُريك إياها أكثر إن شاء الله تعالى.
طيب، الآن التي الرسمة كانت لتوضيح، عشان أوصلك
مفهوم الـconcept تبع الجيران، ليس أكثر، فلا تصبح
الرسمة هي إيش هي الحل الموجود عندك. طيب، الآن
الفكرة مرة أخرى تدور حول الـK nearest neighbor
أني أذهب أبحث عن الـclosest object للنقطة التي
موجودة تبعي هنا، للـinstance الذي أنا فعلياً
أعرفها، عشان أنا أشوف من جيرانها أو من الأقرب
لها. لازم أعمل computation بينها وبين كل الـ
تقدر تعمل voting صح، أو عشان يصير في عندك فرصة للـ
voting أكبر. يعني مثلاً في الـ three classes، أربعة is
not enough، وخمسة غالباً is not enough. سبعة ممكن
تكون fair، بس برضه ممكن يصير في مشكلة. اتنين اتنين
واحد قال لي: طب في حالة... خد تمانية، التمانية والـ
ثلاثة. يعني بين قوسين، إذا كان عدد الـ classes فردي،
خد عدد الـ keys تبعتك عدد زوجي، وأكبر من ضعف الرقم.
هذا عشان إيش؟ تقدر تعمل بينهم voting على الأقل،
بتضمن أن في class منهم أكبر، أو صار فيه أغلبية،
أكبر من الثاني في المقابل. لو كانوا الآن العدد الـ K
تبعتك، أو عدد الـ classes تبعتك زوجي، تمام؟ خد عدد
فردي أكبر من ضعفه. كمان مرة، هذا الكلام مش قرآن،
هذا مجرد نصيحة عشان تقدر تاخد K وتضمن فيها
voting. اللي أنا بقوله كالتالي: لو كان عدد الـ
classes عندي ثلاثة، ضعفهم ستة، تمام؟ فبدي آخد
سبعة، أو أنا بقول لك خد ثمانية. خد الـ K تبعتك ثمانية.
هنا الـ A، لو الـ three classes دول بدهم يتوزعوا
إيش الاحتمالات يكونوا موجودين؟ الثمانية كلهم لنفس
الـ class، وهذا بيعمل الـ prediction تبعتي صحيحة 100
%. تمام؟
أربعة أو أربعة أو أربعة للـ class، و 2 و 2. برضه الـ
majority. لاحظ أنا بتكلم على الـ... لاحظ صرت أتكلم
على الأغلبية، مُجسّمين على عدد العناصر، مش على الأغلبية
50%. صار قد إيش؟ هو الـ top rank، ده اللي هنسميه. طيب بس
برضه ممكن يصير في مشكلة. ثلاثة ثلاثة اتنين. عشان هيك
بقول لك الكلام اللي أنا بقوله، أو النصيحة اللي أنا
بجيبها، بقولها مش أساس، هي مجرد...بدأ نرضى على مبدأ
التجربة والخطأ، أو التجربة والقياس لحد ما تصل لـ K
مناسبة بالنسبة لك. والـ K المناسبة هذه ممكن تختلف
في domain ثاني. ليش؟ لأنه فعلياً هذه واحدة من الـ
challenges الخاصة، أو من المشاكل الموجودة مع الـ K
-nearest neighbor. أي جيران؟ قد إيش عدد الجيران اللي أنا
اعتمد فيهم؟ زي ما قلنا سابقاً. طيب، الآن بما أنه أنا
بتحاول...بتحاول أشوف الـ K اللي بتتناسب مع عملية
الـ voting. زي ما قلت لك، حاول تكبرها شوية، وشوف بينها
وبين عدد عناصر الـ elements. يعني لو كان زوجي أو فردي،
إلى آخره. عفواً، الـ
main concept. أنا فيه عندي unseen instance، unseen
instance X، اللي قطعت الـ puzzle. هايوفي عندي...في
عندي two classes: suns و moons. شموس وقمر. وبيسألني
الخيار، الصورة هذه هتكون قمر ولا شمس؟ لأنها موجودة
هنا في الرسمة، بناء على الرسمة. إذا كانت الـ keys
تبعتي هنا أربعة،
هيصير في عندي اتنين واتنين. إذا اخترت الـ K أربعة،
اتنين واتنين، مش هقدر أعمل voting. لكن لو روحت للـ K
equal 11، الدائرة باللون الأزرق، هيكون في عندي أربعة و
سبعة. الـ majority، الـ majority لمين؟ للـ moons. وبالتالي
هاي الـ instance هذه عبارة عن قمر.
النصيحة، to avoid any noisy data، أو أي نصيحة. نصيحة
نصيحة، تستخدم more than one neighbor. ماتشتغلش
على one neighbor. ودائماً زي ما قلت لك، حاول اختار عدد
اللي له علاقة بعدد الـ classes، بحيث أن يكون في عندك
estimation، ولو بسيطة، كيف تفرّق ما بين الـ classes
اللي موجودة، وتقدر تعمل أغلبية. مين عنده الـ data
set تبعت الـ classification أكثر من الـ two classes؟
الآن معظمكم، كمجموعات، اشتغلتوا في data sets. الـ data
set اللي لها علاقة بالـ classification. مين عنده
data set، الـ labels تبعتها أكثر من two classes؟ طب
مين عنده binary classification، مجموعة واحدة فقط؟
اللي عارفة، اللي عندها. والباقي، والباقي ما أحد عارفها.
اللي سلمته، مجرد جربنا data for classification
ورفعناها وخلصنا. كان الله بالسر علينا. الآن
بما أن كل الـ instances اللي عندي موجودة في الـ N D
Space. بين
قوسين. الـ N هي عبارة عن عدد الـ attributes اللي
موجودة في الـ data set. اللي ممكن تكون واحدة، وممكن
تكون اتنين، وممكن تكون ثلاثة، وممكن تكون عشرة، وممكن
تكون مئة، وممكن تكون ألف. آه، ألف attributes. آه، الـ
datasets اللي لها علاقة بالصور، والألف attributes
قليل كمان! يعني هو عبارة عن pixels. الآن لو اتكلمت
على صورة مئة في مئة pixels، قد إيش الـ resolution
تبعتها عالية؟ لأ، صورة صغيرة جداً، صح؟ هذه لحالها عشان
تفردها، هي عشر آلاف attributes. و ليش؟ رأيكم؟ بس،
هذه بس، إحنا نتكلمنا على عشر آلاف attributes على
صورة صغيرة. تخيلي الصورة full HD، قد إيش عدد الـ
attributes تبعتها؟ طيب، الآن طبعاً في حالة إذا كل
pixel مثّلت attribute، الـ k-nearest neighbor بدور، أو
بعتمد على، أو بعرف أن الشخص... اسمه similarity
function. شو يعني similarity؟ تشابه، أو تقارب بين الـ
instances اللي موجودة سابقاً. أنا كنت بقول لك مين
أقرب الناس لفلان. لو أنا أجيت قلت لك في الـ one D شو
يعني one D؟ one attribute. أنا عندي عشرة، وعندي خمسة،
وعندي سبعة. العشرة
أقرب لمين؟ بناءً على إيش أنت حسبتها هي هيك؟ غالباً أن
هي أقرب للسبعة، لأن الفرق بين العشرة والسبعة
أقل من الفرق بين العشرة والخمسة. وبالتالي العشرة
أقرب للسبعة. بين قوسين، العشرة والسبعة more similar
than العشرة والخمسة. ولا شو رأيكم؟ يعني أقرب
تشابه مع بعض أكثر. كل ما قربت من الرقم، بكون أنا
مُشابه له، تمام؟ يعني إحنا في الآخر عملنا عشرة ناقص
خمسة، وعشرة ناقص سبعة. لو كانت الـ data set اللي أنا
بتكلم عليها في الـ 2D: عشرة
واتنين، خمسة
وثلاثة، سبعة، وواحد. كيف بدك تشوف، تفحص الـ
similarity ما بينهم؟ الـ X ناقص الـ X، والـ Y ناقص
الـ Y تحت الجذر. بدأنا الآن نبدأ نتكلم...أنت ملاحظ
بتتكلم على distance في الآخر، على مسافة. لكن لما أنا
بتكلم في الـ 2D، يا كريم. أي نقطتين في الـ 2D، بهم
نتكلم على distance بينهم. إيش الـ distance هي بتمثل؟
الفرق بين النقطتين. بس في كلام أبسط بالنسبة لما
الفرق بين النقطتين هذول. الـ distance هاي بتمثل الوتر
في مثلث قائم الزاوية. إذا شو رأيكم؟ التغير على الـ Y
هي Y2-Y1، الارتفاع. والـ base تبعتي المثلث X2 ناقص X1، و
لا، لأ. المسافة، اللي هو طول الضلع في المثلث قائم
الزاوية، شو بتساوي؟ X2 ناقص X1 تربيع، زائد Y2 ناقص Y1
تربيع، تحت الجذر. قانون فيثاغورس، مضبوط؟ وبالتالي
أنا عندي الـ Euclidean distance هيها.
إذا أنا حصلت على الـ distance. لو كان في عندي ثلاث
نقاط، معناته
أنا في عندي مثلث مختلف هنا، ولا
لأ؟ وهذه المسافة اللي أنا بدي إياها. إذا
كانت D2 أصغر من D1، فالنقطتين أقرب لبعض، تمام؟ طب في
الـ 3D: عشرة
واتنين، وسبعة، خمسة، وثلاثة، وواحد، سبعة، وواحد، و
ثلاثة. شو بدك تساوي؟ نفس الفكرة، بس إيش أساوي؟ أضيف
تحت الجذر، تربيع الفرق ما بين Z واحد و Z اتنين. يعني
بين النقطة الأولى والنقطة الثانية. طب لو كان عندي
عشرة attributes، ليش الـ off؟ ما إحنا متفقين إنه
ممكن يكون فيه عشرة attributes. نفس الكلام، فبنتكلم
إحنا على summation تحت الجذر لمجموع، للفرق ما بين
عدد الـ attributes اللي موجودة عندنا. الفرق ما بين
قيم الـ attributes اللي موجودة عندنا. وبالتالي هذي
بنسميها الـ Euclidean distance. لو كان أنا فيه عندي
two points X و Y، two different points. الـ
dimensionality تبعتهم N. الفرق
بين النقطتين هذول، يساوي الجذر التربيعي لمجموع XI
ناقص YI تربيع، تحت الجذر. والـ I بدها تساوي من واحد
لـ N. وبالتالي أنا بتكلم فعلياً على الفروقات. هذا
الـ Euclidean distance بشكل عام. بما أنه أنا قاعد
بربّع القيم، وبأخذ الجذر. لو غيرت الجذر من معادلتي،
لو غيرت الجذر من معادلتي، شو بيصير؟ بتصير القيمة
أكبر، بس مش أكثر، ولا لأ؟ بس فعلياً القيمة الكبيرة
تحت الجذر، هتكون هي القيمة الكبيرة بعد الجذر، بس
الـ scale اختلف، مضبوط؟ فبعض الناس إيش بتروح
بتساوي؟ بتستغنى عن الجذر التربيعي. وبما أن التربيع
بيعطيني قيمة موجبة، فقال لك: إحنا في Manhattan
distance. قال لك: ليش ما نتكلم على مجموع الـ absolute
أو الفروقات؟ مجموع الفروقات بين النقاط. لو أنا أجيت
سألتك، كريم وهاني. هاني، قد إيش الفرق بينك وبين كريم
في المعدل؟ هقول خمسة. لأ، ما سألتش قد إيش معدلك، قد إيش الفرق
بينك وبين كريم في المعدل؟ قال خمسة بالمئة. لو روحت سألت كريم
كريم: قد إيش الفرق بينك وبين هاني في المعدل؟ خمسة بالمئة. لاحظ
أنا ما فَرّقت معايا مين أعلى من الثاني، لأن في
الحالتين الـ distance... بتكلم distance، والـ
distance لن تكون بالسالب. فالـ distance دائماً
موجبة. فجالك أنا من هنا، الـ distance جالك أنا
بروحة بأشتغل، بعتمد على الـ absolute value للفرق ما
بين الـ attributes values، وبجمعهم، وبهيك حصلت على
نفس الـ concepts، بس فعلياً...فعلياً بتفرق. الـ distance
الرسمة هاي بتوضح الفرق الفعلي ما بين الـ Manhattan
والـ Euclidean. الـ Euclidean، طبعاً هاي النقطتين X1 و X2
2 و 8... 3 أو 6 و 3. رسمناهم. الآن قلنا الخط الأخضر
هذا هو عبارة عن الـ Euclidean distance. بينما الـ
Manhattan في أكثر من مسار. فكرة الـ Manhattan
distance، أنه دائماً أنا بمشي في خطوط مستقيمة
متعامدة على بعضها. بمشي على خطوط متعامدة، بينما الـ
Euclidean أخذت القطر، مضبوط؟ الآن الخطوط...الخط
الأحمر هذا هو عبارة عن مثل الـ Manhattan distance.
الخط الأصفر هذا كذلك، عبّر عن الـ Manhattan distance،
ونفس الـ value. لو أنت حسبت واحد، اتنين، ثلاثة،
أربعة، خمسة، و واحد، اتنين، ثلاثة، أربعة، تسعة. واحد،
اتنين، ثلاثة، أربعة، خمسة، ستة، سبعة، ثمانية، تسعة. كـ
units. فالـ Manhattan distance هي فعلياً هتلاقي فيه
implementation، يستحيل تجي تتكلم على أنك تطبق الـ
Euclidean distance. مثال: جالك سيارة بدها تتحرك ما
بين النقطتين هذول ضمن مدينة. هي خلّقتها تقول والله
أنا ببدأ أخشّ من البيوت اللي هنا، ما فيش مجال السيارة 390 0
إيه؟ إيه؟ إيه؟
بتمنى بس على الناس المبتسمة أن تكون فعليا مبتسمة
لأنها عارفة الحل، مش لأنها مش مبتسمة لأنها إيش مش فاهمة
حاجة نعم، كمل لحالك، احنا شرحنا الـ algorithm
احنا نسأل على شخصين في العالم اللي ممكن
يتعامل معه بالتعامل بالتعامل بالتعامل بالتعامل
بالدرس
اكتب .. اكتب .. اكتب الجواب، الـ class تبعت الـ
instance هي على الورقة، في حالة كانت K = 1
و في حالة الـ K = 3 حطوا
جواب ما قلنا، اعمل مجاورته، حدد الـ .. الـ .. nearest
neighbor و اعمل voting ما بينهم، في حالة
الواحد مافيش voting، هو في حالة التلاتة بقى تعمل
voting. يلا شباب، لما الورق اديني إياه، خلصت الخمس
دقايق، مش دقيقة يا أستاذ، وحورجيك إنه هذا بينحل في
أقل من دقيقة. يلا شباب، اديني الورق، الله يسعدك، اديني
الورق، يلا شباب، واحد
خذين، ماشي الورق يا شباب، إذا
اللي وراك لسه بيحل، سيبك منه، اديه الورق اللي قدامك و
تاخدش منه، خليه يجمع من مكانه
ما تاخدش من حد من ورا، إيش
المفروض يسوي فيهم هدول؟
خلصت؟
طيب طيب يا شباب، خلاصنا من الصوت، خلاصنا، تعالى نشوف
جدًّا فعليا انت تلات عقول أو أربعة اشتغلت أحيانا أو
اتنين في موضوع حل مسألة زي هيك، وهي القوانين
التانية قدامك الآن: 3 - 7 + 4² +
0²، الـ instance الأولى، وهذه كانت الـ
classification تبعتها bad. الآن 4² +
3²، وبرضه هذه كانت bad. الآن الثانية: 0²
+ 1²، وهذه good، الـ instance
الأخيرة: 2² + 3، عفواً، عفواً
3² = 7
- 4 + 3²، وهذه good. أقصر
مسافة اللي بعديها، اللي بعديها
إذا كانت الـ K = 1 فهي Good، إذا كانت الـ K
= 3، بعمل voting بين التلاتة الأصغر: اتنين
Good و واحدة Bad، حسب المجاورة باخد الـ Good، فكل
الحالتين كانت عندك Good، Euclidean distance، أنا
اعتمدت، يا دكتور، ما طبقتش التربيع، مافيش مشكلة،
معاملنا ذاكرين إنه جماعة الخير، بما أنه التربيع
بيقعد يتطبق، نشتغل مع الكل، فأنا ممكن أنا أشتغل بسرعة
بدون ما أقلق حالي، وأستخدم قياس الجوال لأول مرة، بدي
أستخدمها على الـ include، على المنهاجتين، الناس اللي
اشتغلت على المنهاجتين، ما اختلفتش كتير، الآن: 3
+ 4 + 0 + 4
+ 3 + 0 + 3 + 2 + 3، الـ
shortest: 1، 2، 3
good، في حالة الـ K = 1، وين خمسة
ترتيب اختلف، اوكي، ماشي الحال، 2، 3، تمام
اتنين جود، واحدة bad، جود
فهي الـ label تمام، الشباب، الله
يعطيك العافية
أصارت عندك X2، المشكلة جزئيا
أستاذ، أنا حليت مع K = 3، هاي الـ query اللي
بدي اعملها، الـ instance (3، 7)، هي اللي بدي قيمها
فروحت حسبت المسافة بينها وبين كل نقطة، تربيع
الآن رتبت تبع للـ distance من الأصغر للأكبر
وبالتالي الأولى هي الـ most closest، وراها الثانية و
الثالثة، والرابعة، الرابعة هي the farthest one، الآن
إذا كانت الـ K تبعتي = 1، فالأولى
كانت، الـ K تبعتي = 3، هي التلاتة، هعمل بينهم
voting، الآن، فهتكون النتيجة تبعتها، الـ class تبعت الـ
instance هذي good. اجرب مسافة، نعم، 7 - 7 +
أنا، الـ 7 - 7، بس الـ 7 - 7 مش لحالها
في عندك هنا 7 - 3، لأن هذا distance في الـ
2D، في الـ 2D، خط بس الخط هذا جاي معاك، خط أفقي أو خط
عمودي، لما يكون قيمته متساويات
الآن لو طلعوا النسب في كل مقارنة نسبتها طبعاً هي
بعض ضد، وبعض نفس الـ .. اه اه، الآن هذه مشكلة زي ما
قلت لك أنا سابقاً، مشكلة الـ voting، أنك انت بدك تحاول
تسعى أنك تلاقي value أفضل كي تتناسب مع العملية
الآن بكل الأحوال، لو طلعوا فعلياً فعلياً عندي two
classes اللي هم نفس الـ level، نفس الـ distance، حطيته
في إيه؟ حطيته في دي؟ نفس النتيجة في الآخر، انت
حصلت، تمام؟ بس في الآخر، هي اللي موجودة، هي الـ
algorithm، ما حدش قالك أن الـ algorithm هذا perfect،
100%، أنا قدمته لسبب واحد فقط، أنه
أسهل algorithm ممكن تستوعبه أنت الآن، تمام؟ أسهل
algorithm، ما بيبدأش يخلّي دماغك يشتغل معانا، ممتاز؟ هذه
الـ data الستة تبعتنا .. بدي ارجع لهيك شوية، X
3: true .. false .. false .. true، أنا
سابقا لما كنت بحسب distance أو ping و cell، لما صرت
back كنت بعكس الـ similarity as a distance، تمام، الـ
shortest distance، الـ most similar، والعكس صحيح، كانت
الـ numeric value، الآن أنا فيه عندي Boolean value
شو بدي أسوي فيها؟ 0 و 1، أحولها 0 و 1، يعني
أرجع أعمل preprocessing، 0 و 1، حل، بس أنا رجعني
كتير لورا، مضطر له، تمام. طيب، لو كان عندي كمان
X3 أو X4 بمثل الـ Marital Status: Single، Divorced،
Widowed، Married، مقولج، بعيد عنك، أرمل، Widowed،
أرمل، Divorced، مقولق، مش هاي الحالات الاجتماعية
الأربعة، على شخص أعزب، متزوج، widowed .. widowed .. widowed
.. widowed .. widowed .. widowed .. widowed .. widowed .. widowed
تقدرش تحولها، أيوة، دون إبداعات نسمع منكم، وبالتالي
انت حقيت .. يعني لو لو هي للأعزب، يعني المفروض يكون
قيمة الأعزب أكبر، غير صحيح، نعم، نحسب الـ X، و X1، و X2،
و X3، و X4، و X5، و X6، و X7، و X8، و X9، و X10، و X11، و
X12، و X12، و X13، و X14، و X14، و X15، و X16، و X17، و
X18، و X19، و X20، و X21، و X22، و X22، و X22، و X22، و
X22، و X22، و X22، و X22، و X22، و X22، و X22، و X22، و
X22، و X22، و X22، و X22، و X22، و X22، لما يكون في عندي
nominal attribute أو Boolean attribute، الـ distance
هتزيد بصفر أو بواحد، بناء على إيش؟ هل الـ value هذه
equal أو not equal؟ true، يعني الـ instance اللي أنا
بدي أقرأها الآن، كانت هنا عندي 3 و 7 و false
و D
الآن المسافة اللي بحسبها هي ل
الـ instance الأولى، الآن 7 - 7² +
7 - 3² + 1
في حالة التساوي 0، في حالة الاختلاف 0 + 0
في الحالة الثانية مع الـ instance الثانية 4
- 7² + 7 - 3² +
false و false، 1، دي و دي 1، وبالتالي صار موضوع
الـ String اللي هندي، أو لو كانت الـ Nominal Data
أو Boolean Data، مافيش داعي أرجع للـ preprocessing
مافيش داعي أرجع للـ preprocessing، بالعكس أنا ممكن
أكمل بكل بساطة، بتصير الآن similar or dissimilar
لأنه فعلاً هل هي نفس القيمة ولا قيمة مختلفة؟ طبعاً؟
قيمة ولا قيمة مختلفة، لكن لأ أخفيكوا إن هاي في
برضه فيها مشكلة
رحلة
شوية، لو كان في عندي two values بالشكل هذا: أحمد و
أحمد، واحدة بتبدأ بـ capital، واحدة small، المفروض تكون
انت حليتها، أنا جيبتك كمثال كاسم بالاسم، الآن يا
سيدي، بلاش نتكلم على الوظيفة، الـ job manager، الآن
هادي و هادي في الـ semantic واحدة، لكن على حسب
القانون اللي أنا بقوله: إذا متساويات بياخدوا 1،
مختلفات بياخدوا 0، هدول من الناس اللي هتاخد 0
ليش؟ لأن الـ case .. بدي أدخل الـ ignore case في
الموضوع، ابتجيني قضية أخطر من هيك، واحد
كتب بـ A، وواحد كتب بـ E، مش هذا اللي احنا
اتسميناها سابقاً، ignore syntax، حلتك من الـ capital
letter و الـ capital letter و الـ small letter، بس ما
حلت الـ case، أن هذه A، و هادي إيه؟ هتظل في عندي
استثناءات، وإن الـ data فيها .. يعني مش ضروري كل شيء
ييجي .. يعني أنا بهمش، أنا بحاول أظبط الـ data تمشي
مع القوانين، بحاولش أكيف القوانين تمشي مع الـ data
وبالتالي، هي القانون اللي موجودة عندي هنا، في حالة
الـ nominal data، equal values: 0، يعني الـ distance
بينهم 0، ليش؟ لأنهم متطابقين، نفس الشيء، مافيش فرق
بقى بينهم، different values، بغض النظر إيش كانوا
الفرق بينهم 1، ولما أنا بضيف الفرق بينهم، لما
أقول قيمتهم مختلفات: 1، متساويات: 0، عكست في
المثال هذا: true
و false: 1، اختلاف، اختلاف، بعدت، بعدت، كويس أنكم
انتبهتوا، أنا بتكلم، بتكلم، بتكلم، بتكلم، بتكلم
بتكلم، بتكلم، بتكلم، بتكلم، بتكلم، بتكلم، بتكلم
بتكلم
بتصفر، و 0 بين جوسين، بين جوسين، أن الـ instance
الأولى من ناحية الـ text من
ناحية الـ text أبعد عادة من الـ instance من الثانية
أبعد، يعني صار في 1، صار في مسافة تنجمّع للقانون
اللي عندي، نعم
جدًّا عدد الـ values، الـ different values اللي عندك
و الحالات التانية، الوظائف، الـ occupation، جدًّا
عدد الوظائف إيه؟ واديني مثال، فرضاً عشرة، مين قال مين
قال
موضوع الـ scaling هو اللي بيحل القضية وبحطهم كلهم
بنفس الأوزان في موضوع الـ distance تخيل أنا بدرّب
أطبّق عليهم الـ min max normalization من صفر لواحد
شكل
الـ data set هيصير صفر مع أنّه كانت الفروقات بينهم
كبيرة جداً، وعلى نفس النظام، على نفس النظام الألفين
لما أنا بقدر أطبّقها، بقدر أخضعها لنفس المبدأ الـ min
max 01 على نفس الحسبة اللي اشتغلت عليها هان هي الـ
maximum value 55000 وهي الـ minimum value الـ
minimum والـ old minimum والـ old maximum للـ
الـ new minimum 0 والـ New Maximum 1 وبدّي أطبّق
الألف عليهم، الألفين عليهم، ونفس النظام بدّي أطبّق
باقي العناصر اللي أنا كتبتها، فعلياً الـ values
تبعتها بصير تفرج، وبصير كلهم إيش؟ متساويات. نعم، بس
احنا اتفقنا إنّه في موضوع الـ data normalization
في الـ preprocessing مهم جداً، بس شغلة زي السابقة أنا
ما شفتهاش، ما كانتش... ما كانتش تخطر في أحلامي إنّه فعلياً
ألاقي إنّه الـ nominal attribute أو ألاقي algorithm
فقط شغال على الـ numeric data، مصبوط؟ في ناحية الـ
preprocessing، احنا حكينا سابقاً إنّه الـ scaling
شغلة أساسية، الـ scaling شغلة أساسية، إيش الـ
advantages والـ disadvantages تبعت الـ algorithm
اللي عندنا؟ الـ advantages robust، شو يعني robust؟
قوي في وجود الـ noise data، في عندي data طيّب، هي
distinguish ولا distinguish، أنتَ
اللي بتقول، عشانك روحت على بلد ومارست فيها لغة
بلفظوها بالشكل هذا، بقى هذا لا يعني أن الناس
التانية بلفظوها باللهجات مختلفة. شكراً لك، تمام
سيدي؟ الآن
advantages robust أو robust noise training data
لما بكون في عندي noise data أنا بأضمن إنّه بدّيني
prediction صحيحة، بهدف إنّه فعلياً ما بتأثّرش، هو عمّال
بيحسب الـ instance أو العلاقة مع كل الـ instances و
لما تكون في عندي واحدة noise بتدوب ما بين العناصر
اللي موجودة، effective في حالة إذا كانت الـ data
تبعتي large enough، كبيرة. ليش؟ لأنّ بكون الـ decision
تبعي بعتمد على أكبر عدد ممكن من الـ neighbors
وبالتالي، كل ما كترت النقاط، صرت أنا بدوّر إنّه يكون
...احتمالية إنّه يكون في نقاط أقرب، أعلى الـ
disadvantages إنّه لازم أحدّد الكلمة الجابلة، والـ
الكلمة التحديد هذه بحد ذاتها مشكلة، أنا ما بعرف ولا
حد في الدنيا بيعرف إيش أفضل key، الشغلة التانية الـ
distance based learning is not clear، مفهوم الـ
distance لما كنت بتكلّم على الـ numerical كنت مقتنع
فيها، بس لما دخلت الـ nominal data بدّنا نأخذ ونعطف
الكلام، مصبوط، وبالتالي ما صار مفهوم الـ similarity
مش clear بالنسبة لي كتير، عندي هان الشغلة التالتة
أو الأخيرة، إنّه أنا فعلياً هذا الـ algorithm بدّيني
high computation cost، ليش؟ أنتَ تخيّل عندي 100 ألف
instance، عشان أقدر أصنّف one instance بدّي أحسب
المسافة بينها وبين 100 ألف نقطة، طبعاً عندي 10 نقاط
بدّي أصنّفهم، بدّي أحسب الـ distance عشرة في 100 ألف
يعني مليون مرة، مليون distance بدّي أحسب وهكذا، لكن
هذا برضه، على الرغم من العيوب هذه، الـ algorithm هذه
في حالات كتيرة efficient إذا كانت في عندي memory
كافية، والـ data set تبعتي كويسة، بتدّيني prediction
عالي، لأنّ أحياناً يا جماعة الخير، بقدرش أبني model
أنا ما بلاحظ أي تغيير في الـ environment، مش هتأثّر فيه، في
الآخر، أنتَ بتدّيني قيم وأنا بحسب قرب أو بعد النقطة
جربت أو بعدت، أنا ما عندي مشكلة، لكن في حالة بناء الـ
model زي ما هشوف لاحقاً، أنا ببني model، الـ model
خلاص صار if then، طب اتغيّرت الدنيا، بدّك تغيّر الـ if
then، يعني بدّك تعمل الـ training مرة ثانية، وعادة
بنطلق على الـ K-Nearest Neighbor lazy learning
algorithm
براحتَه، ليش lazy؟ لأنّه فعلاً ما بيبنيش model، كسلان
ما عندوش استعداد يرهق نفسه في بناء model أو يحطّ
role كصُور العلاقة ما بين الـ attributes والـ class
فبيعتمد هو كل مرة على إيش؟ على الـ computation بدل
من حساب الـ model، متطفّل؟ لأ، هو شغال بذاته، هو كسول
بدّوش يبني، بقول لك لما بتيجي تعمل instance بعملك
الحسبة وبدّيك إياها وخلاصنا، بدّيش أبني model
واحتفظ فيه، اللي هي لأ
لأ، هذا الـ algorithm من الـ deterministic algorithm
يعني لو دوّرت له نفس الـ data set ونفس الـ Instance
Set وجرّبت 7000 مليون مرة تعمل الـ classification
تدّيك نفس النتيجة، آه
ممكن، أنا ما قلتش إنّ الـ algorithm هذا هو الأفضل
طبعاً؟ لكن هذا الـ algorithm هو الأسهل من ناحية
الاستيعاب، إيش اللي بيصير؟ فعشان هيك أنا بدّيت فيه،
الآن، هل هو أفضل algorithm؟ لأ، الآن، بس أنا بالنسبة
لي تجربة شخصية في الدكتوراه، كان الـ algorithm هذا
هو قُوت النجاة تبعي، قارنته بالـ support vector
machine وقارنته بالـ neural network، كان أداءه أقلّ
منهم، على الرغم من هيك كان اختيار إنّ هذا الـ
algorithm هو الأكثر مناسبة، أنا بأشتغل في dynamic
environment، بعمل computation على الجوال، وبالتالي
مستحيل موضوع الـ learning، إنّي أبني model كل ما تتغيّر
الـ environment، ومقارنة الـ Accuracy لـ Neural
Network ادّتني حوالي 97%، الـ support vector machine
الدنيا مقاربة لها، وهذا الدرّب الدنيا 94%، فبالضبط
فصرت هذا مش فارق، في مقابل إنّه هذا بيشتغل مع الـ
dynamic environment، لأنّ أنا مش بحاجة في كل ما
تتغيّر عوامل البيئة أروح أبني model جديد، فكان هو
فعلياً قُوّة النجاح زي ما قلت لك بالنسبة لي من تجربة
فهذا لا يعني أنّه سيّئ، لكن أنا قاعد بتكلّم advantages
أو disadvantages موجودة عندها، الـ code اللي موجود
عندها، بكل بساطة بيبني أو بيستخدم الـ KNN
algorithm بالـ Python، طبعاً أنا بفترض إنّي عامل
import
الآن، بكل بساطة، الشباب اللي أنا سويته في الـ code
هذا، كنت بدأت أشتغلَه، أو رابط مدامك، عملي الآن، عملت
import للـ pandas as bd، والـ bd مجرد أي أي shortcut
عشان تختصر من كتابة أسماء الـ libraries بأكثر من
طريقة، وقلت له الـ data 6 بعت equal pandas.read
csv iris.csv، data بتتكلم على تصنيف زهر السوسن
لثلاث أصناف، الـ data set هذه for training معدّة بشكل
جيد للـ classification، طبعاً يعني إذا أريد أن أفهم
الـ classification وأجرب الـ algorithm وأقارن ما
بين الـ algorithm، هذه واحدة من الـ data set المناسبة
عدد الـ rows اللي فيها 150 row، three classes، خمسين
row في كل class، طبعاً زي ما قلت لك هي عشان أنا أجرب
عليها، الآن قرأت الـ data set، عادة الـ data set تبعتي
هذه من الـ five attributes، السبل
length والسّبل width، عرض أقول السّبلة، والـ petal
length والـ petal width، عرض أقول البتلة تبع الزهرة
تمام؟ الكأس والورقة تبع الزهرة، والنوع، النوع اسمه
variety
Kindhand في الـ data set اللي أنا استخدمتها، في
data ثانية ممكن تسمّيها kind أو type أو citrus الـ
iris type إلى آخره، هذا الـ data set كلها جاية في
جدول واحد، block واحد، أنا الخطوة رقم واحد المفروض
أسويها مع أي عملية classification، أفصل، أفصل ما بين
الـ label والـ attributes، كيف بدّي أفصل بين الـ label
والـ attributes؟ وقلت له الـ attributes تبعتي تساوي
الـ data set.drop(variety)، drop للـ variety
إيش يعني؟ يشيله بس من وين؟ هيشيله من الـ
data set ويحطّها في data set جديدة يسمّيها ليها
features، و ليش قلت له x = 1؟ لأنّ أنا بدّي
أشيل column، الآن بعضكم ممكن يخطئ ويروح يحطّ يقول له
الـ IRIS أو الـ data set = كده بيصير يحدث عليها
بيلزمه يحطّ in place = True عشان يعدّل على نفس الـ data
set اللي هو شغال عليها، أنا هيك أخدت مين؟ أخدت الـ
features في data set جديدة، بدّي آخذ الـ labels أو الـ
target، هقول له الـ target = الـ data set.
variety أو الـ data set
variety، هنتعامل معاها as an instance من الـ
framework اللي موجود عندك هان class، واعتبرها
variable منه، وأخدها منه، مشاركة، وهان روحت أنتَ
اعتبرته ليها as dictionary أو كـ array أو vector
وراح يقطع لك إياه ويقول لك اتفضّل هذه وهذه، هديك نفس
النتيجة، الآن اللي هيصير عندي بعد هيك from the
sklearn.neighbors لأنّ هذه سلسلة algorithm
import KNeighborsClassifier، الـ model = K
Neighbors(5)، أخدت constructor وقلت له الـ k تبعتي
خمسة، وقلت له هاي الـ association بين الـ features والـ
label اللي عندي، الـ model.fit، بعد هيك قلت له
اعمل prediction لمين؟ للـ model.predict(test)، والـ
test إيش الـ test؟ هي عبارة عن sample instance فيها
خمسة وثلاثة وستة من عشرة، واحد واتنين وواحد و
سبعة، قلت له reshape عشان يعمل ليهم as a vector
تتطابق تماماً بالـ direction مع الـ instances اللي
موجودة في الـ predictions هذه، خزّنت إنّها الـ value في
الـ predictions، ما فيش الـ predictions يا شباب، هي
عبارة عن الـ array من خمس عناصر، تمام؟ إيش فيها؟ فيها
الـ shortest distances، الـ distances، أقصر مسافات، مش
أنا بقول له دوّر على الـ shortest five neighbors
فجاب لي أقصر خمس مسافات، هذا الـ role الأول في الـ array
الـ row الثاني، عبارة عن الـ array في الـ index تبعت الـ
instances، أصحاب أقصر مسافات، بضلّ عليك تاخذ الـ index
هدول، وتروح تجيب الـ label تبعتّهم، عشان إيش؟ تعمل
بينهم voting وتاخذ القيمة اللي موجودة، الله
يعطيكم العافية، وبشوفكم إن شاء الله لأسبوع القادم