Lecture_9
يلا بينا بقى في lecture 9 ان شاء الله بسم الله. هنكمل كلامنا على ال decision tree وهننهي بقى النهاردة ان شاء الله في الlecture  9. هو بقى بيكلمك عن الdecision tree  في الreal valued features بقى اللى هى الfeatures احنا اتكلمنا خلاص على الexcellent اللي هو اتكلمنا عن حاجات الcategory .
وانا كلمتك عن الحتة بتاعةالnumerical عشان كنت عارف ان هي هتيجي هنا و الcontinuous data هو بيقول لك هنا ان انت بتsplit اي numerical value بthreshold مثلا الincome اللى اكتر من 61000 يجي هنا لاقل من 61000  يجي هنا وهكذا. انت بتعمل threshold splitting او اقل مثلا او اكبر وبيبقى دوب ده وانت بتcategorize
بناx على threshold الthreshold  ده بقيمة. طيب انا ازاي بقى بلاقي الbest threshold ده او بازاي بجيب احسن threshold قالك بص والله انت انت كده كده الincome سماه T الincome T ده اللي هو الthreshold  اللي انت عايز توصله. انا عايز الthreshold اللي اقسم عنده اللي هو اكبر منه يروح في حتة اقل منه يرو.
فحته فقال لك خلاص احنا هنتبع algorithm معين بما اني اه اه algorithm  معين عشان تلاقي به الthreshold ده الalgorithm  اللي هو ان انا بعمل ايه بقى? ان انا بحاول اوجد الthreshold  اللي هيديني انا همسك كل point يعني انا عندي الpoints كلها ان انا عندي الpoints  كل.
انا هجرب بين كل poin يعني نفترض ان يعني الpoints  دي هي دي الpoints  بتاعة الdata كلها. هو علشان يلاقي احسن threshold بيعمل ايه? بيروح يجرب بين اول 2points هيحط threshold ويحسب الclassification error بعدين خلاص ويحتفظ بيه. بعد كده يجي بين
تاني 2points هنا ويحط ويحسب classification error بين تالت 2points  ويحط برضو threshold ويحسب الclassification error وهكذا بيفضل يعمل كده ل finite number of splits ليه لان انت عندك points ما بين كل 2points  هتروح تحط
اه اه threshold وتجرب تحط threshold فانت بقى عندك بدل مكان اه الال continuous number infinity  لأ بقت finite ليه? لان انت ما بين كل 2points عندك في الdata انت حطيتthreshold بس كده .
بدل ما كان انت عندك دي في الdata كان عندك اللي ما بينهم كلهم معك لان دي continuous data اه ولكن لما حطيت بين كل 2points  عندك في الdata بقى عندك finite splits تمام? طيب انا بعمل ايه? انا بsort الvalues بتاعت الfeatures بحيث ان هي تبقى من من الشمال اليمين كده مترسقة من مرسومة.
بsortها كلها بعد ما بsort ب for loop بقى بلف من I equal 1 ل N ناقص 1 بعمل ايه باجي بلف على نقطة نقطة كل vertex والتانية ما بين كل vertex بحط threshold في النص ما بينهم بالظب
فباروح أsplit تمام? وأcompute الclassification error بعد كده بعمل ايه? بrecurse هاrecurse على ال2points  اللي بعدهم. بعدين ال2points  اللي بعدهم وهكذا. واحسب الclassification error وروح اخزن الclassification error دول كلهم في Array وروح اجيب الminimum بتاع الarray  أcompute بقى في الاخر الminimum بتاع الarray  وده اللي انا هاreturnه يبقى هو ده الthreshold ده اللي انا
بستخدمه. بستخدم الthreshold  صاحب اقل اه cost او اقل classification error يعني مظبوط. ادي هو كان بيجرب بقى في المثال بيقول لك بقى لو قسمت هنا علىthreshold  threshold  تاني ومش عارف ايه وجابه هكذا. تمام? حلو قوي. طيب الفرق بين ال decision tree بقى وال logistic regression.
اول فرق جوهري ان مفهوش multi classification وال decision tree  multi classification والlogistic regression عشان اعمل له multi classification بتحيل على الموضوع عن طريق ان انا بستخدم بعض ال techniques زي 1  all vs و 1  1 vs تمام طيب الlogistic regression
بيsplit بline اللي هو احسن line بيقسم يعني الdata وهنا قلنا ان الlogistic regression بيحصل له overfitting لما ايه اللي بيزيد الdegree بتاعت الZ بتبدأ تزيد قوي لما كلما الdegree تزيد الoverfitting
يزيد. تمام? طيب. وبيشتغل عن طريق انه بيجيب line يclassify الdata وخلاص. لكن الdecision tree بيشتغل ازاي? الdecision tree مع كل node بيsplit في الdata. يعني ادي اهو راح قام مقسم الdata لل 2regions دول بناء على اول node. طب عملت depth2 بقى عملت node كمان.
اتقسمت بشكل مختلف اه المفروض هنا سنة اهو هنا بالظبط depth2 عملت node كمان اتقسمت بشكل مختلف اهو كده بقا عندي region دي بتمثلي class وال region دى بتمثل class تاني اه عملت اه ابقى افضل اعمل بقى ايه? ازود nodes ازود nodes ازود depth depth depth  اعمل levels اكتر depth اك.
بص عند الdepth  العاشر. تقدر تقول لي حصل ايه هنا? بالظبط overfitting. بقى بيعدي على كل الpoints. 
overfitting اه انت كل لما الdepth بتاع الdecision tree بيزيد كل لما ابoverfitting بيزيد. يبقى الفرق بينها وبين الlogisitic regression. ان الlogistic regression الdegree كل لما تزيد.
يحصل overfitting ال decision tree كل لما الdepth بيزيد بيحصل overfitting وده منطقي. لان انت الdepth  كل لما بيزيد كل لما بيتعلم variations اكتر لدرجة انه بيتعلم الvariations اللي في الdata كلها فيبصمجها. لانه اتعلم او عمل split مثلا في مثلا هنا
دي مثلا الX دي دي الfeature اللى هى الnumerical. بص عملها هنا split بthreshold هنا بthreshold ثاني هنا بthreshold ثالث. ممكن من كتر ما الdepth كتير عمل split عند كل قيمة موجودة في الdata. فحافظ الdata. وبالتالي حافظ الdata. فالdepth ده بيبقى hyperparameter انت بتختاره. ومفروض بتحجمه ما تزودش الdepth قوي ولا تقلل الda.
لان لو قللت الdepth وخليته اه node واحدة بس او قللت الdepth او هيجي لك زي اول واحدة دي بص رح قاسم غلط بيقسم غلط خالص يعني حتى هنا الlogistic regression قاسم احسن منه فساعتها بيحصل underfitting فالdepth يا اما يبقى كتير يحصل overfitting يا اما يبقى قليل يحصل underfitting وده بيتشرح هنا اهو
عند depth 1 ده underfitting عند depth 10 بص الtraining error بقى بصفر وحصل overfitting علشان والdecision tree مشهورة قوي بالoverfitting يعني طيب علشان خاطر أقلل أو أvoid الoverfitting في الdecision tree
دي. اه بعمل ايه? والله في كذا technique. اه بس انا عايز اقول لك ان الاهم ان انت يعني مثلا هو بيسألك هنا which tree simpler اكيد دي simpler ودي complex اكتر فبالتالي دي معرضة اكتر ان يحصل overfitting لها تمام? اه ازاي بقى امنع الoverfitting ده بيتعمل امنعه بحاجتين. يا اما early stopping
يا اما pruning حلو قوي ودول اللي هنتكلم عنهم يبقى المحاضرة دي خلصت ال early stopping جواه بقا techniques اقدر اعمل early stopping على كذا حاجة اول حاجة ان انا اعمل early stopping باستخدام الvalidation error ان انا يبقى عندي training error وvalidation
ارر. واول ما لاقي الvalidation error بدأ يزيد كده لا انا هstop هنا هstop training  هنا. قبل ما انت خلي بالك ما هو الرسمة دي احنا عارفينها من زمان اللي هي بتاعة الoverfitting ان انت الvalidation error الtraining error بيقل لحد ما يوصل لصفر. لكن الvalidation error ده اللي بيعرفني فيه overfitting ولا? عمال يقل يقل يقل تمام. اول ما هلاقيه هيبدأ يزيد اعرف ان هنا دي بداية الoverfi.
فعمل early stopping هنا واوقف training  فهنا دي اول طريقةللearly stopping ان انا اعرفها من خلال الvalidaion accuracy تمام? طيب. تاني حاجة ان انا اعرف من الmax depth يعني اروح ارسم كده plot. 
الplot ده اكون بغير في الhyperparameter اللى هو بتاع
الmax depth بتاع الشجرة واختار اللي هو ما قبل ان انت توصل لصفر كده. فتختار يعني دايما بقول عند التانية التانية. يعني الgraph بيبقى فيه تانيتين كده. هو بيبقى عند التانية.
تانية اللي هي الpending. الثانية اللي هي second. تمام? فهي دي المكان الانسب وده الmaximum depth. الانسب ايه الmaximum depth ده? الmaximum depth اللي هو الhyperparameter اللي بتبعته للfunction بتاعت الdecision tree علشان تحدد لك الdepth بتاع الtree. تمام? فدي تاني حاجة بعمل عليها early stopping اللى هو اقوله اول ما توصل للdepth ده من الtree.
وقف خلاص. تمام? طيب. آآ تالت حاجة في الearly stopping يعنى اللي هو آآ او تاني حاجة بقى يعني هم هنا بيعتبروا الاتنين دول حاجة واحدة واحدة بتعتمد على ال validation error والتانية بتعتمد على الmax depth اللي هو آآ hyperparamete
ثاني حاجة بقى ان انا استخدم الclassification error عشان أlimit الdepth. وده ازاي? الclassification error احنا كنا قلنا اللي هو عدد الmistakes  على عدد الsamples كلها. اه فانا بروح اجيب هنا اجيب ال classification error لهنا  ال classification error.
لما بclassify على الterm classification error لما بclassify على income  دول كلهم ايه? دول كلهم اه features يعني. واروح اشوف الclassification error لو لقيت ان انا انا الشجرة مثلا بتاعتي عملت هل الشجرة مكملة تحت? لا. ماشي. انا مثلا الشجرة بتاعتي عامل على الcredit. بعد كده هنا splitting عملت على الterm. اللي هو
الterm ده اللي هو الfeature التانية وبعدين عملت splitting على الincome والله جيت شفت الشجرة الclassification error بتاعها لما ما حصلش splitting ولا على الterm ولا على الincome يعني هي كده بس لقيت إن الclassification error بتاعها 0.24 عملت splitting على الterm لقيته برضو نفس الerror عملت splitting على الincome لقيته نفس الerr
فخلاص لا هعمل early stopping ومش هsplit ولا على الterm ولا على الincome ومش هعمل splitting وهقف هنا. مدام ده طلع لي نفس الerror. الerror ما بيتغيرش وبالتالي الdepth الزيادة ده ملوش لازمة وملوش معنى غير ان هو هيعمل لي بس اه overfitting تمام? اه فانا هنا خلاص اه
هوقف. طيب. لقيت ان هو بيحسن لي. خلاص. يبقى انا تمام. فهو بيقول لك no splits هتimprove الclassification error هو ثابت. مدام ثابت يبقى ما splitش على الفاضي. تمام? طيب. تالت condition او تالت حالة بقى. للearly stopping ان انا
اوقف اوقف لما عدد الsamples يبقى وصل ان هو قل فى node يعني ايه يعني ايه انا دلوقتي عندي هو بsplit لما لقيت اني مثلا فيه node هنا اللي وصل لها
3 points بس خلاص مش هsplitها تاني هstop recursion عند الnode دي ليه؟ لان الsamples اللي واخدها قليلة قوي ملاش معنى مش مؤثرة في القرار فالsplitting بتاعها هو مجرد splitting زيادة هيسبب لي overfitting ومش هيديني عائ
ليه? لان دول يا دوبك. تلاتة rows. ما لهو مش معنى. لا انا المهم ان انا اركز بقى على 21 الrow دول وال16 row دول. فساعتها بوقف early stopping عند الnode دي. اهي ان دي خلاص بتبقى  leaf node. وبقول ان هيا risky خلاص دي leaf node. وعملت وقفت هنا وعملت early stoppin.
ليه علشان عدد الsamples اللى فيها دى قليلة اقل من threshold معين انا حطه هو threshold بتاع الearly stopping ده اللي هو اقل من اللي هو الاسمه n minimum اللي هو اقل عدد samples ممكن تكون موجودة في الnode عشان ماقفش عندها ده hyperparameter انت اللي بتحدده واخد رأيك فيه وبتبعته للفي
ساعتها بعمل early stopping عليه. تمام? طيب. يبقى الearly stopping ليه تلاتة conditions. اول حاجة ان انا بوقف بناء على الvalidation error اللي هو ان انا لlimit الtree depth عن طريق الvalidation error ان انا بشوف الgraph بتاع الvalidation واول ما يبدأ يزيد اعرف ان كده هيحصل overfitting فوقف هنا.
وفي نفس الوقت ان انا بlimit الdepth وده hyperparameter اللي هو أlimit ان الtree تبقى كبيرة قوي وعميقة طيب ده اول حاجة اول condition تاني condition بناء على الclassification error ان انا بlimit لما بلاقي الclassification error ثابت بين الsplitting فلو لقيت split وما قللتش الclassification error وفضل ثابت يبقى الsplit دي ملهاش لا
تالت condition ان انا بminimize بوقف عند الnodes اللى عندها عدد samples قليل اقل من ال N minimum  الN minimum دى hyperparameter 
انا اللى بحطه فبقوله ان اى node حتى اسمها فى skite learn  n split
يعني. آآ الـ N-Split دي اللي هي Minimum number. اللي هو انت اقل رقم انت هتحط رقم. لو في node فيها samples عددها اقل من الـ N-Minimum دي. وقف الـ Recursion عندها وما تـ Splitش تاني علشان دي Split ملاش لازمة بتزود لي الـ Depth وتزود لي الـ Overfitting على الفاضى.
تمام? طيب. هنا بيراجع على ال greedy algorithm بتاع الdecision tree. ان انا بعمل ايه? بstart with an empty tree بselect الfeatures و بrecurse على الsplitting  بس هنا انت واخد بالك ان احنا زودنا شوية conditions في الearly stopping في الbase case يبقى هو هيوقف امتى? والله هو هيوقف. اللى هى الbase case بتاع
لو وصل Leaf node دي اول base case او ايه اللي حصل او حاجة بقى من التلاتة conditions بتقول early stopping ان هو عدد الsamples بتاعته بقى اقل من الN minimum او الclassification error ما تغيرش وثابت بعد ال split او ان الvalidation error بدأ بعد ما كان من قليل بدأ يزيد او ان ال
الdepth وصل للdepth اللى انا حطتهوله hyperparameter ال maximum depth ساعتها كل دول اه حاجات هيوقف عندها الrecursion  تمام طيب. طبعا how to select الsimpler tree simpler tree هي احسن اللى هى اقل dep
عشان مش هتعملى overfitting فا فى انى انا اعمل early stopping ان انا اوقف ال tree يعنى و ال pruning بيعمل ايه يعنى هديك بس مقدمة ليه قبل ما نبدء ال pruning بقى مبيعملش early stopping لا هو بيبنى الtree وبيخلصها للاخر
وبعد ما بيخلصها للاخر بيرجع بقى لورا كده بيمشي يtraverse الtree باستخدام الDFS depth first search فانت تبقى بtraverse الtree من الdepth فانت معاك الnodes من الاخر يشو
الnode دي لها لازمة ولا ملهاش؟ لها سيبها ملهاش؟ شيلها بس ده اللي بيعملو الpruning يعني الpruning بيعمل ايه؟ بعد ما بيبني الtree بشكل كامل بيمسح منها الnodes اللي ملهاش لازمة بيمسح الsplittings اللي ملهاش لازمة بس بعد ما بيبنيها بالكام
لكن الearly stopping هو بيقف لما بتحصل الconditions مش بيكمل البناء للكامل. ودي احد الdisadvantage بتاعت الearly stopping. ان انت وقفت. بس انت ما تعرفش انت كان ممكن لو كنت كملت كان يبقى في حاجة مفيدة جدا فايتاك. الpruning بقى بيحل المشكلة دي. ليه? لان هو بنى الdecision tree بنى الtree بالكامل.
فهو معاه كل المعلومات وعارف كل حاجة. فيشيل بقى اللي مش مهم. عمره ما هيبقى في حاجة فاتته. لان هو شاف كل حاجة بس بيشيل الحاجات اللي مش مهمة بس. تمام? هنا بيراجع اهو اه الearly stopping اللي هي الcondition دي بيقول لك اهو ايه الpros ان هي بتavoid الuseless splits وبتearly stop عليها.
الcons ان هي too short sighted انت عندك رؤية قليلة ليه لان انت وقفت ممكن اللي جاي ده وانت ضيعته يبقى مهم بالنسبة لك مش useless تمام الpruning  لا الpruning هو عايز simpler tree مش عايز complex tree فهو بيعمل ايه
يعني الearly stopping كان بيبني واول ما يوصل للsimple tree بيوقف عند الconditions دي لكن الpruning بيبني complex tree بيبنيها كاملة كاملة متكاملة بعد كده بيروح يشيل منها الحاجات اللي ملهاش لازمة لحد ما يوصل للsimpler
tree. اهو ده هنا شوية motivations طيب. which tree is simpler. طبعا انت باين ان tree دي simple اكتر من دي. طيب. طبعا مش بالكلام كده. في حاجة بتحسب لنا.
الtree دي simple قد ايه يعني فيه factor بيأثر في الsimplicity بتاعت الtree اللي هي اسمها L of T L of T دي تعتبر زي كأنها كده ال complexity بتاعت الtree عندنا هنا في decision tree هي عبارة عن ايه عبارة عن الnumber of leaf nodes كل لما عدد leaf nodes زاد
كل ما الtree بقت complex اكتر. وكلما عدد الleaf nodes قل الsimplecity بتاعت الtree زادت اكتر. تمام? طيب. فانا بدور عالsimpler اللي هي عندها lower L of T اللي هي عدد الleaf nodes اللي هي هنا 2. ودي اتوقع ممكن تيجي في الامتحان. طيب. حلو.
اوى. حلو اوى. طيب. ركز عشان الحتة دي اه انا متوقعة تيجي في الامتحان. انا دلوقتي في الpruning او فى ايا كان اه بس في الpruning  بالذات يعني. انا دلوقتي عندي trade off  انا محتاج او او محتاج اوازن بين ايه?
اوازن اني الtree متبقاش simple قوي قوي قوي لدرجة انها تunderfit الdata انا عايزها تfit كويس الdata فانا عايز ان هي تكون بfit كويس وفي نفس الوقت مركز مع الcomplexity بتاعت الtree ان هي ما تبقاش زايدة قوي فيحصل overfit
فانا الـ total cost بتاعي عبارة عن حاجتين عبارة عن ترمين او جزئين الجزء الاولاني الmeasure of fit والله الشجرة بتاعتي بتfit الdata قد ايه فاهمة الdata قد ايه ومتعلمها قد ايه وده عبارة عن الclassification error
اللي هو الnumber of mistakes على الtotal samples وطبعا كل كل لما يبقى ده عالي معناه كل لما classification error ده يبقى عالي معناه اني bad fit ان في مشكلة طيب التانية بقى measure of complexity ليه الcomplexity بتاعت الtree وانا قلت لك هنا الcomplexity بتاعت الtree بتحسب ازاي
بالnumber of leaves كل لما number of leaves ده بقى large معناه انه likely to overfit فانت بحتاج تbalance بين الاتنين دي لو قلت يحصل underfitting دي لو قلت يحصل underfitting ولو زادت يحصل overfitting فانت بتحتاج تbalance ما
فهو الtotal cost بتاع الdecision tree هو عبارة عن حاجتين error of t اللي هو classification error اللي هو عدد الmistakes على عدد samples زائد اللي هو الcomplexity اللي هي number of leaf nodes تمام هنا بقى هنتكلم ازاي نbalan
بنbalance عن طريق ان احنا بنعمل regularization عن طريق ان احنا فى الterm بتاع الcomplextiy بنروح ضاربين lamda الlamda دى اللى هى ايه ده hyperparameter انا بtuneه بtune الparameter ده اللى هى اللى اسمه الregularization term لو خليته بصفر كده انا لغيت ال regularization
وده كده decision tree من غير أي regularization أو من غير أي balancing لو خليته بinfinity ساعتها أنا لغيت الـ error بتاع الfitting فساعتها يحصل underfitting لو خليته in between كده حصل balancing أخلي بالك أن لو خليته صفرا كده لغيت regularization فيحصل overfittin
لو خليته imbalance بقى في النص فساعتها هيبقى good fit وgood complexity يحصل generalization كويس الtree pruning زي ما قولنا ان انا دلوقتي بنيت الtree بالكامل بشوف برجع بtraverse بtraverse ايه بايه DFS depth first search فانا بشوف اخر حاجة اخر node اخر node هي الterm
بشوف دي كده candidate for pruning pruning يعني حرق احرقها وايه وارميها واطلعها برا الشجرة مش عايزة لا. اشوف هي مهمة ولا لا. فاشوف هي مهمة ولا لا ازاي? عن طريق ان انا اخد بقى خلاص الnode دي هروح احسب لها. هحسب الerror الtotal error.
للtree بيها وهي موجودة. فحسبت الerror والnode دي موجودة. آآ طلعلى لي ب0.43. طيب. هحسب الerror وهي بقى مش موجودة ايه? يعني بعد ما انا شلتها اياه. بص هي كانت موجودة ايه? كده without pruning كده الشجرة كاملة. هجرب اشيلها اعملها pruning واشوف الerror.
والله الerror لقيته 0.41 اه معنى كده ان الerror هنا الerror هنا لما انا رحت شلت دي الerror بقى افضل بقى افضل
معنى كده ان بيها الerror اعلى. يعني والnode دي موجودة الerror اعلى. لما شلتها الerror بقى اقل. وبما ان الerror بقى اقل فاحسن. فكده هي هتعملها pruning معنى كده ان هي node ما كانش ليها لازمة و splitting مالوش لازمة كان بيأثر بالسلب عن طريق ان هو بيزود الerror عشان بيلغبط
model تمام? طيب. اهو بيقول لك ان مادام lower فساعتها هprune دى تمام? وهاreplace مكانها بايه? هاreplace مكانها بleaf node بس هتreplace مكانها بان هي اه yes اللي هي مكان الnode اللي كانت موجودة هنا ومعمل لها splittin
هي وانا كان معمولها splitting لا انا هنا هعتبرها leaf node عن طريق ان انا هشوف الincome لما كان high هنا كان كم وكم فنفترض ان هنا كان 5 بيقولوا safe و2 بيقولوا risky فكده خلاص دي هتبقى leaf node وبتقول safe وانت هنا. تمام? طيب. لو
طيب نفترض بقى خلي بالك او هنا بيقولك ملحوظة انا ممكن اروح اشيل ممكن اروح اشيل node الnode دي تعملي worse في الtraining error يعني الerror يزيد يزيد بتاع الnode دي
لكن الoverall cost يقل. ساعتها اشيلها لو عملها pruning عادي. محتاج تفهم دي. يعني انا دلوقتي لو انا عندي هنا node. وانا حسبت له هي نفسها عندها الerror. يعني انا قبلها هنا حسبت الerror. مش الtotal مش الCT ده. لأ. انا رحت حسبت الerror بتاع الnode ده. لقيت انه هو بيقلل لي الerror.
فكده كويس طيب ليه عملت لها pruning علشان لقيت اني على قد ما هي بتقلل الerror عندها هي على قد ما total error اللي هو CT وهي موجودة هو اسوأ وبالتالي انا لازم اشيلها علشان الcost ده يقل تمام طيب
بعمل ايه بrecurse بقى بrepeat نفس الsteps ان انا بعمل ايه بDFS بعد ما شيلت الnode دى بشوف اخر node نفترض ان اخر node هما ال 2 أدى اخر node لقيتها دى فاخر node اشوفها هجرب بيها اشيلها ومشيلهاش واشوف الCT اللى هو الtotal error اشوفه قل
ساعتها خلاص هعملها pruning واشيلها طب ماقلش يعني فضل نفس الerror الtotal error بالظبط ساعتها هتعمل ايه هتشيلها برضو وتعملها pruning ليه رغم ان الerror ولا زاد ولا قل هي نفس الحاجة علشان هي split كده ملهاش لازمة فهتعملك overfitting على الف
فانت امتى تعمل pruning لما الCT لما تجرب تحسب الCT لما تشيل الnode وما تشلهاش لو لقيت انك لما شلتها الerror قل او فضل زي ما هو يبقى كده perfect الnode دي ملهاش لازم محتاجة يحصلها pruning وتتش
شال لو لقيت ان الerror زاد ساعتها لا انت كده شلت حاجة ليها information gain وحاجة مهمة وبالتالي ما ينفعش تعمل للnode دي pruning فتسيبها زي ما هي. تمام? كده الalgorithm ان انت بتcomputer الtotal cost وبتخليه الاقل. لو هي بتقلل او equal خلاص زي الفل. لو مش بتقلل بتعمل recurse وتprune تاني.
وتشيلها كده خلصنا المحاضرة دي شكرا يا شباب