IoT_Lecture_5_by_Hindih_(1)
هنبدأ lecture 5. أول حاجة lecture بشكل general بتتكلم إن إحنا بيبقى عندنا resources مختلفة، بنعمل receive لـ data منها والـ data دي بتبقى بـ formats مختلفة، هنعرف إيه هي الـ formats اللي إحنا بنعمل represent لـ data منها. وبعدها هنعرف إزاي نستخدم الـ data دي في الـ machine learning سواء supervised أو unsupervised.
إن إحنا نعمل clustering أو classification أو prediction. 
أول حاجة إحنا بيبقى عندنا sensors كتيرة بـ types مختلفة من الـ sensors، 
كل type بيعمل measure أو بيـ receive data بـ format مختلفة عن التاني، يعني مثلاً إحنا دلوقت عندنا temperature sensor.
Temperature sensor و pressure sensor و wind speed sensor، 
التلاتة بيعملوا receive للـ data بس بـ formats مختلفة، تمام؟ فإحنا دلوقت بيبقى عندنا مجموعة sensors كتيرة، فلو مثلاً هنعمل weather detection application، هيستخدم أكتر من نوع sensor واحد. فالـ sensors دي برضه هتبقى متوزعة في أماكن كتيرة وهتجمع data.
كميات كتيرة، فـالـ data دي إحنا عايزين نعمل لها representation بشكل readable وبشكل simple ونقدر نعمل عليها processing بسهولة. دلوقتي إحنا عندنا sensors متوزعة في أماكن كتيرة بتجمع data وبتبعت الـ data دي للـ server، فلنفترض إن إحنا عندنا table.
فيها 50 مليون record لـ data، هل إحنا هنعمل save للـ data دي في hard disk واحد؟ إحنا نقدر نعمل كدا، بس لما نيجي نعمل لها retrieve تاني للـ data هياخد وقت، وهيعتمد على الوقت اللي الـ data دي بيحصل لها retrieve من الـ hard disk نفسه.
فإحنا الأفضل إن إحنا نعمل إيه؟ إن إحنا نقسم الـ data دي على أكتر من hard disk، 
بحيث إن إحنا لما نيجي نعمل retrieve للـ data، كل hard disk يرجع جزء من الـ table ونعمل لهم retrieve in parallel، بحيث إن إحنا نوفر الوقت بشكل general، نوفر الوقت اللي بنعمل فيه retrieve للـ data.
أول نوع من الـ formats للـ data هو الـ text format، دا أكتر نوع simple، هو ببساطة file وفيه text تقدر أي programming language إنها تستخدمه تعمل read أو write 
للـ file دا، هو زي message كدا يعني. تاني نوع هو الـ CSV file.
أو الـ Comma Separated Values. تمام؟ دا اللي بنستخدمه في الـ Machine Learning وفي الـ Python بشكل عام لما نيجي نعمل predict مثلاً لـ house price prediction، بيبقى عندنا أكتر من input column أو input features وبيبقى فيه records of data. تمام؟ packages كتيرة في الـ Python بتدعم إن إحنا نعمل read.
و write للـ CSV file بس هو بيبقى ليه شوية rules. دا شكل الـ CSV file، إحنا دلوقتي عندنا تلاتة column
 Name و Age و City. بيفصل بين الـ columns دي comma. وبعدين هنـ insert 
الـ records المختلفة للـ columns.
وكل value على حسب الـ column اللي هي فيه، كل value بيفصل بينها وبين الـ value التانية comma. طب فيه حاجة دلوقتي ممكن تعمل مشكلة، إن إحنا دلوقتي لو عندنا الـ value نفسها الـ comma جزء منها، يعني لو الـ comma زي في الـ string دا، هنا الـ comma جزء من الـ value، فهما إزاي هيميزوا إن الـ comma دي جزء من الـ value؟
أو إن هي separator بتفصل value عن التانية. المفروض بقى في الحالة دي إن إحنا نستخدم الـ escape character. إحنا هنا استخدمنا double quotes بحيث إن إحنا نميز إن
 الـ comma دي جزء من الـ value مش separator يعني. وفكرة الـ...
CSV file لو هنعمل حاجة manually يعني، فـصعب إن إحنا نـ insert 
column جديد لو عندنا عدد records كتيرة، فـاللي هو هنضطر إن إحنا نعدل كل record،
 فدي برضه من الحاجات الصعبة في الـ CSV file. فيه برضه في الـ Python CSV module، دا معمول للـ CSV files بس، ونقدر كمان نستخدم الـ NumPy library للـ CSV files بس هي
 بتـ support الـ numerical values بس.
يعني لو فيه string values مش هينفع نستخدمها. تالت حاجة طبعاً الـ Pandas بنستخدمها في الـ CSV files. هنا الـ Excel file بيبقى supported بـ packages كتيرة من
 الـ Python زي الـ openpyxl أو Pandas بحيث إن إحنا نقدر نعمل حاجات...
أو representations أو visualization للـ data مشابهة للي إحنا بنستخدمه في
 الـ Python. مثلاً لو عايزين نعمل charts للـ data أو نعمل report، عندنا مجموعة features و output عايزين نعملهم visualization بـ charts مختلفة نقدر نستخدم الـ Excel file في دا. دا example، إحنا دلوقتي عندنا two records.
two columns من الـ data ليهم records مختلفة عايزين نعمل لهم representation في chart فاستخدمنا الـ Excel عادي. آخر نوع هو الـ JSON format 
أو الـ JavaScript Object Notation. النوع دا من الـ data representation بيستخدم أكتر في الـ Web والـ Mobile applications لأن هو ليه simple structure.
في نوعين من الـ represent للـ data، يعني بيبقى supported بـ packages في
 الـ Python زي package JSON، دي بنستخدمها للـ JSON files في الـ Python. ونقدر نستخدم Pandas عشان read و write الـ JSON. هو الـ JSON ليه structure، إحنا هنشوف الأول الـ structure.
اللي إحنا بنـ represent بيه الـ JSON وبعدها هنشوف examples للـ JSON. 
دا الـ structure بتاع الـ JSON object. أول حاجة لما نيجي نـ create 
object من الـ JSON بنبدأ بـ curly braces. بنبدأ بـ curly braces.
braces...
بعدها white space، الـ white space دا ممكن يبقى new line بعد الـ curly braces نعمل new line أو horizontal tab أو يبقى space عادي تمام. بعدها الـ string، 
الـ string دا بيمثل لي الـ key في الـ object إحنا بيبقى عندنا key و value، فهنا هنعمل string.
اللي هو بيبقى الـ key، تمام؟ بعدها بننزل نعمل white space تاني. بعدها بنعمل colon، بعدها بنعمل value. الـ value دي ممكن تبقى string، ممكن تبقى number،
 character، 
boolean، أي نوع من أنواع الـ data types اللي إحنا نقدر نستخدمها للـ value.
طب إحنا عملنا key و value واحدة في الـ object، وعايزين إن إحنا نقفل الـ object، هنقفله
 بـ curly braces. طب إحنا عايزين نكمل تاني ونكتب key و value تاني ونزود records تانية للـ object، هنرجع تاني هنا، هنرجع تاني نعمل comma.
وبعد الـ comma هنعمل white space و string بعدها white space و colon 
 value. عايزين نـ stop هنقفل بـ curly braces، عايزين نكمل هنرجع نعمل comma تاني. طب هل ينفع إن إحنا نعمل comma وبعدها نقفل بـ curly braces؟ لا، لأن الـ comma
 بتـ indicate إن إحنا هنـ create أو هنضيف record تاني، فمينفعش نعمل comma وما نضيفش record بعدها.
دا في الـ structure. دا بقى الـ array structure في الـ JSON.
 أول حاجة بنبدأ بالـ square brackets، بعدها الـ white space، بعدها بنعمل value
 أو ممكن نبدأ بالـ square brackets.
square brackets، بعدها value، لو عايزين نضيف value تانية هنرجع نعمل comma ونضيف value، ونرجع نعمل comma لو عايزين نفضل نضيف values يعني، تمام؟
 مش هنضيف values تاني وخلاص هنـ stop الـ array على كدا، هنقفل بـ square brackets برضه. هنشوف example دلوقتي.
دا example لـ JSON file. أول حاجة عملنا object بدأناه بـ curly braces، 
curly braces. دا الـ string اللي بيمثل لي الـ key، تمام؟ وعملنا colon. هنا ما استخدمناش white space، ممكن نستخدم white space عادي.
وبعد الـ colon عملنا value، الـ value دي كانت string. هنا هنكمل values تانية
 فاستخدمنا comma بعدها عملنا key colon value، الـ value هنا كانت number، بعدها comma 
key value كانت string.
بعدها is student، الـ key
 is student،
 colon، false.
 false دا boolean، boolean data type. بعدها comma، هنا استخدمنا array، 
الـ grades،
 colon، عملنا square brackets، value 
comma، استخدمنا هنا...
white space عادي، وبعدين value، comma، value، 
comma، وبعدين قفلنا بـ square brackets و comma وهكذا. ونقدر نستخدم في
 الـ JSON object جوه الـ object برضه، يعني هنا استخدمنا الـ address كـ object عملنا curly braces.
وبعدين عملنا insert لـ key و value مختلفين، وفي الآخر مش هنـ insert حاجة تانية فمفيش comma في الآخر، يعني مفيش comma فـمش هنـ insert حاجة تانية. وكذلك هنا مش
 هنـ insert حاجة تانية فمعملناش comma. دي rules الـ values في الـ JSON file، إن إحنا نعمل white space أيًا يكن بقى نوع الـ value إيه، وممكن نستخدم null على فكرة كـ value، نكتب null.
وبعدين white space تاني. بالنسبة للـ rules اللي في الـ string، 
إحنا بنبدأ بـ double quotes وهنكتب الـ text أو الـ string اللي إحنا هنكتبه تمام؟ بس فيه بعض الحاجات أو بعض الـ special characters اللي إحنا مش هنينفع نكتبها.
بين الـ double quotes من غير ما يكون فيه escape character زي الـ backslash مثلاً، تمام؟ يعني إحنا لو عايزين نعمل double quotes
 inside الـ double quotes هنعمل backslash double quotes وكذلك الـ characters دي برضو.
لما نكتب number في الـ JSON بيبقى ليه rules. إحنا ممكن نبدأ الـ number بـ negative، تمام؟ بعدها نمشي نكتب أي digit إحنا هنكتبه، تمام؟ ولو هنكمل نكتب digit تاني.
نكتب digit عادي، لو عايزين نبدأ الرقم zero وعايزين نعمل fraction، 
نستخدم يعني نكتب fractions في الـ number، بس لو هنكتب fraction فلازم نستخدم
 الـ dot وبعدها الـ digit وكمان الـ numbers في الـ JSON بتـ support الـ exponent.
تمام، ودا الـ white space، الـ white space ممكن يبقى space،
 life line
new line، ممكن يبقى أي حاجة من الحاجات دي. دلوقت بقى في جزء الـ Machine Learning هنشوف الـ types المختلفة والـ algorithms اللي إحنا بنستخدمها عشان 
نـ process الـ data اللي إحنا جمعناها من..
الـ IoT و sensors وكدا. أول حاجة الـ Supervised Learning. 
فكرة الـ Supervised Learning إن إحنا بيبقى عندنا مجموعة features، مجموعة column features وبيبقى عندنا output فإحنا عندنا equation عايزين نعدل في الـ equation دي بحيث إن إحنا نـ map الـ input للـ output أو نعرف نـ predict بشكل صح.
يعني في الـ example دا هو مديني الـ Y output، اللي هي 1 و 4 و 9 و 16 و 25. 
الـ series دي هو عايز يـ predict الأرقام اللي بعدها، تمام؟ فالمفروض الـ input هنا هو 
الـ index، فياخد الـ index ويعمله square وبعدها يعني بعد ما يعمل square للـ index 
هيـ predict الأرقام اللي بعدها.
فهو عايز يعمل الكلام ده بالـ Machine Learning. فـدا الـ example اللي الدكتور شرحه
عندنا مجموعة Xـات،
 X feature واحدة تمام؟ sorry، مجموعة records يعني، وعندنا Y output.
"لمفروض دا.. دا الـ input ودا الـ actual output.
 فهو هنا لما عمل الـ line، الـ line blue دا بيمثل الـ line اللي بيـ fit الـ actual output تمام؟ وهنا الـ predicted output، دا الـ output اللي إحنا عاملينه predict،
 الـ line red دا بـ represent الـ output اللي إحنا عاملينه predict.
"فالمفروض دا.. دا بيمثل لي Linear Equation، اللي هي mx + b. فإحنا المفروض هنفضل بقى نعدل في قيم الـ m وقيم الـ b بحيث إن إحنا نوصل لـ line بيـ fit الـ data بأقل error.
يعني اللي كان فات دا فكرة الـ Linear Regression يعني. تاني حاجة الـ Unsupervised Learning، الـ Unsupervised Learning هو بيديني الـ المجموعة الـ features، الـ column features بس مابيدينيش target بيبقى الهدف إيه إن أنا أشوف الـ data.
اللي في بينهم similarity وأقسمهم في groups أو أعمل لهم clustering، يعني أعمل clustering للـ data اللي في بينهم similarity. تمام؟ 
زي هنا هو هنا عندنا 8 circles مديني 2 features 
زي الـ radius و الـ color، فالمفروض أستخدم الـ features دي وأطبق مثلاً 
الـ K-means algorithm دا اللي بيبقى في الـ Unsupervised Learning بحيث إن أنا أعرف إيه هي الـ similarity اللي بين...
إيه الـ data اللي في بينها similarity وأقسمهم في groups. أول algorithm في
 الـ Supervised Learning هو الـ Linear Regression algorithm. 
إحنا بيبقى عندنا مجموعة X features وعندنا Y output،
 فإحنا الـ Y دا الـ output بيبقى continuous value تمام؟ مش discrete،
 لو discrete هيبقى حاجة category و classification.
فهو بيبقى continuous. إحنا دلوقتي المفروض عندنا Linear Equation إن إحنا نـ map منها الـ input للـ output، تمام؟ لو إحنا عندنا X feature واحدة فدا اسمه Simple Linear Regression. لو عندنا أكتر من X feature فدا Multiple Linear Regression.  
دي الـ function اللي إحنا بنستخدمها في الـ Linear Regression.
"الـ.. دوت الـ w0 دا بيمثل لي الـ Bias، الـ Bias دا اللي هو الـ y-intercept، 
اللي هو لما أرسم الـ Line اللي بـ fit الـ Data، هل هيمر بـالـ Origin أو هو هايبقى على.. هياخد Values من الـ y يعني، دا بيمثلي الـ y-intercept، تمام؟ Plus
 Summation.
الـ X_ij والـ W_i، اللي هو الـ X في الـ Weight. الـ X_ij، الـ d دا بيمثلي عدد الـ X features. يعني إحنا زي ما قلنا لو استخدمنا أكتر من X feature، مثلاً عندنا 3 
columns features أو أيًا يكن عدد الـ column features كام، فدا بيمثلي عدد الـ column features وكل X هتتضرب في الـ Weight أو الـ W بيمثل لي الـ Slope بشكل عام.
دي Equation اللي هي بنستخدمها في الـ Linear Regression يعني.
 الـ Objective function أو الـ Error function هو هنا بيستخدم الـ Squared Error، بيشوف الـ Y Target تمام والـ Y Actual اللي هو أنا عملتله Predict، ويطرحهم ويجيب
 الـ Square ويعمل Summation لكله. دا مش الـ Mean Squared Error.
لو هاجيب الـ Mean Squared Error هيقسم على عدد الـ Records.
 دا الـ Squared Error في الـ Objective function. طب إحنا دلوقتي حسبنا الـ Error وعرفنا إن مثلاً.. إحنا الأول افترضنا قيم Random للـ Weights دي، لو أنا عندي مثلاً Feature واحدة...
فأنا عندي Bias و Weight 1 تمام؟ فأنا افترضنا قيم Random ليها، فأكيد الـ Value اللي هو هيطلعها مش هتبقى Accurate كفاية إن هي تعمل Line يـ fit الـ Data
 بـ Minimum Error. فإحنا هنحسب الـ Error ومحتاجين إن إحنا نعمل Update للـ Weight دا. فدي الـ Equation اللي هو بيعمل بيها Update للـ Weight.
X transpose في X، تمام؟ هيجيب الـ X features أو الـ Matrix للـ X columns، 
لأن في الآخر الـ file بيبقى عبارة عن X features ومجموعة Records، فـ Matrix.
 هيجيب الـ Matrix دي الـ Transpose ويعملها Multiplication في الـ Matrix نفسها، ويجيب الـ Inverse للـ Matrix
بعد ما يجيب الـ Inverse للـ Matrix دي هايعملها Multiplication في الـ X transpose، Multiplication في الـ Y output تمام؟ الـ Y output اللي هو الـ Label نفسه مش الـ Y اللي إحنا عاملينه Predict. بس في مشكلة هنا إن مش كل Matrix...
ليها Inverse، تمام؟ مش كل.. يعني مقدرش أجيب الـ Inverse لكل Matrix.
 فـالـ Equation دي هتبقى Valid في حالة إن الـ X transpose multiply X ليها Inverse. تمام؟ ففي شروط إن الـ Matrix دي يبقى ليها Inverse أول حاجة إن الـ Determinant بتاع الـ Matrix دي ميبقاش بـ Zero.
تمام؟ تاني حاجة إن الـ Matrix دي تبقى Square Matrix، يعني.. يعني تبقى Matrix Square عدد الـ Rows قد عدد الـ Columns اللي فيها. تمام؟ جبنا الـ Inverse بتاع 
الـ Matrix هنعمل له Multiplication في الـ X transpose، Multiplication في الـ Y، دا هيديني قيمة الـ Weight الجديد.
طب كـ Inverse Matrix، إحنا إزاي هنجيب الـ Inverse للـ Matrix؟ لو الـ Matrix
2 في 2، الـ Matrix دي 2 في 2 هي a و b و c و d. هنجيب لها الـ Inverse إزاي؟ 
الـ Inverse بيبقى 1 على الـ Determinant للـ Matrix ضرب الـ Adjugate للـ Matrix.
الـ Determinant للـ Matrix إحنا هنجيبه إزاي؟ إحنا هنضرب الـ a في الـ d 
minusالـ b في الـ c، تمام؟ دا الـ Determinant.. يعني معروف الـ Determinant بنجيبه إزاي للـ Matrix؛ a في d 
multiply  الـ b في الـ c، فدا الـ Determinant للـ Matrix، هنعمل 1 على الـ Value دي.
طب الـ Adjugate للمـ Matrix.. الكلام دا لو Matrix
 2 في 2. الـ Adjugate للـ Matrix هنجيبه إزاي؟ هنبدل الـ two values دول، 
هنبدل الـ d والـ a، تمام؟ وهنغير الـ هنغير الإشارة في الـ two values دول.
يعني لو هي positive هنخليها negative، ولو هي negative هنخليها positive.
يعني هنعمل change للـ position بتاع الـ diagonal، وهنغير الـ sign الموجودة عند كل value من الـ values دول، فدا هيبقى الـ Adjugate. هنعملهم multiplication يبقى كدا جبنا الـ Inverse للـ Matrix.
لو أصلاً الـ Determinant بـ zero فإحنا مش هينفع نقسم على zero، تمام؟
 فكدا مش هيبقى الـ Matrix ليها Inverse. طب لو الـ Matrix 3 في 3 إحنا هنمشي بنفس
 الـ rule هي 1 على الـ Determinant 
multiply 
الـ Adjugate تمام؟ بس هنعملها إزاي الأول؟ هنجيب الـ Determinant للـ Matrix
هنتأكد إن هو مش بـ zero، تاني حاجة هنعمل transpose للـ Matrix، وبعد ما نعمل transpose للـ Matrix هنجيب الـ Determinant لكل 2D minor matrix
في الـ Matrix دي، تمام؟ يعني هنا هناخد مثلاً أول الـ values دول، هنجيب يعني 
الـ Determinant بالطريقة اللي إحنا بنجيبها، تمام؟ لكل 2D matrix. بعد ما جبنا
 الـ Determinant لكل.. لكل 2D matrix هنا.
هتعمل إيه؟ هنجيب الـ Adjugate. بس أول حاجة قبل الـ Adjugate هنعمل Inverse
 للـ Signs الموجودة في الـ Matrix اللي إحنا عملنالها Generate. يعني إحنا دلوقتي جبنا الـ Determinant لكل 2D Matrix هنجمعهم في Matrix واحدة. بعد ما نجمعهم في Matrix واحدة هنعمل Inverse للـ Signs.
بعد ما نعمل inverse للـ sign كدا إحنا جبنا إيه؟ الـ Adjugate. بعدها بقى إيه؟ 
هنكتب الـ Equation اللي هي 1 على الـ Determinant multiple الـ Adjugate وكدا جبنا الـ Inverse للـ Matrix. في حاجة، إحنا ممكن منعملش transpose للـ Matrix الأول، ونجيب الـ Determinant لكل 2D Matrix...
بعد ما نجيب الـ Determinant لكل 2D Matrix في الآخر نجمعهم في Matrix ونعمل لها transpose، وبعد ما نعمل لها transpose نغير إيه الـ sign أو نعمل reverse للـ sign دي عشان نجيب الـ Adjugate. فالـ Equation دي الدكتور قال إنه لو جابلنا لو جابلنا مثلا examples زيها في الامتحان...
هو إحنا ممكن بدل ما نعمل الـ Matrix ونجيب الـ Inverse والـ Transpose ونعمل Multiplication ونعمل الـ Equation دي، لا إحنا ممكن ناخد الـ Weights اللي هيبقى في الـ Choose، نجرب فيهم في الـ Values ونشوف الـ Weights اللي بـ fit الـ Target نفسه
تاني algorithm في الـ Supervised Learning هو الـ Logistic Regression. 
فكرة الـ Logistic Regression إن أنا بيبقى عندي input features وبيبقى عندي output، بس الـ output بيبقى category إن أنا بـ classify حاجة. لو هو Binary Classification فأنا بـ classify حاجة من two groups، لو هو أكتر من كدة فيبقى...
Multi-classification إن هو بيبقى عندي أكتر من group أو حاجة، أنا عندي الـ input بشوف دا بينتمي لأنهي category من الـ categories اللي عندي. يعني مثلاً لو أنا عندي مجموعة مدن وعايز أعرف هل كل مدينة دي safe إن الإنسان يعيش فيها ولا لا safe أو not safe، فدا في حد ذاته إنه هو classification أنا بـ classify
بناءًا على الـ input features أو الـ factors اللي أنا هعرفها عن الـ city دي، هـ classify هي بأنهي class فيهم، safe أو not safe. تمام؟ فلو هفترض إن أنا هفترض إن الـ safe ده
 بـ probability بـ 1، otherwise إن هي not safe فـ probability 0. فالفكرة إن إحنا هنستخدم الـ Sigmoid function هي 1 على 1 plus الـ e...
الـ e power 
minus الـ Linear Equation دي الـ Linear Equation 
Bias plus W transpose في X. فالمعادلة دي هتطلع Value في الرينج من 0 لـ 1. لو هي أكبر من 0.5 فدا هينتمي لـ Class 1، لو هي أقل من 0.5 فدا هيبقى لـ Class 0. يعني لو عن
 الـ City مثلاً Class 1 إنه هي Safe، و Class 0 إنه هي Not Safe.
هي هتبقى 0.5 في حالة واحدة بس إن الـ Equation دي الـ Value بتاعتها zero، ودا شكل
 الـ Sigmoid function إن هي في الآخر بتطلع Probability للـ Values دي موجودة في أنهي Class.
طيب إحنا دلوقتي عملنا Predict وعايزين نعرف الـ Predict ده صح ولا غلط، أو عايزين نطلع.. نعرف يعني قيمة الـ Output بحيث إن إحنا نعدل بقى الـ Values بتاعة الـ Weight عشان
 نـ Improve الـ Algorithm بشكل عام. فهنا الـ Loss Function مختلفة عن الـ Square Error اللي إحنا كنا بنستخدمه في الـ Linear Regression
هتبقى عبارة عن إيه؟ هتبقى عبارة عن الـ Y output في log الـ Y predict
 plus 1 minus Y output 
في log 1 minus Y predict. طب دوت ليه أصلاً؟ دلوقتي لو أنا عندي الـ output 
الـ الـ row feature نفسه...
المفروض الـ Output يبقى 1، فهنا الـ Y بـ 1. وأنا عملت Predict، الـ Value اللي أنا عملتلها Predict بـ 1 برضه. فكده قيمة الـ Term ده هتبقى بـ zero
 plus 1 minus 1
 بـ zero بخلاف أي حاجة في الـ Log هنا، تمام؟
فالفكرة إن الـ Output هيبقى بـ zero، وهنا الـ P دي بتمثلي عدد الـ Records
 أو عدد الـ Rows نفسها. طب لو هو الـ Output بـ zero وأنا عملت Predict مثلاً بـ 1،
 فهنا هيبقى zero multiple أي حاجة بـ zero وهنا...
أنا عملت Predict بـ 1، فهنا هييجي هنا 1 
minus 1 بـ zero، بس في حاجة بقى أنا عايز أضيفها
الـ Function دي مبتطلعش Accurate zero أو Accurate one، هي بتطلع Value بين
 الـ zero والـ one، فممكن يبقى.. لو هتطلع 1 هيبقى 0.
...
99 كتير يعني، لحد.. يعني Value قريبة جداً من الـ 1 بس مش 1. فهنا مفيش أصلاً log zero، فهنا 1 
minus 0.9 مثلاً، فهيبقى ليه Value، هيبقى ليه نسبة Error بس نسبة Error قليلة جداً. فالفكرة إن أنا بـ minimize الـ Error نفسه. فهنراجع عليها تاني...
يعني دا الـ y.. الـ y target ودا الـ y actual اللي أنا عملتله predict.
 هنا مش هيبقى actual zero أو actual one، 
هيبقى value بين الـ zero والـ one. فلو هو هنا المفروض 1 وأنا عملت predict مثلاً 0.0001 مثلاً، فهيبقى هنا الـ value هنا...
1 في لو الفالو دي هيطلع نسبة error بس هي لو 1-1 هيبقى الترم ده بزيو وهنقسم في الاخير على عدد فهيطلع لهم نسبة error بس نسبة error هتبقى بالerror. نسبة error هتبقى عيلة لو انا يعني الpredict اللي انا عاملها او الprobability قريبة من النسبة الactual او قريبة من value تاعت الclass نفسه.
إنما هنا في case إنه الـ y بـ 1 وأنا عملت predict قريب من الـ zero هايطلع نسبة error.
 فدي الـ Loss Function يعني. تالت حاجة الـ SVM أو Support Vector Machine.
 ده algorithm من algorithms الـ Supervised Learning، تمام؟
نستخدمه يعني معظم استخداماته بتبقى في الـ Classification. هي فكرته جت ليه؟ إحنا ممكن كان نستخدم الـ line عادي اللي بيفصل two classes من غير ما نستخدم الـ Support Vector Machine. بس هي الفكرة في إيه؟ لو أنا عندي data بالشكل ده وعملت 
line بيفصل...
فلنفترض هو مش هيبقى واضح اوي في الـ data دي، لأن هي في separate line بيعرف يفصل الـ data، بس لو في مثلاً value من هنا قريبة من الـ values اللي هي في 
الـ class التاني، أو إن هي مثلاً على الـ line، أو إن هي قريبة.. يعني قريبة من الـ values التانية أو إن هي في مكان مش عارفين نحدد هي مفروض تبقى في أنهي class أصلاً.
فده هيعمل لي مشكلة إن إحنا مش عارفين نـ Classify الداتا دي.. 
يعني موجودة في أنهي Class. فهو الفكرة في إيه؟ إن إحنا نستخدم الـ SVM
 هو فكرة الـ SVM بشكل عام إنه هيعمل Decision Line و هيشوف الـ Point...
الأقرب ليه من الـ Class ده مثلاً 
الـ class الـ Red. الـ Decision line ده هيشوف الـ Point الأقرب ليه اللي هي أقل Distance من الـ Class اللي هو مثلاً الـ Red، وهيشوف برضو الـ Point الأقرب ليه من
 الـ class الـ Blue وهيعمل عندهم Lines. يعني هنا الـ Point دي هيعمل Line عند الـ Point دي.
هيشوف الـ Point دي وهيعمل Line. الـ Two lines دول بيبقوا اسمهم الـ Support vectors. الصورة دي هتوضح بشكل أفضل، لو أنا عندي هنا مجموعة Data وهنا مجموعة Data وأنا عايز أفصل بينهم باستخدام الـ SVM، فأنا هعمل الـ Line ده أو الـ Decision boundary ده، تمام؟ اللي هو بيمشي بالـ Linear equation اللي هي...
WX اللي هي Linear equation العادية دي equal zero، تمام؟ يعني الـ Value دي المفروض تبقى قيمتها بـ zero. بعدها هيشوف أقرب Point ليه، أقرب Point ليه هيعمل عندها Line. وهيشوف الـ Value دي أقرب Point ليه برضه هيعمل عندها Line. فهو الهدف إيه؟ المسافة بقى بين الـ Point دي والـ Point دي، المفروض إنه هو يـ Maximize المسافة دي، أو يـ Maximize الـ Distance دي.
اسمها الـ Margin. وهنشوف بقى الـ Equations دي بالتفصيل، يعني هي بس فكرته بشكل عام إن هي هيعمل Line والمفروض إن هو يـ Maximize الـ Distance بين الـ Two points دول بحيث إن الـ Data لو في Data مثلاً هنا هنعرف إن الـ Data دي للـ Class ده أو في Data هنا هنعرف إن هي للـ Class ده وما يحصلش Mismatch إن هي لأنهي Class مثلاً.
دي Equation الـ Line اللي بيفصل الـ Two classes، ودي Equation الـ Line اللي هو عند الـ Positive class، المفروض الـ Equation دي بتـ equal 1، والـ Equation دي الـ Line اللي عند الـ Negative class، المفروض هي بتـ equal 
negative 1. يعني لو ده الـ Positive class وده الـ Negative class فالمفروض Equation الـ Line ده...
المفروض تـ equal 1، و Equation الـ Line ده المفروض تـ equal -1، 
و Equation الـ Line ده equal 0. والمفروض بقى الـ Distance اللي هي بتفصل لي
 الـ Two lines دول اللي هي اسمها الـ Margin، المفروض إن إحنا نعملها Maximize. دي
 الـ Equation بتاعتها أو دي الـ Value بتاعتها، هنعرف يعني...
إزاي جت أو الـ Conclusion إزاي جت. Equation الـ Margin استنتاجها إنه الأول هياخد
 الـ Equation بتاعت الـ Upper decision boundary والـ Equation بتاعت
 الـ Lower decision boundary ويطرحهم، تمام؟ فهيديني الـ Equation دي. تمام وهيديني هنا 2، فإحنا المفروض هنقسم على الـ W transpose.
بس دوت Vector، فمش هنقسم على Vector، هنقسم على الـ Norm للـ Vector.
 يعني هنقسم على.. هنجيب الـ Norm للـ Vector، والـ Norm ده هنجيبه، كل Value في 
الـ Vector نعملها Square ونجمعهم وبعدين نجيب الـ Square root ليهم. إزاي؟
دي Equation الـ Norm هنجيب كل Value في الـ Vector تمام؟ ونجيب لها الـ Square، وبعدين نجمعهم، وبعدين نجيب الـ Square root ليهم. فهنا بنقسم الـ 2 على الـ Norm بتاع
 الـ W transpose هيدينا Equation الـ Margin.
هنا بقى الـ Equation دي، اللي هي الـ Y output في..الـ equation الـ Linear equation، 
المفروض يبقى أكبر من 1، ليه؟ ده بيمثلي الـ Confidence. إنه هنا لو أقل من 1 هيبقى فيه نسبة إن فيه Points جوه الـ Margin، فإحنا المفروض نحاول يعني...
وهو أكيد هيبقى فيه نسبة Error، بس المفروض نحاول نقلل نسبة الـ Points اللي هي جوه
 الـ Margin أو نحاول ما يبقاش فيه Points في الـ Margin، فبنعرف عن طريق 
الـ Equations دي. ده بقى Equation الـ Margin ودي اللي بيتأكد منها من 
الـ Confidence. آخر حاجة الـ SVM Kernel Trick...
دلوقتي لو إحنا عندنا Data مش Linearly separable، يعني مقدرش أعملها Separate
 بـ Straight line، لازم يبقى الـ Line اللي بيعملها Separate بيبقى على شكل Curve. وإحنا عايزين نعملها Separate بالـ SVM، فبنعملها إزاي؟ بنغير الـ Dimensionality بتاعت الـ Data دي.
عن طريق إن إحنا بنعمل إيه؟ بنـ Apply 
Transformation matrix على الـ Data بحيث إن هي تغير الـ Dimensions اللي للـ Data دي تخليها في Dimensions تانية بحيث إن إحنا نقدر نخليها Linearly separable. بمعنى هناخد كل Point ونطبق عليها أي Transformation.. يعني Transformation matrix.
هيغير مكان الـ Points دي، وهنطبق على كل الـ Points
 Transformation matrix. لما نطبق على الـ Points دي Transformation matrix، هنقدر نعملهم Separate بالـ SVM بطريقة Linear.
زي هنا مثلاً هنا الـ Input اللي بيعمل Separate للـ Data على شكل Curve.
 فطبقنا الـ Transformation matrix وخليناها في Dimension مختلف بحيث إن إحنا يعني في Dimension أعلى نقدر نعمل لها Separate بشكل Linear.