ورد
کامپیوتر و IT و اینترنت

کتاب 50 الگوریتمی که هر برنامه نویسی باید بداند

صفحه 1:

صفحه 2:
0 الگوریتمی که هر برنامه نویسی باید بداند الگوریتم های پایتون برای تقویت مهارت های حل مسئله فهرست 1. فصل 1: مروری بر الگوریتم ‎ls‏

صفحه 3:
2: ساحتارهای داده مورد استفاده در الگوریتم ها 3. فصل 3: الكوريتم هاى مرتب سازى و 5. فصل 5: الكوريتم هاى 138. 6 فصل 6: الگوریتم های یادگیری ماشین بدون .179 7 فصل 7: الگوریتم های بادگیری سنتی با

صفحه 4:
375. الگوریتم های مفیاس 12. فصل 12: ملاحظات عملی. 442

صفحه 5:
بخش 1: مبانی و الگوریتم های اصلی این بخش جنیه های اصلی الگوربتم ها را معرفی می کند. ما پررسی خواهيم کرد که یک الگوریتم چیست و چگوته ‎ul‏ را طراحی کنیم. همچنین با ساختارهای داده مورد استفاده در الگوریتم ها آشنا خواهیم شد. همچنین در اين فسمت الگوریتم های مرتب سازی و جستجو به همراهالگورنتم هایی برای حل مسائل گرافیکی معرفی من شود فصول موجود در اين بخش عبارتند از: فصل 1, مرورى بر الكوريتم ها فصل 2, ساختارهای داده مورد استفاده در الگوزیتم ها فصل 3, الكوريتم هاى مرتب سازى و جستجو فصل 4, طراحى الكوريتم ها فصل 5. الگوریتم های گراف 1 مروری بر الگوریتم ها يك الكوريتم بايد ديده شود نا ذونالد كنوت را باور كند.

صفحه 6:
این کتاب اطلاعات مورد تیاز برای درگ» طبقه بندی, تخاب و پیاده ساری الگوریتم های مهم را پوشش می دهد. اين کتاب علاوه بر توضیح منطق آنهاء ساختارهای دادم محیط های توننعه و محیط های تولیدی را که برای کلاس های مختلف الگوریتم ها مناسب هستند.مورد بحث قرار می دهد. این نسخه چاب دوم اين كتاب است. در اين نسخه, ما به طور ویژه بر روی الگوریتم های مدرن بادگیری ماشین تمرکز کردیم که روز به روز اهمیت بیشتری پیدا مى كنند. همراه با منطق, مثال‌های عملی از استفاده از الكوريتمها برای حل مسانل واقعی روزمره نيز ارائه می‌شود. اين فصل بینشی در مورد اصول الگوریتم‌ها اائه می‌دهد. با بخشی در مورد مفاهیم اساسی موردنیاز بای درک عملکردالگوریتم های مختلف شروع می شود. بای ارائه یک دیدگه تاریخی, اين بخش به طور خلاصه چگونگی استفاده از الكوريتمها را رای فرمولبندی ریاصی دسته خاصی از مسائل را ان می‌کند. همچنین محدودیت های الگوریتم هاي مختلف را ذکر می کند. بخش بعدی راه های مختلف براق تعیین منطق یک الگوریتم را توضیح می دهد. از آنجایی که در این کتاب از پایتون برای نوشتن الگوریتم ها استفاده شده است, نحوه تنظیم محیط برای اچرای مثال ها توضح داده شده است. سپس, راه های مختلفی که عملکرد یک الگوریتم را می توان محاسبه کرد و با سایر الورنتم ها مقایسه کرد: مورد بحث قرار می گیرد. در تهایت, اين فصل روش‌های مختلفی را مورد بحث قرار مىدهد كه بباد سازى خاصى از يك الكوريتم را مئتوان تابيد كرد. يه طور خلاصه. اين فصل نكات اصلى زير رأ بوشش مىدهد: + الگوریتم چیست؟ ۶ مراحل یک الگوریتم ام دنه + تکنیک های طراحی الگوریتم * تجزيه وتحليل عملكرد + اعتبار ستچی یک الگورنتم

صفحه 7:
الگوریتم چیست؟ به زبان ساده, یک الگوریتم مجموعه ای از قوانین برای انجام محاسبات. برای حل 1111111116 121011110111101 ورودى معتير, طبق دستورالعمل هاى دقيق تعريف شده ارائه دهد. اكر كلمه الگوریتم را در یک فرهنگ لغت (مانند ۳۱۵۲1۵۵96 4/061680) جستجو كنيد اين مفهوم را به صورت زیر تعریف می کند الگوریتم مجموعه‌ای محدود از دستورالعل‌های بدون بهام است که با توجه به مجموعه‌ای از شرایط اولبه. مىتوان در یک توالی مشخص برای دستبابی به یک هدف خاص و دارای مجموعه‌ای از شرایظ پيني قبل تشخیص, باشد. طراحى يك الكوريتم تلاشى برای ایجاد یک دستور العمل ریاضی به کارآمدترین روش است که می تواند به طور موثر برای حل یک مستئله دنبای واقعی استفاده شود. این دستور العمل ممکن است به عنوان بایه ای برای توسعه یک راه حل ریاضی قابل استفاده مجدد و عمومی تر استفاده شود که می تواند برای مجموعه گسترده تری از مسائل مشابه اعمال شود. مراحل یک الگورینم مراحل مختلف توسعه: استقرار و در نهایت استفاده از یک الگوزیتم در شکل 1.1 نشان داده شده است: همانطور که می بییم. این فرآیند با درک نیازمندیهای دستور مسئله شروع می شود که جزتیات آنچه باید انجام شود را توضیح می دهد. هنگامی که مستله به اوقوبیان شذز ما زاززه مزحله توسعه هدایت ام کند. مرجله توق بفتامل و مرجله است:

صفحه 8:
Problem Statement ~) Ey 3 Be 0 Algorithm ‏ل‎ 5 ‎Computing Device | —> output‏ نات ‎Runtime ‏شکل 1-1: مراحل مختلف توسعه, استقرار و استفاده از یک الگوریتم‎ ‏مرحله طراحی: در مرحله طراحی, معماری, منطق و چزئیات پیاده سای‎ 1 ‏الكوريتم بيش بینی و مستند می شود. هنكام طراحى يك الكوريتم, دقت و عملكرد‎ pea dls Sealy D> ‏رأدر طوداريع درزعالن كيه مال يدتري زلة‎ ‏هستیم, در بسبارى از موارد به بيش از يك الكوريتم كانديد خواهيم رسید. مرحله‎ ‏طراحی یک الگوریتم, یک فرآبند تکراری است که شامل مقایسه الگوریتم های‎ ‏مختلف کاندید می شود. برخی از الگوریتم‌ها ممکن است راه‌حل‌های ساده و‎ ‏اما همکن اشکت اقترا بت خمز پیندازند: تسایر الگوزنتمتا‎ Vans alll Gag’ ‏ممکن است بسبار دقیق باشند. اما ممکن است به دلیل پیچیدگی‌شان زمان زیادی‎ ‏نیاز داشته باشتد. برخی از اين الگوریتم های پیچیده ممکن است‎ Lal sl ‎ ‎

صفحه 9:
کارآمدتر از بقیه باشند. قبل از انتخاب, تمام معاوضه‌های ذاتی الگوریتم‌های کاندید باید به دقت مورد مطالعه قرار گیرند. به خصوص برای یک مسئله پیچیده. طراحی یک الگوریتم کاآمد مهم است. یک الگوربتم درست طراحی شده, منج به یک راه حل کارآمد می شود که قادر به ارائه عملكرد رضايت بخش و دقت معقول به طور همزمان خواهد بود. 2. مرحله کدگذاری: در مرحله کدگذاری, الگوریتم طراحی شده به یک برنامه كامبيوترى تبديل مى شود. مهم است که برنامه كامبيوترى تمام متطق و معماری پیشنهادی در مرحله طراحی را اجرا كند. یازمدبهای مسئله تجاری را می توان به یازمندبهای کارگردی و غیر کارکردی تقسيم كرد. نبازمندبهابي كه مستقيماً ویژگی های مورد اتظار راه حل ها را قشم من گند:بزمدیهای کارکزدی نمی تن شود نيازمنديهاى كاركردى , رفتارموردانتظار راه حل را شرح می دهد. از سوی دیگرء نیارنتیهای غی رک رگروی دورو عناگرددمعیانن پدیزی: ف ابلیت اندطایه و ‎id‏ ‏الگوریتم است. نبازمندیهای غیرکارکردی همچتین انتظارات مربوط به امتبت داده ها رأ در بر مى كيرد. ‎she‏ مثال, در نظر بكيريم كه مى خواهيم طراحى الكوريتمى براى يى شركت كارت اعتبارى انجام دهيم كه بتواند تراكنشهاى جعلى را شناسابى و علام تكذارى ‎as‏ ‏نيازمنديهاى كاركردى در اين مثال. رفتار مورد انتظار يك راه حل معتیر را با ارانه جزئيات خروجى مورد انتظار با توجه به مجموعه خاصی از داده های ورودی مشخص می کند. در ان موردداده های ورودی ممکن است جزئیات تراکنش باشد و خروجی ممکن است یک علامت دودویی باشد که یک تراکنش را به عنوان جعلی با غير جعلی برچسب گذاری مي کند. در این مثال. بازمندهای غیرکارکردی ممکن است زمان پاسخگویی هر یک از پیش‌ین‌ها را مشخص کند ‎ ‎

صفحه 10:
نبازمتدیهای غیرکارکردی نیز آستانه های مجاز را برای دقت تعیین می کند. همانطور که در این مثال با داده های مالی سروکار داریم. یازمندیهای امنیتی مربوط به احراز هویت کاریر. مجوز و محرمانه بودن داده ها تيز انتظار مى رود که بخشی از تیازمندیهای غیرکارکردی باشد. توجه داشته باشید که تبازمندیهای کارکردی و غیرکارکردی با هدف تعبین دقیق آنچه تباز است انجام شود. طراحی راه حل در مورد چگونگی انجام آن است. و پیاده سازی: طراحی راه حل واقعی در زیان برنامه نويسي انتخایی شماست. ارائه طرحی که به طور کامل نیازمندیهای کارکردی و غیرکارکردی را برآورده می کند, ممکن است زمان و تلاش زیادی را ببرد.انتخاب زبان برنامه تویسی مناسب و محیط توسعه/تولید ممکن است به یازمندیهای مسئله بستگی داشته باشد. به عنوان منال. از آنجایی که 6/++ یک زبان سطح بایین تر از پیتون است, ممکن است برای الگوریتم هابى كه تياز به كد كامبايل شده و بهینه سازی سطح پایین تر درند. انتخاب بهتری باشد. پس از اتمام مرحله طراحی و تکمیل کدگذاری. الگوریتم آماده استفرار است. استقرار یک الگوریتم شامل طراحی محیط تولید واقعی است که در آن کد اجرا می شود. محبط تولید بايد با توجه به داده ها و نازهای پردازشی الگوریتم طراحی شود. به عتوان مثال, برای الگوربتم‌های موازی‌بذیر, یک خوشه با تعداد مناسب گره‌های کامپیوتری برای اجرای کارآمد الگوریتم مورد نیاز است. برای الگوریتم های فشرده داده. ممکن است نیا به طراحی یک خط لوله ورودی داده و استراتزی کش کردن و ذخیره داده ها باشد. طراحی یک محبط تولید با جزئیات بیشتر در فصل 14 الگوریتم های مقباس بزرگ و فصل 15 ملاحظات عملی مورد بحث قرار گرفته است. هنگامی که محبط تولید طراحی و پیاده سازی شد. الگوریتم به کار گرفته می شود که داده های ورودی را می گیرد: آن را پردازش مى كند و خروجی را مطایق با تيازمنديها توليد مى كند. محيط توسعه

صفحه 11:
پس از طراحی, الگوریتم ها باید طبق طراحی در یک زبان برنامه نویسی پیاده سازی شوند.برای این کناب زین برنامه نویسی پایون را نتخاب کرده ایم. ما این زبان را انتحاب كرديم زيرا بايتون يك زبان برنامه تويسى متعطف و منیع باز است. بايتون همجنين يكى از زيانهايى است كه می‌توانید در زیرساخت‌های محاسیات ابری مختلف مانند خدمات وب آمازون ‎(AWS)‏ مایکروسافت آزور و پلتفرم ابری گوگل (668) از آن استفاده کتبد. صفحه اصلی رسمی بایتون در 00.69 ۵9:۷۷ در دس‌ترس است, اين سایت همچ تین دارای دستورالعمل هایی برای نصب و راهنمای مبدیان, است. برای درک بهتر مفاهیم ارائه شده ذر اين کتاب, درک اولیه پایتون لازم است. برای این كنات انتظار داریم از نسخه اخیر پایتون 3 استفاده کنید: در زمان نگارش, آخرین نسخه 3.10 است که برای اجرای تمرینات اين کتب از آن استفاده خواهیم کرد ما در سراسر اين كتاب از تون استفاده خواهیم کرد. ما همچنین از نوت بوک های 6۲زا برای اجرای كذ استفاده خواهيم كرد. بقيه فصلهاق اين كناب فرض مىكنتد كه بايتون نصب شده است و نوت‌بوک‌های ۵66۲[ به درستی پیکربندی و اجرا می‌شوند بسته های پایتون پاتون یک زبان همه منطوره است. اين زبان از فلسفه "شامل باتری" بیروی ‎uns gi Sse‏ که یک کنایخانه نآرد دتیزین آشتت: دون اینکه کارت بسته‌های جداگانه را دانلود کند. با این حال, ماژول های استاندارد کتابخانه فقط حداقل عملکرد را ارائه مى دهتد. بر اساس مورد استفاده خاصی که روی آن کار می‌کنید. ممکن است نیاز به نصب بسته‌های اضافی داشته باشند. مخزن رسمی شخص ‎sly Ul‏ بسته های پایتون 8 نام دارد که مخفف ۱۵۵۷ ۳۵6۵96 ۵0( است. میزبان بسته های پاتون, هم به عنوان توزبع منبع و هم کد از پیش کامپایل شده است. در حال 7

صفحه 12:
حاضر, بیش از 113000 بستهپایتون در 2۷ میزبانی شده است. ساده ترین راء برای نصب بسته های اضافی از طریق سیستم مدیریت بسته ۳۱8 است. ۴۱8 یک مخفف بازگشتی عصبی است که در زبان پنتون فراوان است. ۴۷۵ مخفف ‎Pip‏ ‎cal “Installs. Python‏ > خوب این است که از نسخه 3.4 پایتون, وام به طور پیش فرض نصب شده است. برای بررسی نسخه 0 مى توانید در خط فرمان تايب كتين ‎pip --version‏ از اين دستور ۵ می توان برای نصب بسته های اضافی استفاده کرد ‎pip install “PackageNane‏ ‎SIG ic iy san lloyd old ax UM Sih gana NE ai,‏ نا خرس نون را دريافت كنتد. اين كار با استفاده از يرجم 80۴986 به دست مى آد ‎pip install “PackageNane’ -upgrade‏ و برای نصب یک نسخه خاص از یک بستهپاتون ‎pip install ‘PackageNlame==2.1‏ افزودن ‎lish‏ بها ‎le ada‏ مناسب به بخشی از راه اندازی محبط برنامه تویسی پایتون یدیل شده است. یکی از ویژگی هایی که به حفط این کتابخانه ها کمک مي کند, توانایی ایجاد یک فایل نیازمندی است که تمام بسته های مورد نیاز را فهرست می کند. فایل تیازمندی ها یک فایل متنی ساده است که حاوی نام کتابخانه ها و نسخه های مرتبظ با نها است. نمونه فایل نبازمندی ها به صورت زیر 241 2.5.0 5.0 طبق فرارداد ۰۸۶ ۲۵۵۵1۲65 در دایرکتوری سطح بالای پروژه فرار می گیرد scikit-Learn tensorfloy tensorboard==:

صفحه 13:
يس از ايجاد. فايل مورد نياز را مى توان براي راه اندازى محیط توسعه با نصب تمام کتایخانه هی پاتون و نسخه های مرتبط با آنها با استفاده از دستور زیر استفاده کرد pip install -r requires.txt ‏حال اجازه دهید به بسته:های اضلی که در اين کتاب استفاده خواهیم کرد نگاهی‎ ‏بباندازيم.‎ ‎561۴۷ ‏اکوسیستم‎ ‏که سای بای تلفظ می شود - گروهی از‎ - 5616011616 0/۵568 (SciPy) ALi Sigil al SASL ‏تيعد ماف ون نت که یزان خانعه"علمی‎ ‏شامل بسیاری از توایع. از جمله طیف گسترده ای از مولد اعداد تصادفی, روال‎ ‏های چبر خطی, و بهیته سازها است. 5618 یک بسته جامع است, و با گذشت‎ ‏زمان, مردم برنمه های افزودنی زیادی برای سفارشی سازی و گسترش بست يبر‎ ‏اساس نیاز خود ایجاد کرده اند. 561۴ عملکرد خوبی دارد زبرا به عنوان یک‎ ‏پوشش تازک در اطراف گدهای بهیته‌سازی شده توشته شده در 6/6 + یا‎ ‏می‌کند. بستههای اصلی زیر بخشی از این اکوسیستم هستد‎ das Fortran ‏برای الگوریتم هاء توانایی ایجاد ساختارهای داده چند بعدی, مانند آرایه ها‎ :1۲۱۳(/ ‏و ماتریس ها واقعا مهم است. ل(#7نالا مجموعه اى از انواع داده هاى آرايه و‎ ‏ماتريس را ارائه مى دهد كه براى آمار و تجزيه و تحليل داده ها مهم هستند.‎ ‏جزئيات در مورد ۱8۳ را می توان در ۱۱۵9۳۰۵۳۵ ۱6۴۵://۱۸۸۷۰/بافت.‎ ‏یادگیری ماشینی یکی از محبوب ترین افزونه های‎ aig il oul sscikit-Learn ‏است. 56116-162۳8 طیف گسترده ای از الگوریتم های مهم یادگیری‎ 561۴ ‏ماشين را ارائه مى دهد, از حمل» طبقه بندی: رگرسیون, خوشه بندی؛ و‎ ‏اعتبارسنجی مدل. می توانید جزتبات بیشتر در سورد 5611018-169۳ را در‎ ‏بيابيد.‎ http://scikit-Learn.org ‏شامل ساختارداده های مجموعه جدولی هستند که به طور‎ 290895: ۵۵5 ‏گسترده سرای ورودی, خروجی و بردازش داده های جدولی در الگورنتم های‎

صفحه 14:
مختلف استفاده می شود. کتابخانه 8۵0435 شامل بسیاری از عملکردهای مقبد است و همچنین عملکرد بسیار بهینه ای را ارائه می دهد. جزئیات بیشتر در مورد ‎pandas‏ را می توانید در ‎(http: //pandas. pydata.org‏ بيدا كنيد. ‎Matplotlib: Matplotlib‏ ابزارهایی را برای ایجاد تصویر های قدرتمند فراهم می کند. داده ها را می توان به صورت نمودار خطی, تمودار پراکندگی: نمودار میله ای, هیستوگرام. نمودار دایره ای و غیره ارائه کرد. اطلاعات بیشتر را ‎aula /https://matpLotLib.org > ales use‏ استفاده از نوت بوک بایتون: ما از ‎Colab y Jupyter Notebook‏ به عنوان ‎IDE‏ استفاده خواهیم کرد. تکنیک های طراحی الگوریتم الگوریتم یک ‎oly‏ حل ریاضی برای یک مسئله دنیای واقعی است. هنگام طراحی یک الكوريتم, سه نگرانی طراحی زیر را در حين كار بر روى طراحى و تنظيم دفيق الكوريتم ها در نظر مى كيريم: نگراتی 1: آیا ‎oul‏ الگوریتم نتبجه ای را که ما انتظار داشتیم تولید می کند؟ نگرانی 2: آیا اين بهینه ترين راه برای به دست آوردن اين نتايج است؟ نگرانی 3: الگوریتم چگونه روی مجموعه داده هاى بزركتر عمل مى کند؟ درک پیچیدگی خود مسئله قبل از طراحی راه حل برای آن, مهم است. به عنوان مثال, اگر مسئله را از نظر نیازها و پیچیدگی مشخص کنیم: به ما کمک می کند تا راه حل مناسبی را طراحی كنيم. به طور کلی,الگوریتم ها را می توان بر اساس ویژگی های مستله به انوع زیر تقسیم کرد الگوریتم های فشرده داده: الگوریتم های فشرده داده برای مقابله با حجم زیادی از داده ها طراحی شده اند. انتظار می رود نها بازهای پردازش نسبتاً ساده ای داشته باشند. الگوریتم فشرده سازی اعمال شده بر روی یک فایل بزرگ نمونه 3

صفحه 15:
خویی از الگوریتم های فشرده داده است. برای چنین الگوریتم‌هایی. انتظار می‌رود اندازه داد‌ها بسیار بزرگ‌تر از حافظه موتور پردازش (یک گره با خوشه) باشد و ممکن است نباز باشد که یک طراحی پردازش تکراری برای پردازش کارآمد داده‌ها مطایق با نیازمندبا ایجاد شود الگوریتم های فشرده محاسباتی: الگوریتم های فشرده محاسیاتی نیازمند پردازش فابل توجهی هستند اما شامل حجم زیادی از داده ها نمی شوند. یک مثال ساده الگوریتم یافتن یک عدد اول بسیار بزرگ است. یافتن استراتژی برای تفسیم الكوريتم به فازهاى مختلف به طوری که حدافل برخی از فازها موازی شوند. کلیدی برای به حداکتر رساندن عملکردالگوریتم است. ترکیب الگوریتم های داده و الگوریتم های محاسباتی: الگوریتم های خاصی وجود دارند که با حجم ژیادی از داده ها سروکار دارند و همچتین نیازهای محاسباتى قابل توجهى دارند. الكوريتم هاى مورد استفاده براى انجام تجزيه و تحليل احساسات در فايلهاى ويدثويى زنذه , مثال خوبى از جايى است که هم داده ها وهم تيازهاى بردازش در انجام كار بسيار زياد هستند. جنين الكوريتوهايى برمصرفترين الكوريتوها هستند و نيازمند طراحى دقيق الكوريتم و تخصيص ‌هوشمندانهمنایع موجود هستند برای توصیف مسئله از نظر پیچیدگی و نیاز, اگر داده های آن و محاسبه ابعاد آن را با عمق بیشتری مطالعه کنیم, می تواند مقید باشد که در قسمت بعدی آن را انجام خواهیم داد cools ant ‏نگاه می کنیم‎ (VS3) ‏مسئله, به حجم. سرعت و تنوع آن‎ oslo anf ‏برای دسته بندی‎ ‏که به صورت زیر تعریف می شوند:‎ حجم(۷۵(06): حجم, اندازه مورد انتظار داده هابی است که الگوریتم بردازش می کند

صفحه 16:
سرعت(/۷۵10610): سرعت, نرخ مورد انتظار تولید داده های جدید هنگام استفاده از الگوریتم است. می تواند صفر باشد. تنوع(/۷3۲3۵1):تنوع کمیتی است که نشان می‌دهد الگوریتم طراحی‌شده با چه تعداد از دادمها سروكار دارد. شكل 2-1 1/53 ذاده ها رايا جزئيات بيشترى نشان مى دهد. مركز اين نمودار ساده ترين داده هاى ممكن را با حجم کم و تنوع و سرعت كم نشان مى دهد. با دور شدن از مرکز, پیچیدگی داده ها افزايش می یابد. می تواند در یک با چند ُعد از سه بعد افزایش یبد به عنوان مثال, در بعد سرعت, فرآیند دسته ای را به عنوان ساده ترین, به دتبال آن فرآیند دوره ای و سپس فرآیند نزدیک به زمان واقعی را داریم. در تهایت, ما فرآیندبلادرنگ را داریم که پیچیده‌ترین فرآیند در زمینه سرعت داده است. به عنوان مثال, مجموعه‌ای از فابلهای ویدئوبی زنده که توسط گروهی از دورین‌های مانتورینگ جمعآوری شده‌اند. درای حجم بالاء سرعت بالا و تنوع بالایی هستند و کج اتید طراخی انس تیار داشیه اسمن مرا موصيو يدور أرطي تون داده‌ها را داشته باشند. 2

صفحه 17:
شکل 2-1: شکل 1.5: 3 ولا داده: حجم, سرعت و تنوع sili ag برای مشخص کردن بعد محاسیاتی, نیازهای پردازشی مستله در دست را ‎las‏ می‌کنیم. تیازهای پردازشی يك الكوريتم تعيين مى كند كه جه نوع طراحى برای آن كارآمدتر است. به عنوان مثال, الكوريتم هاى بيجيده. به طور كلى. به قدرت پردازش زيادى نياز دارند. براى جنين الكوريتم هابى. ممكن است داشتن معصاری ‎B‏

صفحه 18:
موازی چند گره مهم باشد. الگوریتم‌های عمبق مدرن, معصولا شامل پردازش عددی قابل توجهی هستند و ممکن است به قدرت "68 با 8لا۲ تباز داشته باشند هماتطور که در فصل 15, ملاحظات عملی مورد بحث فرار خواهد گرفت. تجزیه و تحلیل عملکرد تجزبه و تحلیل عملک‌رد یک الگوریتم بخش مهمی از طراحی آن است. یکی از راه‌های تخمین عملکرد یک الگوریتم, تجزیه و تجلیل پیچیدگی آن است. نطربه ‎alle gy‏ وكواكن ‎jib gas tole eal Uap ayia‏ الگوریتم باید سه ویژگی کلیدی داشته باشد: *_ باید درست باشد: یک الگوریتم خوب باید نتبجه درست را ایجاد کند. برای تأیید اینکه یک الگوریتم به درستی کار می کند. یاید به طور گسترده آزمایش شودء به ويزه موارد لبه آزمايش. * بايد قابل درك باشد: يك الكوريتم خوب بايد قابل درك باشد. بهترین الگوریتم دیا اگر خیلی پیچیده باشد که بتوانیم آن را روی کامپیوتر يباده سازی کنیم. خیلی مقید نیست. * بايد كارآمد باشد: یک الگوریتم خوب باید کارآمد باشد. حتی اگر یک الگوریتم نتیچه درشتی تولید کند. اگر هزار سال طول بکشد یا به 1 میلبارد ترابایت حافظه نیازداشته باشد. کمک چندانیبه ما تخواهد کرد دو نوع تحلیل ممکن برای تعيين كميت بيجيدكى يك الكوريتم وجود دار * تجزيه و تحليل ييجيدكى فضا: نيازهاى حافظه مورد نباز در زمان اجرا ‎hue‏ ‏اجراى الكوريتم را برأورد مى كند. + تحليل بيجيدكى زمانى: زمان اجراى الكوربتم را تخمين مى زند. ‎Sy ale‏ به یک آنها را بررنسی کنیم: ‏تحليل بيجيدكى فضا ‎4 ‎ ‎

صفحه 19:
تحلیل پیچیدگی فضا. مقدار حافظه مورد نباز الگوریتم برای پردازش داده های ورودى را تخمين مى زند. در حين يردازش داده هاى ورودى, الكوريتم بايد ساختارهای داده موقتی گذرا را در حافظه ذخیره کند. تحوه طراحی الگوریتم بر تعداد. نوع و اندازه این ساختارهای داده تأثیر می گذارد. در عضر محایسیات توزع‌شده وبا حجم فزایند‌ای از داد‌هایی که یاز به پردازش دارند. تحلیل پیچیدگی فضا اهمیت بیشتری بيدا می‌کند. اندازه, نوع و تعداد اين ساختارهی داده, تازهای حافظه را برای سخت افزار اصنلی دیکته می کند. ساختارهای داده درون حافظه مدرن مورد استفاده در محاسبات توزیع شده, باید مکانیسم های تخصیص منانع کارآمدی داشته باشند که از نبازهای حافظه در مراحل مختلف اجرای الگوریتم آگاه باشند. الگوریتم های پیچیده ماهیت تکراری دارند. اين الگوریتم‌ها به‌جای اینکه همه اطلاعات را به یکباره در حافظه بیاورتد. ساختارهایداده‌ها زا به* طوز هکرز پر نمی کست: بزای محاسببة:پیچیندگی: قضا: مهم. است که ابتدا نوع الگوریتم تکراری را که فصد استفاده از آن را داریم طبقه بندی کنیم. یک الگوریتم تکراری می تواند از يكى از سه نوع تكرار زير استفاده كند. + تكرارهاى همكرا: همانطور كه الكوريتم از طريق تكرارها بيش فى رود مقدار داده هايى كه در هر تكرار جداكانه بردازش مى كند. كاهش مى يابد. به عبارت ديكر. با ادامه الكوريتم از طريق تكرارهاى خود, بيجيدكى فضا كاهش ‎ue‏ یاب د. چالش اصلی مقابله با پیچیدگی فضایی تکراره ای اولی ه است. زیرساخت‌های ابری مقیاس‌پذیر مدرن مانند ۸6 و 6188 600016 برای اجرای جنين الكوريتمهايى مناسبتر هستند. + تكرارهاى واكرا: همانطور كه الكوريتم از طريق تكرارها بيش مى رود: مقدار داده اى كه در هر تكرار جداكانه بردازش مى كتد افزايش مى يابد. از آنجایی که پیچیندگی قضا با پیشرفت الگوریتم از ظریق تکرار ‎Bal sl‏ می‌ید. تسین محدودیت‌هایی برای جلوگیری از اپایدار شدن سیستم مهم as

صفحه 20:
است. محدودیت ها را می توان با محدود کردن تعداد تکرارها وایا با تعبین محدودیت اندازه داده هاى اوليه تنظيم كرذ. + تكرارهاى مسطح: هماتطور كه الكوريتم از طريق تكرارها بيش مى رود مقدار داده ای که در هر تكرار جداگانه پردازش می کند ثابت می ماند. از آنجایی که پیچیدگی فضا تغییر نمی کند.قابلیت ارتجاعی در زیرساخت مورد از نیست. برای محاسبه پیچیدگی فضاء ید بر روی یکی از پیچیده ترین تکرارهاء تمركز كنيم. به عنوان مثال, برای الگوریتمی که از تبدیل تکرارها استفاده می کند. می توانیم یکی از تکرارهای اولیه را انتخاب کنیم. پس از نتخاب. مقدار کل حافظه مورد استفاده الگوریتم. از جمله حافظه استفاده شده توسط ساختارهای داده ‎ALAS‏ ‏اجرا و مقادیر ورودی آن زا تخمین ی زنیم. اين كار به ما تخمین خوبی از پیچیدگی فضایی یک الگوریتم می دهد. دستورالعمل های زیر برای به حداقل رساندن پیچیدگی فضا وجود دارد: در صورت امکان, سعی کنید یک الگوریتم را به صورت تکرار شونده طراحی کنید هنگام طراحی یک الگوریتم تکراری, هر زمان که انتخابی وجود داشت. تعداد تكرارهاى بيشتر را به تعداد تكرارهاى كمتر ترجيح مى دهند. انتظار مى رود تعداد تكرارهاى كوجي بيشتر. بيجيدكى فضاى كمترى داشته باشند. الكوريتم ها بايد فقط اطلاعات مورد تباز براى بردازش فعلى را در حافظه بباورند. هر جيزى كه لازم نيست بايد از حافطه پاک شود. تجزیه و تحلیل پیچیدگی فضا برای طراحی کارآمد الگوریتم ها ضروری است. اگر هنگام طراحی یک الگوریتم خاص, تجزیه و تحلیل پبچیدگی فضای مناسب انجام نشود, در دسترس نبودن حافظه کافی برای ساختارهای داده موفت گذرا ممکن است باعث سرریزهای غیر ضروری دیسک شود, که به طور بالقوه می تواند عملکرد و کارایی الگوریتم را تحت تاثیر قزار دهد. در ان فصل, ما به پیچیدگی زمانی, عمیق تر نكاه خواهيم کرد. پیچیدگی فضا در فصل 14. الگوریتم های مقباس بزرگ, با جزئیات بیشتر مورد بحث فرار خواهد گرفت, جایی که ما با 16

صفحه 21:
الكوريتم های توزیع شده در مقباس بزرگ با نبازهای حافظه زمان ‎sorry Lol‏ سروکار خواهیم داشت. تحلیل بیچیدگی زمانی تجزيه و تحليل بيجيدكى زمانى تخمين مى زند كه جقدر طول مى کشد تا یک الگوریتم ,کار تعبین شده خود را بر اساس ساختارش تكميل كند. برخلاف ييجيدكى فضاء پیچیدگی زمانی به هیچ سخت افزارى كه الكوريتم روى آن اجرا مى شود وابسته نيست. تحليل بيجيدكى زمانى صرفاً به ساختار خود الكوريتم بستكى دارد. هدف كلى تحليل بيجيدكى زمانى تلاش براى باسخ به اين دو سوال مهم است: آيا اين الكوريتم مقياس يذير خواهد شد؟ يك الكوريتم خوب طراحى شده بايد كاملاً قادر به استفاده از زيرساخت كشسان مدرن موجود در محيطهاى رايانش ابرى باشد. يك الكوريتم بايد به كونه ای طراحی شود که بتواند از در دسترس بودن پیشتر ۰۲ هسته های پردازشی, ‎GPU‏ 9 حافظه استفاده کند. به عنوان مثال الگوریتمی که برای آموزش یک مدل در مسئله بادگیری ماشین استفاده می‌شود. بايد بتواند از آموزش توزی‌شده استفاده کند.زیرا 6۳ بیشتری در دسترس است. چنین الگوریتمی باید از پردازنده‌هاي گرافیکی و حافظه اضافی نیز باید استفاده کند اگر در طول اجرای الگوریتم در دسترس باشند. اين الكوريتم جقدر مجموعه داه‌های بزرگ‌تر را مدیریت می‌کند؟ برای پاسخ به این سوالات.باید تأثیر آن بر عملکرد یک الگوریتم را به عنوان اندازه تعبین کنیم. داده ها افزایش می یاید و مطمئن شوید که الگوریتم به گونه ای طراحی شده است که نه تنها عملک‌رد آن را دقیق تر می کند. بلکه به خوبی مقیاس بندی می کند. عملکرد یک الگوریتم برای مجموعه داده های بزرگتر در دنبای امروزی "کلان داده" روز به روز اهميت بیشتری پیدا می کند. در بسیاری از موارد. ممکن است بیش از یک رویکرد برای طراحی الگوریتم. در دسترس داشته باشیم. هدف از انجام تجزیه و تحلیل پیچیدگی زمانی. در اين مورد. به شرح زیر خواهد بود: "با توجه به یک مسئله معین و بیش از یک الگوریتم. کدام یک از نظر بازده 3

صفحه 22:
زمانی کارآمدترین است؟" دو رونکرد اساسی برای محاسبه پیچیدگی زمانی یک الكوريتم وجود دارد: * يك رويكرد بروفايل بس از اجرا: در اين رويكرد الگوریمهای نامزد مختف پیاده‌سازی شده وعملكرد ها قایسه می‌شود * یک رویکرد نظری پیش از پاده سازی: در اين رویکرد. عملکرد هر الكوريتم ‎Ld‏ از اجرای یک الگوریتم به صورت ریاضی تقریب زده می شود. مزیت رویکرد نظری این است که فقط به ساختارخود الگوریتم بسنگی دارد. این رویکرد به سخت افزار واقعی که برای اجرای الگوریتم استفاده می شود انتخاب پشته ترم فزار انتخاب شده در زمان اجرا یا زبان برنامه تویسی مورد استفاده برای اجرای الگوریتم بستگی نداد برآورد عملکرد عملکرد یک الگوریتم معمولی به نوع داده ای که به عنوان ورودی به آن داده می شود بستگی دارد.به عنوان منال. اگر داده ها از قبل بر اساس زمیته مسئله ای که ما در تلاش برای حل آن هستیم مرتب شده باشند. الگوریتم ممکن است به طرز چشمگیری سریع عمل کند. اگر ورودی مرتب‌شده برای محک زدن این الگوریتم خاص استفاده شود. آنگاه یک عدد عملکرد غیروافعی خوب به دست می‌دهد که بازتاب واقعی عملکرد واقعی آن در اکثر سناریوها نخواهد بود. برای مدیریت این وابستگی الگوریتم‌ها به داده‌های ورودی, ما انواع مختلفی از موارد را در هنگام انجام تجزیه و تحلیل عملکرد در نظر داریم. بهترین مورد در بهترین حالت, داده های داده شده به عنوان ورودی به گوته ای سازماندهی می شوند که الگوریتم بهترین عملکرد خود را ارئه دهد. تجزیه و تحلیل بهترین حالت, حد بالابى عملكرد را نشان مى دهد. 1

صفحه 23:
بدترین سالت: راه دوم بای تخمین عملکرد یک الگوریتم. تلاش برای بافتن حداكثر زمان ممكن برایانجام کار تحت مجموعه ای از شرایط معین است. این تحلیل بدترین حالت یک الگوریتم کاملاً مفید است زیرا ما تضمین می‌کنيم که صرف نظر از شرایطء عملکرد الگوریتم هميشه بهتر از اعدادی است که از تجزیه و تحلیل ما به دست مىآيند. تجزيه و تحليل بدترين حالت به ویژه برای تخمین عملکرد هنگام برخورد با مسائلپیچیده با مجموعة ذاده هی بزرگترمفید است. تحلیل بدترین حالت, کران پاییتی عملکرد الگوریتم را نشان می دهد. موردمتوسلاً اين مورد با تفسیم ورودی های مختلف ممکن ‎as‏ گروه های مختلف شروع می شود. سیس, تجزیه و تحلیل عملکرد را از یکی از ورودی های نماینده هر گروه انجام می دهد. در نهایت, میانگین عملکرد هر یک از گروه‌ها را محاسیه می‌کند. تجزیه و تحلیل میانگین موزدی همیشه دقیق نیست: زرا نباز به در ظر گرفتن تمام ترکیب‌های مختلف و احتمالات ورودی به الگوریتم دارد. که انجام اين کار هميشه آسان نیست. انتخاب یک الگوریتم چگونه می دانید کدام راه حل بهتر است؟ چگونه می دانید کدام الگوریتم سریعتر اجرا می شود؟ تجزیه و تحلیل پیچیدگی زمانی یک الگوریتم می تواند به اين نوع سوالات پاسخ دهد. برای اينکه بفهمیم کجا می تواند مقید باشد؛ بياييد یک مثال ساده بياوریم که در آن هدف مرتب کردن لیستی از اعداد است. دسته ای از الگیزیتم ها به زاحتی دز دسترس هستند که می‌توانند کار را انچام دهند: مستله. اين است که چگوته یک مورد مناسب را انتضاب کنیم.ابتدا. مشاهده ای که می توان انجام داد اين است که اگر تعداد زیادی در لیست وجود نداشته باشد. مهم نیست که کدام الگوریتم را برای مرتب کردن لیست اعداد انتحاب کنیم.بنابراین, 3

صفحه 24:
اگر فقط 10 عدد در لیست وجود داشته باشد (0-18), پس فرفی نمی کند که کدام الگوریتم را انتخاب کنیم. زیرا احتمالاً حتی با یک الگوریتم بسیار ساده, یش از چند میکرو تایه طول نمی کشد. اما با افزایش ۸ انتعاب الگوریتم مناسب شروع به یجاد تغاوت ‎Ge‏ کند. اجرای یک الگوریتم ضعیف ممکن است چند ساعت طول بكشد در حالی که یک الگوریتم خوب طراحی شنده ممکن است مرتب سازی لیست را در چند ثنیه تصام کند. بتابراین, برای مجموعه داده‌های ورودی بزرگتر, صرف زمان و تلاش, انجام تحلیل عملکرد و انتخاب الگوریتم درست طراحی‌شده که کار مورد تیاز را به شیوه‌ای کارآمد انجام می‌دهد. منطقی است. نماد ۵ بزرگ نماد ۵ بزرگ ‎shy‏ اولین بار توسط باخمن در سال 1894 در یک مقاله تحقیقاتی برای نقریب رشد الكوريتم معرفى شد. او نوشت: «.. با نماد ۲۷ ما میتی را بیان می کنیم که مرتبه آن نسبت به ۵ از مرتبه ۸۱ تجاوز نمی کند» (باخمن 1894 ص 401)». برای توضیح تحوه استفاده از نماد 810-0 دو تایع را در تظر بگیرید. ‎gles g(n) 9 F(n)‏ هستند. به يك تايع خاص نگاه کنید: (۶)0 > 10۳0۰۱016 و (9)8 = 7. توجه داشته باشید که هر ذو تیع با نزدیک شدن به بی تهایت به بی نهایت نزدیک می شون بيابيد با اعمال تابع دريابيم كه آيا (0)9 > ؟ برابر است يا خير. ابتدا اجازه دهيد 20

صفحه 25:
مجاسیه شود که برایر خواهد بود اقل 0 ری تال + ‎Fat 100m‏ 55 EE ‏واضح است که 614 با تزدیک شدن 8 به پی نهایت, مجدود است و به بی نهایت‎ ‏نشان می دهد که‎ )7( ۰ )7[60( > ٩09( > ۵ ‏نزیک نمی شود بنابراین‎ ‏بيجيدكى اين تایع با مجذور ورودی های 8 افزایش می یابد. اگر تعداد عناصر‎ ‏ورودی را دو برابرکنیم.انتظار می رود پیچیدگی 4 افزایش یاید. به 5 فانون زیر‎ ‏در هنگام کار با نماد 0-0 توجه كنيد.‎ فانون 1: اجازه دهید به پیچیدگی حلفه ها در الگوریتم ها نگاه کنیم. اگر یک الگوریتم دناله خاصی از مراحل را 8 بار انجام دهد پس عملکرد آن 6171 می باشد. فانون 2: اجازه دهید به حلفه های تودرتوی الگوریتم ها نگاه کنیم. اگر یک الكوريتم تابعى را انجام دهد که دارای یک حلفه از 81 مرحله است. و برای حلقه آن 02 مرحله دیگر را اتجام دهد. عملکرد کل الگوربتم (2 ۱ 0)01 است. برای مثال اگر یک الگوریتم به عنوان حلقه های بیروتی و داخلی دارای 8 مرحله باشد. بيجيدكى الكوريتم با © - (7(08*0) برابر است. فانون 3: اگر یک الگوریتم تاع (8)؟ در 87 مرحله را انجام دهد. و سپس تا (9)8دیگری را در 72 مرحله انجام دهد, عملکرد کل الگوریتم ((900+(0166 a

صفحه 26:
فانون 4: اكر مرتبه يك الكوريتم ((5) + (0)9)8 باشد و تابع (45 9 بزركتر از ( 6 ۱ براى © های بزرگ باشد. عملکرد الگوربتم را می توان به ((000)0ساده کرد.به اين معنی که (08 < (0+)6و 0 = )"3 +07( فانون 5: هتگام محاسبه پیچیدگی یک الگوریتم. مضرب ثابت را نادیدهبگیرید. گر ۲ تابت باشد. (011:100‌همان ((016)8است. همچنین ((۶ >< 0161 همان ((0۷600است. بنابراین ۵ > 1 ۵/5( )و .۵ > ( ۶(0163)توجه داشته باشید که پیچیدگی تعبین شده توسط نماد ۵ بزرگ فقط یک تخمین است. برای اندازه کوچکتر داده هاء ما به پیچیدگی زمانی اهمیتی نمی دهیم. 80 در گراف, آستانه ای را که ما در بای آن علاقه مند بهیافتن پیچیدگی زمانی هستیمء تعریف مي کند.ناحیه سای‌دار ین ناحیه مورد علاقه را توصیف می‌کند که در آن پیچیدگی زمانی را تحلیل خواهیم کرد (700 بیچیدگی زماني بيشتر از تبع اصلی است. یک انتخاب خوب از (7)0 سعی مى كند يك كران بالابى محكم براى (5)0 ايجاد كند. جدول زیر انواع مختلف نشانه گذاری ۵ بزرگ را که در اين بخش مورد بحث قرار گرفته اند. خلاصه می کند یجید نام كلاس ‎Ti‏ 007 تابت آضافه گردن, دریافت مورد. تتظیم مورد Grell Spar Soul rrr 0۳092 ‎obs 0۳‏ كبى» درج حذفء تكرار ‏0۳۳ خطى لكاربتمى | مرتب كردن [يست, مرتب سازى ادغام ‎ ‎ ‎2 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 27:
70( درجه دوم حلفه های تو در تو بيجيدكى زمان نابت ((90)1). اگر یک الگوریتم زمان یکسانی برای اجرا. مستقل از اندازه داده های ورودىه صرف کند گفته می شود که در زمان ثابت اجرا می شود و با (0)1نشان داده می شود. اجازه دهید دسترسی به عنصر ام یک آرایه را مثال بزنیم. صرف نظر از اندازه آرايه. دريافت نتايج به زمان ثابتى نياز ذارة. براى مثال. تايع زير اولين عنصر آرايه را برمى كرداند و داراى بيجيدكى (0)1است: هارما ملعمو 466 1 ]10[ ‎my_list(el‏ مهم |2 The output is shown as: (11) 1 getFirse(t1, 2, 31) 9, 101) 121 getrirst(t1, 2, 3, 4 5) 6 7 افزودن یک عنصر جدید به پشته با ستفاده از 8050 با حذف یک عنصر از پشته با استفاده از ۰۴02 صرف نظر از اندازه پشته, اضافه کردن با حذف یک عنصر به همان اندازه طول مي کشد. دسترسی به عنصر ۱۵5/۱6۵016 (همانطور که در فصل 2, ساختارهای داده مورد استفاده در الكوريتم ها مورد بحث قرار مى كيرد). ‎cag‏ ضار ‎APNG s GAT GIN MIL DE NaC BILLA) leas‏ الكوريتم ها مورد بحث قرار مى كيرد). 2

صفحه 28:
بیچیدگی زمان خطی ((0)0). گفته می شود كه يك الگوریتم دارای پیچیدگی زمان خطی است که با (01 نشان داده می شود اگر زمان اجرا مستقیمً با اندازه ورودی متتاسب باشد. یک منال ساده اضافه کردن عتاصر در یک ساختار داده تک بعدی است: def get_sum(my_list): sum 3 for item in my_list: sum sum + item return sum مر يم يناه نا به حلقه اصلى الكوريتم توجه كنيد. تعداد تكرارها در حلقه اصلى با افزايش مقدار به صورت خطی افزایش می‌باید و پیچیدگی (010 را در شكل زير ايجاد مىكند: 24

صفحه 29:
1 get_sum([1, 2, 3]) 1 get_sum([1, 2, 3, 4[( 10 چند نمونه دیگر از عملیات آرایه به شرح زیر است: جستجوی یک عنصر یافتن حداقل مقدار در بين تمام عناصر یک آرایه ييجيدكى زمان درجه دوم (7(9)). به يك الكوريتم كفت مى شود كه در زصان درجه دوم اجرا مى شود اكر زصان اجرای یک الگوریتم با مجذور اندازه ورودی متناسب باشد. به عنوان مثال: یک تایع ساره که عنام یک آزیه دو‌یعدی ره زسوزت وير جمع من ‎a8‏

صفحه 30:
1 def get_sum(my_list): 2 sum = 0 3 for row in myList: 4 for item in row: 5 sum += item 6 return sum به حلقه داخلی تو در تو در حلقه اصلی دیگر توجه کنید. اين حلفه تو در تو پیچیدگی 0( ) را به کد قبلی می دهد: ‎get_sum([[1, 2], [3, 411)‏ 1 ]13[ 10 ‎get_sum([[1 ,2, 31,4, 5, 611)‏ 1 ]15[ 21 مثال دیگ ر الگ وریتم مرتب سازی حبایی است (هم اتطور که در فصل 2 ساختارهای داده مورد استفاده در الگوریتم ها مورد بحث قرار خواهد گرفت). ‏بیچیدگی زمان لگاریتمی ((0)1090). 26 ‎ ‎

صفحه 31:
به الگوریتمی گفته می شود که در زمان لگاریمی اجرا می شود اگر زمان احرای الكوريتم متتاسب با لگرنتم اندازه ورودی باشد. با هر تکرا, اندزه ورودی با یک فاکتور چندگانه ثابت کاهش می یابد. تمونه ای از الگوریتم لگاریتمی چستجوی دودوبی است. الگوریتم جستجوی دودوبی برای یافتن یک عنصر خاص در یک ساختاردده تک بعدی مانندلیست پایتون استفاده می شود. عناصر درون ساختار داده باید به ترتیب تزولی مرتب شوتد. الگوریتم جستجوی باینری در تابعی به نام 56866081080 به صورت زير بياده سازى مى شود 1 def search_binary(my_list, item): first = 0 last = len(my_list)-1 found_flag = False while(first <= last and not found_flag): mid = (first + last)//2 if my_list [mid] == item: found_flag = True 9 else: 10 if item < my_list [mid]: 11 last = mid - 1 2 else: 13 first = mid +1 14 return found_flag خلفه اضین از ‎aps al 2 58 os sla aay Gul‏ هن لیست را با هر تکراربه نصف تقنسیم می کند تا ‎ane a‏ پرسدد پس از تعریف تاه برای جستجوی یک عنصر خاص در خطوط 11 و 12 آزمايش مى شود. الكوريتم جستجوى دودوبى در فصل 3, الكوريتم هاى مرتب سازى و جستجو بيشتر مورد بحث قرار مى كيرد. توجه داشته باشيد كه از بين جهار توع نماد 0بزرك ارائه 27

صفحه 32:
شده, 0( ) بدترین عملکرد و (010008 بهترین عملکرد را درد در وافع. عملک رد ‎Oflogn)‏ را می توان به عنوان استاندارد طلابی برای عملکرد هر الگوریتم در نظر گرفت (که البته هميشه به دست نمی آید). از طرف دیگر, ۵( ابه بدی 7(۵) تسیز( اما با ان وجنود الگوزینم ‎lib‏ که ذرزاین کلانن فنزار می گیرتة را سی. بوان:نوی:دادههای:بزرگ استفاده کزد: زیر پیچیدگی: زماین مجندودیت هاین: را دز: مورذ اینگة چه مقذار داده می توانند به طور واقعی پردازش کنند. انجاذ می کند. یکی از راه‌های کاهش پیچیدگی یک الگوریتم. به خطر انداختن دقت آن و تولید نوعى الكوريتم به نام الكوريتم تقريبى است. اعتبار سنجی یک الگوریتم اعتبارسنجی یک الگوریتم تأیید می کند که در واقع یک راه حل ریاضی برای مسئله ای که ما سعی در حل آن داریم,ارائه می دهد. یک ‎wl ah ota last auld‏ را براى هر جه بيشتر مقادير ممكن و انواع مقادير ورودى بررسى كند. الگوریتم های دقیق, تفریبی و تصادفی اعتبار سنجی یک الگوریتم همچنین به نوع الگوریتم بسنگی دارد زب را تکنیک های آزمایش متفاوت است. بیاییدابتدا بين الگوریتم‌های قطعی و تصادفی تفاوت قانل شویم.برایالگوریتمهای قطعی, یک ورودی خاص همیشه دقیقا همان خروجی را تولید می‌کند. اما برای کلاس های خاصی از الگوریتم هاء دتباله ای از اعداد تصادفی تيز به عنوان ورودى در نظر گرفته می شود که هر بار که الگوریتم اجرا ‎Ge‏ شود, خروجی متفاوت می شود. الگوریتم خوشه‌بندی 06۵75), که در فصل 6 الگوزنعم‌هان بادگیزی ماستن بدون نظارت بة تفضیل توضیع داده ‎weil paca‏ نمونه‌ای از چنین الگوریتمی است: 28

صفحه 33:
0 0 شکل 2-1: الگوریتم های فطعی و تصادفی همجنين الكوريتمها را می‌نوان بر اساس فرضیات با تفریی که برای ساده‌سازی منطق براى اجراى سريعتر آنها به كار مىرود به دو نوع زیر نقسیم کرد * الگوریتم دقیی: انتطار می‌رودالگوریتم‌های دقیق بدون ارائه هیچ گونه فرضى يا تقريبى. راوحل ذقيقى را ارائه دهند. ۰ یک الگوریتم تقریبی: زمانی که پیچیدگی مستله برای منایع داده شده بیش از حد است, ما با ایجاد برخی فرضیات مسئله خود را ساده می کنیم. الكوريتمهاى مبتتى بر اين سادهسازىها با فرضيات, الگوریمهای تقریبی ناميده مىشوند, كه كاملاً راوحل دقيقى را به ما نمىدهد. بياييد به مثالى نگاهکنیم تا تغاوت بین الگوریتمهای دفیق و تفریبی را درک نیم - مسئله معروف فروشنده دوره گرد. که در سال 1930ارائه شد. یک فروشنده دوره كرد شما را به جالش مى كشد تا كوتاه ترين مسير را براى فروشنده خاصي که ‎won argh pad gl‏ كند لان أيسعن ل شهرها)پدا کید و سیس ‎Laue a‏ بازامی گزدد. بة هفین ذلیل ات که او زا فزوشتنده کوزخ گرد بامیتع اند اولين تلاش براى ارائه راه حل شامل تولید همه جایگشت های شهرها و انتخاب ترکیبی از نشهرها است که ارزان ترین باشذ. بذبهی است که پیچیدگی زمانی پیش از 30 شهر غيرقابل مديريت مى شود. اكر تعداد شهرها بيش از 30 شهر باشد؛ یکی از راه های کاهش پیچیدگی, معرفی 29

صفحه 34:
برخی تقریب ها و فرضیات است. برای الگوریتم های تقريبى. تعيين انتظ ارات ببرای آن مهم انس دقت ذر هنگ ام جمع آوزی نبارفن ذنهای اعتبارسنجی یک الگوزیتم تقریبی در مورد تأیید این است که خطای نتایج در محدوده قابل قبولی است. توصیح پذیری هنگامی که الگوریتم‌ها برای منوارد بعرانی استفاده می‌شنوند. داشتن توانایی توضيح دليل يشت هر نتيجه در هر زمان كه نياز باشد, مهم می‌شود. این امر سرای اطمینان از اينکه تضمیمات فبتنی بر نتانج الگوریتم‌ها: سوگیزی ایجاد نمی‌کنند ضروری است. توانایی شناسایی دقبق ویژگی‌هایی که بوطور مستقيم يا غیرمستقيم برای ارائه یک تصمیم خاص استفاده می‌شوند, توصیعپذیری یک آلگوزيدم:بامیده من‌هوی: الگوزیمم :ها رم ان که :بنزای: سوارد امفاده حیامی. استفاده می شوند, بايد از نظر سوكيرى و بيش داورى ارزيابى شوند. تجزيه و تحليل اخلافى الكوريتمها به بخشی استاندارد از فرآین د اعتبارسنجی برای الگوریتم‌هابی تبدیل شده است که مي‌توانند بر تصمیم‌گیری مرتبط با زندگی افراد تأثیر بگذارند. برای الگوریتم‌هایی که با یادگیزی عمیق سروکار دلرند: دستتیایی بند توضیح‌پذیری دشوار است. به عتوان منال, اگر از الگوریتمی برای رد درخواست وام هسکن یک شخص استفاده شود داشتن شفافیت و توانایی توضیح اليل مهم است. توضیح پذیری الگوریتمی, یک حوزه فعال تحقیق است. یکی از تکنیک‌های موثری که اخیرا توسعه یافته است. تبیین‌های مدل قابل تفسیر محلی-آگنوستیک ( ‎cul (LIME‏ هماتطور که در مجموعه مقالات پیست و دومین انجمن ماشین‌های محاسیاتی (۸6۱۸) در کنفرانس بین‌المللی گروه علاقه‌مند ویژه در کشف دانش و داده کاوی در سال 2016 (5۱616080) پيشنهاد شد. ۱1۸/۴ میتتی بر مفهومی است که در آن تغييرات كوجكى در ورودی برای هر نمونه ایجاد می شود و سیس تلاشی برای ترسیم مرز تصمیم گیری محلی برای آن نمونه انجام می شود. سپس می تواندتأثیر هر متفیر را برای آن نموته محاسبه کند. 20

صفحه 35:
wows ‏ابن فصل در موردیادگیری اصول الگوریتم ها بود. بدا با مراحل مختلف توسعه‎ ‏یک الكوريتم آشنا شدیم. ما در مورد ره های مختلف تعبین منطق یک الگورینم که‎ ‏برای طراحی آن ضروری است بحث کردیم. سپس نحوه طراحی یک الگوریتم را‎ ‏بررسى كرديم. ما دو روش مختلف براى تجزيه و تحليل عملكرد یک الگوریتم را باد‎ ‏اكرفتيم. در نهايت, جنيءهاى مختلف اعتبارستجى يك الكوريتم را مطالعه کردیم.‎ ‏پس از گذراندن این فصل, بايد بتوانيم شبه كد يك الكوريتم را درك كنيم. ما بايد‎ ‏مراحل مختلف توسعه و استقرار يك الكوريتم را درك كنيم. ما همجنين باد كرفتيم‎ ‏که چگونه از نماد ۵ بزرگ برای ارزیابی عملكرد يك الكوريتم استفاده كنيم: فضل‎ “ai SWIRL ‏مورد استفادج دز الگوزننم ها اننت: فا‎ sally lla ‏نی در مور‎ ‏ساختارهای داده موجود در پیتون شروع خواهیم کرد. سپس بررسی خواهیم کرد‎ ‏که چگونه ی‌توانم از ین ساختارهای داده برای ایجاد ساختارهای دادهپیچیده‌تر‎ ‏مانند پشته‌ها. صف‌ها و درختان استفاده کنیم که برای توسعه الگوریتم‌های پیچیده:‎ مورد نیاز هستند. 2 ساختار داده های مورد استفاده در الگوریتم ها a

صفحه 36:
الگوریتم‌ها به ساختارهای داده درون حافظه‌ای نیاز دارند که بتواتند داده‌های موقت را در حین اجرا نگه دارند. انتخاب ساختارهای داده مناسب برای اجرای کارآمد آتها ضروری است. كلاس هاى خاصى از الكوريتم ها در منطق بازگشتی با تکرار شونده هستند و به ساختارهای داده ای تیا دارند که به طور ویژه برای آنها طراحی شده باشد. رای مثال, اگر از ساختارهای داده تودرتو استفاده شود, یک الگوریتم بازگشتی ممکن است راحت‌تر پیاده‌سازی شود و عملکردبهتری از خود نشان دهد. در این فصل, ساختار داده ها در زمینه الگوریتم ها مورد بحث قرار می گیرد. از آنجایی که ما در اين كتاب لز 591968 استفاده مى كنم اين فصل بر روی ساختارهای داده ایتون تمرکز دارد.:اما مقاهیم ارانه شده در این فصل زا می:توان دز زیان های دیگر: ماند 9۵[ و ++>استفاده کرد. در بايان اين فصل, شما بايد يتوانيد درك كنيد كه چگونهپیتون نتافدارهای داد پیچید ای را مدیریسد ی کدد و کدامیک باه رای نوع خاصی از داده استفاده شود. از اين روء ذر اينجا نكات اصلى مورد بحث در اين فصل آمده أست: * كاوش انواع داده هاى داخلى بايتون © استادة اشرق وديا فريم * بررسى ماتريس ها و عملبات ماتريس © آشتايى با انواع داده هاى انتزاعى (867) کاوش انواع داده های داحلی پایتون در هر زبانی, از ساختارهای داده برای ذخیره و دستکاری داده های مجموعه استفاده می شود. در پایتون. ساختارهای داده محفظه های ذخیره سازی برای مديريت, سازماندهی و جستجوی داده ها به روشى کارآمد هستند.آنها برای ذخیره گروهی از عناصر ذاده به نام مجموعه ها استفاده می شوند که باید با هم ذخیره و پردازش شوند. در پابتون. ساختارهای داده مهمی که می توان برای ذخیره مجموعه ها استفاده کرد در جدول 2-1 خلاصه شده است: 2

صفحه 37:
ساختار داده توضيح خلاصه ۳3 ‎Tua‏ یک توالى منظم, تو در تو و قايل ‏ |[,33,10208]6 ,0187ل تغییر از عناصر. ‎(True‏ ‏تال یک توالی غیرقابل تقییر منظم آز ۰ |77 عناصر ‎‘Yel‏ عناق ‎Red'Green'‏ ‎(low ‎Tod Spam, 125167 | ‏ديكشترى 2 | مجموعه آى نامرتب آز جفت هی‎ ‏کلید-مقدار سر‎ ‏مجموعه..- | مجموعه آی بآمرتب آرعتاصر ‎Ta, DCF)‏ ‎ ‎ ‏جدول 1-2: ساختارهای داده بايتون ‏اجازه دهید در بخش‌های فرعی با جزئيات بيشتر به آنها نكاه كنيم. ‏لیست ها ‏دپاتوج: سس بوع اسلن دآذهآی آست گه یی قغبره نگ ناه مضیرآ ‏عناصر استفاده می شود. توالی عتاصر ذخیره شده در لیست می تواند از یک نوع ‏نباشد. يك ليست را مى توان با محصور كردن عناصر در [ ] تعريف كرد و ‎sub lel‏ ‏با كاما از هم جدا شوند. به عنوان مثال, كد زير جهار عنصر داده را با هم ايجاد مى ‏کند که انواع مختلفی دارتد ‎1 ‎>>> print(List_a) ‎['John', 33, ‘Toronto’, True] ‏در پایتون, لیست روشی مفید برای ایجاد ساختارهای داده قاببل نوشتن یک بعدی است که به ویژه در مراحل مختلف داخلی الگوریتم ها مورد نیاز است. ‎ ‎>>> lista ‎2 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 38:
استفاده از لیست ها ‎el‏ سودمند در ساختارهای دادم آنها را بسيار مقيد مى كند زيرا مى توان از آنها برای مدیریت داده ها در لیست ها استفاده کرد. بیایید بيبنیم چگونه می توانیم از نها استفاده کنیم شاخص سازی لیست: از آتجایی که موفعیبت یک عتصر در یک ليست تعيين ندري اكد ار ‎wast‏ ی وان یرای ‎alps‏ علفت رز یک متوفعنت عنام استفاده کرد.کد زیر مفهوم را تشان می دهد ‎bin_colors=['Red", 'Green', "Blue", ۱۷۵۱۱۵ [‏ >>> ‎bin_colors{1]‏ >>> ‘Green’ ‏لیست چهار عتصری ایجاد شده توسط این کد در شکل 1-2 نشان داده شده‎ ‏است:‎ ‏مععع || فع8‎ [۳ 306 | ۷۵۵ | ۷وسعع‎ 0 1 2 3 \ \ ۱ Indexes شکل 1-2: يك ليست جهار عنصرى در يايتون 3

صفحه 39:
توجه داشته باشید که در پایتون یک زیان شاخص سازی صفر است: این بدان معتانست که شاخض اولیه هر ساختر اده, از جمله لیست‌هاء 0 خواهذ بود. و *سیز" که دومين عتصر است, با شاخص 1: يعتى [1] 60106_«أنا بازيابى مى شود برش ليست؛ بازيابى زیرمجموعه‌ای از عناصر یک لیست با تعبین محدوده ای از شاخص ها را برش مى كويند. كد زير را مى توان براى ايجاد يك برش از ليست استفاده کرد >>> bin_colors=['Red",, ‘Green’, "Blue" , 'Yellow'] >>> bin_colors{0:2] ['Red', 'Green"] توجه داشته باشید که لیست ها یکی از محبوب ترین ساختارهای داده تک بعدی در بايتون هستند. هنگام پرش یک لیست: محدوده به صورت زیر نشان داده می شود: عدد اول (شامل) و عدد دوم (غیرشامل). به عنوان مثال, [0:2] ‎Jal bin colors‏ }0{ ‎bin color [1] 5 bin color‏ خواهد بود اما [2]- ‎bin_coLor‏ نیست. در هنگام استفاده از ليست هاء این را بید در نظر داشت زیرا برخی از کاربران زبان پیتون شکایت دارند که اين کار خیلی شهودی نیست. بيابيد به قطعه كد زير نكاهى بيندازيم: >>> bin_colors=[‘Red', ‘Green’ , ‘Blue’ , ‘Yellow' ] >>> bin_colors[2:] ['Blue!, ‘Yellow’ ] >>> bin_colors[:2] ['Red', 'Green'] as

صفحه 40:
اگر شاخص شروع ,مشخص نشده باشد به معنای ابتدای لیست است و اگر شاخص پاباتی, مشخص تشن باشد به معنای انهای لیست است, هماتطور که در کد قبلی نشان داده شده است. شاخص سازى منفى: در بايتون نيز منفى داريم. شاخص هابى كه از انتهاى ليست ةعصان من كينت اين كسيد در كد زهان ‎ail soils‏ >>> bin_colors=['Red",, ‘Green’, "Blue", 'Yellow'] >>> bin_colors{:-1] ['Red', ‘Green’, 'Blue'] >>> bin_colors[:-2] ('Red', 'Green'] >>> bin_colors[-2:-1] (Blue! توجه داشته باشید که شاخص های منفی به ویژه زمانی مفید هستند که بخواهیم از آخرین عنصر به عنوان نقطه مرجع به جای اولين عنصر استفاده كنيم. تودرتوة یک عنصر از یک لیست می تواند از هر نوع دده ای باشد ان امر.امکان تودرتو بودن در لست ها را فراهم می کند. برای الگوریتم‌های تکراری و بازگشتی, اين كار قبلیت‌های مهمی را ارائه می‌کند. [1,2,]180,200,300[,6] < و حجد ‎max(a{2])‏ 300 200 a2) (2) ¥ 36

صفحه 41:
Ls حلقه ایجاد شود. اين فضیه در مثال زیر نشان داده شده است: ایتون با استفاده از حلقه ۴0۴ اجاژه می دهد تا روی هر عنصر در لیست >>> bin_colors=[‘Red' , ‘Green’, Blue’, "Yellow [ >>> for this_color in bin_colors: print(f"{this color} Square”) Red Square Green Square Blue Square Yellow Square توجه داشته باشيد كه كد قبلى در ليست تكرار مى شود و هر عنصر را جاب مى کند. range et ‏تابع ۲۵096 می تواند برای تولید آسان لیست بزرگی از اعداد استفاده شود. برای‎ ‏پر کردن خودکار توالی اعداد در یک لیست استفاده می شود. استفاده از تنم‎ ‏ساده. است. ما می توانیم فقط با تین تعداد عناصر مورد نظر در لیست‎ range ‏از آن استفاده کنیم. به طور پیش فرص, از صفر شروع مى شود و یکی یکی‎ افزايش مى يابذ: >>> x = range(6) (0,1,2,3,4,5] همجنين مى تواتيم شماره پایان و مقدار افزايش را مشخص کنیم: 0

صفحه 42:
>>> odd_num = range(3,29,2) >>> odd_num (3, 5, 7, 9, 11, 13, 18, 17, 19, 21, 23, 25, 27] تایع ۲۵096 قبلی اعداد فرد را از 3 تا 29 به ما می دهد. پیچیدگی زمانی لیست ها پیچیدگی زمانی توایع مختلف یک لیست را مي توان با استفاده از نماد 0بزرگ به صورت زیر حلاصه کرد پیچیدگی زمانی متدهای مختلف * درج يك عنصر (0)1 * حذف يك عنصر ‎sp) O(N)‏ بدترين حالت ممكن است كل ليست تكرار شود) * برش يك ليست (0)]0 * بازيابى عنصر (0]0 ‎٠»‏ كبى ‎O(n)‏ ‏لطفاً توجه داشته باشید که زمان صرف شده برای افزودن یک عنصر مستقل از اندازه لیست است. سایر عملیات ذکر شده در جدول به اندازه لیست بستگی دارد. با بزرگتر شدن اندازه لیست. تأثیرآن بر عملکرد بیشتر می شود نايل ها دومین نناختار دده ای که می توان برای ذخبره یک مجموعه استفاده کرد یک ‎hl‏ ‏است. بر خلاف ليست هاء تايل ها ساختارهاى داده غيزقايل تغيير (فقط خواندتئ) هستند. تايل ها از جتذين عنصر احاطه شده توسط (#تشکیل شده اد مانتد ليست هاء ‎polis‏ داخل يك تابل مى تواتند انواع مختلفى داشته باشند. آنها همجنين انواع داده هاى مجموعه را يراى عناصر خود اجازه مى دهند. بنايراين, 28

صفحه 43:
می‌تواند یک تاپل در یک تایل وجود داشته باشد که راهی برای ایجاد یک ساختار داده تودرتو فراهم می‌کند. قابلیت ایجاد ساختارهای داده تو در تو به ویژه در الگوریتم های تکراری و بازگشتی مفید است. کد زیر نجوه ایجاد تابل ها را نشان >>> bin_colors=(‘Red', ‘Green*, ‘Blue’, "YelLow") >>> bin_colors[1] ‘Green’ >>> bin_colors[2:] ‎"Yellow" )‏ ره ‎>>> bin_colors{:-1] ‎('Red', ‘Green’, ‘Blue") ‎# Nested Tuple Data structure >>> a = (1,2, (100,260,300) ,6) >a> max(a[2]) ‎300 ‎>>> a2] [1] ‎200 ‏تا جایی که ممکن است, ساختارهای داده تفیناپذیر (مانند تایل ها) به دلبل عملکرد.بید بر ساختارهای داده قأرل غبير ‎(ln caudate)‏ تجن داده شوند. به خصوص هنگامی که با داده های بزرگ سروکار داریم, ساختارهای داده غیرفابل تفییربه طور فابل توجهی سریعتر از ساختارهای قابل تفییر: هستند. وفتی یک ساختار داده به يك تابع به عنوان تغيبرنايذير ارسال مى شود. نیازی به ایجاد کپی ‎gas ule Loy coats ol‏ تواند آن را تغيير دهد. بنايراين, خروجی می تواند به ساختار داد وروذى اشاره داشته باشد. اين قضيه شفافيث لرجاعى تاميده من ‎29 ‎ ‎

صفحه 44:
شود و عملکرد را بهبود می بخشد. ما بای توانایی تییر عناصر داده در لیست ها هزینه ای می پردازيم و بایدبه دفت تجزیه و تحلیل کنیم ‎Lally oS‏ مورد از است. تا بتوانيم كد را به صورت تایل های فقط خواندنی بیاده سازی کتیم که بسیار سریعتر خواهد بود توجه داشته باشيد كه از آنجابى كه بايتون يك زین مبتنی بر شاخص صفر است, [ 2 3 به عنصر سوم كه یک تابل است (100,200,300) اشاره دارد و [11 3 بيه عتصر دوم در اين بل اشاره دارد که 200 است. بیچیدگی زمانی تابل ها پیچبدگی زمانی توابع مختلف تاپل ها را می توان به صورت زیر خلاصه کرد (یا استفاده از نماد 0بزرگ): پیچیدگی رمان تابع Append O(1) توجه داشته باشید که ۸0۲60۵ تبعی است که یک عتصر را به انتهاى تال موجنود اضافه مي کند. پیچیدگی آن (0)1 است. دیکشتری ها و مجموعه ها در اين بخش مورد بررسی فرار خواهند گرفت که برای ذخیره داد هایی استفاده می شود که ترتيب صریح با ضمنی وجود ندارد. هم دیکشتری و هم مجموعه ها کاملا شبیه هم هتتند.تفاوت این اسست که دیکشتری دارای یک جفت کلید و یک مقدار است. مجموعه را می توان مجموعه ای از کلیدهای متحصر به فرد در نظر گرفت. اجازه دهید آنها را یکی یکی بررسی کنیم دیکشتری ها نگهداری داده ها به عنوان جفت کلیدمقداربه ویژه در الگوریتم های نوزیع شده مهم است. در پایتون مجموعه ای از اين جفت های کلیدمقدار به عنوان یک ساختار داده به نام دیکشنری ذخیره می شود. برای ایجاد یک فرهنگ لفت, کلیدی باید به عنوان ویژگی انتخاب شود که برای شتاسایی داده ها در طول پردازش دادم 0

صفحه 45:
ها مناسب باشد. محدودیت در مقدار گلیدها این است که یامد انواع فابل هش باشند. قابل هش توعى از اشياء است كه مىتوانيم تایه هش را احرا کنیم و کد هشى توليد مىكند كه در طول عمرش هركز تغيير تمىكند. ابن كار تضمين م کند که 1212 1 1 سریع است. اناع عددی و انواع رشته هاى غبرقابل تغيير مسطح همكى قابل هش هستند و نتخاب خوبی برای کلیدهای ديكشترى هستند. مقدار مى تواند عنصرى از هر نوع باشد, به عنوان مثالء يك ند با زشته,پایتون همچنین همیشه از انواعداده های مجموعه مانندلیست ها به عنوان مقادير استفاده مى کند. دیکشتری های تودرتو را می توان با استفاده از دیکشتری به عنوان توع داده یک ‎led lain‏ کرد. رای ایجاد یک دیکشنری ساده که رنگ ها را به متغیرهای مختلف اختصاص می دهد. جفت های کلید-مقدار باید در [) محضور شوند: به غنوان مثال, کد زیر یک فرهنگ لفت ساده متشکل از سه جفت کلید-مقدارایجاد می کند: >>> bin_colors "manual_color": "Yellow", "approved color": "Green", "refused color": "Red" 1 >>> print(bin_colors) {'manual_color': 'Yellow', ‘approved color': ‘Green’, ‘refused color': 'Red'} سه جفت کلید-مقدار ایجاد شده توسط قطعه كد قبلى نيز در تصویر زیر نشان داده شده است: a

صفحه 46:
keys values ‘olor’ manual ‘approved_color' ومو bin_colors ‏شکل 2-2: جفت های کلید-مقدار در یک دیکشنری ساده‎ ‏آکنون, بيابيد ببينيم که چگونه یک مقدار مرتبط با یک کلید را بازابی و به روز کنیم:‎ ‏برای بازیابی یک مقدار مرتبط با یک کلید. می توان از تابع 968 يا كليد به عنوان‎ شاخص استفاده کرد: >>> bin_colors.get(‘approved_color') ‘Green’ >>> bin_colors[ ‘approved color’ ] ‘Green’ برای به روز رسانی یک مقدار مرتبط با یک کلید, ‎a8‏ زیر استفاده کنید: ۱ >>> print(bin_colors) {'manual_color': 'Yellow', ‘approved color’: ‘Purple’, ‘refused color: ‘Red'} a

صفحه 47:
توجه داشته باشيد كه كد قبلى نشان می‌دهد که چگونه می‌توانیم یک مقدار مربوط به یک کلید خاص را در دیکشتری به‌روزرسانی کنیم. مجموعه ها ارتياط نزدیک با دیکشتری, مجموعه ای است که به عنوان مجموعه ای نامرتب از غناضر متمایز تعریف می شود کف می توانتد انواع مختلفی داشته باسند: یکی از راه های تعریف مجموعه, محصور کردن مقادیر در () است. به عنوان مثال, به بلوک کد زیر نگاه کنید: >>> green = {'grass', ‘Leaves'} >>> print (green) {'grass', ‘leaves'} مشخصه تعیین کننده یک مجموعه این است که فقط مقدار متمایز هر ععصر را ذخیره می کند. اگر بخواهیم عنصر اضافی دیگری اضافه کنیم. همانطور که در زیر نشان داده شده است. آن را نادیده می‌گیرد: >>> green = {‘grass', ‘Leaves', ‘Leaves'} >>> print(green) {'grass', ‘leaves'} برای نشان دادن اینکه چه نوع عملیاتی را می توان روی مجموعه ها انجام داد ایند دو مجنوعه: را عزیف کنیم: فججوع ای ب نم رزد: که دارای ‎atl aay‏ كه زرد هستند. مجموعه أى دیگر به نام قرمز, که دارای چیزهایی هستند که قرمز هستند توجه داشته باشید که برخی چیزها ین اين دو مجموعه مشترک است. این دو مجموعه و رابطه آنها را مى توان با کمک نمودار ون زیر نشان داد a

صفحه 48:
نمودار ون که تشان می دهد چگونه عناصر در مجموعه ها ذخیره می شوند كر بخواهيم اين دو مجموعه را در بايتون بباده سازى كنيم, كد به شكل زير خواهد مود ‎yellow = {‘dandelions', ‘fire hydrant", ‘Leaves'}‏ >>> ‎red = {'fire hydrant’, ‘blood’, ‘rose’, ‘Leaves'}‏ >>> حالا ید کد زیر را در نظر بگيريم که عملیات مجموعه را با استفاده از پیتون تشان می دهد ‎yellow red‏ >>>

صفحه 49:
{'dandelions', ‘fire hydrant’, ‘blood’, ‘rose’, “leaves'} >>> yellowsred {'fire hydrant’, ‘leaves’} همانطور که در قطعه كد قیلی تشان داده شده است, مجموع» ها در پایتون می توانندعملاتیماننداجتماع و اشتراک داشته باشند. همانطور که می دانیم. یک عملیات اجتماع همه عتاصر هر دو مجموعه را ترکیب می کند و عملیات اشتراک مجموعه ای از عناصر مشترك بين دو مجموعه را به دست مى أورد. به موارد زير توجه كنيد: زرد|فرمز براى به دست آوردن اجتماع دو مجموعه تعریف شده قبلى استفاده می شود. زرد 6 قرمز بزای اشتراک بین زرد و قرمز انتفاده مي شود تجزیه و تحلیل پیچیدگی زمانی برای دیکشتری و مجموعه ها در زیر تجزیه و تحلیل پیچیدگی زمانی برای مجموعه ها آمده است: مجموعه ها ‎ae‏ آضافه کردن یگ عتصر ‎omy‏ بآیابی یگ عتصر ‎OW‏ ۳ نکته مهمی که در تحلیل پیچیدگی دیکشتری با مجموعه ها باید به آن توجه کرد این است که آنها از جداول هش برای دستیابی به عملکرد (011 برای هر دو عنصر اضافه و جستجو استفاده می کنند.پاراین: زمان ضرف شده برای دریافت با تنظیم يك كليد-مقدار كاملاً مستقل از اندازه دیکشنری با مجموعه ها است. این به ین دلیل است که در یک دیکشتری , تایع هش کلیدها را به یک عدد صحبح تگاشت می کند که برای ذخیره جفت های کلید-مقدار استفاده می شود. کتابغانه 4

صفحه 50:
‎pandas‏ هوشمندانه از ‎shy gua eb‏ تبدیل یک کلید دلخواه به شاخص یک دنباله استفاده مى كند. اين به اين معنى است که زمان صرف شده برای رسیدن یک جفت كليد-مقدار به يك ديكشترى با اندازه سه, برابر با زمان لازم براى رسيدن يك جفت كليد-مقدار به يك ديكشنرى يا اندازه يك ميليون است. در مجموعهها فقط كليدهاء هش و ذخيره مى شوند و در نتيجه بيجيدكى يكسانى ايجاد می‌شود ‏چه زمانی از دیکشنری و چه زمانی از مجموعه استفاده کنیم؟ اجازه دهید فرص کنیم که ما به دنبال یک ساختارداده برای دفترچه تلفن خود هستیم. ما مى خواهيم شماره تلفن كارمندان يك شركت را ذخيره كنيم. براى اين ‎slain‏ دیکشتری ساختار ددم مناسین است. تام هر کارمتد کلید و مقتار آن شماره تلفن خواهد بود ‎phonebook = {‏ ‎“Ikrema Hamza": "555-555-5555",‏ ‎“Joyce Doston” : "212-555-5555"‏ 1 ‎ ‏اما اكر بخواهيم فقط مقدار منحصر به فرد كاركنان را ذخيره كنيم, بايد با استفاده از مجموعه ها انجام شود ‎1 ‎“rkrema Hamza", ‎"Joyce ۳ ‎1 ‎ ‎employees ‎La ool DataFramesProcessing 5 sau j| oslinu!‏ یکی از کارهای اصلی است که باید هنگام پیاده سازی اکثر الگوریتم ها انجام شود. در بایتون بردازش ‎46 ‎ ‎

صفحه 51:
داده ها معمولا با استفاده از توابع مختلف و ساختارهای داده کتابخانه ‎pandas‏ ‏انجام می شود. در اين بخش, دو ساختار داده مهم زیر را در کتابخانه ‎pandas‏ ‏بررسی خواهیم کرد که در ادامه اين کتاب در پیاده سازی الگوریتم های مختلف مورد استفاده فرار خواهند گرفت. ابتدا به ساختار داده سری نگاهی می اندازیم. سری ها در کتابخانه 56۳165 ۰ 088825 یک آرابه یک بعدی از مقادیر برای داده های همگن است. ما می توانیم سری را به عنوان یک ستون در یک صفحه گسترده در نظر بگیریم. شما می توانید فکر کنید سری دارای مقادیر مختلفی از یک متفیر خاص است. یک سری را می توان به صورت زیر تعریف import pandas as pd pd.Series(["red’, ‘green’, ‘blue’, ‘white’, ‘black’ ] توجه داشته باشید که در ساختارهای داده مبتتی بر سری در ۴80095 : یک اصطلاح "مجور" وجود دارد که برای نشان دادن دنباله ای از مقادیر در یک بعد خاص استفاده می شود. سری فقط "مجور ۵" دارد زیرا فقط یک بعد دارد. دز بخش بعدی که یک ساختار داده دو بعدی است, خواهیم دید که چگونه اين مفهوم محور در 0883۴7386 اعمال مى شود. DataFrane ‏یک 09۴0۴8۴6 بر اساس ساختار داده سری ساخته شده است و داده های‎ ‏جدولی دو بعدی را ذخیره می کند‎ ‏این ساختار یکی از مهم ترین ساختارهای داده برای الگوریتم ها است و برای‎ ‏پردازش داده های ساخت بافته سنتی استفاده می شود بییید جدول زیر را در‎ ‏نظن بكيزهود‎ Decision Age Wane 7 a

صفحه 52:
True 32 Fares 1 False Elena True a0 Seven 3 اکنون ببیید اين جدول را با استفاده از یک 038۵۴7۵06 نشان دهیم. یک ‎DataFrame‏ ساده را می توان با استفاده از کد زیر ایجاد کرد: >>> import pandas as pd >>> df = pd.DataFrane( ('1', ‘Fares’, 32, True], 12, "Elena", 23, Falsel, ['3!, ‘Steven, 40, True]]) >>> df.colums = ['id', ‘name’, ‘age', ‘decision’] ۲ ججد ‎id name age decision‏ ‎Fares 32 True‏ 1 0 ‎Elena 23 False‏ 2 1 ‎Steven 40 True‏ 3 2 توجه داشته باشید که در کد قبل, ۵11:08>. ۵۴ لیستی است که نام ستون ها را مشخص می کند. در 02۴8۴۳۵06 به یک ستون یا سطر, یک محور می گویند 06 همچنین در سایر زیان ها و فریم ورک هنای رایج برای پیاده سازی ساختار داده های جدولی استفاده می شود. به عنوان مثال از 8 و فریم ورک آپاچی اسپارک می توان نام برد 48

صفحه 53:
ایجاد زیر مجموعه ای از ‎DataFrame‏ ‏اساساً. دو ره اصلی برای انجاد زیرمجموعه 064۵۴۲06 وجوددارد(مل نم زیر مجموعه ۷0۴ ‎(cal‏ ‏۰ انتخاب ستون ۰ انتخاب سطر ببابيد آنها را يكى يكى بررسى كنيم. انتخاب ستون در الگوریتم هاییادگیری ماشین, نتخاب مجموعه مناسب از ویژگی ها یک کار ‎plat Guy Gl cial gs‏ ميركاي ماین کته شنگن استت؟داستته اه زا نکن ‎ial‏ ‏همه آنها در مرحله خاصى از الكوريتم مورد نباز نباشند. در پایتون, اتضاب وسژگی با اضاب ستون جاضّل من قتود که در آنن بختل نوی ذاده شوه است: مک ستون ممكن است با تام بازيابى شود مانند شكل زير: ‎dff{'name' ‘age‏ >>> ‎name age‏ ‎Fares 32‏ 0 ‎Elena 23‏ 1 ‎Steven 40‏ 2 موفعیت یک ستون در یک 0318۴۲806 قطعی است. یک ستون را می توان با موقعيت خود به صورت زير بازياين ‎df.iloc[:,3]‏ >>> 9 1 False 2 True 4

صفحه 54:
توجه داشته باشید که در اين کد, تمام ردیف های 0313۴7306 را بازیابی مى کنیم. انتخاب سطر هر سطر در یک 0۵68۴۴886 مربوط به یک نقطه داده در فضای مسئله ما است. اگر بخواهیم زیرمجموعه ای از عناصر داده ای را که در فضای مسئله خود داریم یجاد کنیم: بید انتخاب سظر را اتجام دهیم: این زیتر مجموعه را می توان با استفاده از یکی از دو روش زیر یجاد کرد ۰ با مشخص کردن جایگاه آنها * با تعيين فيلتر زیر مجموعه ای از سطر ها را می توان با موفعیت آن به صورت زیر بازيابى كرد: ‎aos‏ ‎id name age decision‏ ‎Elena 23 False‏ 12 ‎Steven 40 True‏ 23 توجه داشته باشید که کد قبلی سطر دوم و سوم به اضافه تمام ستون ها را برمی گرداند. از متد 1106 می توانیم استفاده کنیم که به ما امکان می دهد به عناصر با شاخص عددی آنها دسترسی پیدا کنیم. برای ایجاد زبرمجموعه با تعبین فیلتر, ‎dab‏ ‏از یک با چند ستون برای تعریف شرط انتخاب استفاده نیم. به عنوان مثال, زیر مجموعه ای از عناصر داده را می توان با این متد نتخاب کرد. به شرح زیر: >>> df {df -age>30] id name age decision @ 1 Fares 32 True 2.3 Steven 40 True

صفحه 55:
‎(df age<35)&(df .decision-‏ ]۵6 حجد ‎id name age decision‏ ‎Fares 32 True‏ 0.1 ‏توجه داشته باشید که اين کد زیر مجموعه ای از سطر ها را ایجاد می کند که ‎gua’ bul als‏ شده در فبلتر را برآورده می ‎AS‏ ‏ماتريس ها ‎gata‏ یک اهاز ‎agua slr pags obs‏ تن نت ‎Sis ju‏ ماتریس را می توان با ستون و سطر آن ارجاعداد. در نتون,همانطور که در کد زیر نشان داده شده است, می توان با استفاده از 0۴ /(۵۳۳۵ یک ماتریس ایجاد کرد ‎>>> myMatrix = np.array({{11, 12, 13], (21, 22, 23], (31, 32, 3311) ‎>>> print (myMatrix) ‎]]11 12 13[ ‎[21 22 23) ‎[31 32 331] ‎>>> print (type(myMatrix) ) ‎<class ‘numpy.ndarray'> ‏توجه داشته باشید که کد قبلی ماتریسی ایجاد می کند که دارای سه رديف و سه ‏ستون است. ‏عملیات ماتریسی ‎ ‎

صفحه 56:
عملیات های زیادی برای دستکاری داده های ماتریسی وجود دارد. برای منال, بيابيد سعى كنيم ماتريس قبلى را جابدجا كنيم. ما از تابع () 863058056 استفاده مى كنيم كه ستون ها را به سطر و سطر ها را به ستون تبديل مى ‎aS‏ >>> myMatrix. transpose() array({{11, 21, 311, (12, 22, 321, (13, 23, 3311) توجه داشته باشید که عملیات ماتریس در دستکاری داده های چندرسانه ای بسیار استفاده می شود. اکنون که در مورد ساختارهای داده در بایتون آموختیم. اجازه دهید در بخش بعدی به سراغ انواع داده های انتزاعی برویم. کاوش انواع داده های انتراعی انوع داده های انتراعی (۸۵7) ,نتزاعات سطح بالابى هستند كه رفتار آنها توسط مجموعه ای از متغیرها و مجموعه ای از عمليات مرتبط تعريف مئ شود. 807 ها راهنماى بباده سازى «آنجه» را كه بايد انتطار داشت را تعريف مى کنند. اما به برنامه نويس ‎aims coo il‏ كه «جكونه» دقيقاًبياذه سازى شوذ: به عنوان مثال از بردارها. صف ها و پشته ها می توان نام برد. این بدان معناست که دو برنامه نویس مختلف می تواند دو رویکرد متفاوت را برای پباده سازی یک پشته مانند ‎ADT‏ انخاذ کنند. با پتهان کردن جزئیات سطح پیاده سازی و دادن ساختار داده عمومی و مستقل از پیاده سازی, استفاده از ۸0۲ ها,الگوریتم هایی ایجاد می کند که هتجز یه کد ساده تز و تمیزتر من هود. 407 ها را می توان در هر زبان برنامه توسی مانتد 32۷3 ,++ع و 56818 پیاده سازی کرد. در اين بخش, ۸0۲ ها را با ستفاده از پیون پیاده سازی خواهیم کرد. ابتدا با بردارها شروع مى كنيم.

صفحه 57:
بردار بزداز یک ساحتار عدى يراق دعيره دأذه سا است: آنها كن آنمحينوب مرین: ساختارهاى داده در بايتون هستند. دو راه براي ايجاد بردار در بايتون به شرح زیر وجود داد © استفاده از ليست پاتون: ساده ترین راه برای ایجاد بردار استفاده از ليست پاتون به شرح زیر است: (22,33,44,55] >>> print (myVector) (22 33 44 55] >>> print(type(myVector)) >>> myVector <class ‘List'> توجه داشته باشید كه اين كد يك ليست با جهار عنصر ايجاد مى كند. + استفاده ازيك آرايه /إم08ا8: يكى ديكر از روش ها محبوب براى ايجاد یک بردار استفاده از آریه های ۱۵9۴ به شرح زیر است: (22,33,44,551] )ره ۵۳ .وم ‎print(myVector)‏ >>> [22 33 44 55) print (type(myVector)) <class ‘numpy.ndarray'> >>> myVector توجه داشته بشید که ما ۷66۴۵۲( را با استفده از ‎np.array‏ در این کدایجاد كرديم.

صفحه 58:
در پایتون. می‌توانیم اعداد صحیح را با استفاده از زیرخط برای جداسازی فطعات تمایش دهیم. آنها را خواناتر و کمتر مستعد خطا می کند. اين به ویژه در هنگام برخورد با اعدادزیاد مفید است. بنابراین, يك ميليارد را مى توان به ضورت _1-: 0000000 نشان داد. پشته ها پشته یک ساختار داده خطی برای ذخیره یک لیست تک بعدی است. پشته می تواند موارد را به صورت (۱2۶0) ‎First-In, Last-LLast-In, First-Out‏ ‎(FILO)‏ 00#ذخیره کند. مشخصه تعیین کننده یک پشته, نحوه افزودن و حذف عناصر از آن است. یک عنصر جدید در یک انتها اضافه می شود و یک عنصر فقط از نتها حذف می شود. عملیات مربوط به پشته ها در زیر آمده است: ۰ (158006: اگر پشته خالی باشد ۳۱۵ را برمی گرداند + 5نا: یک عتصر جدید اضافه می کند ‎pais pop +‏ اضافه شده اخبر را پرمی گرداند و آن را حذف می کند شکل 4-2 نشان می دهد که چگونه می توان از عملیات 5لام و ۵08 برای افزودن و حذف داده ها از پشته استفاده کرد:

صفحه 59:
PUSH Hie POP i] © =, = of, © a ۳ 2 pops Pushollac :4-2 ‏عکس‎ قسمت بالای شکل 4-2 استفاده از عملیات ‎PUSH‏ برای افزودن موارد به پشته را نشان می دهد. در مراحل 1.1 1,2 و 1.3, عملیات 50 سه بار براى افزودن سه عنصر به پشته استفاده می شود. قسمت پابینی نمودار قبلی برای بازیابی مقادیر ذخیره شده از پشته استفاده می شود. در مراحل 2.2 و 2.3, عملیات ‎sly Pop‏ بازیابی دو عنصر از پشته در قالب ۱1۴0 استفاده می شود. ببیید یک كلاس به نام 52 در پایتون ایجاد کنیم. جابی که تمام عملیات مربوط به کلاس يشته رأ تعريف مى كنيم. كد ین کلاس به صورت زیر خواهد بد class Stack def _init (self): self.itens = (1 def istmpty(self) return self.items = 01 3

صفحه 60:
def push(self, item): seLf.items. append (item) def pop(self) return self. items.pop() def peek(self) return self.items{Len(self.items)-1] def size(self): return len(self.items) برای اضافه کردن چهار عتصر به پشته. می توان لز کد زیر استفاده گرد

صفحه 61:
Populate the stack 2]: | stack=Stack() stack.push( ‘Red’ ) stack.push("Green") stack.push("S1lue”) stack. push("Yellow™) Pop stack.pop() "Yellow' stack. isempty() Out[7]: False توجه داشته باشید که کد قبلی یک پشته با جهار عنصر داده ايجاد مى كند. پیچیدگی زمانی پشته ها ييابيد به ييجيدكى زماتى بشته ها (يا استفاده از تماد ۵بزرگ) نگاه کنیم: عمليات پیچیدگی رمانس در 7 ‎Bop.‏ 07

صفحه 62:
OUT ‏رم‎ ‎ony peek کته ‎ga par Taal gf cas ag Glas al Sage‏ يك از جهار تاکن ول نز هه زگ رز مثال عملی پشته به عتوان ساخترداده در بسیاری از موارد استفاده می شود. بهعتوان مثال: زمانى كه كارير مى خواهد ناريخجه را در یک مرورگر وب مرو کند. این یک الگوی ‎cul IFO alee ay ysis‏ و متبوان ایک وس پترای نیز تبفچت. استفاده کرد. مثال دیگر زمانی است که کاربر می خواهد عملیات 800لا را در ترم افزار ۷0۲۵ انجام دهد صف ها مانند پشته ‎le‏ یک صف ۸ عنصر را در یک ساختار تک بعدی ذخبره می کند. عناصر در قالب ۴۱۴۵ اضافه و حذف می شوند. یک سر صف را انتها و سر دیگر را ابتدا می گویند. هنگامی که عناصر از ابتدا حذف می شوندد اين عملیات ‎Dequeve‏ ‏نامیده می شود هنگامی ‎polis aS‏ > انتها اضافه مى شونتدء عمليات ©نا©ناو0ع نامیده می شود. در نمودار زیر؛ قسمت بالایی عملیات صف را تشان می دهد. مراحل 1.1 1.2 و 1.3 سه عنصر را به صف اضافه مى كنتد و صف حاصل در 4 نشان داده شده است. توچه داشته باشید که رنگ زرد در انتها و قرمز در ابتدا است. قسمت پایین نمودار زیر یک عملیات ‎Dequetie‏ را تشان می دهد. مراحل ‎polis 2.4 9 2.3.2.2‏ را یکی یکی از انتای صف حذف می کند se

صفحه 63:
ENQUEVE DeQueve عم شکل 5-2: عملیات اضافه و حذف در صف صف نشان داده شدم در نمودار قبل را می توان با استفاده از کد زیر پیاده سازی کرد class Queue(object): def _init (self): self.items = [] def isEmpty(self): return self. items a def enqueue(self, item): self.items. insert (@,item) def dequeue(seLf) : return self. items.pop() def size(self): return len(self.items) sa

صفحه 64:
بياييذ با كمك تصوير زیر, عناصر را همانطور که در تمودار قبل نشان داده شده ‎cul‏ اصافه و حذف كنيم: ‎Using Queue Class queue = Queve() ‎queue .enqueue (‘Red’) ‎queue .enqueue(' Green’ ) queve enqueue ('21u2") queue .enqueue("Yellow’) ‎print (queue .size()) ‎4 ‎print (queue .dequeue() ) ‎Red ‎print (queue .dequeue()) ‎Green ‎60 ‎81 ‎۳ ‎ ‎In ‎ ‎

صفحه 65:
توجه داشته باشید که کد قبلی ابتدا یک صف ایجاد مي کند و سپس چهار عنصر را ‎oll a‏ اضافه می کند ایده اصلی برای استفاده از پشته ها و صف ها پیابید به ایده اصلي استفاده از پشته ها و صف ها با استفاده از یک فیاس نگاه کنیم. ییید فرض کنیم جدولی داریم که در آن نامه های دریافتی خود را از سرویس پستی فرار می دهیم. به عنوان مثال, پست کاناد. آنها را روی هم می چیتیم ع زمانی كه با كليم و نامه ها ‎Ly‏ نکن یکن نگاه کنيم: ذو زان برای ابا این: کاز وجود درد منامه زا دریک پشته قرار بت دهم :و هر زمآن کیک نامه جدد دریافت می کنیم. آن را در بلاق پشته فرار می دهیم. وقتی می‌خواهیم نامه‌ای را ‎aul spay‏ ای که بز الا نت شروع مي‌کنيم. این همان چیزی آننت که مه آن پشته می گوییم. توجه داشته باشید كه آخرین نامه ای که می رسد در بالا فرار می گیرد و ابتاپردازش می شود. برداشتن یک نامه از بای لیست: عملیات یاب نامیده می شود. هر وقت نامه جدیدی مي رسد, در بالا قرار مى كيرد وبه اين ‎push lat lat‏ مى كويند. اگر در نهایت یک پشته قابل توجه داشته باشیم و نامه های زیادی به طور مداوم وارد شوند. ان احتمال وجود دارد که هرگز فرصتي برای رسیدن به یک نامه سیر مهم در نتهای پشتهنداشته باشیم. اصا می‌خواهيم ابتدا فدیمی‌ترین نامه را مدیریت کنیم: هر بار که می‌خواهیم به یک یا چند نامه نگاه کنيم. بدا قدیسی‌ترین نامه را مدیریت مي‌کنيم. این همان چیزی است که ما به آن صف می گوییم. افزودن یک نامه به صف عملیات ۵01۵46 تامیده می شود. به حذف نامه از صف , عملبات 060۵6۱06 گفته می شود. در زميته الكوريتمهاء درخت به دلیل قابلیت ذخیره‌سازی سلسله مرانبی داده, یکی از مفیدترین ساختارهای داده است. در ین طراحی الگوریتم‌ها, از درخت‌ها در 6

صفحه 66:
هرجایی که نیازداریم برای نشان دادن روابط سلسله مرانبی بین عناصر داد‌ای كه بايد آنها را ذخيره با پردازش کنیم. استفاده می‌کنيم. ییید نگاه عمیق‌تری به این ساختار داده‌ای جالب و بسیار مهم داشته باشیم. یک عنصر داده شروع به نام ریشه و مجموعه ای از گره ها که توسط پیوندهایی به نام شاخه به یکدیگر متصل واژه شناسی ببیید به برخی از اصطلاحات مربوط به ساختار داده درخت نگاه کنیم: oils oe ee ‎be.‏ برآدر ‏ه فرزند و والد ‏درچه یک گره ‏درجه يك درخت ‎ ‏توضيع ‏ره بدون ود گره ريشه تاميده مى شود. به عنوان مثال» در تمودار زير, كره ريشه .8 است. در الكوريتمهاء معمولاً كره ریشه مهم‌ترین مقدار را در ساختار درختى دارد. فآصله آر كره ربشه. ساح يق كره آست. به ‎Pi Oe‏ تمودار زیر, سطح گره های 8 ,۵ و ۴ دو است. دو كره در يق درخت كر در يق سطح باته برآدر تاميده مب شوند.به عنوان منال, اگر نمودار زیر را بررسی کنیم, گره ‎asus ply Cy Bs‏ ‎pa lai ys ps Seal Co a,‏ متصل باشند و سطح گره ۲ کمتر ‎sue al FopS jl‏ گره » والد گره ۴ است. گره های ۲ و ۴ در نمودار زیر . رابطه والد-فرزند را نشان ترچه یک کرد يري تاد ترزتداتی آست که درد به حتوان مثال, در نمودار زیر, گره 8 دارای درجه دو است. انق 2 و رار ابد ,ا عار كر 4 ۱ ,ه های تشکیل دهنده یک درخت یافت مي شود. به عنوان ‎62 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 67:
داحلی عتال درخت آرانه شدم در تمودار زیر دآرای درچه دو آست. [ارتركت يق درقت: يقشى أز ترقت آست كه كر اكاب شده به عنوان گره ريشه زیردرخت و همه فرزندان به عنوان گره های درخت است. به عتوان مثال, یک زبردرخت در گره ۴ درخت ارانه شده در نمودار زیر, از گره ۴ به عنوان گره ریشه و گره 6 و ۲ به عنوان دو فرزند تشکیل شده است. آی در درختی که فرزندی ندارد. کره برگ تآمیده می شود. به عنوان مثال در شکل ‎Fy Ds GH aye)‏ چهار گره برگ هستن ه رگره آی که نه ربشه بآد و ته گرد برگء یک گره داعلی است. یک گره داحلی حدافل یک گره والد و حداقل یک گره فرزند خواهد داشت. توجه داشته باشید که درختان نوعی شبکه با گراف هستند که در فصل 6 الگوریتم ‎lo‏ یادگیری ماشین بدون نطارت آن را بررسی خواهیم کرد. برای گراف ها و تجزیه و تحلیل شبکه. به جای شاخه از اصطلاحات پیوند یا یال استفاده می کنیم. بيشتر اصطلاحات دبكر بدون تغيير باقى مى مانند. انواع درختان درختانانواع مختلفی دارند که به شرح زیر توضیح داده می شود درخت دودویی: اگر درچه بک درخت دو باشد آن درخت را درخت دودویی می نامند. به عنوان مثال, درخت نشان داده شده در تمودار زیر یک درخت دودویی است زیرا دارای درجه دو است: 63

صفحه 68:
۸ 5 c Internoh Node IntematNede ewes 8 2 3 ‏مه‎ ItepraliNede a ave 6 ۵ ‏ا‎ Leof Node ‏ده‎ شکل 6-2: درخت دودویی توجه ذاشته باشید که نمودارقبل درختی را تشان می دهد که دارای چهار سطلح با تنعت كز أت درخت كامل: ذرخت كامل درختی است که در آن همه گره ها از یک درجه باشتد که برایر با درچه درخت خواهد بود.نمودار زیر انواع درختان مورد بحث را نشان شکل 7-2: انواع درختان 6

صفحه 69:
توجه داشته باشید که درخت دودویی سمت چپ یک درخت کامل نبست, زیرا گره > دارای درچه یک و تمام گره های دیگر دارای درجه دو هستند. درخت در وسط و سمت چپ هر دو درخت کامل هستند. جزخت کامل؛ دزخت کامل: نوع خاضتن ار درخت پر انتت که در آن تام گره: های برگ در یک سطح هستند. به عنوان مثال, درخت دودویی سمت راست همانظور که در نمودار قبل تشان داده شده است یک درخت کامل و پر است زیرا تمام گره های برگ در یک سطح هستند, يعتى سطح 2 درخت مرتب: اگر فرزندان یک گره در یک سطح طبق معیارهای خاص, سازماندهی شوند. درخت را درحت مرتب می نامند.برای مثال,بیک درخت را می توان از جب به راست به ترتيب صعودى مرتب كرد كه در آن كره هاى هم سطع در حين پیمایش از چپ به راست. مقدار خود را افزایش می دهند مثال های کاربردی نوع داده انتزاعی درخت ,یکی از ساختارهای داده اصلی است که در توسعه درخت های تصمیم استفاده می شود, همانطور که در فصل 7. الگوریتم های بادگیری نظارت شده سنتی مورد بحث فرار خواهد گرفت. به دلبل ساختار سلسله مراتبی آنء در الكوريتم هاى مربوط به تجزیه و تحلیل شبکه نیز محبوب انست همانطور که در فصل 6 الگوریتم هاییادگیری مانشین بدون نظارت, به تفصیل مورد بحث فرار خواهد گرفت. درخت‌ها همچنین در الگوریتم‌های جستجو و مرنب‌سازی مختلف استفاده می‌شوند که در آن استراتژی‌های تفسیم و غلبه باید پیاده‌سازی شوند. خلاصه 6s

صفحه 70:
در اين فصل, ساختارهای داده‌ای را که می‌توان برای پیاده‌سازی انواع مختلف الگوریتم‌ها مورد استفاده فرار داد. مورد بحث فرار دادیم. پس از گذراندن این فصلء بايد يتوانيد ساختار دادة مناسب را برای ذخیره و پردازش داده ها توسط یک الگوریتم انتخاب کنید. همچتین باید بتوانید پیامدهای انتخاب ما را بر عملکرد الگوریتم درک کنید. فصل بعدی در مورد الگوریتم های مرتب سازی و جستجو است. جایی که ما از برخی از ساختارهای داده ارائه شده در اين فصل در اجراى الگوریتم ها استفاده خواهیم کرد 3 الگوریتم های مرتب سازی و جستجو 66

صفحه 71:
در اين فصل به الكوريتم هابى مى بردازيم كه براى مرتب سازی و جستجو استفاده می شوند. اينها ذسته مهمی از الگوریتم ها هستند که می تواتند به تتهایی مورد استفاده قرار كيرند يا مى توانند بابه و اساس الگوریتم های پیچیده تر شوند أينها شامل بردازش زبان طبيعى (0/18) و الكوريتمهاى استخراج الكو هستند. اين فصل با ارائه اتواع مختلف الگوریتم های مرتب سازی آغاز می شود. عملک رد روش ‎sla‏ مختلف برای طراحی یک الگورنتم مرتب سازی را ماسه می کند. سپس برخی از الگوریتمهای جستجو به تفصیل ارائه می‌شوند. در نهایت, یک نمونه عملی از الگوریتم‌های مرتب‌سازی و جسنجوی ارائه‌شده در اين فصل صورد بررسی فرار گرفته است. در این اين فصل, با بشوانیم الگوریتم‌های مختلفی را که برای مرتب‌سازی و جستجو استفاده می‌شوند. درک کرده و نفاط فوت و صعف آنها را بازكو كنيم. از آجایی که الگورینم‌های جسنجو و مرنب‌سازی, بلوک‌های سازنده بسیاری از الگوریتم‌های پیچیده هستند. درک دقیق آن‌ها به ما کمک می‌کند تا الگوریتم‌های پیچیده مدرن را که در فصل‌های بعدی ارائه شده‌اند بهتر درک کنیم. مفاهیم اصلی زیر در اين فصل مورد بحث فرار می‌گیرد * . معرفی الگوریتم های مرتب سازی * معرفی الگورتم های جستجو * تجزيه و تحليل عملكرد الكوريتم هاى مرتب سازى و جستجو * کاربردهای عملی مرتب سازی و جستجو در ابتدا به جند الكوريتم مرتب سازى نكاه مى كنيم. معرفى الكوريتم هاى مرنب سازی تناس آمزت‌سازی وخشیجوی ‎a‏ رها ویک ‎esi sls psa‏ هم الا زيرا يسيارى از الكوريتمهاى مدرن به آن نباز دارند. همانطور که در ان فصل بحث خواهد شد. استراتژی مناسب برای مرتب‌سازی و جستجوى ذادمها به انذازه و نوع ‎ool‏ يسمكن دلرد: دز جالك كه نيجه تهاين ذفيقاً يكسان اسنت: الكونتم 'ضريت: سازی و جستجوی مناسب برای یک راه حل کارآمد برای یک مسئله دنیای وافعی 67

صفحه 72:
مورد نياز است. بنابراين, تجزيه و تحليل دفيق عملكرد این الگوریتم ها مهم است. الگوریتم‌های مرتب‌سازی به‌طور گسترده در سیستم‌های ذخبره‌سازی داده‌های توزیع شده مانتد پایگاه‌ه ای داده مدرن ۱۱۵50۱ که معماری‌های خوشه‌ای و محاسیات ابری را فعال می‌کنند. استفاده می‌شوند. در چنین سیستم های ذخیره سازى داده هاء عناصر داده بايد مذاوما مرتب شده و ذخیره شوند تا بتوان آنها را به طور موثر ازیایی کرد.الگوریتم های مرنب سازی زیر در اين فصل ارائه شدم است: * مرتب سازی ‎wile‏ ۰ مرتب سازی ادقامی * مرتب سازی درجی * مرنب سازی پوسته متب سازی انخابی اما قبل از ارائه اين الگوریتم‌ها, اجازه دهید ابتدا تکنیک تعویض متغیر در بایتون را که ور گد آائه شده در ‎iad gil‏ استفاده خواهیم کرد موز یحت قرار دهیم تعویض متغیرها در پایتون هنكام بباده سازى الكوريتم هاى مرتب سازى و جستجو. بايد مقادير دو متغير را با هم عوض كنيم. در بايتون يك روش استندارد برای تعویض دو متفیر وجود درد که به شرح زیر است: مها var2=2 var_ljvar_2 = var 2,var_1 ابن روش ساده میادله مقادیر در سراسر الگوریت‌های مرتب‌سازی و جستجو در این فصل منوزد اتتفاده قترار میگنبرد: اجنازه دهید: با نگاهن نته؛الگوزتم مرتب‌سازی حبابی در بخش بعدی شروع كنيم. 6a

صفحه 73:
مرتب سازى حبابى مرتبسازى حبابى يكى از سادهترين وكتدترين الكوريتمهابى است كه براى مرتب‌سازی استفاده می‌شود. اين الگوریتم به گوته ای طراحی شده است که بالاترین مقدار در لیست داده هاء زمانی که الگوریتم از طریق تکرار حلقه انجام می شود. به سمت با حیاب می بشود. مرتب‌سازی حبایی برای اچرا به حافظه کمی نیاز دارد زیرا تمام ترتیب‌بندی‌ها در ساختار داده اصلی انجام می‌شود. هیچ ساختارداده جدیدی به عنوان بافر موقت مورد نياز تبست. اما بدترین عملکرد آن (0)8۷5 است که پیچیدگی زمانی درجه دوم است (که لا تعداد عناصر مرتب شده است). همانطور که در بخش زیر بحث خواهد شد, توصیه می شود فقط رای مجموغة ذانه: های کوچکنز استفادت کنود. مختتوتیت‌های وافغن تومیدنفتده رای ندازه دده‌ه بای استفاده از مرتب‌سازی بابی به حافظه و منایع پردازشی موجود بستگی دارد. اما نگه داشتن تعداد عناصر (!۱) زیر 1000 می‌تواند به عنوان یک توصیه کلی در نطر گرفته شود درک منطق مرتب سازی حبابی مرتب‌سازی حبابی بر اساس تکرارهای مختلفی است که كذرها ناميده مى شوند. برای فهرستی با اندازه لا مرتب‌سازی حبابی دارای گذرهای ۱۸-1 خواهد بود برای درک عملکرد آن, بایید روى تكرار اول تمركز كنيم: گذر یک. هدف گذر یک اين است که بالاترين مقدار را به بالاترین شاخص (بالای لیست) برسانیم. به عبارت دیگر بالاترین مقدار لیست را خواهیم دید که با پیشرفت یک گذر به بالاى آن حباب می‌زند. منطق مرتب‌سازی حبابی مبتنی بر مقایسه مقادیر همسایه مجاور است: اگر مقدار در شاخص بالاتر از نظر ارزش بيشتر از مقدار شاخص پایین تر باشد. مقاذیر را مبادله می کنیم. این تکرار تا رسيدن به انتهاى ليست ادامه مى يايد. در شکل 1-3 نشان داده شده است: 6

صفحه 74:
| 25 21 ۱22 | 24 ۱ 23 27 26 | Exchange 21 ۱25 22| 24 | 23 | 27 26 Exchange 21 | 22 ۱25 24 | 23 | 27 26 Exchange 21 |22 ۱ 24 [25 23 | 27 26 exchange 2 21 |22 24 ۱ 23 | 25 27 26 Neexchange 21 |22 | 24 | 23 | 25 |27 26 Exchange 21 |22 | 24 | 23 | 25 | 26 7 Bubble Sort شکل 1-3: الگوریتم مرتب سازی حباس حالا ینیم چگونه می‌توان مرتب‌سازی حبابی را با استفاده از ایتون پیاده‌سازی کرد. Last_elenent_index = Len(List)-1 print(@, list) for idx in range(Last_elenent_index) : Af LUst[idx]otist[idxel]: List [dx] , List [idee ]=List [idxe1] ,Listlidx] print (idx#1, list) © (25, 21, 22, 24, 23, 27, 26] 10

صفحه 75:
1 (21, 25, 22, 24, 23, 27, 26] 2 (21, 22, 25, 24, 23, 27, 26] 3 (21, 22, 24, 25, 23, 27, 26] 4 (21, 22, 24, 23, 25, 27, 26] 5 (21, 22, 24, 23, 25, 27, 26] 6 (21, 22, 24, 23, 25, 26, 27] توجه داشته باشید كه بس از اولين كذر: بالاثرين مقدار در بالای لیست ذخیره شدم در 10*1 است. در حين اجراى اولين كذر , الكوريتم بايد هر يك از عناصر ليست را به صورت جداكانه مقايسه کند تا حداكثر مقدار را به آن بالا "حباب" كند. بس از اتمام كذر اول. الكوريتم به كذر دوم مى رود. هدف كذر دوم انتقال دوفين مقدار به ذومين شاخص بالاتر لیست است. برای انجام اين کار, الگوریتم دوباره مقادیر همسایه مجاور را با هم مقایسه می‌کند و در صورت ‎pas‏ مرتب بودن, آنها را میدله می‌کند. گذر دوم مقدار شاخص بالایی را که با گذر اول در جای مناسب قرار داده شده است حذف مي كند. ينابراين, یک عنصر داده کمتر برای مقایسه خواهد داشت. پس از تکمیل گذر دوم. الگوربتم به اجرای گذر سوم و بعدی ادامه می دهد تا زمانی که تمام نقاظ داده لیست به ترتیب صعودی شوند.الگوریتم برای مرتب کردن كامل ليستى به اندازه لل به 00-1 كذر نياز دارد. بيادمسازى مرتب‌سازی حبابی در پیتون به شرع زیر است: اشاره کردیم که عملکرد آن یکی از محدودیت‌های الگویتم مرتب‌سازی حبابی است. بيایید عملکرد مرتب‌سازی حبایی را از طریق تجزیه و تحلیل عملکرد الگوریتم مرتب‌سازی حبابی حساب کنیم: # Excahnge the elements to arrange in order Last_element_index = Len(List)-1 n

صفحه 76:
for pass_no in range(last_eLement_index,@,-1) for idx in range(pass_no if List [idx]>List [idx+1] List [idx] , List [idx+1]=List [idx+1] , List [idx] return list بهینه‌سازی مرتب‌سازی خیابی اجرای فوق مرتب‌سازی حبابی می‌تواند از مزایای لیست کاماً مرتب شده یا جزئی مرتب شده استفاده کند. برای مرتب کردن لیست داده شده ,باید حلقه های داخلی و خارجی کامل ‎Lol‏ شود و پیچیدگی زمانی ( 0۱ خواهد داشت حتی اگر یک لیست کاملا مرتب شده به عنوان ورودی داده شود. برای بهینه‌سازی الگوریتم مرنب‌سازی حیایی, مىتوانيم بررسى كنيم كه آيا عمليات تعويض در حين اجراى يك كذر خاص (حلقه داخلى) صورت مى كيرد. اكر مبادلهاى از طريق هيج گذری ضوزت نگیزد: به این:هعتن اسست که لرسنت:داده‌هده: اکنون کاملا متزیب نهد است, وما مىتوانيم خارج شويم. به اين ترتيبء ما مىتوانيم تعداد گذرها را به حداقل برسانيم. در زیر یده‌سازی الگورنتم مرتب‌سازی حبابی بهنه سازی شده : نشان داده شده است: تجزيه و تحليل عملكرد مرتب سازى حبابى به راحتى مى توان فهميد كه مرتب سازى حبابى شامل دو سطح حلقه است: حلقه بيرونى: به آن كذرها نيز مىكويند. به عتوان منال. كذر يك اولين تكرار حلقفه پیرونی است. حلقه داغلی: این زمانی ‎cual‏ که عتاصر فرب نشده پاقیمانده در لیستت مریب: ی توت با رمانی که بلانزینتمغذار به سمت زاشتا حرکتذانه سوذ: كتتذر أول دارای ۱-1 مقایسه , گذر دوم دارای ۱۱-2 مقایسه خواهد بود و هر گذر بعدی تعداد مقایسه ها را یک بار کاهش می دهد. n

صفحه 77:
پیچیدگی زمانی الگوریتم مرتب سازی حبابی به شرح زیر است: بهترين خالت: اكز ليست ان قبل مرنتٍ ده ‎tate palit. oan Legs Li) chisel‏ شده باشند) بيجيدكى زمان اجرا (0)1 است. بدترین حالت: اگر هیچ یک با تعداد بسیار کمی از عناصر مرتب شده باشند, در بدترین حالت پیچیدگی زمان اجرا ‎Lx cau! O(n?)‏ الگورتم باید به طور کامل در هر دو حلقه داخلی و خارچی اجرا شود حالا اجازه دهيد الكوريتم مرتب سازی درجی را بررسی کنیم. مرب سازی درجی ايده اصلی مرتب سازی درچی این است که در هر تکرار, یک نقطه داده را از ‎Sl obs A‏ کته ‎a DRS a Ia Lael pa‏ كليم و عمو ‎al fs iol‏ درست خود قرار می دهیم. به همین دلیل است که ما آن را الگوریتم مرنب سازی درجى مى تاميم. در اولين تكرار دو نقطه داده را تخاب کرده و مرتب مى كنيم. سيس, انتخاب خود را كسترش مى دهيم و نقطه داده سوم را اتضاب می کنیم و بر اساس مقدار آن, موقعيت صحيح آن را بيدا مى كتيم. الكوريتم نا زمانى بيش مت زود کتمام قاط دانجزه وقتیت ضتحیح عبود مسعل سنود: این فرآنند در تمودار زیر نشان داده شده است: a

صفحه 78:
Insert 25 Insert 26 Insert 22 Insert 24 Insert 27 Insert 23 Insert 24 21 21 21 21 21 21 27 23 23 23 23 23 27 26 27 27 27 27 26 25 Insertion Sort 27 24 24 26 26 25 24 22 22 26 25 25 24 23 شكل 2-3: الكوربتم مرتب سازى درجى 26 26 25 24 24 23 22 25 25 22 22 22 22 21 الكوريتم مرتب سازی درجی را م توان در پیتن به صورت زیر کدگذاری کرد def insertion sort (elenents): for i in range(1, len(etements)): 7 jeia next = elements [i] # Compare the current element with next one while (elements{j] > next) and (j >= 6):

صفحه 79:
elenents[j] elements[j+11 12-1 elenents[j+1] = next return elenents توجه داشته باشید که در حلقه اصلی, تمام لیست را تکرار می کنیم. در هر تک رارء دو عنصر مجاور عبارتند از [ ]1154 (عنصر فعلی) و [1] ۱154 (عنصر بعدی). در 0۵ ۵۱60606 < ‎.j >= Oy List[j]‏ عنصر فعلی را با عتصر بعدی ‎aaa‏ مي‌کنيم. پایند با عملکزد الگورنیم مزب تنازی تزجی نگاة کنیم. تجزیه و تحلبل عملکرد مرتب سازی درجی از توضیحات الگوریتم واضح است که اگر ساختاز داده قبلا مرتب شده باشدر مرتب سازی درجی بسیار سریعانجام می شود. در واقع اكر ساختار داده رتب شده باشد, مرتب سازی درجی زمان اجرای خطی خواهد داشت یعنی (0)8. بدترین حالت زمانی است که هر یک از حلفه های داخلی باید تمام عناصر موجود در لیست را چابجا کند. اگر حلقه داخلی با 1 تعریف شود بدترین عملکرد الگوریتم مرتب‌سازی درح با موارد زیر ارئه می‌شود ۳-۲ (1- ۷ 7 2 خ w(W) © SN? = O(N?)

صفحه 80:
به طور کلی می توان از درج در ساختارهای داده کوچک استفاده کرد. برای ساختارهای داده بزرگتر, مرتب سازی درجی به دلبل عملکرد متوسط درجه دوم: توضیه تم نود مرتب سازی ادغامی ما تاكنون دو الكوريتم مرتبسازى ارائه كردءايم: مرتبسازى حبابى و مرتبسازى درجى. اكر داده ها به طور جزئى مرتب شوند, عملكرد هر دوى آنها بهتر خواهد يود. سومين الكوريتم ارائه شده در اين فصل, الكوريتم رتب سازى ادغامی است که در سال 1940 توسط جان فون نویمان توسعه بافت. ویژگی تعیین کننده این الگوریتم این است که عملکرد آن به مرتب سازی داده های ورودی بستگی ندارد. برای مجموعه داده های بزرگ به ضوبی کار می کند. مانند سایر الگوریتم های کلان داده: بر اساس استراتژی تقسیم و غلبه کار می کنند. در مرحله ول کهتقسیم نافیدخ می شَوق, الگورینم به قنبیم دادح ها به دو تيفك بازگشتی ادامه می دهد تا زمانی که اندازه داده ها کمتر از یک آستانهتعریف شده باشد. در مرحله دوم که ادقام نامیده می شود, الگوریتم به ادغام و پردازش ادامه مى دهد تا به نتيجه تهابى برسيم. منطق اين الكوريتم در تمودار زير توضيح دادة 16

صفحه 81:
Cae eae Phase 2: Merging the Splits شکل 3-3: الگوریتم مرتب سازی ادغامی بيابيد ابتدا به شبه کد الگوریتم مرتب سازی ادقام نگاه کنیم: 7

صفحه 82:
merge sort (elements, start, end) if(start > end) midPoint = (end - start) / 2 + start merge sort (elements, start, midPoint) merge sort (elements, midPoint + 1, start) merge(elements, start, midPoint, end) همانطور كه مى بينيم الگورنتم دارای سه مرحله زیر است: 1. لیست ورودی را یه دو قسمت مساوی تقسیم می کند که در حدود ۲140010۶ تقسيم مى شوند 2. از بازگشت بزای تقسیم استفاده می کند تا زمانی که طول هر لیست 1 شود واننیس, قشمت ها مرب تزا در یک لیس مرت م الام ابرق و لذ را برمی گرداند كد بياده سازى 8696_5064 در اينجا نشان داده شده است: def merge sort (elements): if Len(elements)=1: mid = len(elenents)//2 #splits List in half sid] right = elenents[mid:] merge sort(Left)#repeats until length of each List is 1 merge sort(right) a=0 9-9 c=0 left = elements 7»

صفحه 83:
مرتب سازی پوسته while a < len(left) and b < Len(right) if leftia] < right[b) elements {c]=left [a] ‏وه‎ +1 else elenents{c]=right [b] b=b+1 1ج while a < len(left): elenents[c]=left fa] ‏1+وءة‎ ی while b < len(right) elenents{c]=right [b] 9-1 1جععء return elements الگوریتم مرتب‌سازی حبابی همسایه‌های مجاور را مقایسه می‌کند و در صورت نامرتب بودن آنها را تعويض مىكند. از طرف ديكرء مرتب سازی درجی, ليست مرتب شده را با انتقال یک عتصر در هر زمان ایجاد می کند. اگر لیستی تا حدی مرتب‌شده داریم. مرتب‌سازی درجی باید عملکرد معقولی ارائه دهد. اما برای یک لیست کاملا مرتب‌نشدهء با اندزهلا.می‌توانید استدلال کنبد که مرتب‌سازی حبابی باید به‌طور کامل از طریق گذرهای ۱۱-1 تکرار شود تا به طور کامل مرتب شود 32

صفحه 84:
دونالد شل مرتب سازی شل (به نام او) را پيشتهاد کرد که آهمیت انتخاب همسايكان مجاور براى مقايسه وتعويض را زير سوال مى برد. حال بيابيد اين مفهوم را درک کنیم. در مرحله اول. به جای انتاب همسایگان مجاور, از عناصری استفاده می کنیم که در یک شکاف ثابت هستند. در نهایت لیست فرعی متشکل از ‎SiS goa aa [oss ala ede‏ ین کار در تمودار یر بشان داده شده است. در مرخله ذومء لیست های فرع حاوی چهار نقطه داده را مرتب مىكند (تمودار زير را بينيد). در گذرهای بعدی: تعداد تقاط داده در هر ليست فرعى افزايش مويايد و تعداد لیست‌های فرعی همجنان كاهش مريابد تا زمانى كه به وضعیتی برسیم که فقط یک لیست فرعی وجود داشتهباشد که از تمام تقاط داده تشکیل شده باشد. در این مرحه, می توانيم فرص كنيم که ليست مرتب شده است: و222 Passes inthe Shall ort Algorithm a0

صفحه 85:
شکل 4-3: گذرها در الگوریتم مرتب سازی پوسته در بايتون كد بباده سازى الكوريتم مرتب سازى بوسته به صورت زیر است: def shell_sort (elements): distance = len(elements) // 2 while distance > 6: for i in range(distance, Len(elenents)) temp = elements[i] 1-4 # Sort the sub List for this distance while j >= distance and elenents[j - distance] > temp Ustli] j = j-distance List[j] = temp # Reduce the distance for the next elemen| distance = distance//2 return elements elements[j - distance] توجه داشته باشید که فراخوانی تايع 5061150۳8 منجر به مرتب سازی آرا ورودی شده است. تجزيه و تحليل عملكرد از مرتب سازى بوسته می توان مشاهده کرد که در بدترین حالت. الگوربتم مرتب سازی 50611 باید از طریق هر دو حلقه اجرا شود و به آن پیچیدگی (0)0 می دهد. مرتب سازی پوسته بای ‎orb O'S‏ مناسب نیست و برای مجموعه داده های متوسط استفاده a

صفحه 86:
می شود. به طور کلی, عملک‌رد تسیتاً خوبی در لیستی با حداکتر 6000 عنصر دارد. اگر داده ها تا حدی مرتب باشند. عملکرد بهتر خواهد بود. در سناربوی بهترین حالت, اگر لیستی از قبل مرتب شده باشد. فقط به يك كذر از 80 عنصر نباز داد تا ترتیب را تأبيد كند و بهترین عملکرد ‎O(N)‏ )1 یجاد کند. مرتب سازی انتخابی همانطور كه قبلآدر اين فصل ديديم. مرتبسازى حبابى يكى از سادهترين الگوریتم‌های مرتب‌سازی است. مرتب‌سازی انتخابی بهبودی در مرتب‌سازی حبابی است که در آن سعی مي‌کنيم تعداد کل تعویض‌های مورد نیاز با الگوریتم را یه حداقل برسانیم. در مقايسه 01-11 كذر در الكوريتم مرتب سازى حبابى؛ ان الگوریم به گونه ای طراحی شده است که برای هر گذر یک جایجایی انجام دهد. به جای چابه جایی بزرگترین مقدار یه سمت با در مراحل اولیه (همانطور که در مرتب سازی حبابی انجام می شود, که منجر به ۱-1 تعویض می شود), ماه دنال بزرگترین مقدار در هر كذر مى كرديم وآن را به سمت بالا حركت مى دهيم. بنابراين» يس از اولين كذر, بيشترين مقدار در بالا خواهد بود. يس از كذر دوم. دومين مقدار يزرك در کنار مقدار بالا فرار خواهد كرفت. همانطور كه الكوريتم بيشرفت مى کند, مقادیر بعدى بر اساس مقادير خود به مكان صحيح خود منتقل مى شوند. آخرين مقدار بس از كذر (01-1) منتقل مى شود. ينابراين, مرتب‌سازی انتخابى يراق مرتب‌سازی | عتصر؛ ۱-1 گذر انجام می دهد: a2

صفحه 87:
passa: ۳8۲ 25 ] 25 ] 15 ]31 [44 [ 701۲۵ ‏رممی‌ه‎ moves tothe right | وه ‎ass) 34 Is the largest, moves tothe right‏ ‎PASSA:‏ 25's at the right position ‎(SI 25 [SE TS2 Tae 7] 19isthe largest moves tothe ight‏ بوهيم ‎1۶ ]29 1] 25] 341441 79[ ٩۴5۲ ‏شکل 5-3: الگوریتم مرتب سازی انتعابی پیاده سازی مرتب سازی انتخابى در بايتون در بنجانشان داده شده است: ‎def selection sort (List): for fill_slot in range(len(list) - 1, ©, -1): max_index = 0 ‎for location in range(1, fill_slot + 1): ‎if List[location] > List{max_index]: max_index = location ‎List [fill_slot], List fmax_index] ‎List [max_index], List [fil_slot] ‎83 ‎ ‎

صفحه 88:
return list عملکرد الگوریتم مرتب سازی انتخابی بدترین عملکرد مرتب سازی انتخاب (0)1/۳ است. توجه داشته باشید که بدترین عملکرد آن مشایه مرتب‌سازی حبایی است و نید رای مرتب‌سازی مجموعه‌های داده بزرگ استفاده شود. با اين حال. مرتب‌سازی انتخابی, الگوریتم طراحی بهتری نسبت به مرتب‌سازی حیابی است و عملکرد متوسط آن به دلیل کاهش تعداد تعويضهاء بهتر از مرتبسازى حبابى است. انتخاب الگوریتم مرتب سازی انتخاب الگوزییم فرتب سای مناسسب هم:نه آنداره و همه وسعیت: داده سای ورودی فعلی بستگی دارد. رای لیست های ورودی کوچک که مرتب شده اند. استفاده از یک الگوریتم پیشرفته.پیچیدگی های غیر ضروری را با بهنود عملکرد تاجيز به كد وارد مى کند. بهعنوان مثال, ما نبازی به استفاده از مرتب سازی ‎cell‏ بزای مجموعت حاده های کوچک داي رک و باون ارق رين سارو خبابی بسیار ساده تر خواهد بود. اگر داده ها تا حدی مرتب شده بابشند. می توانیم نا استعارو وموس ماري وزعت ‎al a‏ هنزو رین زاف تومه دا يا ‎iS‏ الكوريتم مرتب سازى ادغامى بهترين الكوريتم براي استفاده است. مقدمه ای بر الگوریتم های جستجو جستجوی کارآمد داده ها در ساختارهای داده پبچیده یکی از مهم ترین قابلبت ها است. ساده ترین روش, که چندان کارآمد نخواهد بود. چستجوی داده های مورد تیاز ذر هر نفظه داده است. اماء با بزرگتر شدن حجم داده هاء به الگوریتم های بیچیده تری برای چستجوی داده ها نباز داريم. الكوريتم هاى جستجوى زير در اين بخش ارائه مى شوندة es

صفحه 89:
۰ جستجوی خطی + جستجوی باینری ۰ جستجوی درون یابی بيابيد به هر يك از آنها با جزئيات بيشترى نكاه كنيم. جستجوی حطی یکت از نتاده‌تزین انتترانوخ ها براق جستجویداجمها این ات کنه اه تبانگی از طریق هر عتصری که به دنبال هدف است, حلقه را انجام دهیم. هر تفطه داده برای یک تطابق جستجو می شود و هنگامی که مطابقت پیدا شدء یج برگردانده می شوند و الكوريتم از حلقه خارج مى شود. در غير ابن صورت, اوريس به اجن جو ادامل فى دهد انااينة انهافتدانت ها پرشند. غیب آفکار چسیچوی ‎oles‏ این آنشت که:به دلیل چستچویچامع دایی::بنتپار کند اسنت. مزیت این است که داده ها نیازی به مرتب سازی نداند.همانطور که برای سایر الكوريتم هاى ارائه شده در اين فصل مورد تياز است. بباييد به كد جستجوی خطی نكاه كنيم: def Linear_search(elements, item): index = 0 found = False # Match the value with each data element while index < len(elements) and found is False: if elements [index] =: found = True else item: index = index + 1 return found as

صفحه 90:
حال به خروجی کد قیلی نكاه مى كنيم: list = [12, 33, 11, 99, 22, 55, 90] print(LinearSearch(list, 12)) print(LinearSearch(list, 91)) True False توجه داشته باشید که اجرای تابع ۱10637563۲61 در صورتی که بتواند داده ها را با موفقیت پیداکند. مقدار 7۳۷6 را پرمی گرداند عملکرد جستجوی خطی همانطور كه بحث شد. جستجوی خطی یک الگوریتم ساده است که یک جستجوی جامع را انجام می دهد.بدترینرفتارآن (/011 است. اطلاعات بیشتر را می‌توانید در این صفحه پیداکنید, شایدبتونید خواننده را به اين صفحه راهنمایی کنید ‎https: //wiki.python.org/moin/TimeComplexity‏ جستجوی دودویی پیش نياز الكوريتم جستجوى دودویی داده های مرتب شده است. الگوریتم به طور مکرر یک ليست را به دو فسمت تقسيم مى كند وتا زمانی که مقدار مورد نظر خود را بيذا كند: بابي ثرين و بالاترين شاخض ها را ذثيال مى كند: def binary search(elements, item): first = 0 a6

صفحه 91:
last = Len(elements) -1 while first<=last and not found: midpoint = (first + last)//2 if List{midpoint] == item: return True else if item < elements [midpoint]: last = midpoint-1 else first = midpoint+1 return False خروجی به صورت زیر است: list = [12, 33, 11, 99, 22, 55, 90] sorted_list = BubbleSort(1ist) print(BinarySearch(list, 12)) print (BinarySearch(list, 91)) True False توجه داشته باشید که اگر مقدار در لیست ورودی پیدا شود. فراخوانی تان ‎soy True jlade BinarySearch‏ گرداند. a7

صفحه 92:
عم جستجوی دودوی: ‎Sib SRE TS ke nig Spgs‏ ات که زر فر کزان الگتوزیم تاه ها را هجو قستمت تعسیغ هی کند. آگرداده دارای ۱۱ ورد پاستده دآکر: ۵1091 مرحله برایتکرار نیز داد. این بدان معناست که الگوریتم دارای زمان ‎cual (Logi) Lol‏ چستجوی درون یابی جستجوی دودویی بر اساس متطقی است که بر بخش میانی داده ها تمرکز می كند. جستجوى درون يابى بيجيده تر است. از مفدار هدف برای تخمین موقعیت عتصر دز آری مزین:شدهد استفاده می کنی پأید سعی کنیم با استفاده ازنیک مثال آن را درک کنیم. ببابيد فرض كنيم مى خواهيم كلمه أ را در یک فرهنگ لفت انگلیسی جستجو کنیم. مانند کلمه ۰۳1۷۵۳ ما از اين اطلاعات برای درون یابی و جستجوی کلماتی که با ۲ شروغ می شوند استفاده خواهیم کرد. یک جستجوی درون یابی کلی تر را می توان به صورت زیر برنامه نویسی کرد def int_polsearch(list,x ): idxd = 0 idxn = (Len(List) - 1) while idxO <= idxn and x >= List[idx®] and x Uist [idxn] # Find the mid point mid = idxO +int(((float(idxn - idx0)/( Listfidxn] - ۱۳۹ « - ‏((([140]ءكنا‎ # Compare the value at mid point with search value if List{mid) return True a8

صفحه 93:
if List{mid) < x: idxO = mid + 1 return False خروجی به صورت زیر است: In [16]: list = [12, 33, 11, 99, 22, 55, 90] sorted list = BubbleSort(List) print(IntPolsearch(list, 12)) print (IntPolsearch(List,91)) True False ‏توجه داشته باشید که قبل از استفاده از 101001563۴64, آرایه ابتدا بايد يا‎ ‏استفاده از یک الگوریتم مرتب سازی :مرتب شود.‎ عملکرد جستجوی درون پابی گر داده ها به طور نابرابر توزیع شوند. عملکرد الگوریتم جستجوی درون ‎wl‏ ‏ضعیف خواهد بود. بدترین عملکرد اين الگوریتم (0)۱۷ است و گر داده ها تا حدودی یکنواخت باشند. بهترین عملکرد (۷/ 01/09/09 است. کاربردهای عملی ‎oad oe‏ نو و دنق نان ها تیک معبرن ‎pig ys id sts‏ از ‏برنامه هاى کاربردی واقعی, حباتی است. بسته به انتحاب الكوريتم جستجو. ممكن ‏است لازم باشد ابتدا داده ها را نیز مرتب کنید. انتخاب الگوریتم‌های مرتب‌سازی و ‏جستچوی متاست یه نوع و ندازه دلددها و همچتین:ماهیت متتله‌ای که می‌خواهید ‏حل كنيد يستكى دارد. بياييذ سعى كنيم از الكوريتمهاى ارائءشده در اين فصل 3 ‎ ‎

صفحه 94:
برای حل مسثله تطبیق متقاضی جدید در ادارهمهاجرت یک کشور خاص با سوابق تاريخى او استفاده كنيم.. هتكامى كه شخصى براى ورود به كشور درخواست ويزا می دهد. سيستم سعی می کند متقاصی را با سوابقتاریخی موجود مطابقت دهد اكر حداقل یک تطابق پیدا شود, سیستم تعداد دفعاتی را که فرد در گذشته تایید یا رد شده است را محاسیه می کند. از طرف دیگر, اگر مطابقت ‎Lay‏ نشود. سیستم متقاصی را به عنوان متقاضی جدید طبقه بندی می کند و برای آنها یک شناسه جدید صادر مى كند. توانايى جستجو. مکان یابی و شناسایی یک شخص در داده های تاریخی برای سیستم «بسیار مهم است. این اطلاعات مهم است زیرا گر نطخضی دز گذسته وزخواتتت: داد ‎Gains y Sully‏ مود کته زخوانتت زد تج است, ممکن است بر درخواست فعلی آن فرد تأثیر منفی بگذارد. به طور مشابمر اگر قشع شود که دزعواست فخظی ور گذسته نان دانفنده ‎Sl Gal steal‏ همکن است:شانس آن فرد زا برای نید جزخواسنت فعلی دور ‎Galil‏ دهد:ه. طور معمول,پایگاه ددهتاریخی میلیون‌ها سطر خواهد داشت. و ما به یک رال خوب طراحن شده برای مطابقت:ببا متقاضیان جدیند دز پایگاه داده عاریسی یار داریم. فرض کنید جدول تاریخی در پایگاه داده به شکل زیر است: Personal | Appiicatio | ۳۳۳۲ 0 6 ‏م‎ a name | me | B | ‏ه‎ 2 ‏مر‎ date 45583 577۳۳2 John Doe 200 2۳۳۳۷ ‏و‎ Jed — 08-07 09. 19 52527 777۳57 ‏از ها‎ ۱1۳7 ۵۳0۵ o Ja 06.07 03. 90

صفحه 95:
17 ‏ی‎ Rejecte POT a fa 05.05, 02 15 755 ۳777۳7۳۳ Doe —}Z00-}Approv | 201s: o- Jed — 03-02 09. 19 22331-11341553 [Kal Sorts ۱1۳7 ۳۳۲ ZO1e- ‏و‎ Jed Joss 01 02 در این جدول, ستون اول, شناسه شخصی, با هر یک از متقاضیان یکتا در بایگاه داده تاریخی مرتبط است. اگر 30 میلبون متقاضی یکنا در پایگاه داده تاریخی وجود داشته باشد. 30 میلیون شناسه شخصی یکنا وجود خواهد داشت. هر شناسه شخصی یک متقاضی را در سیستم پایگاه داده تاریخی شناسایی می کند: ستون دوم ما بشناسه درخواست است. هر شناسه دزخواست یک درخواست یکتا را در سیستم شناسایی می کند. ممکن است فردی در گذشته پیش از یک پار درخواست داده:پاشت: پتابزاین. این پندان معتانتنتت که در پایگاه داده داربخن::شتانته: های: درخواست یکنای پیشتری نسیت به شناسه های شخصی خواهیم داشت. همانظور كه در جدول قبل نشان دادة شده است: ۰006 3060 فقط یک شناسه شخصی دارد اما دو شناسه درخواست دارد. جدول قیلی فقط نمونه ای از مجموعه داده های تاريخى را نشان مى دهد. ببابيد فرض كنيم كه نزديك به 1 ميليون سطر در مجموعه داده تاریخی خود داریم که شامل سوابق 10 سال گذشته متقاضیان 0

صفحه 96:
است. متقاضیان جدید به طور مداوم با ترخ متوسط حدود 2 متفاضی در دفیفه وارد می شوند. برای هر متقاصی باید موارد زیر را انجام دهیم * یک شناسه درخواست چدید برای متقاضی صادر كنيد. * ببينيد آيا مطابق با متقاضى در بايكاه داده تاريخى وجود دارد يا خير. * اگر مطابفت یافت شد. از شناسه شخصی آن متفاضی استفاده کنید. همانطور كه در بايكاه داده تاريخى يافت مى شود. همجنين بايد تعيين كنيم كه جند بار درخواست در بايكاة ذاذه تازيخى تاید با رد شده است. * أكر مطابقت بيدا نشدء بايد يق شناسه شخصى جديد يراى آن فرد صادر ‎ous‏ فرض کنید یک فرد جدید با مدارک زیر وارد می شود: ‎First Name: John‏ Surname: Doe DOB: 2000-09-19 حال چگونه می‌توانیم برنامه‌ای طراحی کتیم که بتواند جستجوی کارآمد و مقرونبه‌صرفه انجام دهد؟ یک استراتژی برای جستجوی برنامه جدبد در پایگاه داده می‌تواند به شرح زیر طراحی شود: پایگاه داده تاریخی را بر اساس 008 مرتب کنید. هر با که فرد جدیدی وارد می شود. یک شناسه درخواست جدید برای متقاضی صادر كنيد. تمام رکوردهایی را که با تاریخ تولد مطابقت دارند واکشی کنید. این جستجوی اولیه خواهد بود از میان رکوردهایی که به عنوان متطبق آمنه اند: با استفاده از تام و نام خانوادكى. جستجوى ثانويه را نجام دهيد. 0

صفحه 97:
آگر مطایقت یافت شد. از شتاسه شخصی برای مراجعه به متقاضیان استفاده کنید. تعدد تایدیه ها ورد درخواستها را محاسبهکند. اگر مطابقت پیدا تشد, یک شتاسه شخصی جدید بای متقاضی صادر کید بیابید سعی کنیم الگوریتم مناسب را برای مرتب سازی پایگاه داده تاریخی انتغاب کنیم. با خیال راحت می توانیم مرتب سازی حبابی را رد کنیم زیرا اندازه داده ها بسیارزیاد است. مرتب‌سازی پوسته عملکرد بهتری خواهد داشت. اما تتها دز صورتی که فهرست‌های مرتب‌سازی شده جزئى داشته باشيم. بنايراين, مرتب‌سازی ادغامی می‌تواند بهترین گزینه برای مرتب‌سازی پایگاه داده تاریخی باشد. وقتی فرد جدیدی وارد می‌شود. باید آن شخص را در پایگاه داده تاریخی بیدا کرده و چستچو کنيم: از آنجاین که دادم ها قبا مرتب شنده آند: می توان از خستجوی درون مابي با جستجوی ودوین انتتفاده کرد لزآلجایی که امتفابان احتملا به طور مساوی پراکنده می شوند, طبق 008 مى توانيم با خبال راحت از جستجوی دودویی استفاده کنیم. در ند, ما بر اساس 008 جستجو می کنیم. که مجموعه ای از متقاضیان را با تاریخ تولد یکسان برمی گرداند. اکنون. ما باید فرد مورد نياز را در زیرمجموعه کوچک افرادی که تاريخ تولد يكسانى دارند. يبدا كنيم. از ‎vill‏ که با موفقیت داده ها را به یک زیرمجموعه کوچک کاهش دادهایم. از هر یک از الگوریتم های جستجو, از جمله مرتب سازی حبایی, می توان برای چستجوی فتقاضی استفاده کرد. توچه داشته باشید که مشکل جس تجوی تانوبه را در ايتجا كمى ساده كرده ايم. ما همجنين بايد تعداد كل تأييدها و ردها رايا جمع آوری نایج جستجو محاسیه کنیم, در صورتی که بيش از يك مورد منطبق يافت شود. در يك سناريوى وافعى, هر فرد بايد در جستجوى ثانويه با استفاده از برخي الكوريتم هاى جستجوى فازى شناسابى شود. نام ونام خانوادكي ممكن است کمی متفاوت نوشته شود. جسنجو ممکن است نازبه استفاده از نوعى الكوريتم فاصله برای اجرای جستجوی فازی داشته باشد. جایی که نقاط داده ای که شیاهت آنها بالاتر از یک آستانه تعریف شده اسنت یکسان در نظر گرفته می شوتد. 93

صفحه 98:
wows ‏در اين فصل مجموعه اى از الكوريتم هاى مرتب سازی و جستجو را ارائه کردیم.‎ ‏همجنين نقاط قوت و ضعف الكوريتم هاى مختلف مرتب سازی و جستجو را مورد‎ ‏تحت فزار دانیم. ما عفلکرد آنن الگوزییم‌ها را حساب گزدیم:ویاد گرهنتیم کله چنه.‎ ‏زمانی از هر الكوريتم استفاده كنيم. در فصل بعدى, لگوریتم‌های پویا را مطالعه‎ ‏خواهيم كرد. همجنين به بك مثال كاريردى از طراحى الكوريتم و جزئيات الكوريتم‎ ‏صفحات خواهیم پرداخت. در نهایت به بررسی الگوریتم برنامه نویسی‎ ar ay خطی می پردازيم. 03

صفحه 99:
4 طراحی الگوریتم این فصل مفاهيم اصلى طراحى الكوريتم هاى مختلف را ارائه مى دهد. نقاط قوت و ضعف تكنيك هاى مختلف براى طراحى الكوريتم ها زا مورد بحث قرار مى دهد. با درک اين مفاهيم. تحوه طراحى الكوريتم هاى كارآمد را ياد خواهيم كرفت. اين فصل با بحث در مورد گزینه های مختلف در دسترس ما هنگام طراحی الگوریتم ها شروع می شود. سپس, اهمیت مشخص کردن مستئله خاصی را که ما سعی در حل آن داریم. مورد بحث فزارمی‌دهد. در مرحلهبعد. از مستله معروف فروشنده دوره گرد (158) به عنوان یک مورد استفاده می کند و تکتیک های طراحی مختلفی را كه ارائه خواهيم كرد. اعمال مى كند. سيس برنامه تویسی خطی را معرفى كرده و كاريردهاى آن را مورد بحث قرار مى دهد. در تهایت, نحوه استفاده از برتامة تويسى خطى بزاق حل يك مسئله دنبای واقعی را نشان می دهد. دز پایان اين فصل, شما باید بتوانید مفاهیم اساسی طراحی یک الگوریتم کارآمد را درک کنید.مفاهیم زیر در اين فصل مورد بحث قرار مي گیرند * رویکردهای مختلف برای طراحی یک الگوریتم * درك موازنه مربوط به انتخاب طرح صحیح برای یک الگوربتم 9s

صفحه 100:
* بهترین شیوه های فرمول بندی یک مسئله دنیای واقعی * حل یک مسئله ‎aug‏ سازی در دنیای واقعی بيانند ابتدا مغاهیم اشاسی طراحی یک الگوریتم را بررسی کنیم. معرفی مقاهیم اولیه طراحی الگوریتم طبق فرهنگ لفت میراث آمریکایی, یک الگوریتم به اين صورت تعریف می‌شود: «مجموعه محدودی از دستورالعمل‌های بدون ابهام که مجموعه‌ای از شرایط اولبه را می‌توان در یک توالی تجویز شده برای دستیابی به یک هدف خاص انجام داد و دارای مجموعه‌ای از شرایط پایانی قابل تشخیص است. "طراحی یک الگوریتم در مورد دستیابی به اين "مجموعه متتاهی از دستورالعمل های بدون ابهام" به کارآمدترین روش برای "دستیابی به یک هدف خاص" است. برای یک مسئله پیچیده دنبای وافعی, طراحی یک الگوریتم یک کار خسته کننده است. برای دستیابی به یک طرح خوب, ابتدا بايد مسئله اى را كه قصد حل كردن آن را داريم, كاملآ درک کنیم. قبل از بررسى تحوه اتجام آن (يعنى طراحى الكوريتم) با مشخص كردن آنجه بايد انجام شود (يعنى در نيازمتديها) شروع مى كنيم. درك مسئله شامل برداختن به نيازمنديهاى كاركردى وغيركاركردى مسئله است. بياييد ببيتيم اينها جيستند: نيازمنديهاى كاركردى به طور رسمى رابط های ورودی و خروجی مسئله ای را که می خواهیم حل کنیم و عملکردهای مرتبط با آنها را مشخص می کند. نیازمندبهای کارکردی به ما کمک می کند تا پردازش داده هاء دستکاری داده ها و محاسیانی را که برای ايجاد نتيجه بايد اجرا شوندء درك كنيم. تيازمنديهاى غيركاركردى انتظارات را در مورد عملکرد و جنبه های امتیتی الگوریتم تنظیم مى كند. توجه داشته باشيذ كه طراحى يك الكوريتم مربوط به برداختن به تيازمنديهاى كاركردى و غيركاركردى به بهترين شكل ممكن تحت مجموعه شرايط داده شده و در نظر كرفتن مجموعه اى از منايع موجود برا اجراى الكوريتم طراحى شده 96

صفحه 101:
است. برای دستیاین به یک پاسخ خوب که من توأند نیازمتدیهای کارکردی و غبر کارکردی را برآورده کند. طراحی ما ایدبه سه مورد زیر توجه کند. همانطور که در فصل 1, در بررسی اجمالی الگویتم ها مورد بحث قرار گرفت: نگرانی 1: درستی: آیا الگوریتم طراحی شده نتیجه مورد انتظار ما را ايجاد مى ‎sus‏ نگرانی 2: عملکرد: ‎oly oul Ul‏ بهینه برای به دست آوردن اين نتیج است؟ نگرانی 3: مقباس پذیری:الگوریتم چگونه روی مجموعه داده های بزرگتر عمل می کند؟ در اين بخش, بباييد اين نكرانى ها را يكى يكى بررسى كنيم. نگرانی 1 - درستی: آباالگورتم طراحی شده نتیجه موردانتظار ما را به دست ‎ose‏ آورد؟ الگوریتم .یک راه حل ریاضی براي یک مسئله دنياي واقغی است. براي مفیذ بوذن. یدیع عفیین پدرزست اعرد چگ چنگودسآیو متعت يق اوريس اند یک نفک بعدی باشد. در عوض, باید در طراحی الگورنتم پخته شود. فبل از استراتژی بررسی چگونگی تأبيد يك الگوریتم. بید به دو جنبه زیر فکر کنیم: * تعریف حقیقت: برای تأیید الگوریتم, ما به برخی از نتايج صحیح شناخته شده برای یک مجموعه معین از ورودی ها نباز داریم. ین نتایج صحبح شناخته شده. در زمینه مستله ای که ما سعی در حل آن داریم ,حقیقت نامیده می شوند. حقبقت مهم است زیرا زمانی که به طور مکرر بر روق تکامل الگوریتم خود به سمت یک راه حل بهتر کار می کنیم به عنوان یک مرجع استفاده می شود. * . انتخاب معيارها: همچنین بای به این فکر کنیم که چگونه می‌خواهیم انحراف از حقیقت تعریف شده را حساب کنیم. نتخاب معیارهای صحیح به ما کمک می کند تا کیفیت الگوریتم خود را با دفت حساب کنیم. 97

صفحه 102:
به عنوان مثال, بای الگوریتم های یادگیری ماشینی نظارت شده, مى توانيم از داده های برچسب گذاری شده موجود به عنوان حقیقت استفاده کنیم. برای تع بین کمیت اتحراف از حقبقت. می توانیم یک یا چند معبار مانند دفت:ترخ یادآوری یا صحت را نتخاب كنيم. توجه به اين تكته مهم أسث كه در برخى موارد استفاده, خروجي صحیع, یک مقدار واحد نیست. در عوض, خروجی صحیح به عنوان محدوده برای مجموعه معیتی از وزودی ها تعریف می شود. همانطور كه ما روی طراحی و توسعه الكوريتم خود كار مى كنيم. هدف بهبود مکرر الگوریم تا زمانی است که در محدوده مشخص شده تیازمندیها فرار گیرد. در نظر گرفتن موارد لبه: یک مورد لبه زمانی اتفاق می افتد که الگ وریتم طراحی شده ما در حداکترپارامترهای عملاتی: عمل کتد یک مورد له معمولً ستاریویی لب که نادزینی, اقا تیه ختویت آرمتایش شود نبا معکق اس ماع شکننت:الگورنیم ما شنود: موارد غبز لبه:*مسیز:ساد" نامینده می ناسود كه كسام ستاریوهایی را پوشش می دهد که معمولً زمانی اتفاق می افتد که پارامترهای عملیاتی در محدوده نزمال باشند. اکثر اوفات: الگوزیتم در "مسیر شاد" بافی می ماند. متأسفانه, هیچ راهی برای دستیابی به تمام موارد لبه ممکن برای یک الگوریتم مشخص وجود ندارد. اما باید تا حد امکان موارد لبه را در تظر بگیزیم. اما بدون در نظر گرفتن و فکر کردن در مورد موارد له, ممکن است مشکلای ابجاد شود نگرانی 2 - عملکرد: آیا اين راه حل بهينه براى به دست آوردن اين نتايج است؟ نگرانی دوم در مورد يافتن باس سوال زیر است: آا این راحل بهینه است و آبا می‌توانم تأیید کنیم که هیچ راه‌حل دیگری بهتر از راوحل ما براي این مسئله وجود بدازد؟ چزنگاه اول-:پاسیخ به«اين سبوال شنیاز ساده به: نظر فی‌زسند: با این حال:. برای دسته خاصی از الگوریتم‌هاء محققان دهه‌های ناموفق را صرف بررسی این موضوع کرده‌اند که آا راحل خاصی که توسط یک الگوریتم تولید می‌شودبه ترین است یا خبر و اینکه هیچ راه‌حل دیگری وجود ندارد که بتواند عملکرد بهتری داشته 98

صفحه 103:
باشد. بنابراین, مهم است که ابتدا مستله,نبازمتدیهای آن و منایع موجود برای اجرای الگوریتم را درک کنیم. برای ارائه بهترین راه حل برای یک مسئله بیچیده خاص, بایدبه این سوال اساسی پاسخ دهیم که آیا باید به دتبال یافتن راه حل بهینه برای این مسئله باشیم؟ اگر یافتن و تأیید راه‌حل بهینه یک کار زمان‌بر و پیچیده است, در اين صورت یک راه‌حل قابل اجرا ممکن است بهترین گزینه ما باشد. این راه حل های تقریبی قابل اجرا, اکتشافی هستند.بتبراین, درک مسئله و پیچیدگی های آن مهم است و به ما کمک می کند نا منایع مورد نازرا برآورد نیم الگوریتم چند جمله ای: اگر یک الگورینم دارای پیچیدگی زمانی ( 0181 باشد؛ آن را الگوریتم چند جمله ای می نامیم که یک ثابت است. گواهی: یک راه حل کاندید پیشنهادی که در پایان یک تکرار تولید می شود گواهی نامیده می شود. همانطور که به ظور مکرر در حل یک مسئله خاص پیشرفت می کنیم. معمولاً یک سری گواهی تولید می کنیم. اگز راه حل به سمت همگراین حرکت کند, هر گواهی تولید شده بهتر از گواهی قیلی خواهد بود. زمانی که گواهی ما شرایط را برآورده می کند. آن گواهی را به عنوان راه حل نهایی انتخاب مى کنیم. در فصل 1 مرورى بر الكوريتمهاء تماد ۵ابزرگ را معرفی کردیم که می‌توان از آن برای تحلیل پیچیدگی زمانی یک الگوریتم استفاده کرد. در زمینه تحلیل پیچبدگی نی ها به فواسل ‎colar‏ تحت زین گام هی کت مدت زمانی که طول می کشد تا یک الگوریتم یک راه حل پيشنهادی را تولید کند که گواهی (4۳) نامیده می شود زمان لازم برای تأیید راه حل پیشنهادی (گواهی), 15 مشخص کردن پیچیدگی مسئله در طول سالیان متمادی, جامعه پژوهشی مسائل را با توجه به پیچیدگی آنها به دسته های مختلفی تقسیم کرده است. قبل از اینکه بخواهیم راه حل یک مستله را 99

صفحه 104:
طراحی کنیم. منطفی است که ابتدا سعى كنيم آن رأ توصيف کنیم. به طور کلی سه نوع مستله وجوددارد: نوع 1: مسائلى كه مى توانيم براى آنها تضمين كنيم كه يك الكوريتم جند جمله اى وجود دارد كه مى تواند يراى حل آنها استفاده شود. نوع 2: مسائلى كه مى توانيم ثابت کنیم که با الگوریتم چند جمله ای فابل حل نوع 3: مسائلی که ما قادر به یافتن الگوریتم چند جمله ای برای خل آنها نیستیم. اما همچنین نمی توانیم ثابت کنیم که حل چند جمله ای برای آن مسائل غبر ممکن 7 بیابید به کلاس های مختلف مسائل تگاه کنیم: چند جمله ای عبر قطعی (8): برای اینکه یک مسئله ,۱۴ باشد, يايد شرايط زیر را داشته باشد: تضمین می شود که یک الگوریتم چند جمله ای وجود دارد که می تواند برای تأیید بهينه بودن راه حل کاندید (گواهی) استفاده شود چند جمله ای (8):انها انواعی از مسائل هستند که می توان آنها را زیر مجموعه ای از ۱۸8 در نظر گرفت. علاوه بر برآوردن شرایط یک مستله ‎INP‏ ‏مسائل 8 باید شرایط دیگری را نیز داشته باشتدد تضمین شده است که حدافل یک الگوریتم چند جمله ای وجود دارد که می تواند برای حل آنها استفاده شود. رابطه بين مسائل ۶ و ۱8| در شکل 1-4 نشان دادم 00

صفحه 105:
شکل 1-4: رابطه بين مسائل ۶ 5 ‎NP‏ اگر مسئله ای ۱۱۴ است. آیا ۶ نیز هست؟ اين یکی از بزرگترین مسائل در علم کامپیوتر است که حل نشده باقی مانده است: مسائل جایزه هزاره که توسط موسسه ریاضیات ‎Clay‏ انتخاب شده است. جايزه 1 میلیون دلاری را برای حل اين مشكل اعلام كرده است. زيرا تأثير زيادى در زمينه هابى ماتند هوش مصنوعی, رمزنكارى و علوم نظرى رابانه خواهد داشت: 101

صفحه 106:
اشكل 2-4: آيا 1/8 - 8 است؟ ما هنوز نمی دانیم بيابيد ليست كلاس هاى مختلف مسائل را ادام دهيم: مهم -0/8: دسته 1686م8-00/! شامل سخت ترين مسائل در بين تمام مسائل ۱۱۴ است. یک مسئله ۱۱۵-608۵16۴6 دارای دو شرط زیر است: soz

صفحه 107:
هیچ الگوریتم چند جمله ای شناخته شده ای برای تولید گواهی وجود ندارد. الگوریتم های چند جمله ای شناخته شده ای ‎dub sly‏ بهینه بودن گواهی بيشتهادى وجود دارد. ‎:NP-hard‏ دسته ۱۱۶-۵۳۵ شامل مساتلی است که حداقل به اندازه هر مسئله در دسته ۱/8 سخت است. اما تبازی نیست که در دسته ۱/۴ فرارگیرند. ‏احال, بیابید سعی کنیم نموداری برای نشان دادن اين دسته از مسائل ترسیم کنیم: ‎ ‎Hardes ‎Easy ‎ ‏شکل 3-4: رابطه ‎NP-Hard PNP. NP-CompLete gw‏ توجه داشته باشید که هنوز باید توسط جامعه تحقیفاتی ثابت شود که آا ۱۸۶ - 8 است یا خبر.اگرچه این هتوز تابت نشده است. اما بسیار محتمل است که ۶ ۶ ‎103 ‎ ‎

صفحه 108:
۱۱۳ باشد. در آن صورت, هیچ راه حل چند جمله ای برای مسائل ۱۱۳-6۵0۵1۵۶6 وجود ندرد. توجه داشته باشید كه نمودار قبلى بر اساس اين فرض است. ۱۱۴-۱۵۳۵ ‏بین ۱۱۴,۱۷۴ :۶-کامل و‎ soles متأسفانه,تمیز بين ۱۷۴-۵۳۵6۵ ,۴,۱ و ۱۱۴۰-۱۵۴۵ واضح نیست. اجازه دهید برای درک بهتر مفاهیم مورد بحث در اين بخش, چند متال را خلاصه و مطالعه كنيم: 8: کلاس مسائل قابل حل در زمان چند جمله ای است. متا جستجوی جدول هش الگوریتم های کوتاه ترین مسیر مانند الگوریتم های ‎Djikstra‏ الگوریتم های جستجوی خطی و دودوبی مسئله 8!: مسائل در زمان چند جمله ای فابل حل نیستند. اماء حل آنها را می توان در زمان چند جمله اى تابيد كرد. مثلا الگوریتم رمزگذاری 115۸ ‎NP-hard‏ مسائل پیچیده ای هستند که هنوز هیچکس نمی تواند راه حلی برای آنها بیبد. اما اگر حل شود, راه حل زمانی چند جمله ای خواهد داشت. مثلا ‏خوشه بندی بهینه با استفاده از الگوربتم ‎K-means‏ ‎:NP-complete‏ مسائل ۱۱۳-6۵۴۵161۵ «سحت‌ترین» مسائل در ۱۱8 هستند. آنها هم ۱۱۳-۸۵۳۵ و هم ۱۷8 هستند.مثلا ‏محاسبه راه حل بهینه مسئله فروشنده دوره گرد ‏نکته: یافتن راهحل برای یکی از هر دو کلاس ‎(NP-complete L. NP-hard)‏ معنای راه‌حلی برای همه مسائل 600۵16۴6 -۱۵۳۵/۱۱۴- ۱۱۳ است. ‏نگرانی 3 - مفیاس پذیری: الگوریتم چگونه روی مجموعه داده های بزرگتر عمل می کند؟ ‏یک الگوریتم. داده ها را به روشی تعریف شده پردازش می کند تا نتيجه ای ایجاد کند. به طور کلی, با افزایش انداژه داده هاء پردازش داده ها و محاسبه تایج مورد ‎08 ‎ ‎

صفحه 109:
تياز زمان بيشترى مى برد. اصطلاح كلان داده كاهى اوقات براى شتاسایی تفریبً مجموعه داده هابى استفاده مى شود كه انتظار مى رود كار با زيرساخت هاو الكوريتم ها به دليل حجم: تنوع و سرعت جالش براتكيز باشد. يى الكوريتم خوب طراحی شده باید مقیاس پذیر باشد. به اين معني كه بايد به گونه ای طراحی شود که تا جایی که امکان دارد. بتوند به طور موئر اجرا شود. از منانع موجود استفاده کند و نتايج صحيح را در يك بازه زمانی معفول ایجاد کند. طراحی ال وربتم هنگام برخورد با داده های بزرگ اهمیت بیشتری پیدا می کند. برای تعیین کمیت مقیاس پذیری یک الگوریتم. بید دو چنبه زیر را در نظر داشته باشیم: ۰ افزایش نبازبه مناع با افزایش داده های ورودی: برآورد یک نیازمندی مانشد اين را تحلیل بیچیدگی فضا می نامند. ۰ افزايش زمان صرف شده برای اجرا با افزایش داده های ورودی: تخمین آن را تحليل بيجيدكى زمانى مى نامتد. توجه داشته باشيد كه ما در عصری زندگی می کنیم که با اتفجار ذاذه ها تعریفی می شود. اصطلاح کلان داده به جریان اصلی تبدیل شده است زیرا اندازه و پیچیدگی داده‌هایی را که معمولً ید توسط الگوریتم‌های مدرن پردازش شوند را در بر می‌گیرد. در حالی که در مرحله توسعه و آزمایش: بسیازی از الگوریم‌ها فقط از نمونه کوچکی از داده‌ها استفاده می‌کنند. هنگام طراحی یک الگوریتم. مهم است که به چیه مقیاسن پذیزی الگوریتم ها توجة شنود: بنة طور خاض, تجزیه و تحلیل دفيق (يعتى آزمايش يا بيش بینی) اثر عملکرد یک الگوریتم با افزایش اندازه مجموعه داده ها مهم است. کشش ابر و مقیاس پذیری الگوریتمی رایانش ابری گزینه های جدیدی را برای کار با منابع مورد نیاز یک الگوریتم, در دسترس فرار داده است. زیرساخت‌های رایانش ابری با افزایش نبازمندی‌های بردازش: می‌توانندمنایع پیشتری را فراهم كنتد. قابليت راياتش ابری: کشش زیرساخت تامیده می شود و اکنون گزینه های بیشتری برای طراحی الگوریتم ارائه 105

صفحه 110:
کرده است. زماتی که یک الگوریتم در 616۱0۵ مستقر می شود: همکن است یر اساس اندازه داد هاب كه يايد بردازش قوتت تياز يه ۲۳ یا ماشین های مجازی اصافی داشته باشد. الگوریتم بدگیری عمیق نمونه خوبی است. برای آموزش یک مدل یادگیری عمیق خوب, داده های برچسب گذاری شده زیادی مورد نباز است. برای یک الگوریتمبادگیری عمیق خوب طراحی شده, پردازش مورد نیاز برای آموزش یک مدل یادگیری عمیق مستقیماً با تعداد نمونه ها متناسب است. هنگام آموزش یک مدل یادگیری عمبق در فضای ابری, با افزایش اندازه داده هاء سعى مى كنيم ‎elle‏ یشتری را برای حفط زمان آموزش در مجدوده های قابل مدیریت فراهم کنیم. آشنایی با استراتژی های الگوریتمی یک الگورنتم خوب طراحی شده, سعى مى كند تا با تقسیم مسئله به زیرمسائل کوچکتر نا جایی که ممکن است. استفاده از منایع موجود را بهبهترین شکل ممکن بهبنه كند. استراتزى هاى الكوريتمى متفاوتى براى طراحى الكوريتم ها وجود دارد. يك استراتژی الگوریتس با سه جنبه زیر از یک لیست الگوریتمی که شامل جنسه هایی از الگوریتم گم شده است سر و کار دارد. ما در اين بخش سه استراتژی زیر را ارائه خواهيم كرد: * استراتزى تقسيم وجل * استراتزى برنامه نويسى بويا * استراتزى الكوريتم حريصاتة درک استراتژی تفسیم و حل یکی از راهبردهایفتن راهی برای تقسیم یک مسئله بزرگتر به مسائل کوچکتر است که بتوان آنها ا مستقل از یکدیگر حل کرد. سپس حل‌های فرعی تولید شده توسط این مسائل فرعی برای ایجادراه‌حل کلی مستله ترکیب می‌شوند. از نظر ریاضی, اگر ما در حال طراحی راه حلی برای یک مستله (8) با 8 ورودی هستیم 106

صفحه 111:
که نیاز به پردازش مجموعه داده 8 دارد. مسئله را به | زیرمستله, ۴1 تا ۶۱ تقسیم می کنیم. هر یک از مسائل فرعی یک پارتیشن از مجموعه داده 8 را پردازش می کند. به طور معمول, پردازش ۶1 به ۴۱ از 81 به ۵6 خواهیم داشت. بياييد به يك مثال عملی نگاه کنیم. یک مثال عملی - تفسیم و حل که در آپاچی اسپارک اعمال شد ‎://spark.apache.org) Sjbusl well‏ 5م885/) يك جارجوب متن باز ست كه براى حل مسائل ييجيده توزيع شده استفاده مى شود. براى حل مسائل , استراتژی تقسیم و حل را اجرا می کند.برای پردازش یک مسئله , مسئله را به زیرمسئله هاى مختلف تقسيم مى كند و آنها را مستقل از یکدیگر پردازش می كند. اين مسائل فرعى مى تواند روى ماشين هاى جداكانه ‎Lol‏ شوند كه مقيياس أفقى را امکان پذیر می کنند. ما اين کار را با استفاده از یک مثال ساده از شمارش کلمات از یک لیسث تضان خواهیم داد. فرض کنید لیست کلمات زیر را ‏دارم ‎words List = [“python”, “java”, “ottawa”, “news”, “java”, “ottawa"] ‏می خواهیم فراوانی هر کلمه را در ان لیست مجاسه کنیم. بای این منطور: ما ‎jnlp a ULASL SL sens oe au al Joly Lay Aaa a Sa‏ کرد ‎ ‎

صفحه 112:
apt sols oping Salting dine pat نمودار قبلی مراحل زیر را نشان مى دهد كه يك مسئله به آنها تقسيم مى شود: تفسیم: داده های ورودی به بارتیشن هابی تفسیم می شوند که می توانتد مستقل از یکدیگر پردازش شوند.به ابن عمل , تقسيم می گویند. در شکل فبل ‎an au‏ ری نكاشت: هر عملياتى كه بتواند به طور مستقل روى يك تفسیم اجرا شود نگاشت نامیده می شود. در تمودارقبلی, عملیات نگاشت ,هر یک از کلمات موجود در پارتیشن را به جفت های کلید-مقدار پوشش می دهد با توجه به سه تقسیم, سه نگاشت وجود دارد كه به صورت موازی اجرا می شوند تصادفی سازی: تصادفی سازی, فرآیندی است که کلبدهای مشابه را در کنار هم قرار می دهد. هنگامی که کلیدهای مشابه کنر هم فرار می گيرن. تاه تجمبع می توانند بر روی مقادیر ‎Ug‏ اجرا شوند. توچه داشته باشید که تصادفی سازی یک عملیات فشرده کارایی استء زيرا كليذهاى مشابه بايذ با هم جمع شوند تا بتونشد در ادا در سراسر شبکه توزیع شوند کاهش؛ اجرای یک تایع تجمع بر روی مقادیرکلیدهای مشابه کاهش نامیده می شود. در تمودار قبل بايد تعدادکلمات را بشماریم. 10

صفحه 113:
بيابيد بينيم جكونه مىتوانيم كدى را براى ببادوسازى آن بنويسيم. يراى نشان دادن استراتژی تقسیم و حل, به يك جارجوب محاسباتى توزيع شده نياز داريم. يراى اين كار بايتون را روى آباجى اسبارك اجرا مى كنيم: ابتداء براى استفاده از 50۵۳۷ ۸88606 یک زمینه زمان اجرا از ۸09606 6 ايجاد مى كنيم: import findspark findspark. init () from pyspark.sql import SparkSession spark = SparkSession. builder.master(*Local[*]").getOrCreate() sc = spark. sparkContext حالا بيابيد يك ليست تموته حاوی چند کلمه ایجاد کنیم. ما اين ليست را به ساختار داده های توزیع شده بومی ‎Spark‏ به نام مجموعه داده های توزیع شده انعطاف پذیر (800) تبديل مى كنيم: wordsList = ['python', ‘java’, ‘ottawa’, ‘ottawa’, ‘java" , news") wordsRDD = sc.parallelize(wordsList, 4) # Print out the type ۱ ۵ print (wordsRDD.collect()) نتیجه زیر چاپ خواهد شد: ['python', ‘java', ‘ottawa’, ‘ottawa’, ‘java’, ‘news'] 09

صفحه 114:
حالا بيابيد از يك تابع نكاشت يراى تبديل كلمات به يك جفت کلید-مقدار استفاده کنیم: wordPairs = wordsRDD.map(Lambda w: (w, 1)) print (wordPairs.collect()) نتیجه زیر چاپ خواهد شد: ‎[(python', 1), (*java', 1), (‘ottawa’, 1), (‘ottawa’,‏ ‎(java, 1), (‘news', 1]‏ ,)1 بيابيد از تايع كافش برای جمع آوری و به دست آوردن نتبجه استفاده کنیم: wordCountsCollected = wordPairs. reduceBykey (Lambda x,y xy) print (wordCountsCoLlected. collect ()) نتيجه زير جاب خواهد شد ‎[('python', 1), (*java', 2), (‘ottawa’, 2), (‘news',‏ 111 ابن نشان مىدهد كه جكونه مىتوانيم از استرانژی تقسیم و حل برای شمارش تعداد كلمات استفاده كنيم. توجه داشته باشيد که تقسیم و حل زمانی مفید است که یک مسثله را بتوان به زیرمستله‌های فرغی تقسیم کرد و هر زیرمسئله را می‌توان حدافل تا حدی مستقل از سایر مسائل فرعی حل کرد. اين بهترین انتخاب برای الگوریتم‌هایی نیست که به پردازش نکراری فشرده مانند الگورتمهای مد

صفحه 115:
بهينه سازى نياز دارند. برای چننالگوریتم هایی, برنمه نویسی پوا مناسب است که رذن سين برق راك عي وق زيرساختهاى رابانش ابرى مدرن. ماند ‎Microsoft Azure, Anazon Web‏ ‎l Google Cloud y Services‏ پیاه‌سازی استرانژی تقسیم و حل , مستفيم با غیزمنتسمرم نس ممه بت ودر اتويوت دت میا درک انسزایژی زیامت توینتی یوت در قسمت قبل به مطالعه تقسیم و حل پرداختیم که روشی از با به پایین است. در مقابل, برنامه نويسى بوبا يك استراتژی از این به بالا است. ما با كوجكترين مسئله فرعی شروع مى كنيم و به ترکیب راه حل ها ادامه می دهیم. ما به ترکیب امه می دهیم تا به راه حل نهایی برسیم. بنامه نویسی پا ماند روش تقسیم و حل, مسائل را با ترکیب راه حل های مسائل فرعی حل می کند. برنامه نویسی بويا يك استرانژی است که در دهه 1950 توسط ریچارد بلمن برای بهینه سای کلاس"های خاصی از الگوریتم ها پيشنهاد شد. توجه داشته باشنید که در برنامه: نويسى بويا كلمه "00097308159" به استقاده از روش جدولی اشاره دارد و ریطی به نوشتن کد ندارد. برخلاف استراتژی تقسیم و حل , برنامه نویسی ‎Lose‏ ‏زمانی فایل اجرا است که زیرمسائل مستقل نباشند. معمولا برای مسائل بهینه‌سازی که در آن راه‌حل هر یک از مسائل فزعی دارای یک مقدار است. استفاده می‌شود. هدف ما یافتن راه حلی با ارزش بهینه است. یک الگوریتم ‎gy Gauges‏ هن زیرملله را فقظ یک بار خل می‌کند و شین پاستخ آن را ذر یک جدولذخمزه میگند. دز سهجه از کار معاسیهمجددپأمخ. ‎tine Ly lege‏ فرعی مواچه می‌شود اجتتاب می‌کند. شرایط استفاده از برنامه نویسی بویا مسئله ای که با برنامهنویسی پویا سعی در حل آن داریم باید و ویژگی داشته باشد.

صفحه 116:
1. ساختار بهبنه: برنامه نوبسى بويا زمانى مزاياى عملكرد خوب را به ارمفان من آوزد که مستله ای که ما در تلاش برای حل آن هستیم را می توان به مسائل فرعی تقسیم کرد. برنامه تویسی پویا با ترکیب حل مسائل فرعی کار می کند. اولین گام برای استفاده از برنامه نویسی پویا برای حل یک مسئله خاص ۸ این اس كه وري كيو كه آيا مسلدة جنين رورشاعة مارج را مسان مي دهد ‎we‏ 2. مسائل فرعی همپوشانی: مبتنی بر مکانیزم ذخیره سازی هوشمند است که سعی می کند از نتایچ محاسیات سنگین, مجددا استفاده کند. به این مکاتیسم کش هوشمند, حاف كذارى م ىكويتد. مسائل فرعن تا حدى شامل محاسبه أى است كه در آن مسائل فرعى تكرار من انوك ايده لين اننث كاي بار آن معاسية زا نجهم دقرم (كنة مزجلة رماوين است) و وين ار آن براق سایز مسائل فرعن استفاده مجدد کتیمء لن کارریا ‎oat‏ از یادداست به دستت می آبذن که بم ویازه ذراخل مشانل بازگستنی که ممکن است ورودی های یکسان را چندین بار ارزبابی کنند, مفید است. توجه داشته باشید که یک تایع بازگشتی یک مسئله خاص را با فراخوانی یک کپی از خود و حل مسائل فرعی کوچکتر از مسائل اصلی حل مي کند. راه‌حل‌های مجاسبه شده مسائل فرعی در یک جدول ذخيره مىشوند, به طوری که ‎sis nila ha‏ راهن از اين روه اين تكنيك در جابى كه مسئله فرعى همپوشانی وجود دارد مورد نباز است. متا 1. جستجوی دودویی مسئله فرعی همپوشانی ندارد. SEAS GI Soe ade SUSI SELIG EIEN peas saab gas ‏كو على‎ ‏همپوشانی هنت‎ درک الگوریتم های حریصانه az

صفحه 117:
همانطور که از نام آن مشخص است, یک الگوریتم حریصانه تسبتاً سریع یک راه حل خوب تولید می کند, اما نمی تواند راه حل بهینه باشد. منند برنامه نویسی پویاء الگورنتم های حریصانه عمدتاً برای حل مسائل پهینه سازی در جابی که نمی توان از استراتژی تقسیم و حل استفاده کرد. استفاده می شود. در الگوریتم حریصانه, راه حل با دتباله ای از مراحل محاسبه می شود. در هر مرحله: یک انتخاب پهینه محلی انجام مي شود شرایط استفاده از برنامه تویسی حریصانه خریضانهیک استزایری ‎Unis Bay Gags GPSS Cal‏ با 95 ‎Sa ARS ay CS hg‏ 1. سراسری از محلی: با انتخاب یک بهیته محلی می توان به یک بهینه سراسری 2. زیرساخت بهینه: یک راه حل بهینه برای مسئله. از فرعی ساخته می شود. برای درک الگوربتم حریصانه بدا دو اصطلاح را تعریف می کنیم سربار الكوريتمى: هر زمان كه بخواهيم راه حل بهينه براى يك مسئله خاص پیدا كنيم, مدتى طول مى كشد. با بيجيددتر شدن مسائلى كه سعى در بهينءسازى آنها داريم. زمان لازم براى يافتن راوحل بهينه نيز افزايش موبايد. ما سربار الكوريتمي را با 03 نشان می دهیم. دلتا از يهبنه: براى يك مسئله بهينه سازى معين. یک راه حل بهینه وجود داد به طور معمول, ما به طور مكرر راه حل را با استفاده از الكوريتم انتخابى خود بهينه مى كنيم. براى يك مسئله معين. هميشه يك راه خل كامل به ثام راه خثل ‎aig‏ براى مسئله فعلى وجود دارد. همانطور كه بحث شد بر اساس طبفه‌بندی مسه ای كوزكر فاق مراف ‎Gees atin BI ls‏ رجه لوقل هينه ل تایه باشد با اينکه محاننبه و یبد آن زمان غبرمتطقی طول بکشد. با فرض اینکه حل های بهینه مسانل قد

صفحه 118:
جواب بهیته مشخص است: تفاوت از بهینه برای راه حل فعلی در ذامین تگرار: دلتا از بهینه نامیده مي شود و با ۵3 نشان داده مى شود. برای مسائل پیچیده, ما دو استرانژی ممکن داریم: استراتژی 1: زمان بیشتزی را ضرف یافتن راه حلن نزدیک بة بهینه کنید تا له تا حد امکان کوچک باشد. استراتژی 2: به حداقل رساندن سربار الگوریتمی: 1 . از رویکرد سریع و کئیف استفاده کنید و فقط از یک راه حل قابل اجرا استفاده كنيد. الگوریتم‌های حریصانه مبتتی بر استراتژی ۲ هستند. جایی که ما تلاشی برای یافتن بهینه سراسری نمی‌کنيم و به جای آن, هزینه‌های سربار الگوریتم را به حدافل می‌رسانيم. استفاده از الگوریتم حریصانه یک استراتژی سریع و ساده برای یافتن مقدار بهینه سراسری برای مسائل چند مرحله‌ای است. این استراتژی مبتتی بر انتخاب مقادیر بهینه محلی است بدون اينكه تلاشى براى تأييد اينكه آيا مقادیر بهینه محلى در سطح سراسرى نيز بهيته هستند يا خير. به طور كلى, تا زمانی که ما خوش شانس تباشيم يك الكوريتم حريصانه به مقدارى منجر نمی شود که بتوان آن را در سطح سراسری بهینه در نظر گرفت. با اين حال, يافتن يك مقدار بهینه سراسری یک کار زمان بر است. از اين رو الگوریتم حریصانه در مقایسه با الگوریتم‌های برنامه‌نویسی تقسیم و حل سریع است. به طور کلی, یک الگوریتم حریصانه به صورت زیر تعریف می‌شود: فرض کنبد یک مجموعه داده ۵ داریم. در اين مجموعه داده, یک عنصر, ۷ را انتحاب كنيد. فرض كنيد رادجل يا كواهى كانديد 5 اسث. كا را در رادجل 5 , لحاظ كنيد. اكر بتوان آن را كنجاند. بس راوحل )€ ,0100)5لا است. ابن فرآيند را تا زمانى كه 5 بر شوذ يا ا تمام شود تكرار كنيد. منال: الگوریتم طبقه‌بندی و درخت رگرسیون (6۵8۲) یک الگوربتم حربصانه است که به دنبال تقسیم بهینه در سطح یلا است. us

صفحه 119:
این فرآیند را در تعامی سطوح بعدی نگرار می کند. توجه داشته باشید كه الكوريتم ‎CART‏ محاسیه و بررسی نمی کند كه آيا تقسيم به يابين ترین ناخالصی ممکن در چندین سطح منجر می شود یا خبر. ۲۸/8۲ از الگوریتم حریصانه استفاده می کند زيرا بافتن درخت بهيته به عنوان يك مسئله ۱۵۰0۴1666 شناخته شده است و داراى بيجيدكى الكوريتمى زمان ( (0)60)8 أست. یک کاربرد عملی - حل مسئله فروشنده دوره گرد (15۴) بییید بتدا به بیان مسئله 758 نگاهی بيتدازیم, که یک مسئله شناخته شده است که در دهه 1930 به عنوان یک چالش مطرح شد. 758 یک مسئله ‎NP-hard‏ ‏است. برای شروع. می‌تونيم ب‌طور تصادفی توری ایجادکنیم که شرایط بازدید از همه شهرها را بدون اهمیت دادن به راهحل بهنه برآورده کند. سیس, ما می توانیم برایبهیود راه حل با هر تكرار كار كنيم. هر تورى كه در يك نكرار ايجاد مى شود راه حل کاندید نامیده می شود (همچنین گواهی تامیده می شود). اثبات بهینه بودن يك كواهى نبزمند زمان فزاینده ای است. درعوض, راهل‌های منتنی بر اکتشافات مختلف استفاده می‌شود که تورهایی را یجادمی‌کند که نزدیک به بهینه هستند اما بهیته نیستند. یک فزوشنده دوره گرد بایند از لیننت ففیتی از شهرها بازديد كند تا كار خود را انجام دهد: ‎jl tunel INPUT‏ شهر (كه با لا مشخص مى شود) و فواصل بين هر جفت شهر, (0 > [:1 > 1) [1 4 ‏017۴۲۲ کوتاهترین توری که دقيقاً يك بار از هر شهر بازدید می کند و به شهر. اولیه بازمی گردد ‏به موارد زیر توجه کنید: فواصل بین شهرهای موجود در لیست مشخص است, هر شهر در ليست داده شده بايد دقيقا يك بار بازديد شود. ‎us ‎ ‎

صفحه 120:
آيا مى توانيم برنامه سفر را برای فروشنده تهیه کنیم؟ راه حل بهینه ای که می تواند کل مسافت طي شده توسط فروشنده دوره گرد را به حداقل برساند چه خواهد بود؟ فواصل زیر بين پنج شهر انادا است که می توانیم برای 158 استفاده كنيم: ‎‘Ottawa [Montreal [Kingston ۳۳۵7۵۳۵ ] Sudbury‏ ‎TOE 77 750 257‏ 02 8 517 3 0 110217227 ‎Kingston | 196 aT = 23 oat‏ ‎Toronto [450 577 55 70‏ ‎Sudbury 7 180 oat 1۳ ۱‏ توجه داشته باشید که هدف دریافت توری است که در شهر اولیه شروع و به بابان می رسد. به عنوان مثال, یک تور معمولی می تواند اتاوا - سادبری - مونترال - کینگستون - تورنتو - انوا با هزینه 484 + 680 + 287 + 263 + 450 - 4 باشد. یا اين توری است که فروشنده باید حدافل مسافت را طی کند؟ راه حل بهینه ای که بتواند کل مسافت طی شده توسط فروشنده دوره گرد را به حدافل برساند. چه خواهد بود؟ فکر کردن و محاسیه را به عهده شما می گذارم. استفاده از استراتژی ۳۵۵-۶۵۳6۵ أولين راه حلى که برای حل 158 به ذهن مي رسد استفاده از ‎brute force‏ برای رسیدن به کوتاه ترین مسیر است که در آن فروشنده دقیقا یک بار از هر شهر بازدید می کند و به شهر اولیه باز می گردد. بنابرین. استرانژی ۳۱6۵-۴0۲6 به صورت زیر عمل مى كند: 1. تمام تورهای ممکن را ارزيابى كنيد. 2. یکی را انتخاب کنید که کمترین فاصله را برای آن به دست آوریم. us

صفحه 121:
مسئله اين است که برای 8 شهر تعداد ! (0-1) تورهای ممکن وجود دارد یعنی ينج شهر24 > 4 تور توليد مى كنند , و ما يكى را انتخاب مى كنيم كه با كمترين قاضه مطايعت دارد: يدرهت أستت ‎as cso oy aes lar aso af‏ كه ممداء: شهرها زید نباشد. با افزايش تعداد شهرها. استراتژی ۳۷۵۵-۲۵۲6۵ به دليل تعداد زیادی جایگشت ایجاد شده با استفاده از اين رويكرد غيرفايل حل مى شود. بيابيد ببينيم جكونه مى توانیم استراتژی ۲۳56-۶0۴66 را در پایتون پیاده سازی ‎as‏ 1 ‏گشت و گذار در شهر از شهر‎ Ss A123} ‏توجه داشته باشید که یک تور.‎ al ‏به شهر 2 و شهر 3 را نشان می دهد‎ مسافت کل در یک تور, کل مسافت طی شده در یک تور است. فرض می کنیم که فاصله بین شهرها کوتاهترین فاصله بین آنهاست (که فاصله افلیدسی است). انتدا سه تايع مقيد را تعریف می کنیم: ‎distance points‏ : فاصله مطلق بين دو نقطه را محاسیه می کند ‎JS: distance tour‏ مسافتی را که فروشنده بايد در يك تور مشخص طى کند را محاسبه می کند ‎yy-b «Generation cities‏ تصادفى مجموعه ای از ۸ شهر واقع در یک مستطیل با عرض 500 و ارتفاع 300 را ايجاد مى كند. ‏ابید به کد زیر نگاهکنیم: ‎import random from itertools import permutations alltours = permutations ‏در كد قبلى. همه تورها را از تبع جایگشت بسته 186۴80016 پیاده سازی کردیم. ما همجنين فاصله را با يك عدد مختلط نشان داده ايم. اين به معناى موارد زير ‎ ‎

صفحه 122:
محاسيه فاصله بين ذو شهر 3 و تاه سادگی فاصله (۵,۵) است. ما مى توانيم تعداد 8 شهر را فقط با فراخوانی (0) 9606۴14165 ایجادکنم def distance_tour(aTour): return sum(distance points (aTour[i - 1], aTour{il) for i in range(ten(aTour))) aCity = complex def distance points(first, second): return abs(first - second) def generate cities (number of cities seed=111;width=500;height=300 random.seed( (number of cities, seed)) return frozenset(aCity(random.randint(1, width), random.randint(1, height)) for ¢ in range(number_of_cities)) حالا بياييد يك ‎yas brute force subi‏ كنيم, که تمام تورهای ممکن در شهرها را تولید می کند. هنگامی که تمام تورهای ممکن را ابجاد کرد. یکی را با کمترین مساقت انتخاب مى كند: def brute force(cities): "Generate all possible tours of the cities and choose the shortest tour." ue

صفحه 123:
return shortest_tour(alltours(cities)) def shortest_tour(tours): return min(tours, key=distance_tour) حال ابید تویع کاربردی زا تعریف کنیم که من تونند یه ما در رم شهرها کمک كنند. توابع زير را تعریف خواهیم کرد 0_ 426 ]دنا ذ:تمام شهرها و پیوندها را در یک تور خاص ترسيم مى كند. همچنین شهری را که تور از آجا شروع شد را برجسته می کند ‎visualize tour lousy’: visualize segment‏ برای ترسیم شهرها و پیوندها در یک بخش استفاده مي شود ‏به كذ زیر نگاه کنید: ‎smatplotlib inline import matplotlib.pyplot as plt def visualize tour(tour, if Len(tour) > 1000: plt.figure(figsize=(15, 10)) start = tour[0:1] ‎visualize segment (tour + start, style) visualize segment (start, ‘rD') ‎def visualize segment (segment, style="bo-' plt.plot({X(c) for ¢ in segment], [¥(c) for ¢ in segment], style, clip_on=False) plt.axis('scaled") ‎plt.axis(‘off") ‎ ‎ ‎ ‎ ‎us ‎ ‎

صفحه 124:
def X(city): "X axis"; return city.rea def Y(city): "Y axis"; return city.inag باید یک تان )85 را پیاده سازی کنیم که کارهای زیر را انجام می دهد تور را بر اساس الگورنتم و تعداد ششهرهای درخواستی ایجاد می کند مدت زمان اجرای الگورتم را محاسبه می کند یک طرح انجاد می کند هنگامی که ()۴5۳ تعریف شد. می توانیم از آن برای ایجاد یک تور استفاده کنیم: from time import clock from collections import Counter def tsp(algorithm, cities): tO = clock() tour = algorithm(cities) t1 = clock() # Every city appears exactly once in tour assert Counter(tour) == Counter(cities) visalize tour(tour) print ("{}:{} cities => tour length {;.0f} (in {:.3f} sec". format( name(algorithm), len(tour), distance tour(tour), ti- to)) def name(algorithm): return algorithm. name_.replace('_tsp',' 120

صفحه 125:
tsp(brute_force, generate cities(10)} brute force: 10 cities + tour length 1218 (in 10.962 sec) توجه داشته باشید که ما از آن برای تولید تور برای 10 شهر استفاده کرده ایم. به عنوان 362880 )1-10( != ,10 = #جایگشت ممکن ایجاد می کند. اگر ۶ افزایش بابد. تعداد جایگشت ها به شدت افزایش می یاید و نمی توان از روش ‎2S oslinul brute-force‏ استفاده از یک الگوریتم حریصانه اگر از یک الگوریتم حریصانه برای حل 158 استفاده کنیم. در هر مرحله به جای يافتن شهرى برای بازديد که هترین مسیر کلی را در بی داشته باشد , می‌توانيم شهری را نتخاب کنیم که معقول به نظر می‌رسد. تابرین؛ هر زمان که نباز به انتخاب شهری داشته باشیم. فقط تزدیکترین شهر را نتخاب می‌کنيم بدون اینکه زحمتی برای بررسی اینکه آا ان انتخاب منجر به مسبر بهیته سراسری می‌شود. ‎Say‏ الگوزیتم خریضانه ساذه اسسث: 1. أز هر شهرى شروع كنيد.

صفحه 126:
2 در هر مرجله, با حرکت به شهر بعدی که نزدیکترین شهر قبلا بازديد نشده ‎ll‏ کته سفنت تور دام ‎Si‏ 3. مرحله 2 را تکرار کند. ببابيد تابعى ‎greedy algorithm ali as‏ تعریف کنیم که بوند اين منطق را پیاده سازی کند def greedy algorithm(cities, start=None) city_ = start or first(cities tour = [city } unvisited = set(cities - {city } while unvisited: city_ = nearest_neighbor(city_, unvisited tour.append(city ) unvisited. renove(city_) return tour def first (collection): return next(iter (collection) def nearest_neighbor(city a, cities) return min(cities, key=lambda city distance points(city , city a) حال. ید از ۵190۴161 9۲26۵ برایاجاد یک تور برای 2000 شهر استفاده كنيم: tsp(greedy algorithm, generate cities (2000)) ae

صفحه 127:
شکل 5-4: شهرهای نمایش داده شده در نوت بوک 0/۲۵۴ توجه داشته باشيد كه ساخت تور برای 2000 شهر فقط 0.514 ثانيه طول كشيد. اكر از روش 6600560666 استفاده كرذه بوديم ! (2000-1) جايكشت توليد مى كرد كه تقريبا بى نهايت است. توجه داشته باشيد كه الكوريتم حريصاته مبتنى يبر اکتشاف است و هیچ مدركي وجود تدارد كه راه خل بهينه باشد. خال, نید به طراحى الكوريتم 839688816 نكاه كنيم. ارائه الگوریتم ‎PageRank‏ به عنوان یک مثال عملی, بيایید به الگوریتم ۳296830 نگاهی بیندازیم که در ابتدا توسط كوكل براى رتبه بندی نیج جستجوی یک پرس و جوی کاربر استفاده می شد. عددی تولید می کند که اهمیت نتایج جستجو را در زمينه برس و جویی که کازین چا کزدح اشتت: بات من کید ‎gl‏ کار ‎Magn‏ و کاس تنوی ‎sss PAD‏ ومد

صفحه 128:
بيج و سرگی برین, در اواخر دهه 1990 در استتفورد. که همچنین گوگل را راه‌اندازی کردند بطراحی شده است. ‎PageLet pl I PageRank ais Sil‏ ۱۵۳۳۷ نامگذاری شد که برای اولین بار به طور رسمی مسئله ای را که رتبه صفحه در ابتذا برای آن طراحی شده بود تعریف کرد. ‏تعریف مسئله هر زمان که کاریر, درخواستی را در یک موتور جستجو در وب وارد می کند, ‎Vyas‏ فاد ‎yy‏ تج بع دسف ‎sal aa‏ راخ ‎ile Sol ayy tala aS‏ عفد باشد, رتیه بتدی صفحات وب با استفاده از برخی معبارها مهم است. نتایجی که نمایش داده می‌شوند از ان رتب‌بندی برای خلاصه کردن یج بای کاربر استفاده می‌کنند و به معیارهای تعریف‌شده توسط الگوربتم زیربنایی مورد استفاده وایسستء پیاده سازی الگوریتم ۲۵90۴۵0۷ ابتدا هنگام استفاده از الگوریتم ۳۵968۵1 از نمایش زیر استفاده می شود: ‏© صفحات وب توسط گره ها در یک گراف چهت دار نمایش داده می شوند. ‏* یال های نمودار, مربوط به لینک ها هستند. مهمترین بخش الگوریتم ۵968۵01 اين است که بهترین راه را برای محاسیه اهمیت هر صفحه ای که توسط نتایج پرس و جو برگردانده می شود. ارائه دهد. رتبه یک صفحه وب خاص در شبکه به عنوان احتمال اینکه شخصی که به طور تصادفی از لبه ها عبور می کند(عتی کلیک روی پیوندها) و به آن صفحه می رسد محاسبه مى شود. همجنين اين الكوريتم با ضريب ميرابى آلفا كه مقدار بيش فرض آن 0.85 انت: پرامترسازی من‌شود: این ضریب میرایی احتمال ادامه کلیک کاریر است. توجه داشته باشید که صفحه با بالترین 8۵08880 جذاب ترین است: صرف نظر از اينکه شخص از کچا شروع می کند. این صفحه پیشترین احتمال را دارد که مقصد نهایی آن باشد. الگوریتم تیاز به تکرارهای زیادی دارد با ‎as ‎ ‎

صفحه 129:
از مجموعه صفحات وب عبور می کند تا اهمیت (یا مقدار رتبه صفحه ) هر ص فحه وب را لعفو کند.برای معاسیه غذدی از 0 تا 2 که می تواند افعیت یک صفخه خاص را حساب کند.الگویتم اطلاعاتی را از دو مولغه زیر به کار می گید + اطلاعاتى که مختص پرس و جوی وارد شده توسط کاربر می باشد: اين مولفه, در زمینه درخواست وارد شده توسط کاربر: ميزان مرتبط بودن محتوای صفحه وب را تخمين مى زند. مجتوای ضفحه مستفیا به نیسنده صفحه پسنگی داد © اطلاعاتى كه به درخواست وارد شده توسط کاربر مرتبط نمی باشد: این مؤلقه سعى مى كند أهميت هر صفحه وب را در مینه پیوندها, دیدگاهها و همسایگی آن حساب می کند. همسایگی یک صفحه وب. گروهی از صفحات وب هستند که مستقیماً به یک صفحه خاص متصل می شوند. محاسیه اين مولفه دسواز انت:زیزا ضعحاتوب:عاهمگن هنت و ایچاد: معیازهایی کن: می تواند در سراسر وب اعمال شود. دشوار است. برای پیاده سازی الگوریتم ۳۵96/9۵01 در پابتون, انتدا کتابخانه های لازم را وارد فى كتيم import numpy asp import networkx as nx import matplotlib.pyplot as plt توجه داشته باشید که شبکه ‎on sly col https ://networkx.org jI‏ نمایش: قرض می کنیم که ما فقط پنج ضفحه وب را در شبکه تجزیه و تحلیل می كنيم. بيابيد اين مجموعه از صفحات را 395م_ل8 بناميم و با هم در شبکه ای به نام ۷۵۵ 8۷ قرار دارند: my_web = nx.DiGraph() as

صفحه 130:
my pages = range(1,5) حالا ببابيد آنها را به صورت تصادفى وصل کنیم تا یک شبكه واقعى شبيه سازى شود connections = [(1,3), (2,1), (2,3) ,(3,2), (3,2), (3,4), (4,5),(5,1),(5,4)] ny web.add_nodes_from(ny_pages) ry web.add_edges_from( connections) حالا بباييد اين كراف را رسم کنیم: pos=nx.shell_Layout (my web) nx.draw(my web, pos, arrows=True, with labels=True) plt.show() این کد نمایش تصویری ‎aS‏ ما را به شرح زير ايجاد مى كند: 126

صفحه 131:
شکل 6-4: نمایش تصویری شبکه در الگوریتم ۳۵061۵:1, الگوهای یک صفحه وب در ماتریسی به نام ماتررس انتقال وجود دارد. الكوريتم هابى وجود دارند که به طور مداوم ماتریس انتقال را به روز می کنند تا وضعیت دائماً در حال تغییر وب را .ثبت کنند. اندازه ماتریس انتفال 8 ا 0 است که ۱ تعداد گره ها است. اعداد موجود در ماتریس احتمال این است که یک بازدیدننده بعداً به دلیل پیوند خروجى به آن ببوند برود. در مورد ماء كراف قبلى, وب ثابتى را نشان می دهد که ما داريم. بباييد تابعى را تعريف كنيم كه بتوان از آن برای ایجاد ماتریس انتفال استفاده کرد def create page_rank(a graph): nodes set = len(a_graph) M = nx.to numpy matrix(a_graph) aa

صفحه 132:
outwards = np.squeeze(np.asarray (np. sum (M, axis=1)))= prob outwards [1.0/count if count>@ else @.0 for count in outwards]) G = np.asarray(np.multiply (M.T, prob_outwards)) p = np.ones(nodes set) / float (nodes set) if np.min(np. sum(G, axis=0)) < 1.0: print (‘WARN: G is substochastic return G, p p.array( توجه داشته باشید که این تابع 6 را برمی گرداند. که تشان دهنده ماتریس انتقال ‎OLS sly‏ ما است. ببیید ماتریس انتقال را برای گراف خود ایجاد کنیم: G,p = create_page_rank(my web) 9 فا دا ‎a‏ شکل 7-4: ماتریس انتقال توجه داشته باشید که ماتریس انتقال برای گراف ما 5*5 است. هر ستون مربوط به هر گره در نمودار است. به عنوان متال, ستون 2 در مورد گره دوم است. ae

صفحه 133:
احتمال 0:5 وجود دارد که بازدیدکننده از گره 2 به گره 1 يا گره 3 حرکت کند. توجه داشته باشید که فطر ماتریس انتقال 0 است همانطور که در گراف ما وجود داردء هيج پیوند خروجی از یک گره به خودش وجود ندارد. در یک شبکه وافعی, ممکن است امکان پذیرباشد. توجه داشته باشید كه ماتريس انتقال يك ماتريس خلوت استت. ‎fall Wy‏ تعداد كرو ناء پینستز معادیز آن 0 خواهد یود: بسابزاینز ساختار یک گراف به عنوان یک ماتریس انتقال استخراج می شود. در یک ماتریس انتفالی که گره ها را در ستون ها و سطر ها نشان می دهد: ستون ها: نشان دهنده گره ای است که یک وب گرد در آن قرار دارد سطر ها: احتمال اينکه جستجوکننده به دلیلپیوندهای خروجی از گره های دیگر بازدیدکند را تشان می دهد در وب وافعی. ماتریس انتفالی که الگوریتم ۴۵960۵04 را تغذیه می کند, توسط کاوش مداوم عنکبوت ها در پیوندها ساخته می شود آشتایی با برنامه نویسی خطی بسیاری از مسائل دنای واقعی در حال به حداكثر رساندن با به حداقل رساندن یک هدك با جزخن مخدودیت‌ها هننسن یک رویکرد اين است که هدف را به عنوان تابع خطی برخی از متفیرها مشخص كنيم. ما همجنين محدوديت هاى منايع را به عنوان برايرى با تابرايري در آن متغيرها قرموله می‌کنيم. این رویکرد را مسئله برنامه نویسی خطی می نامند.الگوریتم اصلی برنامه نویسی خظی توسط جورج دانتسیگ در دانشگاه کالیقرتیا در برکلی در اوایل دهه 1940 توسعه یافت. 080629 از اين مفهوم برای آزمایش برتامه ريزى تداركات و ظرفيت لجستيكى براى سریازان در حین کار برای نیروی هوایی بالات متحده استفاده کرد. در پایان جنگ جهانی دوم, دانتسیگ شروع به کار برای بنتاكون كرد و الكوريتم خود را به تکنیکی تبدیل کرد که نام آن را برنام‌نویسی خطی گذاشت. براى برنامه ريزى نبرد نظامى استفاده مى شد. امروزه از آن برای حل مسائل مهم دنياى واقعى كه مربوط به كمينه كردن با بيشينه كردن يك متغير ود

صفحه 134:
‎salted cul gold glwcangana pall ya‏ من شود چند موف ین مسر شرح زير است: »به حداقل رساندن زمان تعمير خودرو در مكانيكى بر اساس منابع * تخصيص منابع توزيع شده موجود در يك محيط محاسباتى توزيع شده براى به حدافل رساندن زمان پاسخ * حداكثر كردن سود یک شرکت بر اساس تخصیص بهینه منایع در داخل شرکت ‏فرمول بندی یک مسئله برنامه نویسی خطی ‏شرايط استفاده از برنامه نويسى خطی به شرح زیر است: ‏ما بايد بتوانيم مسئله را از طریق محموعه ای از معادلات فرمول بندی کنیم متغیرهای مورد استفاده در معادله باید خطی باشتد. ‏تعریف تابع هدف توجه داشته باشيد كه هدف هر يك از سه مثال قبل, به حداقل رسائدن يا حداکتر كردن يك متغير است. اين هدف از نظر رياضى به صورت تابع خطى ساير متغيرها فرموله مى شود و تابع هدف تاميده مى شود. هدف یک مسئه برنامه نوسی خظی این است که ‎an gl‏ را کمیه یا يشینهکند دز خالی که در محدودیت های مشخص شده باقی یماد ‏تعيين محدودیت ها هنگم لاش پرای به حدافل رساندن با به حداکثر رساندن چیزی, محدودیت‌های خاصی در مسائل دنیای واقعی وچود دارد که باید رعایت شوند. به عنوان متال: زمانى كه سعى مى كنيم زمان تعمير خودرو را به حداقل برسانيم, همجنين بايد در طن داسك ‎gail‏ كه #مداد:محدودى: مكايك دن مسحرين أست سيين هن مسدوديت: ‎130 ‎ ‎

صفحه 135:
از طریق یک معادله خطی بخش مهمی از فرمول بتدی یک مسئله برنامه نویسی خطی است. یک برنامه کاربردی - برنامه ریزی ظرفیت با برنامه نویسی خطی بيایید به یک مورد کاربردی عملی نگاه کنیم که در آن می توان از برتامه نویسی خطی برای حل یک مستله دبای واقعی استفاده کرد. بایید فرض کتیم كه من خوافیم سود یک کارخانهپیشرفته را که دو نوع مختلف ریات تولید می کند, به حداکتر برسانيم مدل ييشرفته (8): اين مدل ,عملكرد كامل را فراهم می کند. تولید هر واحد از مدل پیشرفته منجر به سود 4200 دلاری می شود مدل پایه (8): اين فقط عملکرد اولیه را ارائه می دهد. تولیذ هر واحد از مدل پابه منجر به سود 2800 دلاری می شود برای ساخت ریات سه نوع مختلف از افراد مورد نیز است. تعداد قیق روزهای مورد نياز براى ساخت ريات از هر نوع به شرح زیر است: 786 67 50505-77665181 Engineer an Specialist Robot A: Taays | Tdays —]Fdays advanced model Robot B: basic |Z days 5 days model کارخانه در چرخه های 30 روزه کار می کند. یک متخصص هوش مصنوعی به مدت 30 روز در یک چرخه در دسترس است. هر یک از ان دو مهندس در 30 روز 8 روز مرخصی خواهند گرفت. بناباین» یک مهندس فقط ببرای 22 روز در یک

صفحه 136:
چرخه در دسترس است. یک تکنسین به مدت 20 روز در یک چرخه 30 روزه در دسترس است. جدول زیر تعداد افرادی را که در کارخانه داریم نشان مي دهد: Technica | AT Engineer a Specialist Number of people T T تعداد کل روزها در یک ‎days 2% 22 Lasse‏ 30 = ‎days‏ 44 = x 20 = 20 days 1x3 این کار را می توان به صورت زیر مدل کرد حداکتر سود < 28008 + 4200۸ ابن موضوع مشروط به موارد زیر است: 9 ۵ < 8: تعداد ریات های پیه تولید شده می تواند 0یا بیشتر باشد 20 = 28 + 3۸: لته محدودیتت های در دسترس بودن تکتسین هستد. 0 > 38+:4۸: انا محدودیت های در دسترس بودن متخصص هوش مصنوعی ۸: تعداد روبات های پیشرفته تولید شده می تواند 0 یا بیشتر باشد. 4 > 38 +48: اينها محدوديت هاى در دسترس بودن مهندسان هستند. ابتدا بسته بايتون با نام نام را وارد می کنیم که برای بیاده سازی برنامه نویسی خطی استفاده می شود ‎import pulp‏ a2

صفحه 137:
سپس تایم ۱0۳۲۵۵1۵8 را در اين بسته برای نمونه سازی کلاس مستله فراخوانی می کنیم. مثال مسئله را ‎maximising‏ 0۳۵۲1۴ 00ححاعهط نامگذاری فى کنیم # Instantiate our problem class model = pulp.LpProblen("Profit_maximising problem", pulp.LpMaximize) سپس دو متغیر خطی ۸ و 8 را تعریف می کنیم. متغیر ۸ تعداد ریات های بیشرفته تولید شده را نشان می دهد و متغیر 8 تعداد ریات های پایه تولید شده را تشان Integer’) Integer’) A = pulp.LpVariable(‘A’, LowBound=0, cat= B = pulp.LpVariable('B', lowBound=9, cat: تابع هدف و محدودیت ها را به صورت زیر تعریف می کنیم: # Objective function model += 5000 * A + 2500 * B, "Profit" # Constraints model += 3 ‏+م*‎ 2 * 8 model += 4*A+3*B model += 4*A+3*B 20 30 44 وود

صفحه 138:
براى ايجاد يك راه حل از تابع حل استفاده می کنیم: # Solve our problem model. solve() pulp.LpStatus{model. status] سبس مقادير 8 و8 و مقدار تابع هدف را جاب مى كنيم: ‎Print our decision variable values‏ # print (A.varValue) print (B.varValue) خروجی اين است: 6.0 1.0 ‎Print our objective function value‏ # ‎print (pulp. value(model. objective) )‏ ‎It prints‏ 32500.0 برنامه نویسی خطى به طور كسترده در صنعت توليد براى يافتن ‎see aaa‏ محصولاتی که باید برای بهیته سازی استفاده از منانم موجود استفاده شود: استفاده می شود ود اینجابه این اين فصل می رسيم ینید آنچه را که آموخته لیم لاضه کنیم. as

صفحه 139:
خلاصه در اين فصل, رویکردهای مختلف برای طراحی یک الگوربتم را بررسی کردیم. ما به موازنه مربوط به انتخاب طراحی صحیح یک الگوریتم نگاه کردیم. ما به بهترین شیوه های فرمول بندی یک مسئله دنیای واقعی نگاه کردیم. ما همچنین یاد گرفتیم که چگونه یک مسئله بهیته سازی در دنیای وافعی را حل کنیم. درس های آموخته شده از ان فصل مي تواند برای پیاده سازی الگوریتم های خوب طراحی شده استفاده شود. در فصل بعدی, ما بر روی الگوریتم های مبتنی بر گراف تمرکز خواهیم کرد. ما با بررسی روش های مختلف نمابش گراف ها 13s

صفحه 140:
شروع خواهیم کرد. سپس, تکنیک‌هایی را برای ایجاد یک همسایگی در اطراف تقاط داده مختلف برای انجام یک تحقیق خاص مطالعه می‌کنيم. در نهایت به بررسی روش هاى بهينه براى جستجوى اطلاعات از كراف ها مى بردازيم. ALS ‏الكوريتم‎ 5 JUS Gord ab Wel oboe ery ers Okabe dias Jota ‏قالب گراف تمایش داد. چنین مسائلی را می توان با استفاده از کلاسی از‎ ‏لگوریتم ها ه نام الگورینم های گراف حل کرد. برای مثال.الگوریمهای گراف را‎ ‏می‌توان برای جستجوی موثر یک مقدار در نمایش گرافیکی داده‌ها استفاده کرد.‎ ‏برای انجام یک کار موثر, اين الگوریتم ها ابتدا باید ساختار گراف را کشف کنند.‎ ‏گراف برای خوان دن‎ sla Jl ‏آنها همچنین باید استراتژی مناسبی برای دنبال کردن‎ ‏داده های ذخیره شده در رئوس بیدا کنند. از آنجایی که الگوریتم‌های گراف برای‎ ‏کار کردن به جستجوی مقادیرنازدارن. سترانژی‌های جسنجوی کارآمد در مرکز‎ ‏طراحى الكوريتمهاى كراف کارآمد. فرار دارند. استفاده از الگورتمهای گراف‎ 136

صفحه 141:
یکی از کارآمدترین روش‌های چستجوی اطلاع ات در ساختارهای داده‌ایپیچیده و بهم پیوسته است که از طریق روابنط معنی‌دار به هم مرتبط هستند. در عصر آمروزی داده های بزرگ, رسانه های اجتماعی و داده های توزیع شده, چنین تکنیک هابى به طور فزاينده أى مهم و مفید می شوند. در این فصل, ما با ارائه مفاهیم اساسی در مورد الكوريتم هاي كراف شروع می کنیم. سپس به ارائهمبنی تشوری تحلیل شبکه می پردازیم. در ادامه, به تکنیک‌های مختلفی که می‌توان برای پیمایش گراف ها استفاده کرد. خواهیم پرداخت. در نهایت, ما به یک مطالعه موردی نگاه خواهیم کرد که نشان می‌دهد چگونه الگوریتم‌های گراف می‌توانند برای کشف تقلب استفاده شوند. در این فصل, مفاهیم زیر را مرور خواهیم کرد * روش های مختلف نمابش گراف ها + معرفی تجلیل نظربه شکه »* درک پیمایش گراف + مطالعه موردی: تجزیه و تلیل تقلب ‎Sus ©‏ هابی برای ایجاد همسایگی در فضای مسئله ما در پایان اين فصل, شما به خوبی متوجه خواهید شد که گراف ها چیست و چگونه مى توان با آنها كار کرد نا ساختارهاى داده به هم بيوسته را نشان دهد و اطلاعات استخراج از موجوديت هابى كه با روابط مستقيم با غبرمستقيم به هم مرتبط هستند, و همجنين جكوته از آنها براى حل برخى موارد مسائل بيجيده دنياى واقعي استفاده می شود ‏نمايش گراف ها گزاف ساختازی ات کةاداذت ها تزا بر جشب رنوس و یال آهاا نخان اف جهنو يك نمودار به صورت (0 ,(]) > 26۳2010 تشان داده می شود. که در آن 0] مجموعه ای از رئوس و [] نشان دهنده مجموعه ای از یال ها است. توجه داشته باشید که ۲۵ دارای || رئوس و | |[ ال است. یک راس, (] © [, یک شیء دنیای وافعی, مانند یک شخص, یک کامپیوتر, با یک فعالبت را نشان می دهد. یک بال, ۵ ‎17 ‎ ‎

صفحه 142:
0 >, دوراس را در یک شبکه به هم متصل می کند: 8 0 6 6 | )02 بات 6 . معادله قبل نشان مي دهد که در یک گراف, تمام یال ها متعلق به یک مجموعه [] هستند. و همه رنوس متعلق به یک مجموعه [] هستند. یک بال دو راس رابه هم متصل می کند و بنايراين نشان دهنده رابطه بين آنهاست. به عنوان مثال, مى تواند روابط زير را نشان دهد: ۰ دوستی بين مردم * شتحضی در لینکدین یه ذوستی متضل اشت ۰ اتصال فیزیکی دو گره در یک خوشه ۰ فردی که در یک کتفراتس تحقیقاتی شرکت می کند در اين فصل. ما از بسته 0680/01 بايتون براى نمايش كراف ها استفاده خواهیم کرد. بیایید سعی کنیم با استفاده از بسته 0610۳1۵ در پایتون یک گراف ساده ایجاد کنیم. برای شروع, بیایید سعی کنیم یک گراف خالی: ۵6۴8۴ بدون راس یا گره ایجاد کنیم: import networkx as nx G = nx.Graph() بيابيد يك راس منفرد اضافه کنیم: G.add_node("Mike") ما همچنین می توانیم با استفاده از یک لبست, یک دسته از رتوس ‎i aii‏ G.add_nodes from(["Amine", "Wassin*, *Nick"]) 138

صفحه 143:
ما همجنين مى توانيم يك يال بين رئوس موجود اضافه کنیم,همانطور که نشان داده شده است: G.add_edge("Mike", "Amine" ) حالا يال ها و رنوس ها را جاب مى كنيم: In [51 List (G.nodes) Outs: [*Miket, ‘Amine’, ‘Wasim’, ‘Nick'] In [61 List (G.edges) Outlol: [(Mike’, ‘amine*)] لطفاً توجه داشته باشید که اگر یک یال اضافه می‌کنيم, اين نیز متجر به اضافه كردن رئوس مرتبط, در صورتی که از قبل وجود نداشته باشند.می‌شود. همانطور که در ایجا نشان داده شده است: G.add_edge( "Amine", "Imran") اگر لیست گره ها را چاپ کنیم. خروجی زیر است که مشاهده می کنیم ‎In [9] List (G.edges)‏ ‎Outi]: [('Mike', 'Amine'), (*Amine', 'Imran')]‏ وقد

صفحه 144:
توجه داشته باشید که درخواست اضافه کردن یک راس که از قبل وجود داردنادیده گرفته می‌شود. اين درخواست بر اساس نوع گرافی که ایجاد کرده‌ايم نادیدم گرفته می‌شود شیکه های خود محور همسایگی مستقیم یک راس خاص, #. ممکن است اطلاعات مهم کافی برای انجام یک تحلیل قطعی برای گره داشته باشد. خود محور یا ۵9006۴ بر اين ايده استوار است. یک ۵90866 از یک راس خاص. 8 از تمام رئوس متصل مستقیم به 8 به علاوه خود گره 0 تشکیل شده است. گره 8 ,خود(200) نامیده می شود و همسایه های تک پرش که به آنها متصل است جانشین(۵]۵۳5انامیده می شوند. شبکه خود مجور یک گره خاص, 3, در تمودار زیر نشان داده شده است: Ego network for node 3 Whole graph network ao

صفحه 145:
شکل 15: شبکه خودمجور توجه داشته باشید که 69006۴ نشان دهنده همسایگی یک درچه است. اين مفهوم را می توان به همسایگی های 8 درجه تعمیم داد, که شامل تمام رئوس ۱ پرشی دور از راس مورد نظر است. تحلیل شبکه های اجتماعی تحلیل شبکه های اجتماعی (50۷۵) یکی از کاربردهای مهم نظربه گراف است. تجزیه و تحلیل گراف شبكه در صورتى که موارد زير اعمال شود تجزبه و تحليل شبکه أجتماعن محسوت من نورد *_ رئوس گراف نشان دهنده افراد است. * یال ‎gw sl‏ آنها نشان دهنده روابط اجتماعی بین نها است, مانند دوستی, سرگرمی مشترک, خویشاوندی,رابطه جنسی, دوست ندانشتن و غیره * سوال تجاری که ما سعی داریم از طریق نجزیه و تحلیل گراف به آن پاسخ دهیم و جنیه اجتماعی قوی دارد رفتار انسان در 511 منعکس می شود و باید هميشه در حین کار بر روی 5۱۸ در نظر گرفته شود. با ترسیم روابط انسانی در یک گراف ‎SNA,‏ بیش خوبی در مورد تعاملات انسانی ارائه می دهد, که می تواند به ما در درک اقدامات آنها کمک کند. با ایجاد یک همسایگی در اطراف هر فرد و تجزیه و تحلیل اقدامات یک فرد بر اساس روابط اجتماعی آن, می توانید ینش های جالب , و گاهی اوفات نعجب آور توليد كنيد. رويكردهاى جايكزين براى تجزيه و تحليل افراد به صورت مجزاء بر اساس کارکردهای شغلی فردی آتهاء تنها مى تواند بنش محدودی ارائه دهد بنايراين, 51۸ می تواند برای موارد زیر استفاده شود؛ * - درک اقدامات کاربران در پلتفرم های رسانه های اجتماعی مانند فیس بیوکء aa

صفحه 146:
+ شتاخت رفتار مجرمانه جامعه لینکدین کمک زیادی به تحفیق و توسعه تکنیک های جدید مرتبط با 50۸ کرده است. در واقع. یکدین را می توان به عنوان پیشگام بسیاری از الكوريتم ها در این زمینه در نظر گرفت. بنابرین, 5۸ - به دلیل معماری توزبه شده و به هم پیوسته تاتی شبکه های اجتماعی - یکن از قدرتمتدترین موارد استفاده پرای نظریه گراف است. روش دیگر رای انتزاع گراف, در نظر گرفتن آن به عنوان یک شبکه و اعمال الگوریتم طراحی شده برای شبکه است. کل این حوزه, نظریه تحلیل شبکه نامیده مت رکفت ام ‎ol ei‏ هنم پزداخنت: معرفی نظریه تحلیل شبکه ما من دايع كه دادم ساي بهم يبو را می توآن به عنوان نک سبکه: لقي وا در تلور تقایل کی جر ابا ‎SLE SL a and easy Gln‏ 5 وححلیل داده‌های لران‌شده به‌عتوان یک سنبگه.را مطالعه من‌کنيم:بیییدبته پترهن از جنبه های مهم نتوری تحلیل شبکه در اين بخش نگاه کنیم.اندا, توجه داشته باهنید که یک زراب بز یک شبکه یه عوان واحد آضلن عمل وي كلد بعكم يع بويت به هم پیوسته از زوس است که در آن هر اتصال نشان دهنده رابطه بين موجودیت های مختلف تحت بررسی است. اين مهم است که سودمندی و اهمیت يك راس در يك شبکه را در زمینه مسئله ای که در تلاش برای حل آن هستیم؛ تعبین کننیم. تکنیک های مختلفی وجود دارد که می تواند به ما در تغیین کمیت" اهمیت, کمک کند. ید به برخی از مضاهیم مهم صورد استفاده در تشوری تعلیل شبکه نگاهی بیندازیم. درک کوتاه ترین مسیر مسير به دناله ای از گره ها بين یک گره شروع و یک گره پایانی است که در آن هیچ گره ای دو بار در مسیر ظاهر نمی شود. یک مسیر نشان دهنده مسیری بين ae

صفحه 147:
راس شروع و پایان انتخابی است. مجموعه ای از رئوس, 8 خواهد نود كه راس شروع را به راس انتهایی وصل می کند. هیچ راسی در ۵ تکرار تمي شود. طول متیر با شمارش یال های تشکیل دهنده محاسبه می شود: از بين همه گزیته هار مسیری که کمترین طول را دارد. کوتاه ترین مسیر نامیده می شود. محاسبه کوتاه‌ترین مسیر به‌طور گسترده در الگوریتم‌های نظریه گراف استفاده می‌شودد اما محاسبه آن هميیشه ساده نیست. الگوریتم های مختلفی وجود دارد که می توان از آنها براییافتن کوتاه ترین سیر بین گره شروع 9 ‎op S‏ پایانی استفاده کرد. یکی از محبوب‌ترین الگوریتم‌هایی که می‌توان از آن برای بافتن کوناه‌ترین فاصله بين كره شروع و پایان استفاده کرد.الگوریتم 5۴۳۵ [01 است که در اواخر دهه 0 منتشر شد. کوتاه ترین مسیر یک گراف را محاسبه می کند. توسط دستگاه های سیستم موقعیت یاب چهانی (605) برای محاسبه حدافل فاصله بين متبع و مقصد قایل استفاده است. الگوریتم 5۴۳۵) [0 در الگوریتم‌های مسیریابی شبکه نیز استفاده می‌شود. نبردی بين گوگل و ابل برای طراحی بهترین الگوریتم کوتاه‌ترین فاصله برای ۱/۵۵5 ‎Maps Google‏ ۸0816 وجود دارد. چالشی که آنها با آن روبرو هستند. سرعت بخشیدن الگوریتم به اندازه کافی برای محاسبه کوتاه ترين مسیر در عرض چند ثانیه است. د ادامه اين فصل: الگوریتم جستجوی پهنای اول (8۴5) را مورد بحث فرار خواهیم داد. که می تواند برای تبدیل به الكوريتم دايكسترا تغيير يابد. 5 هزینه یکسانی برای پیمودن هر مسیر در یک گراف مشخص را در تظر می گیرد. برای الگوریتم 01[15۴۳۵. هزینه پیمایش یک نمودار می‌تواند متفاوت باشد. و باید برای اصلاح 85 در الگوریتم 01150۳۵ گنجانده شود. همانطور که اشاره شد. الگوریتم 03158۳9 یک الگوریتم منبع منفرد است که کوتاه‌ترین مسیر را محاسیه می‌کند. اگر بخواهیم تمام جفت‌های کوتاه‌ترین مسیرها زا حل کتیم: می‌توان از الگوریتم فلوید-وارشال استفاده کرد ایجاد همسایگی مد

صفحه 148:
یافتن استراتژی‌هایی برای ایجاد یک همسایگی در اطراف گره‌های مورد علافه برایالگوریتمهای گراف, بسیار مهم است. روش‌های ایجاد همسایگی ها بر اساس تخاب افراد مستقیم مرتبط با اس مورد علاقه است. یکی از راه‌های ایجاد یک همسایگی, انتحاب یک استراتژی ۲۰۵۳۵۵۳ است که راس‌هابی را انتخاب می‌کند که بل از رین مورد نظر فاصلهدارند: ید به معیارهای مختلف برای ایجاد همسایگی‌ها نگاه کنیم. متلنما ‎attain ats SRS OG Gs wi ab gaa GUUS eatin‏ تراغ هدف تحلیل مهم است: یک تکنیک این است که سعی کنیم متلت‌ها را که زبرگرافن هشتند که از تنبغ گزج ‎Sun‏ سدح و مستقیماً ‎gy‏ یکذیگی متضتل مود زا در شبکه:شتاسایی کنیم. پیایید به کاربرد کشف تقلب نگاهی بیندازیم که در بایان این فصل از آن به عنوان مطالعه موردی نیز استفاده کرده ایم. اگر شبکه خود- محوری از یک گره: ۰۵ از سه راس: از جمله راس ۶ تشکیل شده باشد: آنگاه این شبکه خود-مجور یک مثلث است. راس 8 خود و دو راس متصل مثلا راس ۸ و راس 8 ؛ جايكزين ها هستند. اكر هر دو جايكزين به عنوان موارد متقليانه شناخته ‎aul oa‏ مىتوانيم با خبال راحت راس 9 را نيز متقلب اعلام كنيم. اكر یکی از جايكزين ها در كلاهبردارى دخيل باشد, نمى توانيم به شواهد قطعى دست بيدا کنی. ما بید تحقبقات پیشتری در مورد شواهد تقلب انجام دهیم. تراکم ابتدا یک شبکه تمام متصل را تعریف می کنیم. ما گرافی را که در آن هر رأس تیاه هز رن تیگری متضل استته ‎Sip 8) spay Sosa ste pis aS‏ شبکه تمام متصل, اا گره داشته باشیم, تعداد یال‌های شبکه را می‌توان به صورت زیر ‎lb gli‏ as

صفحه 149:
N N(N-1 Edgestotal = 2) = _ اکنون,اینجاست که تراکم وارد عمل می شود. تراكم تعداد یال های مشاهده شده را تا حداکترتعداد یل ها اندزه گیری می کند. كر 609650056060 تعداد يال هایی است که می خواهیم مشاهده کنیم. می توان آن را به صورت زیر نشان داد Edge Sobserved density = Edgestotai توجه داشته باشید که برای یک مثلیت, چگالی شبکه 1 است و این نشان دهنده بالارين شبك متصل ممكن اث درك معيارهاى مركزيت معيارهاى مختلفى براى درك مركزيت يى راس خاص در يى كراف يا زيركراف وجود دارد. به عنوان مثال, آنها می توانند اهمیت یک شخص را در یک شبکه اجتماعی با اهمیت یک ساختمان در یک شهر را حساب کنند. معبارهای مركزيت زیر به طور گسترده در تجزیه و تحلیل گراف استفاده مى شود: ۶ نزدیکی * بردار ویژه

صفحه 150:
بیایید با جزئیات در مورد آنها بحث کنیم. تعداد یال های متصل به یک راس خاص را درجه آن می گوند.درجه می تواند نشان دهد که یک راس خاص چقدر ‎wags a‏ متصل است و توانایی آن در پخش سريع يك بيام در يك شبکه را دارد. بياييد ([] ,[]) - 36۳8010, را در نظر بگیریم. که در آن 0] مجموعه ای از راس ها و(] نشان ذهنده مجموعه اق از یال ها است. به یاد بیاورید که 36۳401 دارای |0)| راس و |[ ال است. اگر درچه یک گره را بر (1- |[]) تقسیم کنیم, به آن درجه مرکزیت می گویند: _ deg(a) 2۰ حالا بيابيد يه یک مثال خاص نگاه کنیم. گراف زیر را در نظر بگیرید: Coc, 6

صفحه 151:
Whole graph network شکل 2-5: مثالی از درجه و مرکزیت گراف حال, در گراف قبل, راس ) دارای درجه 4 است. مرکزیت درجه آن را می توان به صورت زیر محاسبه کرد: ‎deg(c 4‏ ‎Cpa _ deg) _ —*_ =0.44‏ 10-1 1و ۰ بینبت معیار سنجش مرکزیت در یک گراف است. در زمینه رسانه های اجتماعی, احتمال اينکه یک فرد بخشی از ارتباطات در یک زیر گروه باشد را حساب می کند. ar

صفحه 152:
برای یک شبکه کامپیوتری, بينيت اثر منقى بز ارتباطات بين گره‌های گراف را در صورت خرابى راس تعيين مىكند. براى محاسبه بينيت راس 8 در ,[]) > 26۳۵00 (] اين مراحل را دتبال كنيد: 1 كوتاه ترين مسيرها را بين هر جفت رئوس در م8678 محاسبه كتيد. ببابيد اين ub Nshortestrotal 2 از Mshortestrotal , تعداد کوتاهترین مسیرهایی را که از راس 2 عبور مي کنند بشمارید. بایید این را shortest,

صفحه 153:
3. بينيت را با فرمول زير حساب مى کنیم _ Nshortest, Chetweenness, = Nshortestrotal انصاف و نزدیکی یی یک گراف, 9 را در نظر بگیرید. اتصاف راس ۵ در نمودار و به عنوان مجموع فاصله راس ۵ از رئوس دیگر تعریف می شود. توجه داشته باشید که مرکزیت یک راس خاص فاصله کلی آن را از همه رئوس دیگر حساب می کند. نقطه مقابل اتصاف, تزدیکی است. مرکزیت بردار ویژه مرکزیت بردار ویژه به تمام رئوس یک گراف امتباز می دهد که اهمیت آنها را در شبکه می سنجد. امتیاز تشانگر اتصال یک گره خاص به سایر گره های مهم در کل شبکه خواهد بود زمانی که گوگل الگوریتم :۳۵968۵ را ایجاد کرد که به هر صفحه وب در اینترنت امتبازی اختصاص می‌دهد (به متظور بان اهمیت آن).اين ایده از معيار مرکزیت بردار ویژه مشتق شد. محاسبه معیارهای مرکزیت با استفاده از باینون بيابيد يق شبکه ایجاد کنیم و سپس سعی کنیم معیارهای مرکزیت آن را محاسبه کنیم. بلوک کد زیر اين را نشان می دهد: مد

صفحه 154:
import networkx as nx import matplotlib.pyplot as plt vertices = range(1,10) edges = (7,2), (2,3), (7,4), (4,5), (7,3), (7,5), (1,6), (2,7), (2,8),(2,9)] G = nx.Graph() G.add_nodes_from(vertices) G.add_edges_from(edges) nx.draw(G, with labelseTrue,node_color="y' ,node_size=800) گراف تولید شده توسط این کد به شرح زیر است:

صفحه 155:
شکل 3-5: منالی از معیارهای مرکزیت. تکنون, معبارهای مختلفی از مرگزیت را مطالعه کرده‌ایم. یی نها را برای متال قبل محاسية كنيم: ast

صفحه 156:
25, 5 3 23, GH 3 123} ,25 دوه جوا 207142857102, 1 1 ۰ 5 0 ‏و9000‎ ‎amar, nx eigenvector centratity(6) (20! 21}"-tormat(e)) for v, ¢ in centrality.itens()) ase 5 x. degree_centratity(6) 1 ۰ x. betweenness_centralityiG) ۰ 1 ۰ 1 1 ۰ 3 0 5 centratity 1 1 ln 2 6, Is, Is, ۳ 8 ۱ (۱ out(10} In a outta

صفحه 157:
توجه داشته باشید که از معبارهاى مركزيت انتطار می رود که معیار مرکزیت یک راس خاص را در یک گراف با زیرگراف نشان دهد. با نگاهی به گراف, به نظر مي ‎gal, amy‏ با برچسب:7 مرگری تزین عکان را دلرد: زاین:7 داراي ‎goles pool‏ در هر چهار معبار مرکزیت است, بنابرین اهمیت آن را در اين زمینه منعکس می ‎JE‏ ببایید ببینیم چگونه می توانیم اطلاعات را از گراف ها بازیابی کنیم. ‎OLS‏ ها ساختارهای داده پیچیده ای هستند که اطلاعات زیادی هم در راس و هم در بال ها ذخيره مى شود. ببابيد به يرخى از استراتزىهابي كه می‌توان برای بيمايش مؤثر در كراف ها به منظور جمعآورى اطلاعات از آنها برای پاسخ به سوالات استفاده کرد. تگاهی بيندازيم. درک بيمايش كراف براى استفاده از كرافهاء اطلاعات بايد از آنها استخراج شود. بيمايش كراف به عنوان استراتزى مورد استفاده براى اطميتان از اينكه هر رأس ويال به شيوه ای منظم بازديد مى شود تعريف ‎Ge‏ شود. تلاش مى شود تا اطمينان حاصل شود که هر رأس وبال دقيقا بك بار بازديد شوده نه بيشتر ونه كمتر. به طور كلى, مي توان دو روش مختلف برای پیمایش یک گراف برای جستجوی داده های موجود در آن وجود دارد. گام برداشتن بر اساس سطح را جستجوی اول سطح (8۴5) و گام برداشتن بر اساس عمق را جستجوى اول عمق (065) مى كويند. ببابيد يك به يك آنها را بررسی كنيم. جسنجوی اول سطح 5 زمانی بهترین کار را انجام می دهد که مفهومی از للبه ها یا سطوح همسایگی در ‎aS aGraph‏ با آن سروکار داریم بوجود داشته باشد. يه عنوان مثال, هنگامی که اتصالات یک شخص در لینکدین به صورت گراف بیان تبون انسالات:نتطح اول تن اضالات ‎pas ela‏ وود ”داز كد منستتديها. به لايه ها ترجمه مى شوند. الكوريتم 855 از يك راس ريشه شروع می شود و رئوس در رئوس همسايكى را بررسي می کند. سپس به سطح همسایگی بعدی وود

صفحه 158:
می رود و فرآیند را تکرار می کند.بییید به یک الگوریتم 8۴5 نگاهی بياندازيم. برای آن. ‎ugar LS lanl‏ جهت زیر را در تظر مي گیریم: 4 شکل 4-5: منالی از 8۴5

صفحه 159:
بیایید با محاسبه همسایگی فوری هر رأس شروع کتیم و آن را در لیستی به نام فهرست مجاورت ذخبره کنیم. در بايتون, می توانیم از ساختارداده دیکشتری برای ذخیره آن استفاده كنيم: ‘amin’ : {*Wasim', ‘Nick", "Mike'}, {'Imran', ‘Amin'}, {'Wasim', 'Faras'}, "Faras' : {"Imran'}, "Mike! : {'Amin'}, ما ا من کنیم. بدا مقداردهن اولی و سپس حلقه اصلی را توضیح می دهیم. مقداردهی اولیه ما از دو ساختار داده استفاده خواهیم کرد: 15160/: اين شامل تمام رئوس بازديد شده است. در ابتدا خالى خواهد بود. ‎queue‏ : شامل تمام رئوس هايى است كه مى خواهيم در تكرارهاى بعدى از آنها بازديد كنيم. ‏حلقه اصلی ‎ ‎

صفحه 160:
در مرحله بعد حلقه اصلی را پیاده سازی می کنیم. تا زمانی که حتی یک عنصر در صف وجود نداشته باشد به حلقه ادامه خواهد داد برای هر گره در صف, اگر فلا ازدید شده باشد, از همسایه خود بازدید می کند. ما می توانیم این حلقه اصلی را در پیتون به صورت زیر پاده سازی کنیم: 1 ادا اولین گره را از صف خارج می کنیم و آن را به عنوان گره فعلی اين تکرار انتخاب می کنیم. node = queue.pop(0) 1 سپس, بررسی مي کنیم که گره ذر لیست بازدید شده نباشد. اگر اینطور نیست, آن را به لیست گره‌های بازدید شده اضافه می‌کنيم و از همسایگان برای نشان دادن گره‌های متصل مستقیم آن استفاده می‌کنیم visited. append (node) neighbours = graph{node] 1. اکتون همسایگان گره ها را به صف اضافه می کنیم: for neighbour in neighbours: queue. append (neighbour) 1 هنگامی که حلقه اصلی کامل ‎sad‏ ساختار داده بازدید شده برگردانده می شود که شامل تمام گره های پیمایش شده است. 2. کد کامل, هم با مقداردهی اولیه و هم با حلقه اصلی, به صورت زیر خواهد بود 156

صفحه 161:
def bfs(graph, start): visited = [] queue = [start] while queue: node = queue.pop(0) if node not in visited: visited. append (node) neighbours = graph[node] for neighbour in neighbours: queue. append (neighbour) return visited ابید به الگوی پیمایش جستجوی جامع برای گرافی که با استفاده از 8۴5 تعریف کردیم تگاه کنیم. برای بازدید از تمامی گره ها. الگوی پیمایش در شکل زیر نشان داده شده است. می توان مشاهده کرد که در هنگام اجرا, همیشه دو ساختار داده را حفظ می کند: ‎plas Jali :Visited‏ گره هایی است که بازدید شده اند ‎solr :Queue‏ گره هایی است که هنوز بازدید نشده اند ‏در ینجا تحوه کار الگوریتم آمده است: ‏1. از اولین گره شروع می شود که تنها گره فد در سطح یک است. ‏2. سپس به سطح دو می رود و هر سه گره ۱۷ :۷/۵51 و ۱۸:6۵ را یکی یکی بازديد مى كند. ‏3. پس از آن به سطح سه و سطح جهار مى رود كه هر كدام فقط یک گره دارند ‎Faras y Imran vis,‏ ‎ ‎

صفحه 162:
هنگامی که تمام گره ها بازدید شدند. به ساختار داده ۷5/160 اضافه می شوند و تکرارها متوفف مي شوند:

صفحه 163:

صفحه 164:
شکل 5.-5: مثالی از 8۴5 و مراحل آن حالا یایید سعی کنیم با استفاده از 8۴5 یک شخص خاص را از اين كراف بيدا کنیم. بای داده های مورد جستجو را مشخص کنیم و نتیج را مشاهده کنیم: In [97]: bfs(graph, ‘Amin’ ) Out{97}: ['Amin', ‘Wasim’, ‘Mick’, ‘Mike’, ‘Inran', ‘Faras'] حالا ببابيد به الكوريتم جستجوى اول عمق نكاه كنيم. جستجوى اول عمق 5 جايكزينى براى 85 است كه يراى جستجوى داده ها از يك كراف استفاده می شود. عاملی که ۵۴5 را از ‎BES‏ متمایز می کند این است که پس از شروع از راس ریشه.الگوریتم نا آجا که ممکن است در هر یک از مسیرهای متحصر به فرد بيك به يك يايين مى رود. براى هر مسير, هنگامی که با موفتیت به عمق نهایی رسيد, تمام رئوس مرتبط با آن مسير را به عنوان بازديد شده علامت كذارى فى کند. پس از تكميل مسير, الكوريتم به عقب برمى كردد. اكر بتواند مسير ديكرى را از كره ريشه بيدا كند كه هنوز بازديد نشده است, الكوريتم روند قبلى را تكرار مى كند. الكوريتم تا زمانى كه همه شاخه ها بازديد نشده باشتد در شاخه جديد به ‎aS >‏ خود اذامة من دهذ. توجة داشته باشید که یک گراف ممکن است روش چرخه ای داشته باشد. همانطور که گفته شد. ما از یک برچم 8001620 برای پیگیری رئوس پردازش شده برای جلوگیری از تکرار در چرخه ها استفاده می کنیم. بای پیاده سازی 0۴5. ما از یک ساختر داده پشته استفاده می کنیم, که در فصل 2, ساختارهای داده مورد استفاده در الگوریتم ها به تفصیل مورد بحث قرار گرفت. . به یاد داشته باشید که پشته بر اساس اصل (۱۱۴۵) 00۸ ۴65۴ ,م۱ ‎Last‏ ‏است. ان در تضاد با یک صف است که برای 8۴5 استفاده می‌شود, که بر اساس (۴۱۴۵) ۴6۵۲60۲ ,۱۸ ۴۱:5۲ کار می‌کند.کد زیر برای ۴5 استفاده می‌شود 360

صفحه 165:
def dfs(graph, start, visitedsNone) : if visited is None: visited = set() visited.add(start) print (start) for next in graph{start] - visited: dfs(graph, next, visited) return visited بيابيد دوباره از كد زير براى آزمايش تابع 015 تعريف شده قبلى استفاده كنيم: ‘Nick", ‘Mike'}, ‘Wasim’ : {"Imran', ‘Amin'}, graph={ ‘Amin’ : {'Wasim ‘Imran! : {‘Wasim','Faras'}, ‏['مقمم1) د م۴۵‎ اللا "Nick :{'Amin'}} أكر اين الگوربتم را اجراکنم. خروجی به شکل زیر خواهد بود ‎‘Wick', ‘Wasin)‏ ترجه هه رفص 0۰ .بيابيد به الگوی پیمایش جامع این تمودار با استفاده از روش ۵۴5 نگاه کنیم:

صفحه 166:
1. تكرار از كره بالا 8/510 شروع مى شود. 2. سپس به سطح دو یعنی ‎Wasim‏ حرکت می کند. از آنجا به سمت سطوح پایین حرکت می کند تا به انتهای آن که گره 1072 و ۳۵۳05 است برسد. 3. پس از تکمیل اولین شاخه کامل, عقب مي رود و سپس به سطح دو می رود تا ‎Mike y Nick‏ را ملافات کند الگوی پیمايش در شکل زیر نشان داده شده است: 162

صفحه 167:

صفحه 168:
شكل 5-5: مثالى از 0۴5 و مراحل آن توجه داشته باشید که ۵۴5 را می توان در درختان نیز استفاده کرد. يباييد اكنون به یک مطالعه موردی نگاهکنیم, که توضیح می دهد چگونه مفاهیمی که تاکنون دز این فصل مورد بحث فرار گرفته اند. می توانند برای حل یک مسئله دنبای وافعی استفاده ‎ig‏ مطالعه موردی - تجزیه و تحلیل تقلب بیاییدبينیم چگوته می توانیم از 5۱1۸ برای کشف تقلب استفاده کنیم. از آنجایی که انسان ها حیوانات اجتماعی هستند. گفته می شود رفتار انسان تحت تأثیر افرادی قرار مي گیرد که توسط آنها احاطه شده اند. کلمه هموفیلی برای نشان دادن تأثیری که شبکه اجتماعی روی یک فرد می گذارد ابداع شده است. با بسط اين مفهوم, شبکه هوموفبلی, گروهی از افراد است که احتمالاً يه دليل برخي عوامل مشترك با يكديكر مرتبط هستند. به عنوان مثال, دانشتن منشا با سرگرمی هاى یکسان, عضويت در يك كروه يا يك داتشكاء, يا تركيبى از عوامل:ديكر. اككن بخواهیم تقلب را در یک شبکه هوموفیلی تجزیه و تحلیل کنیم. می توانیم از رواسط مین فروعحت:بزرسی:وز سای آف رآ در:پانبکه کی خسن وقالت آلهنا دز لت ليه دفت محاسبه شده است, استفاده کنیم. علامت گذاری یک شخص به دلیبل شرکتش ,گاهی اوقات گنه توسط انجمن نیز نامیده می‌شود. در تلاش براي درك این فرآیند.ابتدا به یک مورد ساده نگاه می‌کنيم. برای آن, از شبکه ای با نه راس و هشت یال استفاده می کنیم. در این شبکه, چهار ورد از زئوس, موارد تقلب شناخته شده هستند و به عنوان تقلب (۴) طبقه بندی می شوند. پنج نفر از افراد باقيماتده هيع سابقه مرتبط يا تقلب ندارند و بهعنوان غیرتقلب (۱۷۴) طبقه بندی مى شوند. برای تولید این نمودار کدی با مراحل زیر می نویسیم: مد

صفحه 169:
1. بيابيد بسته هاى مورد نیاز خود را وارد کنیم: ‎import networkx as nx‏ ‎import matplotlib.pyplot as plt‏ 2. ساختار داده رتوس و يال ها رأ تعريف كنيد: vertices = range(1,10) edges= (7,2), (2/3), (7,4), (4/5), (7/3), (7,5), (1,6), (1,7), (2,8),(2,9)] 3 بيابيد ابتدا كراف را تعريف كنيم: G = nx.Graph() 4. حالا بياييد كراف را رسم كنيم: ‎G.add_nodes_from(vertices)‏ G.add_edges_from(edges) posenx.spring Layout (6) 5 ببابيد 08 ‎NF la‏ را تعریف کنیم: ‎nx.draw_networkx_nodes( G,pos,‏ nodelist=[1,4,3,8,9], with_labels=True, node_color="g', مد

صفحه 170:
node_size=1300) 6 حال, بییید گره هایی را أيجاد كنيم که در تقلب شناخته شده اند nx.draw_networkx_nodes (G,pos, nodelist=(2,5,6,7], with labels=True, node_color='r', node_size=1300) 7. بيابيد برجسب هابى براى كره ها ايجاد كنيم: nx.draw_networkx_edges (6, pos, edges, width=3,alpha=0.5,ed ge_color="b') labels=(} labels (1]=r'1 ۰ nx.draw_networkx labels(G, pos, labels, font_size=16) هنگامی که کد قبلی اجرا شد, گرافی مانند شکل زیر را به ما نشان مى دهد: 166

صفحه 171:
شکل 6-5: متالی از گراف جهت کشف تقلب توجه داشته باشید که ما با تجزيه و تحلیل دقیقی انجام داده ايم تا هر گره را به عنوان یک گراف یا غیرگراف طبفه بندی کنیم. فرض کنید مانند شکل زیر یک راس دیگر به نام 9 به شیکه اضافه می کنیم. ما هیچ اطلاعات قبلی در مورد این شخص و اينكه آيا اين فرد در تقلب دست دارد با خبر نداریم. ما می خواهیم این شخص را بر اساس پیوندهایش به اعضای موجود شبکه اجتماعی به عنوان ۱۴ با ۴ طبقه ‎aS sas‏

صفحه 172:
شکل 7-5: مثالی از گراف جهت کشف تقلب(2) ما دو راه برای طبقه بندی اين شخص جدید, که با گره ‎٩‏ نشان داده شده است, به عنوان ۴ با 1۴ ابداع كرده ايم: © استفاده از یک روش ساده که از معبرهای مرکزیت و اطلاعات اضافی در موردنوع تقلب استفاده نمی کند © استفاده از روش برج مراقيت. که یک تکنیک پیشرفته است که از معیارهای مرکزیت گره های موجود و همچنین اطلاعات اضافی در مورد نوع تقلب استفاده می کند در مورد هر روش به تفصیل بحث خواهیم کرد انجام تجزیه و تحلیل ساده تقلب 168

صفحه 173:
تکنیک ساده تجزیه و تحلیل تقلب بر اين فرض استوار است که در یک شبکه, رفتار یک فرد تحت تأثیر افرادی است که با آنها مرتبط هستند. در یک شبکه, اگر دو راس با يكديكر مرتبط باشندء احتمال بیشتری وجود دارد كه رفتار مشابهی داشته باشند. بر اساس این فرض, ما یک تکنیک ساده ابداع می کنیم. اگر بخواهيم احتمال تعلق یک گره خاص یعنی 9 به ۴ را پیداکنیم. ین احتمال با (۶)۴/۹ نشان داده مى شود و به صورت زیر محاسبه می شود: w(n, 2; )DOSrormatized {Neighorhoads|las(n,)=F بيابيد اين فرمول را به شكل قبل اعمال كنيم. جايى كه 0608 /هطاذاوأ 8/6 همسایگی راس 8 را تشان مي دهد و ([۶ :40 ۷۷ وزن ارتباط بین ۴ و [۴ را تشان می دهد. همچنین 89۳060 درچه گره ‎٩‏ است. سپس احتمال به صورت زیر محاسیه می شود: 1+1 2 P(F\q) = a 67 بر اساس این تخلیل, احتمال کلاهبرداری اين فرد 67 درصد است. ما باید یک آستانه تعبین کنیم: اگر آستانه ۸30 باشد. اين شخص بالاتر از مقدار آستانه است: و ما مى توانيم با خبال راحت آنها را به عنوان ۴ علامت گذاری کنیم. توجه داشته باشید که اين فرآیند باید برای هر یک از گره های جدید در شبکه تکرار شود. حال: بيابيد به يك روش انجام تجزيه و تحليل تقلب ييشرفته نكاه كنيم ارائه روش تجزیه و تحلیل تقلب برج مراقبت 169

صفحه 174:
تکنیک ساده تظیل تقلب قیلی دای دو محدودیت زیر است: اهمیت هز رس را در شبکه اجتماعی ارزبایی نمی کند.ارتباط با یک مرکز که دزگیر فلت آسنی:سکن:آستت پزاندهای هه آوچی یت بنه ره با یک فد دورافتاده و متزوی داشته باشد. وفتی کسی را به عنوان یک مورد شناخته شده تقلب در یک شبکه موجود برچسب می زنیم. ما شدت جرم را در نطر نمی كيريم. روش تجزیه و تحلیل تقلب برج مراقبت به اين دو محدوديت مى پردازد. تا اجازه دهید به چند مفهوم نگاه کنیم. امتیاز دادن به نتایج منفی آگر فردی در تقلب شناخته شود. می گوییم که نتیجه منفی در ارتباط با این فرد وجود دارد. هر پیامد متفی با شدت یا جدیت یکسان نیست. فردی که به عنوان جعل هویت شخص دیگری شناخته می شود. در مقایسه با فردی که سعی دارد از یک کارت هدیه 20 دلاری منقضی شده استفاده کند تا آن را معتبر کند. نوع چدی تری از پيامدهای منفی در ارتباط با او خواهد داشت. از امتباز 1. تا 10 نتایج منفی مختلف را به صورت زیر رتیه بندی می کنیم: ‎Negative outcome Negative Outcome Score‏ ‎Tmpersonation 17‏ 7 1۳01۳ Fake check submission Criminal record No record a0

صفحه 175:
توجه داشته باشید که اين امتیازات بر اساس تجزیه و تحلیل ما از موارد تقلب و تأثير آنها از داده هاى تاريخى است. درجه سوء طن درجه سوء ظن (005) ميزان سوء ظن ما را منی بر دست دالشتن یک فرد در تقلب تعیین می کند. مقدار ۵ 205 به اين معنی است که اين یک فرد کم خطر است و مقدار 9 005 به این معنی است که اين یک فرد برخطر است. تجزیه و تحلیل داده هی تاریفی تشان می دهد که کلاهبرداران حرفه اق موقتیت های مهمی در شبکه های اجتماعی خود دارند. برای گنجاندن اين. ابتدا تمام چهار معیار مرکزیت هر رأس در شبکه خود را مجاسبه می کنیم. سیس میانگین این رشوس را می گيریم. این به اهمیت آن شخص خاص در شبکه ترجمه می‌شود. اگر فردی مرتبط با راس ذرگیر تقلب باشد. این نتیجه متفی را با امتباز دادن به شخض با استفاده از مقادیر از پیش تعبین‌شده نشان‌داده‌شده در جدول قبل نشان می‌دهیم. این کار به گونه ای انجام می شود که شدت جرم در ارزش هر 005 منعکس شود. در نهايت, ميانكين معيارهاى مركزيت و امتياز نتيجه منقى را ضرب مى كنيم تا ارزش 005 را بدست آوريم. ما 005 را با تقسيم آن ير حداكثر مقدار 805 در شبکه ترمال می کنیم. بیایید 005 را یرای هر یک از 9 گره در شبکه قبلی محاسیه كنيم: له أكرهة | كره3 |كرهة |كره |كره |كره 7]كره ‎TS]‏ ‏1 5 اه 8 ترجه 025 25 ] 025 025 025 [ 275 [225 275 ]| 273 مركزيت بيت )025 )0.47 )0 ]0 ]0 |5 |5071 ]5 OF] OF] 0272| 2238| 077077] 053 067] 05| ‏تزدیکی‎ 0 ون ۱02

صفحه 176:
OAT] OAT] 0.66] 0.14] 0.26] 0.26] 0.29] 051] 031] ‏معیارهای‎ مبانگین مركزيت Oo; Of to} 3۱ 70/5 0[ ‏تمره تبچه‎ OPO] ez] LI rEzy 3] 0 op 5 Oo] 0] 017 o27]—0] 0/047] 0] Normaliz ed Dos هر یک از گره ها و 005 ترمال شده آنها در شکل زیر نشان داده شده است: شکل 8-5: مثالی از گراف جهت کشف تقلب(3) an

صفحه 177:
برای مجاسیه 005 گره جدیدی که اضافه شده است از فرمول زیر استفاده می کدی 1 ‎DOS, = = 12) DOSrormatie‏ ال ل وه ۳ 09 پا استفاده از مقادیر مربوطه: ۵05 را به صورت زیر محاسبه می کنیم: 0+140.27 DOS, — 0.42 این تشان دهنده ‎plas‏ تقلب مرتبط با این گره جدید اضافه شده به سیستم است. یعتی در مقیاس ۵ تا 1 ان شخص دارای مفدار 0.42 005 است. می‌توانیم مخزن‌های ریسک مختلفی برای 005 به شرح زير ايجاذ كنيم: Value of the DOS Risk classification DOS=O No risk 025052-10 Tow Fisk 712052203 Medium risk 70523 High risk بر اساس اين معيارهاء مى توان دريافت كه فرد جديد فردى يرخطر است و بايد علامت كذارى شود. معمولاً در انجام جنين تحليلى, بعد زمانى دركير نيست. اما در حال حاضر: برخی از تکتیک های پیشرفته وجود دارد که به رشد یک گراف با بيشرفت زمان نكاه مى كند. اين كار به محققان اجازه می دهد تا به رابطه پین a3

صفحه 178:
رئوس با تکامل شیکه نگاهکنن. اگرچه چنین تجزیه و تحلیل سری زمانی بر روی گراف ها پیچیدگی مستئله را چندین برابر افزایش می دهد. می تواند بینش بیشتری بر موزدشواهد لب اه دهد که دز غیر ای ضوزبت معگون ‎spi‏ wows ‏در اين فصل با الكوريتم هاى مبتی بر گراف آشنا شدیم. اين فصل از تکیک های‎ ‏مختلف نمایش, جستجو و پردازش داده هایی که به صورت گراف نمایش داده‎ ‏شده اندامتفاده مق گندر متا همچمن:قه ارت هاین رأ توسعه داديم که پجوایم.‎ ‏كوتاه ترين فاصله بين دو راس را محاسیه کنیم و در فضای مسئله خود, همسایگی‎ ‏ایجاد کردیم: این داش باید به ما کمک کند دا از صوزي گبراف بنرای رسیدگی به:‎ ‏مسائلی مانتد کشف تقلب استفاده کنیم. در فصل بعدی, ما بر روی الگوریتم های‎ ‏مختلف یادگیری ماشین بدون نظارت تمرکز خواهیم کرد. بسیاری از تکیک‌های‎ ‏مورد استفاده که در اين فصل مورد بحث قرار كرفتهاند, مكمل الكوريتمهاى‎ ‏يادكيرى بدون نظارت هستند كه در فصل بعدى به تفصيل مورد بحث قرار خواهند‎ ‏كرفت: يافتن شواهد تقلب در یک مجموعه داده نمونه ای از چنین موارد استفاده‎ am

صفحه 179:
بخش 2: الگوریتم های یادگیری ماشین این بخش انواع مختلف الگوریت‌های یادگیری ماشین, مانندالگوریتم‌های یادگیری ماشین بدون نظارت و الكوريتمهاى يادكيرى با نظارت ستتى را به طور مفصل توضيح مىدهد و همجنين الكوريتمهابى را براى بردازش زبان طبيعى معرفی مىكند. اين بخش با معرفى موتورهاى توصيه به يابان مى رسد. فصول موجود در ابن بخش عبارتند از: ‎٠»‏ فصل 6, الكوريتم هاى يادكيرى ماشين بدون نظارت ‎٠‏ فصل 7: الكوريتم هاى يادكيرى سنتى با نظارت ‏+ فصل 8, الكوريتم هاى شبکه عصی ‏© فصل 9, الگویتم های پردازش زبان طبیعی ‏+ فصل 10, موتورهای پيشنهادی ‎ ‎

صفحه 180:
6 الگوریتم بادگیری ماشین بدون نظارت این فصل در مورد الگوریتم های یادگیری ماشین بدون نظارت است. فصل با مقدمه ای بر تکتیک های یادگیری بدون نظارت شروع مي شود. سپس با دو الگوریتم خوشه‌بندی آشنا می‌شویم: ۱0۵205 خوشه‌بندی سلسله مراتبی و الگوریتم‌های ‎Gusts DBSCAN‏ بعدی به الگوریتم کاهش ایعاد نگاه می کند. که ممکن است زمانی موثر باشد که تعداد زیادی متفیر ورودی داشته باشیم. بخش زیر نشان می دهد که چگونه می توان از یادگیری بدون نظارت برای تشخیص ناهتجاری استفاده کرد. در تهایت. ما به یکی از قوی‌ترین تکنیک‌های یادگیری بدون تظارت. یعنی کاوش قواعد وابستگی نگاه خواهیم کرد. اين بخش همچنین توضیح می‌دهد که چگونه الگوهای کشف‌شده از کاوش قواعد واستگی , روابط جالبی را بین عناصر مختلف داده در سراسر تراکنش‌ها نشان می‌دهند که می‌تواند به ما دز تصمیمگیری مبتتی بر داده کمک کند. در بان اين فصل, خواننده باید بتواند درک کند که چگونه بادگیری بدون نظارت می تواند برای حل برخی از مسائل دنیای واقعی استفاده شود. خواننده,الگوریتم‌ها و روش‌های اساسی را که در حال حاضر برای یادگیری بدون نظارت استفاده می‌شوند را درک خواهد کرد. در اين فصل, موضوعات زیر را پوشش خواهیم داد * بادگیری بدون نظارت ۰ الگوریتم های خوشه بندی abel ‏كاهش‎ + ۰ الگوریتم های تشخیص ناهنجاری * کاوش فواعد وایستگی 16

صفحه 181:
معرفی یادگیری بدون نظارت شاده ‎gas‏ عزیت یادگیژی بدون: نطازت آین: اسست که فزایتد:آزانه بوعن: نساختار: برای داده های بدون ساختار با کشف و استفاده از الگوهای ذاتی داده ها است. اگر داده‌ها توسط برخی فرآیندهای تصادفی تولید نشوند. الگوهایی بین عناصر داده‌ای در فضای مسئله چندبعدی خود خواهند داشت. الگوریتم های یادگیری بدون تظارت با کشف اين الگوها و استفاده از آنها برای ارائه ساختاری به مجموعه داد كار مى کنند. این مفهوم در نمودر زیر نشان داده ‎see‏ لس میم ‎Data‏ ‏شکل 3-6: ساختار کلی یادگیری بدون نظارت توجه داشته باشید که یادگیری بدون نظارت با کشف ویژگی های جدید از الگوهای موجود: ساختار را اضافه می کند. ‎ ‎ ‎ ‏يادكيرى بدون نظارت در چرحه زندگی داده کاوی برای درک نقش یادگیری بدون نظارت: مهم است که ابتدا به چرخه حبات کلی فرآیند داده‌کاوی نگاه کنیم. متدولوژی های مختلفی وجود دارد که چرخه حبات فرآیند دادهکاوی زا به مراحل مختلف مستقلی که از نامیده می شوند؛تقسیم می کنند. در حال حاضر, دو روش رایج برای نمایش چرخه زندگی داده کاوی وجود داد ‏* چرخه حبات 5158-81 (فرايند استاندارد بين صنعتى براى داده كاوى). ‏*. فرآیندداده کاوی 5۴1/14۸ (نمونه,کاوش, اصلاح. مدل؛ دسترسی) ‎ ‎

صفحه 182:
۲8۱5۴۸ توسط کنسرسیومی از استخراح کنندگان داده که متعلق به شرکت های مختلفی از جمله کرایسار و 5555 (بسته آماری علوم اجتصاعی) بودند. توسعه یافت. 5۱/1/۸ توسط 5۵5 (سیستم تحلیل آماری) پيشتهاد شد. ببایید به يكى از اين دو تمايش از چرخه زندگی داده کاوی, 68۱5۴-014 نگاه کنیم و سعی کنیم جایگاه بدگیری بدون نطارت را در چرخه زندگی داده کاوی درک کنیم. توجه داشته باشید که 5۴104۸ در چرخه عمر خود تا حدودی مراحل مشابهی دارد. اگر به چرخه حیات 68۱5۳۰۵۱4 نگاه کنیم: می بینیم که از شش فاز مجزا تشکیل شده است که در شکل زیر نان داده شده است: ‘nner Ue | ‏بت‎ wv ‘supervised Learning شكل 2-6: جرخه حبات ‎CRISP-DM‏ ید هر م ركد را بك ‎i Sip Sea‏ فاز 1: درك تجارى: اين فاز در مورد جمع آورى تيازمنديها است و شامل تلاش براى درك كامل مسئله از نقطه نظر تجارى است. تعريف دامنه مستله و بازتویسی مجدد آن با توجه به یادگیری ماشین (۱۱) بخش مهمی از این مرحله 53

صفحه 183:
است - به عنوان مثال, برای یک مستله طبقه بندی دودویی, گاهی اوقات بیان بازمتدیا در قالب یک فرضیه اثباث شنده یا رد شذه, مقیذ است, این مره همچنین در مورد مستندسازی انتظارات برای مدل یادگیری ماشیتی است که در مرحله 4 در بایین دست آموزش داده می‌شود - به عتوان مثال, برای یک مسئله طبفه‌بندی, ما باید حداقل دقت قابل قبول مدلی را که می‌تواند در تولید به کار گرفته شود. مستند کنیم. توجه به این نکته مهم است که فاز 1 چرخه خیات 15۴:010) در مورد درک تجاری است. اين فاز بر روى كارى كه بايد انجام شود تمركز می کند, نه اینکه جكونه انجام مى شود فاز 2: درک داده ها اين فاز در مورد درگ داده هایی است که برای داده کاوی 33 درس امد ای مرجله میوجه ف وامت ‎stn ey aie gas Li a Ss‏ امناسي يزات ‎Hallas‏ كه .دن تلاهيم سلس كدي 99 ‎bread gastro‏ جتير: وس أن شناسایی مجموعه داد ‎al le‏ کیقیت داده ها و ساختر آن را درک کنیم. ما ‎al‏ ‏دریابیم که چه الگوهایی را می توان از داده ها استخراح کرد که به طور بالقوه می تواند ما را به سمت بینش های مهم هدایت کند. ما همچنین سعی خواهیم کرد ویژگی مناسبی را پیدا کنیم که بتوان از آن به عنوان برجسب (يا متغير هدف) با توجه به نبازمنديهاى جمع آورى شده در فاز 1 استفاده كرد. الكوريتم هاي یادگیری يذون نظارت مى تواند نقش قدرتمتدى در دستياب ‎sla ay‏ فاز 2 داشته پاشند الكوريتم هاى بدون نطارت مى توائند يراى اهداف زير استفاده شود *_برای کشف الگوها در مجموعه داده *_برای درک ساختار مجموعه داده با تجزیه و تحلیل الگوهای کشف شده * برای شناسایی یا استخراج متفیر هدف فاز 3: آماده سازی داده ها؛ اين فاز در مورد آماده سازی داده ها برای مدل ‎ML‏ است که در فاز 4 آموزش خواهیم داد داده:های پزچست: گذاری: سته:موچود :دی بخ بأ زب سسنیم: من هتویده يحب بزركثر داده هاى آموزشى ناميده مى شود و براى آموزش مدل بابين دست در فاز a9

صفحه 184:
4 استفاده می شود. بخش کوچکتر داده های آزمون نامیده می شود و در فاز 5 برای ارزیایی مدل استفاده مي شود. در اين مرحله,الگورتمهای بادگیری ماشین بدون تظارت می‌تونن به‌عنون ابزاری برای آماده‌سازی داده‌هامورد استفاده فراز گيرند - برای مثال, می‌توان از آنها بای تبدیل داده‌های بدون ساختار به داده‌های ساخت‌یافته ستفاده کرد و ابعاد اضافی را ارائه کرد که می‌تواند در آموزش مدل مفید باشد. فاز 4: مدل سازی: اين مرحله ای است که در آن از یادگیری نظارت شده برای فرمول بندی الگوهایی که کشف کرده ایم استفاده می کنیم. از ما انتظار می رود که با موفقیت داده ها را مطایق با نبازمندیهای الگوریتم یادگیری با تظارت انتخابی خود آماده کنیم. همچنین این مرحله ای است که در آن ویژگی خاضی که به عنوان برچسب استفاده می شود شناسایی می شود. در فاز 3 داده ها را به مجموعه های آزمون و آموزشی تفسیم کردیم. در اين مرحله, فرمول‌های ریاضی را برای نشان دادن روابط در الگوهای مورد علاقه خود تشکیل مي‌دهيم. این کار با آموزش مدل با استفاده از داده های آموزشی ایجاد شده در فاز 3 انجام می شود. همانظور که فبلا ذکر شد. فرمول ریاضی حاصل به اتتخاب الگوریتم ما بستگی از 5: ارزیابی: اين مرحله در مورد آزمایش مدل تاه آموزش دیده با استفاده از داده های آزمایشی از فاز 3 است. اگر ارزیبی با نتظارات تعيين شده در فاز 1 مطابقت داشته باشد پاید تمام مراحل قبلی را با تکرار دوباره از مرحله 1 شروع كنيم. در تصوير فبل نشان داده شده است. فاز 6: استغرار: اكر ارزيابى انتظارات توصيف شده در فاز 5 را برآورده کند با از آن فراتر رود.آنگاه مدل آموزش دیده در تولید مستقر می شود و شروع به ایجاد راه حلی برای مسئله ای که در فاز 1 تعریف کردیم. می ‎BS‏ a0

صفحه 185:
فاز 2 (درک داده ها) و فاز 3 ( آماده سازی داده ها) در چرخه خیات ‎CRISP-‏ ‏۷ همه ذر مورد درک ذاده ها و آماده سازی آنهابرای آم وزش مدل است. این ‎Jol Jobe‏ پردازش داده ها می شود. برخی از سازمان ها متخصصان را برای این مرحله مهندسی داده استخدام می کنن. بدیهی است که فرآیند پيشنهادراء حل برای یک فستله کاملاً میتتی بر داده اسشت. ترکیین از یادگیزی ماشینی با نظارت و بدون نطارت برا تدوين بك راه حل قابل اجرا «استفاده مى شود. ابن فصل بر بخش یادگیری بدون نظارت راه حل متمرکز است. مهندسی داده شامل فاز 2 و فاز 3 است و زمانبرترین بخش یادگیری ماشین است. اين کار می تواند 0 درصد از زمان و منابع يك يروزه معمولى 801 را يكيرد. الكوريتم هاى يادكيرى بدون نظارت مى توانند تقش مهمى در مهتدسى داده ايقا كتند. بخش هاى زير جزئیات بیشتری در مورد الگوریتم های بدون نظارت ارائه می دهد روندهای تحقیق فعلی در یادگیری بدون نظارت برای سال‌ها,تحقیق در موردالگوریتم‌های یادگیری ماشین بیشتر بر تکنیک‌های یادگیری با نظارت متمرکز بود. از آجایی که تکنیک های بادگیری با تظارت می توانند مستقیفاً برای استنتاج مورد استفاذه فراز گیرند: مزایای آنهنا از تظر زمان: هزینه و دفت نسیتً به راحتی قابلاندازه گیری است. قدرت الگوریتم های یادگیری ماشيتى يدون نظارت اخيراً شناخته ننده است. از آنجایی که یادگیری بدون نظارت هدایت نمی شود. کمتر به فرضیات وابسته است و به طور یالقوه می تواند راه حل را در هر بعد همكرا كند. اكرجه كنترل دامنه و بازمندبهای پردازش الگوریتم های یادگیری بدون نظارت دشوارتر است. اما آنها بتانسيل بيشترى براى كشف الكوهاى بنهان دارند. محققان همجنين در تلاش هستند تا تكنيك هاى يادكيرى ‎guile‏ بدون نظارت راب تکنبک های یادگیری با نطارت ترکیب کنند تا الكوريتم های قدرتمند جدیدی طراحی كتنة. مثال های کاربردی

صفحه 186:
در حال حاضر, یادگیری بدون نظارت برای دریافت درک بهتر از داده ها و ارانه ساختار پیشتر , مورد استفاده فرار می گیرد - به عنوان مثال, در بخش بندی بازاریابی, کشف تقلب و تجزیه و تحلیل سبد بازار (که در ادامه اين فصل مورد بحث فرار می گیرد) استفاده می شود. بایید به چند تمونه نگاه کنیم. دسته بندی صدا یادگیری بدون نظارت مى تواند برای طبقه بندی صداهای فردی در یک فایل صوتی استفاده شود. از اين واقعیت استفاده می کند که صدای هر فرد دارای ویژگی های متمایز است و الگوهای صوتی بالقوه قابل تفکیک ایجاد می کند. سپس می‌توان از این الگوها برای تشخیص صدا استفاده کرد - برای منال, 600916 از اين تکنیک در دستگاه‌های ۲۱۵۲0۵ 60001 خود استفاده می‌کند تا آنها را آموزش دهد تنا بين صدای افراد مختلف تفاوت فائل شوند. پس از آموزش, ۱۷۵۲9۵ 600916 می‌تواند باسخ هر كارير را به صورت جداگانه شخصی‌سازی کند. برای مثال, فرض کنید یک مکالمه ضبط شده از سه نفر داریم که به مدت نیم ساعت با یکدیگر صحبت. می‌کنند. با استفاده از الگوربتم‌های یادگیری بدون نظارت, می‌توانیم صدای افراد متمایز را در اين مجموعه داده شناسایی کنیم. توجه داشته باشید که از طریق يادكيرى بدون نظارت, ساختار را به مجموعه داده‌های بدون ساختار اضافه می‌کني. این ساختارابعاد مفید دیگری را در فضای مسئله به ما می دهد که می تواند برای به دست آوردن بینش و آماده سازی داده ها برای الگوریتم یادگیری ماشین انتخایی ما استفاده شود. تمودار زیر تشان می دهد که چگونه از یادگیری بدون تظارت برای تشخیص صدا استفاده می شود Audio Data فد

صفحه 187:
شکل 3-6: استفاده از یادگیری بدون نظارت در تشخیص صدا توجه داشته باشید که در اين مورد.یادگیری بدون نظارت پیشنهاد می کند که یک ویژگی جدید با سه سطح مجزا اضافه کنیم. دسته بتدی استاد الكوريتمهاى يادكيرى ماشين بدون نظارت نیز می‌توانند در مخزن داده‌های متنی بدون ساختار اعمال شوند - برای مثال, اگر مجموعه داده‌ای از استاد ۴۵۴ داشته باشیم. مىتوان از بادگیری بدون نطارت برای انجامکارهای زیر استفاده کرد © موضوعات معتلف را در مجموعه داده کشف کنید + هر ‎PDF atu‏ را به یکی از موضوعات کشف شده مرتبط کنید این استفاده از یادگیری بدون نظارت برای طبقه بندی استاد در شکل زیر نشان داده:شده اسنت. این :مثال دیگری است که دز آن ساختار پیشتری ‎sla sab ey ly‏ بدون ساختر اضافه می كنيم: Unsupervised Leaming Pf Documents شکل 4-6: استفاده از یادگیری بدون نظارت برای طیقه بندی استاد مد

صفحه 188:
توجه داشته باشید که در این مورد,یادگیری بدون نظارت پیشنهاد می کند که یک ویژگی جدید با بنج سطح مجزا اضافه كنيم. آشنایی با الگوریتم های خوشه بندی یکی از ساده‌ترین و قوی‌ترین تکیک‌های مورد استفاده در بادگیری بدون نظارت؛ بر اساس گروهبندیالگوهای مشایه با یکدیگر از طری الگوریت‌های خوشه‌بندی ‎cil‏ زاف قر جدود ماضن از ولاه ها اشتفاذج نی شود کف یه مسللة ای کذ ها سعی در حل آن داریم مربوط می شود.الگویتم های خوشه بندی به دنبال گروه بندی طبیعی در اقلام داده هستند. از آنجایی که گروه بر اساس هیچ هدف یا فرضی تیست. به عنون یک تکنیک یادگیری بدون نظارت طبفه بندی می شود. ‎gl alts fl ool LLG Ga Cal Gu Shel) Goa‏ بل تسه دیگر. متفاوت است و به ماهیت مستله ای که با آن سز و کار داریم بستگی دارد. بیایید به روش های مختلفی که مي توان برای محاسبه شبافت ‎Las gy‏ داده مختلف استفاده کرد نگاهی بیتدازيم. محاسیه شیاهت ها قابلیت اطمینانگروه‌بندیایجاد شده توسط الگوریتم‌های خوشه‌بندی بر ان فرص استوار است که می‌توایم شياهت‌ها با نزدیکی پین نقاط داده مختلف در فسای مستله را به دفت حساب کنیم. اين کار با استفاده از معبارهای مختلف فاصله انجام مى شود. در زير سه مورد از محبوبترين روشهابى كه براى تعيين كميت شیاهت‌ها استفاده می‌شود. ذکر شده است: © اندازه گیری فاصله اقلیدسی ۰ اندازه گیری فاصله منهتن ۰ اندازه گیری فاصله کسینوسی ‎aul‏ به اين اندازه گیری های فاصله با جزئبات بیشتری تگاه کنیم. aes

صفحه 189:
فاصله افلیدسی فاصله بین نقاط مختلف می تواند شباهت پین ذو نقطه داده را حساب کند و به طور گسترده در تکتیک های یادگیری ماشین بدون نظارت مانتد خوشه بندی استفاده می شود. فاصله افلیدسی رایج ترین و ساده ترین اندازه گیری فاصله است:با انداره گیزی کوجاه مزین فاصله پین دو بقطه:داده دز فضتای چند دی محاسبه می شود. برای مثال, یاییددو نقطه (2,1) ۸ و (14:4 8 را در یک فصای دو بعدی در نظر بگیریم, همانطور که در نمودار زیر نشان داده شده است: B(4,4) 4.25 Y-Axis Q (1,2) 5 a4) (0,0) X-Axis ‏شکل 5-6: فاصله افلیدسی بین نقاط و8‎ ‏توانیم از فرمول فیثاغورث زیر‎ Ge ۵)۸,8( ‏برای محاسیه فاصله پین ۸ و 8 - یعنی‎ ‏استفاده كنيم:‎ فد

صفحه 190:
(oa ba) + (a - ‏4)ن - #زرة‎ -1(2 + )4 توجه داشته باشيد كه اين محاسبه براى يك فضاى مسئله دو بعدی است. برای یک فسای مسئله ‏ بعدی, می توانیم فاصله بین دو نقطه ۸ و 8 زا به ضورت زیر مخاسيه کنیم فاصله منهتن ذر بسیاری از موقعیت‌هاء اندازه‌گیری کوتاه‌ترین فاصله بين دو تقطه با استفاده از اندازه‌گیزی فاضله اقلیدسی: تشابه یا تزدیکی بین دو نقطه را واقعاً نشان تمی‌دهد - برای متال, اگر دو نقطه داده مکان‌هایی را بر روی تقشه تشان دهند. سپس فاصله واقعی از نقطه ۸ تا نقطه 8 با استفاده از حمل و نقل زمینی,مانندماشین با تاکسی, بیشتر از مسافت محاسبه شده توسط فاصله افلیدسی خواهد يود برای موقعیت‌هایی از این قبیل از مسافت متهتن استفاده م‌کنیم که طولایترین مسير را بين دو نقطه مشخص می‌کند و بازتاب بهتری از نردیکی دو نقطه در زمينه نقاط مبدا و مقصد است كه می‌توان در یک شهر شلوغ به آن سفر کرد مقایسه بی:معیارهای فاصله جنهتن و افلردسی در بعودار یز مشتان دأده شده: 186

صفحه 191:
(4,4) 8 هه Y-Axis 4.25 (Euclidean distance) A(1,1) (0,0) X-Axis ‏شکل 6-6: فاصله اقلیدسی و منهتن بین نفاط ۸و8‎ توجه داشته باشید که فاصله منهتن هميشه برابر با بزرگتر از فاصله افلیدسی مربوطه خواهد بود فاصله کسینوسی اندازه گیری های فاصله اقلیدسی و منهتن در فضای با ابعاد بالا عملکرد خوبی ندارند. در یک فضای مسئله با اعاد بال؛ فاصله کسینوسی با دقت بیشتری, تزدیکی بين دو نقطه داده در یک فضای مسئله چند بعدی را منعکس می کند. اندازه گیری فاصله کسینوسی با اندازه گیری زاویه کسینوس ایجاد شده توسط دو تقطه متصل به یک نقطه مرجع محاسبه می شود. اگر نقاط داده نزدیک باشتد. بدون توجه به 17

صفحه 192:
ابعاد آنهاء زاويه باريك خواهد بود. از طرف دیگر. اگر نها دور باشند. زاوبه ببزرگ خواهد بود i @ ۸ Y-Axis X(0,0) X-Axis شکل 7-6: فاصله کسینوسی بین تقاط ۸و8 داده های متنی را تفریاً می توان فضایی با اعاد الا در نظر گرفت. از آنجابی که اندزه گیری فاصله کسینوسی با فضاهای ‎٩‏ بُعدی بسیار خوب کار می کند, در هنگام برخورد با داده های متنی, اتتخاب خوبی است. توچه داشته باشید که در شکل قبل, کسینوس زاویه بين (2.5) ۸ و (4.4) 8 , فاصله كسينوس است. مرجع بين اين تقاط مبدأ يعنى (0,0) لا است . اما در واقعیت؛ هر نقطه ای در فضای مسئله مي تواند به عنوان نقطه داده مرجع عمل کند و لزومی ندارد که ميدأ باشد. الگوریتم حوشه بندی ۱۱۵۵۴5 ود

صفحه 193:
نام الگورنتم خوشه‌بندی ۲0685-] از ان واقعیت تاشی می‌شود که سعی می‌کند تعدادی خوشه ۷ ۰ ایجاد کند, که میانگین را برای بافتن تزذیکی بین تفاظ دادم محاسبه می‌کند. از یک روش خوشه بندی نسبتا ساده استفاده می کند. اما به دلیل مقیاس پذیری و سرعت آن همچن ان محب وب است. از لحاظ الگ وریتمی, خوشه‌بندی ۰۲۲6۵5 از یک منطق تکراری استفاده می‌کند که مراکز خوشه‌ها را تا زمانی که نماینده نقطه داده های گروهی که به آن تعلق دارند را منعکس کنند. حرکت می‌دهد. توجه به اين نکته مهم است که الگوریتم‌های 1۰۱۵۵05 فاف د یکی از عملکردهای اساسی موردنیاز هستد. رای خوشه بندی, عملکرد گمشده این است که برای یک مجموعه داده معین, الگوریتم ۲0۵۵05 نمی تواند مناسب ترین تعداد خوشه ها را تعیین کند. مناسب ترین تعداد خوشه هاء ۷, به تعداد گروه ‎sab‏ های طبیعی در یک مجموعه داده خاص بستگی دارد. فلسفه پشت این حذف این است که الگوریتم را تا حد امکان ساده نگه داریم و عملک رد آن را به حداکثر برسائيم. اين طراحی تاب و متوسط, ۰706805 را برای مجموعه داده های يرركتر مناسب من كس- فرص مر اين ‎wis‏ که یک مکاربتم عارچت:بترای محاسبه ! استقاده خواهد شد. يهترين راه براى تعيين »ا يستكى به مسئله اق دارد كه ما سعى در حل آن داريم. در برخى موارد, ») مستقيماً توسط زمينه مسئله خوشه‌بندی مشخص می‌شود- براى متال, اگر بخواهیم کلاسی از دانش‌آموزان علوم داده را به دو خوشه تقسیم کنیم, یکی شامل دانش‌آموزانی با مهارت علم داده و ديكرى با مهارتهاى برنامه نويسى, سپس دو خواهد شد. در برخی مسائل دیگر, مقدار ‏ ممكن است آشكار نباشد. در چنین مواردی: یک روش تكرارى آزمون و خطا يا يك الكوريتم مبتنى بر اکتشاف باید سرای تخمین متاسب‌بزین تفداد خوشتها یراق یک مجموعه ولزن ‎ell ua‏ نود منطق خوشه بندى ‎k-means‏ ‏اين بخش منطق الكوريتم خوشه بندى 506805 را شرح مى دهد. بياييد يك به یک آنها را بررسی کنیم. وقد

صفحه 194:
مقداردهی اولبه به منظور گروه بندی آنهاءالگوریتم ۳6۵05-) از اندزه گیری فاصله برای یافتن شیاهت یا نزدیکی پین نقاط داده استفاده می کند. قبل از استفاده از الگوریتم 1۲ ‎means‏ باید مناسب ترین انداژه گیری فاصله انتخاب شود. به طور پیش فرض, اندازه گیزی فاصله اقلیدسی استفاده خواهد شد. همچنین: اگر مجموعه داده دارای مقادیر پرت باشد, باید مکانیزمی برای تعیین معیارهایی جهت شناسایی و حذف نقاط پرت مجموعه داده .یداع شود. مراحل الگوریتم ۱۰۵۵05 مراحل درگیر در الكوريتم خوشه بندى ‎MEANS‏ به شرح زیر است: مرحله 1 تعداد خوشه هاء را انتخاب مي كنيم. مرحله 2 از میان تقاط داده.به طور تصادفی »1 نقطه را به عتوان مراک ز خوشه انتخاب می کنیم. موجد:3 بو اسان مق گیری فا اسان سوه ور شک ورن قاس هو نقطه در فضای مسئله رات هر یک از مراکز ‏ خوشه محاسیه می کنیم. بر اساس اندازه مجموعه داده, این کار ممکن است یک مرحله زمان بر باشد - برای منال, 51 10000 نقطه در خوشه وجود داشته باشد و 3 < ‎K‏ باشد, اين بدان معنی است که 30000 فاصله بایدمحاسبه شود مرحله 4 ما هر نقطه داده در فضای مسئله را به نزدکترین مرکز خوشه اختصاص 5-7 مرحله 5 اکتون هر نقطه داده در فضای مسئله ما یک مرکز خوشه اختصاص داده شده دارد. اما کار ما تمام تشده است, زیرانتخاب مراکز خوشه اولیه بر اساس اتعاب تضادفی نوده است: ما پاید ند نیم که مراگر خوستای که بیط ور تصادفی انخاب شده‌اند در واقع مرکز نقل هر خوشه هستند. ما مراکز خوشه را با محاسبه میانگین نقاط داده تشکیل دهنده هر یک از ۲ خوشه ها دوباره محاسیه 390

صفحه 195:
می کنیم. اين مرحله توضیح می دهد که چرا این الگوریتم ۷-۵۵05 نامیده می شود مرحله:6 آگز مزاکز خوهه در مرحله:5 چانجا سده:پاهند::به :این معی ات هه ید تخصیص خوشه را برای هر نقطه داده دوباره محاسبه کنم.برای لبو ‎eS‏ ‏مرحله 3 برمی گردیم تا آن مرحله محاسیانی فشرده را تكرار كنيم. اكر مراكز خوشه جابجا نشده باشند با اگر شرط توقف از پیش تعیین شده ما (مثلاً تعداد حداکتر تکرارها)برآورده شده باشد, کار ما تمام شده است. شكل زير نتيجه اجراى الكوريتم 6-0605 را در فضای مسئلهدو بعدی نشان می ۳ 3 شکل 8-6: (الف) تقاط داده قبل از خوشه بندی؛ (ب) خوشه های حاصل پس از اجرای الگوریتم خوشه بندی ۲۳۵۵05 توجه داشته باشید که دو خوشه ابجاد شده پس از اجرای ‎Kemeans‏ به خوبی در این مورد متمایز هستند

صفحه 196:
شرط توقف برای الگوریتم ۳۱۵۵05, شرط توقف پیش فرض, زمانی است که دیگر جابجایی مراکز خوشه در مرحله 5 وجود نداشته باشد. اما مانند بسيارى از الكوريتمهاى ديكر, الكوريتمهاى 06805 ممکن است زمان زيادى رابه خضوص در هنكام بردازش مجموعه دادههاى يزرك دريك فضاى مسئله با ابعاد بالاء براى همكرايى نياز داشته باشتد. به جاى ايتكه منتظر همكرا شدن الكوريتم باشيم: مىتوانيم به طور صريح شرط توقف را به صورت زير تعریف کنیم: * با تعيين حداكثر زمان اجرا: شرط توقف: ۱<۱۳0۵۷ که ! زمان اجرای فعلی و ۷9۵ حداکثر زمان اجرای الگورینم است. + باتعيين حداكثر تكرار: شرط توقف: ‎mmax y oles JL m>mmax. m {Sl‏ حداکثر تعداد تکرارهایی است كه براى الكوريتم تنظيم كرده ايم. کدگذاری الگوریتم ‎k-means‏ ‏بيابيد ببينيم جكونه مى توانيم الكوريتم 16576805 را در بايتون كدنويسى كنيم: 1. ابتدا,بیایید بسته هایی را وارد کنیم که باید برای الگوربتم ۷-۳۱۵۵5 کدنویسی کنیم. توجه داشته بشید که ما بسته 5/1637 را برأى خوشه بندی 96۵5 وارد فى ‎iS‏ ‎from sklearn inport cluster‏ ‎import pandas as pd‏ ‎import nunpy as np‏ a

صفحه 197:
برای استفاده از خوشه بندی ۳۳۵۵05-, اجازه دهید 20 نقطه داده را در یک فضای مسئله دو بعدی ابجاد کنیم که برای خوشه بندی ‎MEANS‏ استفاده خواهیم کرد: dataset = pd.DataFrame({ ‘xt: [1L, 21, 28, 17, 29, 33, 24, 45, 45, 52, 51, 52, 55, 53, 55, 61, 62, 70, 72, 101, ‘y's (39, 36, 30, 52, 53, 46, 55, 59, 63, 70, 66, 63, 58, 23, 14, 8, 18, 7, 24, 10] » 1. بيابيد دو خوشه (2 > ) داشته باشیم و سپس با فراخوانی توایع 6, خوشه را ایجاد کنیم: mykmeans = cluster.kMeans(n_clusters=2) myKmeans. fit (dataset) ابید یک متفیر به نام ۲20۵1۵ ایجاد کنیم که آرایه ای است که محل مرکز خوشه های تشکیل شده را نگه می دارد. در مورد مسئله ما. 2 < ‎MULT gunk‏ دارای اندازه 2 خواهد بود. ‎sale‏ متغير ديكرى به نام 13061 ايجاد كنيم كه نشان دهنده انتساب هر نقطه :داده به يكى از دو خوشه است. ال آنجايى كه 20 نقطه داده وجود دارد.اندازه اين آرایه 20 خواهد بود: centroids = mykmeans.cluster_centers_ labels = mykmeans.1labels_ ود

صفحه 198:
حالا بيابيد اين دو آرايه. 66067014 و 18661 را جاب كنيم: 10 ]31: print(Labets) ]1 111111199 ۵ 9 ۵ ۵ 9 ۵ 91 In [6]: print (centroids) [9090909و. 15 57.89090909] ] ]]48.88888889 16.77777778[ توجه داشته باشید که آرایه اول تخصیص خوشه را با هر نقطه داده و آرابه دوم دو مرکز خوشه را نشان می دهد. 1. بياييد با استفاده از ۵10۵ خوشه ها را رسم كنيم و به آنها نگاه کنیم: ود

صفحه 199:
In [16]: import matplotlib.pyplot as plt plt-scatter(dataset['x'],dataset['y'], s=10) plt.scatter(centers{0] ,centers{1],5=100) pit. show() توجه داشته باشید که نقاط بزرگتر در نمودار, مرکزها هستند که توسط الگوریتم ‎k-means‏ تعيين مى شوند. محدودیت خوشه بندی 10۵۵05 الكوريتم 06805-»! طوری طراحی شده است که یک الگوریتم ساده و سرن باشد. بهذلیل سادگی عمدی در طراحی آن, با محدودیت های زیر همراه است: * بزرگترین محدودبت خوشه‌بندی 1۰9۵۵05 این است که تعداداولیه خوشه‌ها بايذ از بيش تعيين شود. 195

صفحه 200:
‎٠‏ تخصیص اولبه مراکز خوشه ای تصادفی است. اين بدان معنی است که هر بار که الگوریتم اجرا می شود. ممکن است خوشه های کمی متفاوت ارائه ‏+ هر نقطه داده فقط به یک خوشه اختصاص داده می شود ‏+ خوشه بتدی ۰۳۳6905 به نقاط يرت حساس است. ‏خوشه بندی سلسله مراتبی خوشه پندی ۱۰۳۱6905 از رویکرد بالا يه بايين استفاده من كند زيرا الكوريتم را از مهمترين نقاط داده كه مراكز خوشه هستند. شروع مى كنيم. يك رويكرد جايكزين براى خوشه بندى وجود دارد كه در آنء به جاى شروع از بالاء الكوريتم را از يايين شروع می کنیم.پیین در این زمینه هر یک از نقاط داده منف رد در فضای مسئله است. راه حل اين است که همچنان که به سمت مراکز خوشه پیش می رودء نقاط داده مشابه را با هم گروه بندی کنید. این رویکرد چایگزین از پابین به با توسط الگورینم های خوشه بندی سلسله مراتبی استفاده مي شود و در این بخش مورد بحث قرار مي گیرد. ‏مراحل خوشه بندی سلسله مراتبی ‏مراحل زیر در خوشه بندی سلسله مراتبی دخبل است: ‏1. ما یک خوشه مجزا برای هر نقظه داده در فضای مستله خود ايجاد مى كنيم. آگر فضای مسئله ما از 100 نقطه داده تشکیل شده باشد؛ آنگاه با 100 خوشه شروع می شود ‏2. فقط تقاطی را گروه بندی مي کنیم که به هم نزدیکتند. ‏3. وضعیت توقف را بررسی می کنیم. اگر شرط توقف هنوز برآورده نشده است: ‏مرحله 2 را تكرار مى كنيم. ‎196 ‎ ‎

صفحه 201:
ساختار خوشه ای به دست آمده را دندروگرام می نامند. در دتدروگرام؛ ارتفاع خطوط عمودی تعیین می کند که آیتم ها چقدر تزدبک هستند. همانطور که در نمودار زیر نشان داده شده است: شکل 9-6: نمودار دندروگرام توجه داشته باشید که وضعیت توقف به صورت یک خط نقطه چین در شكل قبل نشان داده شده است. کدنویسی یک الگوریتم خوشه بندی سلسله مراتبی یبد یا گیریم که چگونه می توانیم یک الگوریتم سلسله مراتبی را در بایتون کدنویسی كنيم: ‎AgglomerativeClustering lal 1‏ را از ‎clan « sklearn.cluster ulus‏ 85 و بسته های 90538 وارد مى كنيم: ‎17 ‎ ‎

صفحه 202:
from sklearn.cluster import AgglomerativeClustering import pandas as pd import numpy as np سپس 20 نقطه داده را در یک فضای مسئله دو بعدی ایجاد خواهیم کرد dataset = pd.DataFrame({ ‘xt: (LL, 21, 28, 17, 29, 33, 24, 45, 45, 52, 51, 52, 55, 53, 55, 61, 62, 70, 72, 16], "y's [39, 36, 30, 52, 53, 46, 55, 59, 63, 70, 66, 63, 58, 23, 14, 8, 18, 7, 24, 10] 1 سپس با ‎a tel lila gaat‏ خوشه سلسله مزاتبی را ایجاد می کنیم. ما از تالم ۵ 0 برای پردازش الگوریتم استفاده می کنیم: Cluster = AgglomerativeClustering(n_clusters=: affinity="euclidean', Linkage='ward' ) cluster. fit_predict (dataset) جالا بيابيد به ارتباط هر تقطه داده با دو خوشه ایجاد شده نگاه کنیم: وود

صفحه 203:
rn [3]: print (cluster. labels_) t00000000111111111110) مى بينيذ كه انتساب خوشه براى هر ذو الكوريتم سلسله مراتبی و ۳6۵95 بسیار شبیه هستد. ارزيابى خوشه ها هدف از خوشة بندی با کقیت خوب این انتت که تقاط دادم اي که ‎cob aig‏ جداگانه تعلق دارند باید فابل تمایز باشند. این کار دلالت بر موارد زیر دارد: ‎blir ©‏ داده ای که به یک خوشه تعلق دارند بیدا حد امکان مشابه باشتد. ‏۰ تقاط داده ای که به خوشه های جداگاته تعلق دارند باید تا حد امکان متفاوت ‏باشند. ‏شهود انسان مى تواند براى ارزيابى نتايج خوشه بندى با تصويرسازي خوشه ها استفاده شود. اما روش های رياضى وجود دارد كه مى تواند كيفيت خوشه هارا حساب کند. تحلیل سیلوئت یکی از اين تکنیک‌ها است که فشردگی و جدایی را در خوشه‌های ایجاد شده توسط الگوریتم ۲06۵05- مقایسه می‌کند. نموداری را ترسیم می کند که نزدیکی هر نقطه در یک خوشه خاص را نسبت به سای نقاط در خوشه های همسایه نشان می دهد. با هر خوشه عددی در محدوده [1. 0] مرتبط می کند. جدول زیر نشان مي دهد که ارفام در اين محدوده نشان دهنده چیست: ‎ ‎Bes] oma] ‏محدوده‎ ‏077 | عالی |آين به آين معتی آست که خوشه بندى 16006805 به گروه هایی منجر شد که کاملاً از یکدیگر متمایز ‎“OST‏ ول |آين يدان معتي است كه خوشه بتدي ۳15315 به ‎ ‎ ‏وود ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 204:
00 وه هایی منجر شند که تا حدودی از یکدیگر متمایر 6 .| ضیف ‎Gal Gla gw gl]‏ که خوشه بندی 1۳708305 0.50 منجر به گروه بندی می شود. اما نباید به کیفیت گروه بندی تکیه کرد 0352 7و ‎Is a‏ | مود نفد انکان گروه پندی با استفاده ‎age‏ ‏نشده است أ بندى 06805 وجود نداشت. توجه داشته باشيد كه هر خوشه در فضاى مسئله يك امتياز جداكانه دريافت من ‎as‏ DBSCAN 0852 (خوشه‌بندی فضابی مبتنی بر چگالی برنامه‌ها با نویز) یک تکنیک یادگیری بدون نظارت است که خوشه‌بندی را بر اساس چگالی تقاط انجام می‌دهد. ایده اصلی بر اين فرض استوار است که اگر تقاط داده را در فضای شلوغ با با جكالى بالا با هم كروه بندى كنيم: مى توانيم به خوشه بندى معنادار دست بابيم. اين رويكرد به خوشه بندى, دو مفهوم مهم دارد: » با استفاده از اين ابده: الكوريتم احتمالاً تقاطى را كه در كنار هم وجود دارند: بدون در نظر گرفتن شکل آنهء با هم دستهبندی می کند. این روش به ایجاد خوشه ای از اشکال دلخواه کمک می کند *_ برخلاف الگوریتم 06۵05:-, ما نیازی به تعیین تعداد خوشه ها نداریم و الگوریتم می تواند تعداد مناسب گروه بندی را در داذه ها تشخیص دهد. مراحل زیر شامل الگوریتم 08568 است: 200

صفحه 205:
این الگوریتم یک همسایگی در اطراف هر نقطه داده ایجاد می کند. اين کار با شمارش تعداذ نقاظ داده در فاصله ای که معمولا با یک متفیر 685 نشان داده می شود انجام می:شود: فاضله:بهطوز پیش فرسن :با اندازج گیری فاضله اقلیدستن تعيين مى شود. سپین: الوم راک هنن نقطه‌داده را حستاب: میخند: آن متفیزهاین: به ام ‎min_samples‏ استفاده مى کند. اگر یک نقطه داده بیش از ‎min_samples‏ ‏داشته پاشد: به عنوان یک نمونه اصلی شناسایی می شود.پدیهی است که منظف» شلوع تر یا متراکم تر, نمونه های اصلی بیشتری خواهد داشت. هر یک از مکان:های شناسایی شده یک خوشه را مشخص می کند: همسایگی یک نموه اصلی ممکن است حاوی تمونه های اصلی دیگری باشد. هر نقطه داده ای که یک نمونه اصلی تباشد یا در همسایگی یک نموته اصلی فرار نگیرد,به عنوان نقطه پرت در نظر گرفته می شود اجازه دهید ببینیم چگونه می‌توانيم خوشه‌هایی را با استفاده از 0856۸۷ در ۴۳۵۴ ایجاد کنم. اند ویعلازم را از کتبخانه 5069۳0 وارد می‌کنيم. In [13]: from sklearn.cluster import DBSCAN fron sklearn.datasets import make moons oLssthalfmoons ‏را با مسئله خوشهبندى نسبتاً دشواربه نام‎ DBSCAN aul ‏کنیم. مجموعه داده را می توان با ستفاده از یک تبع داخلی ایجاد کرد. این مسئله‎ ‏ی آزمون برای الگوریتم هایی مناسب است كه قادر به يادكيرى مرزهاى كلاس‎ ‏غیرخطی هستند. برای آن تابع () 00005 1۵6 زیر, یک الگوی چرخشی یا دو‎ ‏مات تولید می کند. ما فی توانیم میزان نویزی بودن اشکال ماه و تعداد نمونه های‎ ‏تولید شده را کتترل کنیم. مجموعه داده به شکل زیر است:‎ 20

صفحه 206:
شکل 10-6: متالی از 885 برای استفاده از 0856۸۷ بایدپارامترهای 685 و ‎L min_samples‏ اراثه كنيم ود موردآن ‎ea‏ كنيم: In [ ]: dbscan = DBSCAN(eps=0.05, min_sample: In [3]: dbscan. fit(x) 0 3]: DBSCAN(eps=0.05) کاربرد خوشه بندی خوشه بندی هر جا که نیاز به کشف الگوهای اساسی در مجموعه داده ها داشته باشیم استفاده می شود. در موارد استفاده دولتی, خوشه بندی را می توان براق موارد زیر استفاده کرد: 202

صفحه 207:
* تجزيه و تحليل كانون جرم و جنايت * . تحلیل اجتماعی جمعیت شناختی در تحقیقات بازار می توان از خوشه بتدی برای موارد زیر استفاده کرد ۰ تفسیم بندی بازار + تبليغات هدفمند * دسته بندی مشتریان تجزیه و تحلیل مولفه اصلی (۴6۸) همچنین برای کاوش کلی داده ها و حذف نویز از داده های پیدرنگ مانندمعاملات در بازار سهام, استفاده می شود کاهش ابعاد هر ویژگی در داده های ما مربوط به یک بعد در فضای مسئله ما است. به حدافل رساندن تعداد ویژگی ها برای ساده تر کردن فضای مستله, کاهش ابعادتامیده می شود و به یکی از دو روش زیر قابل انجام است: ‎٠‏ انتخاب ویژگی: انتجاب مجموعه‌ای از ویژگی‌هابی که در زمینه مسئله ای که ‏سعی در حل آن داریم مهم هستند ‏* تجميع ويزكى: تركيب دويا جند ويزكى براى كاهش ابعد با استفاده از یکی ‏از الكوريتمهاى زير: هه يك الكوريتم 11 بدون نظارت خطى ‏تجزيه و تحليل تشخيص ‎(LDA) Gls‏ يك الكوريتم ‎١01‏ نظارت شده خطى ‏> تجزيه و تحلیل مقلفه اصلی هسته: یک الگورینم غير خطى ‏بياييذ به يكى از الكوريتم هاى كافش ابعاد محبوب, يعنى 868. با جزئيات بيشتر ‏نكاه كنيم. ‎203 ‎

صفحه 208:
تجزیه و تحلیل مولفه های اصلی ۶6۸ یک تکنیک یادگیری ماشینی بدون نظارت است که می تواند برای کاهش ‎abel‏ ‏با استفاده از تبدیل خطی استفاده شود. در شکل زیر دو جزء اصلی ۶1 و ‎PC2‏ ‏را مى بيتيم كه شكل كسترش نقاط داده را نشان مى دهتد. 561 و ۴62 را می توان برای خلاصه کردن نقاط داده با ضرایب مناسب استفاده کرد: var2 Pe + vart شكل 11-6: مثالى از كاهش ابعاد بياييد كد زبر را در نظر يكيريم. from sklearn.decomposition import PCA 208

صفحه 209:
iris = pd.read_csv(‘iris.csv' X = iris.drop('Species', axis=1! pca = PCA(n_components= pea. fit(X) حالا بيابيد ضرايب مدل .ه56 خود را جاب كنيم: توجه داشته باشید که 0۵1۵۴۲۵۳۳۵ اصلی دارای چهار ویژگی ‎Sepal-Length.‏ ‎ls DataFrame aul Petal. Width y SepalWidth. Petal.Length‏ ضرایب چهار مولفه اصلی ۴03 :00۵ :863 و ۳64 را مشخص می كتوسينة عنوان مثال. رديف اول ضرايب 861 را مشخص مى كند كه مى تواند جايكزين چهار متفیر اصلی شود. بر اساس این ضرایب, می توانیم مولفه های ۴6۸ را برای 0818662008 ورودى محاسبه كنيم: (pd.DataFrame(pca.components_,coLumns=X. columns هعم ) # Let us calculate PC1 using coefficients that are generated X['PC1'] = X['Sepal.Length']* pca_df['Sepat. Length’ ][0] + X['Sepal.Width']* pca_df{'Sepal.Width* # Let us calculate PC2 205

صفحه 210:
X['PC2'] = X['Sepal.Length']* pca_df['Sepal.Length'] (1 + X['Sepal.Width']* pea_df{'Sepal.width* #Let us calculate PC3 X{'PC3'] = X['Sepal.Length']* pca_df['Sepal. Length’ ][2] + X['Sepal.Width']* pea_df['Sepal.Width’ # Let us calculate PCa X['PC4'] = X['Sepal.Length']* pca_df['Sepal.Length'][3 + X['Sepal.Width']* pea_df["Sepal.width* حالا ‎X aul‏ را بعد از محاسیه مویفه های 86۸۵ چاپ کنیم: SepaLegih Sepalath PelLengh Penwith x 5 حالا یبید نسبت واربانس ‎ole Ly‏ کنیم و سعی کنیم مفاهیم استفاده از 8۵۸ را درک کنیم: 206

صفحه 211:
In [37]: printipca.explained variance ratio_) [0.92461872 6,05306648, 9.61710261 @.00521218) نسبت واریانس موارد زیر را نشان می دهد اگر بخواهیم چهار ویژگی اصلی را با 862 جايكزين كنيم؛ می‌توانيم حدود 92.3 درصد از واریانس متفیرهای اصلی را ثبت کیم. ما برخی از تقریب ها را با عدم دریافت 1200 واریانس چهار ویژگی اصلی معرفی می كنيم. اگر ما انتخاب کنیم که چهار ویژگی اصلی را با ۴61 و ۶62 جایگزین کنیم, 5.3 درصد از واریانس متفبرهای اصلی را دزياقت خواهيم کرد اگر بخواهیم چهار ویژگی اصلی را با ۴62 ,861 و ۶63 جایگزین کنیم. اکنون 7 .از وازيانس متفيرهاى اصلى را دریافت خواهیم کرد اكر جهار ويزكى اصلى را با جهار مؤلقه اصلى جايكزين كنيم, 100 از واربانس متفيرهاى اصلى را ذريافت خواهيم كرد (92.4 + 0,053 + 0.017 + 40.005 اما جايكزينى جهار ويزكى اصلى با جهار مؤلفه اصلى بى معنى أسث. به هيج وجه از ابعاد كم نمى كند و جيزى به دست تمى آورد. محدودیت های ۴6۵ محدوديت هاى 568 به شرح زیر است: 62 فقط براى متغيرهاى بيوسته قابل استفاده است و برای متغیرهای موضوعی نمی باشد.

صفحه 212:
در حین تجمیع, 864 متغيزهاى مؤلفه رأ تفریب می زند. مستله ایعاد را به قیمت از دست دادن دقت ,ساده می کند. اين موازنه باید بل از استفاده از ۴6۸ به دفت مورد مطالعه فرار گیرد. کاوش فواعد وابستگی الگوها در یک مجموعه داده خاص گنچینه ای هستند که باید برای اطلاعاتی که دارند کشف, درک و استخراج شود. مجموع» مهمی از الگوریتم‌ها وجود دارد که سعی می‌کنند بر تحلیل الگو در یک مجموعه داده معین تمرکز کنند. یکی از محبوبترين الكوريتمهاى اين دسته , الگوریتم کوش فواعد وابستگی نام دارد که قابلیت‌های زیر را در اختبار ما قرار می‌دهد * توانایی اندزه گیری فرکانس یک الگو * توانابى ايجاد رايطه علت و معلولى بين الكوها. ‎٠‏ توانیی محاسبه سودمندی الگوها با مفایسه دفت آنها با حدس زدن تصادفی ‏نمونه هایی از کاربردها ‏کاوش قواعد وایستگی زمانی اننتفاده می شود که ما در تلاش برای پرزسی روایط علت و معولی بین متفیرهای مختلف یک مجموعه داده هستیم: در زیر نمونه سوالاتی است که می تواندبه نها کمک كنة: + کدام مقادیر رطویت, پوشش ابری و دما می تواند منجر به بارندگی فردا ‎Spa‏ ‏© چه توع ادعليى ‎a anu gl‏ تواند تشان دهنده تقلب باشد؟ © چه ترکییی از داروها ممکن است متجر به عوارض برای بیماران شود ‏تحليل سبد بازار 208 ‎ ‎

صفحه 213:
در این کتاب, موتورهای توصیه در فصل 8, الكوريتمهاى شبكه عصبى ,مورد بحث قرار گرفتهاند. تجزیه و تحلیل سبد يك راه ساده تر براى يادكيرى توصيه ها است. در تجزيه و تحليل سبد, دادههاى ما فقط حاوى اطلاعات مربوط به مواردى است كه با هم خریداری شده‌اند. هیچ اطلاعاتی در مورد کاربر با ينکهآا کاربر از صوارد واحد. لذت برده است یا خير ندارد. توجه داشته باشید که دریافت این داد‌ها بسیار آسان‌تر از دریافت داد‌های رتبه‌بندی است. برای مثال, اين نوع دادمها هنكام خريد از ۷۷۵10۵۲1 تولید می‌شوند و برای دریافت داده‌ها به تکنبک خاصی نباز نبست. این داده ها وفتی در یک دوره زمانی جمع آوری شوند, داده های فراملی نامیده می شوند. هنگامی که تجزیه و تحلیل فواعد وابستگی که برای مجموعه داده های فراملی از سیدهای خرید استفاده می شود. در فروشگاه های رفاه, سویرمارکت ها و زنجیره های فست فود استفاده شود. به آن تحليل سبد بازار مى كويند. احتمالي مشروط خرید مجموعه ای از اقلام را با هم اندازه گیری می کند که به پاسخ به سوالات زیر کمک می کند: جاى بهينه اقلام در قفسه جيست؟ اقلام جكوته بايد در کانالوگ بازاریابی ظاهر شوندک بر اساس الگوهای خرید کاربر, چه چیزی بايد توصيه شودک از آنجایی که تجزیه و تحلیل سبد بازار می تواند چگونگی ارتباط افلام با یکدیگر را تخمین بزند. اغلب برای خرده فروشی های انبوه ماننذ سوبرمارکت هاء فروشگاه های رفاه داروخاته ها و زنجیره های فست فود استفاده می شود. مزبت تجزی» و تحلیل سید بازار اين است كه تتیج تقریً توضیحی هستند. به این معتی که آنها به راحتی توسط کاربران تجاری قابل درک هستند. بیایید به یک ابرفروشگاه معمولی نگاه کنیم.تمام اقلام متحصر به فرد موجود در فروشگاه را می توان با یک مجموعه تشان دادء {item 1, item 2,..., item m } 209

صفحه 214:
بنابراين, اگر آن فروشگاه 500 کالای متمایز را بفروشد؛ ‏ مجموعه‌ای با اندازه 0 خواهد بود. افراد اقلامی را از اين فروشگاه خریداری می‌کنند. هر بار که شخصى كالابى را می‌خرد و در باجه پرداخت می‌کند. به مجموعه‌ای از اقلام در یک تراکنش خاص اضافه می‌شود که به آن مجموعه اقلام می‌گویند. در یک بازه زمانی معین, تراکنش‌ها در مجموعه‌ای با هم به نام خ#۵گروه‌بندی می‌شوند که به صورت. زیر می باشد: ‎A= (t1t2,....tn}‏ بیییدبه داده های تراکنش ساده زیر که فقط از چهار تراکنش تشکیل شده است. نگاه کنیم. این تراکتش ها در جدول زیر خلاصه شده است: 1 ویکت, بد 2 عصاء ویکت , ‎say‏ كلاه أيمنى 3 کلاهایمتی, توب 4] عصاء بدء كلاه ايمتى بيابيد به اين مثال با جزتيات بيشترى نكاه كنيم: ‎n= {bat , wickets, pads, helmet, ball },‏ که همه موارد متحصر به فرد موجود در فروشگاه را نشان می دهد. پایید یکی از تراکنش های 13 از ۵را در نظر بگیریم. توجه داشته باشید که افلام خریداری شده در 13 را می توان در -116050103 168,5811©) نشان داد كه نشان مى دهد مشتری دو کال را خریداری کرده است. از آنجایی که دو آنتم در اين مجموعه وجود دارد. اندازه مجموع افلام 3 »ذو مى باشد. ‎0 ‎ ‎

صفحه 215:
فواعد وایستگی یک فاعده وابستگی به صورت ریاضی اقلام رابطه درگیر در تراکتنش های مختلف را توصيف مى كند. اين كار را يا برزسى رابطه بين دو مجموعه آیتم به شکل 6( ل <-, كه در آن )2 2 د و۷ 2 2 انجام می دهد. علاوه بر اين: لا و ۷ مجموعة آیتم‌هایی هستند که همپوشانی ندارند. که به اين معنی است که 1] [۲ - 2 یک فاعده وابستگی را می توان به شکل زیر توصیف کرد ‎{helmet, balis}=> {bike}‏ در اينجا ‎jely {ball} 9 Xl {helmet ball}‏ ۷ است. انواع فواعد اجرای الگوریتم‌های تحلیل وابستگی معمولاًمنجر به تولید تعداد زیادی فاعده از مجموعه داده‌های تراکنش می‌شود. اکثر آنها بی فایده هستند. برای انتخاب فواعدی که می توانندبه اطلاعات مفیدی منجر شوند. می تونیمآنها را به عنوان یکی از سه توع زیر طبقه بندى كنيم: ‎٠‏ بى أهميت ‏۶ غير قابل توضيح ‎٠‏ قابل اقدام ‎ ‎

صفحه 216:
بياييد هر یک از اين انواع را با جزئیات بیشتری بررسی کنیم. فواعد بی اهمیت در میانتعدادزیادی از قواعد تولید شده, پسیری از فواعدی که مشتق شدهاند بىفايده خواهند يود زيرا دانش رابع در مورد تجارت را خلاصه می‌کنند. به آنها قواعد بی اهمیت می گویند. حتی اگر اعتماد به فواعد بی اهمیت بالا باشد. آنها بی فایده باقی می مانند و نمی توان از آنها برای تصمیم گیری های مبتنی بر داده استتفاذ کرد: ما ‎cos‏ توابیم با یال زاخت همه لواعذ ین اهمیت زرا تاذیند بگيرنم. موارد زیر نمونههایی از فواعد بی اهمیت هستن ‎٠»‏ هرکسی که از یک ساختمان پلند برد احتال می میرد ‏* تلاش بيشتر منجر به كسب نمرات بهتر در امتحانات مى شود ‏۰ با کاهش دم فروش بخاری افزایش می پاید ‏* رانندگی با خودرو با سرعت غیرمجاز در بزرگراه منجر به افزایش احتمال ‏تاذ یت نو ‏فواعد غیر فابل توضیح در ميان فواعدی که پس از اجرای الگوریتم قواعد وابستگی ایجاد می‌شوند. مواردی هستند که توضیح واضحی ندارند و جز پیچیده‌ترین آنها هستند. توجه داشته باشيد كه یک فاعده تنها زمانی می‌تواند مفید باشد که بتواند به ما در کشف و درک الگوی جدیدی کمک کند که انتظار می‌رود در نهایت به یک مسیر عمل معین متجر شود. اگر ایتطور تیست, و ما تمی توانیم توضیح دهیم که چرا رویداد لا منجر به رویداد ۷ شده است. پس این یک قاعده غیرقابل توضیح است, زیرا این فقط یک ‏فرمتول ریاضن اسنت که:در تهایت بنه بررسی رایطه بی معتی بین:دو رویداد ‎az ‎ ‎

صفحه 217:
غیرمرتبط و مستقل می شود. نمونه هایی از قواعد غیرقابل توضیح به صورت زیر ۶ آفرادی که تپیزاهن:فرمر:می:پوشنه دز آمتحانات:نمزه بهیزی میا گید * دوجرخه هاى سبز رنك بيشتر به سرفت می روند + افرادی که ترشی مى خرند در نهايت يوشك هم مى خرند. قواعد فابل اجرا فواعد فابل اجرا قواعد طلابى هستند كه ما به دنيال آن هستيم. آنها توسط تجارت درک مي شوند و متجر به بینش مي شوند. آننها مىتوانتد به ما در زمان ارائه علل احتمالى يى رویدادی که کشف شده به مخاطبنی آشتا با حوزه کسب‌وکار كمى كتدد - ببراى مثال. قواعد قابل اجرا ممکن است بهترین مکان را در یک فروشگاه برای یک محصول خاص بر اساس الگوهای خرید فعلی پیشنهاد کنند.آنها همچنین ممکن است پیشنهاد دهند که کدام افلام را در کنار هم فراردهند تا شانس فروش آنها را به حداکتر پرسانند زیرا کاربران تمیل دار آنها را با هم بخرند.موارد زیر تموته هایی از قواعد فابل اجرا و اقدامات مربوط به آنهاهستد فاعده 1: نمایش تبلیغات در حساب های رسانه های اجتماعی کاربران احتمال فروش را بيشتر مى كند. آيتم قابل اجزا: راه هاى جايكزين يراى تبليغ يك مخضول را ييشتهاد مى كنة قاعده 2: ایجاد تقاط قیمت پیشتر, احتمال فروش را افزایش می دهد آیتمقابلاجرا: ممکن است یک کالا در یک فروش تبیغ شنودد در حالی که قیمث کالای ديكر افزايش يابد. فواعد رتبه بندی 23

صفحه 218:
قواعد وایستگی به سه روش اندازه گیری می شوند: ۶ پشتیبانی (فرکانس) موارد ۰ اطمینان ‎٠‏ ترفيع بيابيد يا جزئیات بیشتری به آنْها نكاه كنيم. پشتیبانی اندازهگیری پشتیبانی, عددی است که میزان تکرار الگوی مورد نظر ما در مجموعه داده را محاسیه می‌کند. با شمارش تعداد رخدادهای الگوی علاقه ما و سپس تقسیم آن بز تعداد کل همه تراکنش هاء محاسبه می شود بیايیند به فرمنول زیتر ‎sly‏ یک آیتم خاص نگاه كنيم: / ‏تعداد تراکنش‌هایی که حاوی /۱۵0956/9007(/۵/۵/ هستند‎ > numitemseta ‏تعداد کل تراکنش‌ها‎ ۱ numItemset, support(itemset, ) = ‏تسس‎ ‎NUMEotal تنها با نگاه کردن به پشتیبانی, می‌توانیم تصور کنیم که وفوع يك الكو جقدر نادر است. پشتیبنی کم به این معنی است که ما به دبال یک رویدا نادر هستیم. برای منال. اگر ‎uuiSLs 99 5» itemseta = {helmet, ball}‏ از شش تراکنش ظاهر می‌شود. پشتیانی برابر است با: 0.33 < 2/6 = ) ‎support(itemseta‏ au

صفحه 219:
اطمینان اطمینان عددی است که با محاسبه احتمال شرطی تشان می دهد که چقدر می تواتيم سمت جب () را با سمت راست (۷) مرتبط کنیم. این احتمال را محاسبه می کند که رویداد ‏ به رویداد ۷ منجر شود, با توجه به اینکه رویداد لأ رع دادم است. از نظز ریاضی, فانون ۷ <* 1 را در نظر بگیرید. اطمینان این قاعده به صورت (۷ << 6 ) 600688100 نشان داده می شود و به صورت زیر اندازه گیری می شود: support(X UY confidence(X => Y) = ssupport(X WY) support(X) ‏اد به یک مثال نگاه کنیم. قاعده زیر را در نظر بگیریدد‎ {helmet, ball} => {wickets} اطمینان این قاعده با فرمول زیر محاسبه می شود support{ helmet, ball wickets) com fidence helmet, ball > wicket) = ee ‏دی‎ این به اين معتی است که اگر شخصی (کلاه, توب) را در سید داشته باشد. احتمال 0.5 با 50 درصد وجود دارد که ویکت هایی نیز برای همراهی با آن داشته باشد. ترفيع as

صفحه 220:
روش ‎Sead poseable SM‏ قعدم:محاسسبهمزفیع سس عرقي عدوي برمی‌گرداند که نشان می‌دهد چقذر پیشرفت با یک فاغده در پیش‌بینی نتیچه در امقايسد يا فزن كترون سيج عتمت راستت :معادله حاصل :سده اسیه: اگر: مجموعه آیتم های )( و ۷ مستقل باشند. آنگاه ترفیع به صورت زیر محاسبه می شود 17ل )2 810 ‎__eupport(X UY)‏ - (۷ ج ‎Lift(X‏ ‎support(X) x support(Y)‏ الگوریتم های تجزیه و تحلبل وایستگی در اين بخش, دو الكوريتم زير را بررسى خواهيم كرد كه مىتوانشد یرای تجزبه و تحلیل وابستگی مورد استفادهقرار گید * الگوریتم ۸۵:1051: پيشنهاد شده توسط ۶ ‎JLu 42 Srikant 5 Agrawal.‏ 1994 ‎:FP-Growth pingSll ٠‏ بهبود بيشتهاد شده توسط هان و همکاران. در سال 2001 ‏بياييد به هر يك از اين الكوريتم ها نكاه كنيم. ‏الگوریتم ۸0:0۲ ‏الگوریتم 21071 یک الگوریتم تکراری و چند فازی است که برای تولبد فواعد وایستگی استفاده می شود. اين الگوریتم مبتتى بر رویکرد تولید و آزمایش است. قبل از اجراى الكوريتم 3010911 ‎٠‏ بايد دو متغير رأ تعریف کنیم ‏آستاته حمايت و آستانه اطمينان. الكوريتم از دو مرحله زير تشكيل شده است: ‎26 ‎ ‎

صفحه 221:
مرحله تولید کاندید: مجموعه آتم‌های کات د را تولید می‌کد که شامل سياس يزجي تجنوعه هاق آرنم بالاتراز آتفانه حمازنت زیت مرحله فيلتر: تمام فواعد بابين تر از ستانهاطمینان مورد انتظار را فيلتر مى كند. پس از فبلتر کردن. فواعد حاصل پاسخگو هستند محدودیت های الگوریتم 20۳0 گلوگاه اصلی در الگوریتم 30101 : تولید قواعد کاندید در فاز 1 است - برای مثال. ‎n= {item 1, item2,..., itemm }‏ مى تواند 2"مجموعه آيتم ممكن را توليد كند. به دليل طراحی چند فازی خود. ادا اين مجموعه آيتم ها را توليد فى كند و سپس به سمت یافتن مجموعه آیتم های تكرار شونده كار مى كند. اين محدوديت يك تتكناى عملكرد بزرك است و الكوريتم ييشينى را براق موَارد يزركتر نامناسب مى كتد. ‏الگورینم رشد ۴۴ ‏الگوریتم رشد الگوی تکرارشونده (۴۳-9۲۵۷۷۸۸۱) بهسودی در الگوریتم ۵0۲1011 است با تشان دادن تراکنش تکرارشونده ۶۴:4:86 , که یک درفت مرتب شده است, شروع می شود. از دو مرحله تشکیل شده است: ‏> پر کردن درخت ۶ ‏۰ استخراج الگوهای تکرارشونده ابید اي مراحل را یکی یکی پررسی كنيم. ‎ ‎

صفحه 222:
پر کردن درحت ‎FP‏ یی داده های تراکنش نشان داده شده در جدول زیر را در نظر بگيریم. یایند ايتدا آن را به عنوان يك ماتريس براكنده نشان دهيم: 1۳ Bat ۱۳625 ۳505 ——] Hemet 7 1 5 1 1 5 5 2 T T T T 1 3 ۲ ۲ ۲ T T 7 T 5 1 1 5 ييابيد فركانس هر مورد را محاسبه كرده و آنها را به ترتيب نزولى فركانس مرتب كنيم ‎Tem Frequency‏ pads helmet bat 7 WICKET all T حالا بياييد داده هاى مبتنى بر تراكنش را بر اساس فراوانى مرتب كنيم: 8 Original ems Reordered Weems 1 Wickes, pads Pads, wickets 2 Bat, wickets, pads, Helmet, pads, helmet wickets, bat 2 Helmet, ball Helmet, ball Bat, pads, helmet | Helmet, pads, bat ne

صفحه 223:
برای ساحت ۳۵۵7۵۵, اجازه دهید با اولین شاخه از ۴۴۰۸۲۵۵ شروع کنیم. ۴۴۰ ‎Null SL tree‏ به عنوان ريشه شروع می شود. برای ساخت درخت. می توانیم هر مورد را با یک گره تشان دهیم, همانطور که در تصودار زیر نشان داده شده است (نمایش درخث 11 در اینجا تشان داده شده است). توجه داشته باشید که برچسب هر گره نام مورد است و فرکانس آن بعد از کولون اضافه شده است. همچنین توجه داشته باشید که ‎pads aul‏ دارای فرکانس 1 است: شکل 12-6: مثالی از روش پر کردن ۴۶ با استفاده از انگوی یکسان, هر چهار تراکنش را ترسیم می کنیم و در تیجه درخت ۴۴ کامل می شود. ۴۴۰۱۶۵6 دارای چهار گره برگ است که هر کدام مجموعه افلام مرتبط با چهارتراکتش را نشان می دهد. توچه داشته باشید که ما بايد فركانس هاى هر آيتم را بشماريم و در صورت استفاده جندین بار بايد آن را افزايش دهيم - به عنوان مثال. هنكام اضافه كردن 2] به 66,]م5. فركانس كلاه 29

صفحه 224:
ایمنی به دو افزایش یافت. به همین ترتیب, با اضافه کردن :۸4 دوباره به سه افزایش یافت. درخت حاصل در نمودار زیر نشان داده شده است: © 3 © م 222° Lit» شکل 13-6: ‎FP-tree jl ule‏ توجه داشته باشید که ۴۴-۷۲۵۵ تولید شده در نمودار قبلی یک درخت مرتب شده کاوش الگوهای تکرارشونده مرحله دوم درخت رشد ۴ شامل کاوش الگوهای تکرارشونده از درخت ۴6 است. با ایجاد یک درخت مرتب شده, هدف ایجاد یک ساختار داده کارآمد است که به راحتی بتوان برای جستجوی الگوهای تکرارشونده پیمایش کرد. ما از یک گره برگ (یعنی گره انتهایی) شروع می کنیم و به سعت بالا حرکت می کنیم - به عنوان مثال: اجازه دهید از یکی از اقلام گره برگ, 9 شروع کنیم. سپس باید پایه الگوی شرطی ۵2 را محاسبه کنیم. پایه الگوی شرطی با مشخص کردن تمام 220

صفحه 225:
مسیرها از گره آیتم برگ به بالا محاسبه می شود. پابه الگوی شرطی ‎bat‏ به صورت زیر خواهد بود: Wicket: 1 Pads: 1 Helmet: 1 Pad: 1 Helmet: 1 الگوی تکرارشونده ]9 به شرح زیر خواهد بود ‎{wicket, pads, helmet} : bat{pad.helmet} : bat‏ كد برنامه ‎FP-growth j1 oslaiul sly‏ بيابيد ببيتيم جكوته می‌توانیم فواعد وابستگی را با استفاده از الگوریتم رشد ۴ در پایتون ايجاد كنيم. براى اين كار از بسته ‎pyfpgrowth‏ استفاده خواهیم کرد. ابتدا: ‎pyfpgrowth 31 Ls 1‏ استفاده تكردهايم, ابتدا آن رأ نصب مىكنيم: ‎pyfpgrowth‏ 11فعومة متم ‎ ‏سپس, بیابید بسته هایی را که باید برای پیاده سازی این الگوریتم استفاده کنیم. وارد کنم: ‎import pandas as pd import numpy as np import pyfpgrowth as fp ‏اکنون داده های ورودی را در قالب 1730526108561 ايجاد مى كنيم: { = ان ‎id" :10,1,2,31, ‎“items' : [["wickets", "pads"], ‎"bat", "wickets","pads", "helmet"], ‎ ‎2a ‎ ‎

صفحه 226:
["helmet", "pad" ], ["bat", "pads", "helmet" }] 1 transactionSet = pd.DataFrame(dict1) هنگامی که داده‌های ورودی تولید شدند. الگوهایی را تولید می‌کنيم که بر اساس پارامترهایی است که ‎frequent patterns() a‏ 18۵ ارسال کرده‌ايم. توجه داشته باشید که پارامتر دوم ارسال شده به اين تایع. حدافل پشتیبانی است که در اين مورد 1 است: ‎patterns =‏ ‎fp.find_frequent_patterns(transactionSet[' items'],1)‏ الگوها ایجاد شده است. حالا بباييد الكوها را جاب كنيم. الكوهاء تركيبى از افلام را با يشتيبانى آنها فهرست مى کند 22

صفحه 227:
patterns {('pad',) (Chetmet*, ‘pad"): 1, (Cwickets',): 2, (‘pads", 'wickets"): 2, (*bat', “‘wickets"): 1, (chelmet", ‘wickets"): 1, (bat', ‘pads*, ‘wickets*): 1, (Chelmet", ‘pads’, ‘wickets')! 1, (‘bat', thelmet’,’ ‘wickets"): 1, (ibat', ‘helmet’, ‘pads', ‘wickets'): 1, (at's): 2, (bat', thelmet*): 2, (bat', ‘pads*): 2, ‎thelmet’, ‘pads'): 2,‏ ره ‎(pads‘,): 3,‏ ‎(hetmet',):°3, ‎ ‎(Chelmet", ‘pads*): 2) ‏حالا بياييد فواعد را ايجاد كنيم' ‎223 ‎In [39]: out [39] ‎ ‎

صفحه 228:
In [22]: rules = fp.generate association rules(patterns,0.3) rules ut(22}: {(*hetmet',): (('pads',), 0, 6666666666666666) pad.) :"(('hetmet },'1.8), (pads',): (("helnet', }, 8. 6665686565656560) , (wickets’,): (('bat'; ‘heimet*, 'pads'), 8.5) (bat',): (Chetmet',"*pads'), 1.0), (bats ‘pads'): (('hetmet',), 1:0), ‏ره‎ ‘wickets'): ((Chetmet’, “pads"), 1.0), (pads', “wickets'): (("bat', thelmet'); 0.5); (hetmet',"'pads'): ((*bat',}, 1.6), (hetmet') ‘wickets'): (('bat!, “pads'), 1.0), (bat', “hetmet'): ((%pads",),"2.0), ‏ره‎ *hetmet', ‘pads'): (('wickets*,), @.5) (*bat!; shelmet'; ‘wickets'): (("pads',), 1:8), (ibat'; ‘pads', ‘wickets'): ((*hetmet',), 1:0), Chetmet", "pads", "wickets'): ((*bat’,), 1.8)} هر فاعده دارای یک سمت چپ و یک سمت راست است که با دو نقطه (:) از هم جدا شده اند. همچنین از هر یک از فواعد موجود در مجموعه داده ورودی ما پشتیبانی می کند. کاربرد عملی - خوشه بندی توبیت های مشایه با هم لگوریتم‌های یادگیری ماشینی بدون نظارت نیز می‌توانشد در زصان بلادرنگ برای خوشه‌بندی توییت‌های مشابه با هم استفاده شوند. آنها کارهای زیر را انجام خواهند داد مرحله 1- مدل سازی موضوع: موضوعات مختلف را از مجموعه ای از توبیت ها کشف می کند مرحله 2- خوشه بندی: هر یک از توبیت ها را با یکی از موضوعات کشف شده مزتیظ می کند این استفاده از یادگیری بدون تظارت در نمودار زیر تشان داده شده است: 224

صفحه 229:
js unsupervised Learning ۳ Tweets ‏نت‎ شکل 14-6: خوشه بندی توئیت ها توجه داشته باشید که اين مثال به پردازش بلادرنگ داده های ورودی نباز دارد. بياييد ابن مراحل را يكى يكى بررسى كنيم. مدل سازی موضوع مدل‌سازی موشوع:فرآیند کشف مقاهیم در مچموعه‌ای از استاد است که می‌توان از نها بای متمایز ساختن آنها استفاده کرد. در زمبنه توئبت هاء در ورد یافتن مناسب ترین موضوعاتی است که مجموعه ای از توییت ها را می توان در آنها تقسیم کرد. تخصبص 12/0116 12128 یک الگوربتم محبوب است که برای مدل سازی موضوع استفاده می شود. از آجایی که هر یک از تویت‌ها سند کوتاه 144 کاراکتری هستند که معمولً در مورد یک موضوع خاص هستند, مىتوانيم الكوريتم ساده‌تری برای اهداف مدل‌سازی موضوع بنویسیم. الگوریتم به شرح زیر است: 1. توبيت ها را توكن سازى كنيد 2 داده ها را لز قبل بردازش كنية, كلية وازه هاء اغداذ: تماذهنا زا حذف كنية و ‎ooking‏ کند. 3 یک ‎Term-Document-Matrix. (TDM)‏ برای توت ها أيجاد كنيد. 200 كلمه برتر را که بيشتر در توبيت هاى منحصر به فرد ظاهر مى شوند, تخاب کنید 225

صفحه 230:
4 20 کلمه برتر را تخاب کنید که به طور مستقیم یا غیرمستقیم یک مفهوم یا یک موضوع را نشان مى دهد. به عنوان مثال مد,نیوبورک, برنمه نوسی, تصادف. این 10 کلمه اکنون موضوعانی هستند که ما با موفقیت کشف کرده آیم وب مراکز خوشه ای برای توبیت ها تبدیل می شوند. بیایید به مرحله بعدی که خوشه بندی است برویم. خوشه بندی هنگامی که موضوعات را کشف کردیم. آنها را به عنوان مركز خوشه تخاب می کنیم. سپس می‌توایم الگوریتم خوشه‌بندی ۰۳۲۵۵86 را اجزاکیم که هر یک از تویت‌ها را ه یکی از مراکز خوشه‌ها اختصاص می‌دهد. بناباین, این یک مثال کاربردی است که چگونه مجموته‌ای از تویت‌ها را می‌توان در موضوعات کشف کرد الگوریتم های تشخیص ناهنجاری تعریف فرهنگ لغت از ناهنجاری چیزی است که متفاوت, غیرعادی, عجیب و غریب باشد با بهراحتی طبقه بندی نمی شود انحراف از فاعده رایع است. در زمینه علم داده,ناهنجاری نقطه داده ای است که بسیار از الگوی مورد انتظار منحرف می شود. نکنیک‌های بافتن چنین نقاط داده‌ای را تکنیک‌های تشخیص ناهنجاری می‌نامند. حال اجازه دهید برخی از کاربردهای الگوریت‌های تشخیص ناهنجاری رأ ببينيم: ‎٠‏ کلاهبرداری در کارت اعتباری ‏* یافتن تومور بدخیم در اسکن رزونانس مغناطیسی ‎(MRI)‏ ‏* بيشكيرى از خطا در خوشه ها ‎٠‏ جعل هويت ذر امتحانات ‏۰ تصادفات در بزرگراه در بخش های آینده, تکنیک های مختلف تشخیص ناهنجاری را مشاهده خواهیم کرد ‎226 ‎ ‎

صفحه 231:
استفاده از خوشه بندی الكمريمر عاق عريسه عدى تأنه ممم صر من زان يرقة قروم ی شابن مشابه با هم استفاده کرد. یک آستانه را می توان تعریف کرد و هر نفطه فراتر از آن آستانه را می توان به عنوان یک ناهنجاری طبقه بندی کرد. مشکل این رویک‌رد این است که گروه‌بندی ایچاد شده توسط خوشه‌بندی 1۰۳06۵05 ممکن است خود ‎wale bol Ig sy DUR‏ ۱ سودمندی و دفت رویکرد تأثير بكذارد. استفاده از تشخیص ناهنجاری مبتنی بر تراکم يك رويكرد مبتنى بر تراكم سعى مىكند همسايكيهاى متراكم را بيدا كند. براى اين منظور می توان از الگوریتم ‏ تزديكترين همسايه (/001) استفاده كرد. تاهنجارى هابى كه از همسايكبهاى متراكم كشف شده دور هستند به عنوان تاهنجارى علامتكذارى مى شوتد. استفاده از ماشین های بردار پشتیبان الگوریتم ماشین بردار پشتییان (5۷۸) می تواند برای یادگیری مرزهای نقاط داده استفاده شود. هر نقطه ای فراتر از مرزهای کشف شده به عنوان ناهنجاری شناسایی می شود. خلاسه در اين فصل, ما به تکنیک های مختلف یادگیری ماشین بدون نظارت نگاه کردیم. فا به سرایطن:نگاه کردیم که:دز آن ایدخ خوین است كه عن کبیم ‎alba aL‏ أى را كه مى خوافيم حل كنيم و روش هاى مختلف انجام اين کار را کاهش دهیم. ما همچتین نمونه‌های عملی را مطالعه کردیم که در آن تکنیک‌های یادگیری ماشینی بدون نظارت مىتوانند بسبار مفيد باشند. از جمله تجزیه و تحلیل سید بازار و 227

صفحه 232:
تشخیص ناهنجاری‌ها. در فصل بعدی, به تکنیک‌های مختلف یادگیری با نظارت نگاه خواهیم کرد. ما با رگرسیون خطی شروع مي‌کنيم و سپس به تکنیک‌های پیچیده‌تر يادكيرى ماشين با نظارت, مانند الكوريتمهاى ميتنى بر درخت تصميم 5۷11 و 50 خواهيم برداخت. ما همجنين الكوريتم بيز ساده را مطالعه خواهيم كرد كه ‎aby‏ داده هاى متنى بدون ساختار مناسب است. 7 الگوریتم سنتی یادگیری با نظارت "هوش مصنوعی, برق جدید است.* -آندرو نگ در اين فصل بر روى الگوربتم هایبادگیری ماشینی با نظارت تمرکز خواهیم کرد که یکی از مهم ترين انواع الكوريتم هاى مدرن هستند. ويزكى متمايز يك الكوريتم یادگیری ماشینی با نظارت , استفاده از داده های برچسب گذاری شده برای 228

صفحه 233:
آموزش یک مدل است. در اين فصل, ما تمام الگوریت‌های بادگیری ماشینی با نظارت , به استنای شبکه‌های عصبی را ارائه می‌کنيم. سه فصل بعدی همه در موردبیاده سازی الگوریتم های یادگیری ماشین با تظارت با استفاده از شبکه های عصیی است. حقیقت اين است که با پیشرفت بسیار زید در اي زمینه, شبکه‌های عصبی موضوعی جامع هستند که به پیش از یک فصل برای بحث ‎dal‏ نباز دارند. در اين فصل ابتدا مفاهیم اساسی یادگیری ماشین با نظارت را معرفی می‌کنيم. دز مرحله بفد. ما دونوع مدل ماشین با نظارت را ارئه خواهیم کرد - طبقه بند ها و ركرسيونها. به منظور نشان دادن توانایی های طبقه بند هاء ابتدا یک مسئله دنبای وافعی را بهعنوان یک چالش ارائه می کنیم. سپس, شش الگوریتم طقه بندی مختلف را ارائه حواهیم کرد که برای حل یک مسئله استفاده می شوند. در مرحل» بعد.اتدا بر روی الگوریتم های رگرسیون تمرکز می کنیم و در ابتدا با ارائه یک مسئله مشایه که برای رگرسیون ها حل مي شود. ادامه خواهیم داد. سپس سه الكوريتم ركرسيون را ارائه مى كنيم و از آنها براى حل همان مستله استفاده می كنيم. در تهايت. ما نتابج را با هم مقايسه خواهيم كرد تا به ما كمك كند مفاهيم ارائه شده در اين فصل را خلاصه كنيم. هدف كلى اين فصل اين است كه شما انواع مختلف تكنيك هاى يادكيرى ماشينى با نظارت را درك كنيد و بدانيد كه بهترين تكنيك هاى يادكيرى ماشينى با تظارت براى كلاس هاى خاص كدام است. مفاهيم زير در اين فصل مورد بحث قرار مى كيرد: * درک يادكيرى ماشين با نظارت * آشتابى يا الكوريتم هاى طبفه بندی * روش هاى ارزيابى عملكرد طيقه بند ها + آشتابى با الكوريتم هاى ركرسيون * روش هاى ارزيابى عملكرد الكوريتم هاى ركرسيون ينابية يا نكاهى به مفاهيم اساسى ياذكيرى ماشين با نظارت شروع کنیم. درك يادكيرى ماشين با نظارت 229

صفحه 234:
ورد مآفتین ی استفاده از رو‌گردهاق داده محور بای یج سیسعم‌های مستقلی متمرکز است که می‌تواند به ما در تصمیم‌گیری با با بدون نطارت اسان کمک کند: پترای ایجاد این سینتتم‌های منتععل: ینادگیری ماسین از گنزوهن ار الكوريتمها و مندولوژی‌هابرای کشف و فرمول‌بندیالگوهای تکراریذیر در دده‌ها استفاده می‌کند. یکی از محبوب ترین و قدرتمندترین مندولوژی های مورد استفاده در یادگیری ماشینی, رویکرد یادگیری ماشین با تظارت است. در یادگیری ماشین با نظارت , به یک الگوریتم ,مجموعه‌ای از ورودی‌ها داده می‌شود که ویژگی‌ها نامیده می‌شوند و خروجی‌های مربوط به آن‌ها به نام برچسب‌ها نیز داده می شود. با استفاده از یک مجموعه داده ی داده شده, از یک الگوریتم یادگیری ماشین با نظارت برای آموزش م دلی استفاده می‌شود که رابطه پیچیده بین ویژگی‌ها و برچسب‌های نشان‌داده‌شده توسط یک فرمول ریاضی را نشان می‌دهد. اين مدل ‎gape‏ دیده:تونیلهآوایه: ای سس كته ری رای زین پدنیها اتتفاده مت شتود توانایی یادگیری از داده های موجود در بادگیری با نظارت مشابه تواتابی معز انسان بزای یادگیری از تجربه است: این توانایی یادگیری دز یادگیزی با نظارت از یکی از ویژگی های مفز انسان استفاده مى كند و راهی اساسی برای باز كردن دروازه ها براي آوردن قدرت تصميم كيرى و هوش به ماشين ها است. بياييد مثالى رادر نظر بكيريم كه در آن مى خواهيم از تكنيك هاى يادكيرى ماشينى با نظارت براف آموزنش استفاده کننم, مدلی که می تواند مجموعه ای از ال ها زاب ايميل هاى مجاز (به نام قانونى) و ناخواسته (به نام هرزنامه) دسته بندی کند. ابتدا, برای شروع, به نمونه‌هایی از گذشته نیاز داریم تا دستگاه یاد بگیرد که چه نوع محتوابى از ايميلها بايد به عنوان هرزنامه طبقهبتدى شود این وطیفه یادگیری مبتنی بر محتوا برای داده‌های متتی یک فرآیند پیچیده است و از طریق يكن ار الكورميساى ادگیزی ماشتیین با نظ ارت بنه دنت می‌آید:بتزهی أن نمونه‌هایی از الكوريتم ها يادكيرق ماشين با نظارت که می‌تونند برای آموزش مدل جر این فنال استفاده شتوند: شامل رخت‌های تصمیم‌گیزی: و طبقه‌بندهای ساده پیز هستند که بعداً ذر اين فصل به آنها خوأهيم برداخت. 230

صفحه 235:
فرمول بندی مسائل یادگیری ماشین با نظارت فبل از انکه به جزئیات الگوریتم‌های یادگیری ماشین با نظارت, به صورت عمیق‌تر بپردازیم. اجازه دهید برخی از اصطلاحات اصلی یادگیری ماشین با نظارت را تعریف کنیم: اصطلاحات برچسب ویژگی ها مهندسی ویژ" بردار ویژ" داده های تاریخی shel آموزش/آزمون مدل آموزش we ‏برچسب متقیری آست که می خواهیم مدل ما ,آن رآ پیش‎ ‏بینی کند. در مدل یادگیری ماشینی با نظارت فقط یک‎ Sil als Soy Gc ag ‏مجموعه آى آز متفيرهاى ورودى كه براى بيش بينى برجسب‎ ‏استفاده می شود, ويزكى ناميده مى شود‎ ‏تبیل ویزگی ها براي آماده سازى آنها براى الكوريتم بادكيرى‎ ‏ماشینی با نطارت انتخاب شده, مهندسى ويزكى تاميده مى‎ ‏شود‎ ‏قبل از آرائه ورودی به آلگوریتم بادگیری ماشیتی با نظارت.‎ ‏همه ویزگی ها در یک ساختازآدادج ینام بزداز زبژگی ترکیب‎ ‏می شوند‎ ‏دادههاى كذشته كه براى فرمول بتدى رآبطه بين برچسب و‎ ‏وتركننها استفادة مسويد: داده‌های تازیخی: تامیده:من‌شوند:‎ ‏داده های تریخی با مثال هایی همراه است.‎ ‏داههای تریق همراه با نمويه يدجو يعي سيم‎ ‏می‌شوند - یک مجموعه داده بزرگ‌تر به نام داده‌های آموزشی‎ ‏ویک مجموعه داده کوچک‌تر به نام داذه‌های آزمون.‎ قرمول رباصى آز الكوهالى كه به بهترین شكل رابطه بين" ‎sala‏ و مركت قار فان مب آیجادمدل با آستقادهآز ده های آموزتتی aa

صفحه 236:
آرمون آرزیابی گیقبت مدل آموزش دیده با استفاده از داده های آرمون. ‎aan‏ آستفاده آز مدل آموزش دیده برآی پیش بیتی برچسب ‎ ‏یک مدل یادگیزی هاشین با تظارت آموزش‌دینده می‌تواندبنا تخمین برچسب بر اساس ویژگی‌ها پیش‌بیتی کند.ببییدنمادی را که در اين فصل برای بحث در مور تکنیک‌های یادگیری مانشین استفاده خواهیم کرد. معرفی کنیم: ‏متیر 2 7 برچسب وآقعی ‎<I ‏برچسب بیش بیتی دم 8 تعداد کل نمونه ها ‏تعداد تموته های آمورتی ‏3 تعداد نمونه های آزمون ‏حال, بباییدبیتیم که چگونه برخی آز آين اصطلاحات به صورت عملی فرموله می شوند. همانطور که در مورد آن بحث کردیم؛ بردار وبژگی به عنوان ساختار داده ای تعریف می شود که تمام ویژگی های ذخیره شده در آن را دارد. اگر تعداد ‎ ‏ویژگی ها ۵ و تعداد مثال های آموزشی ۵ باشد, ۵10 )۱ بردار ویژگی آموزشی را نشان می دهد. برای مجموعه داده آموزشی, بردار ‎X train Ly Siig‏ نشان داده می شود. اگر نمونه های ا در مجموعه داده آموزشی وجود داشته باشد. ۸۷۵/8 ) ردیف ‎b sl‏ را خواهد داشت. ‏أكر © متغير وجود داشته باشد. سپس مجموعه داده آموزشی دارای بعد ۵ ۶ است. ما برای تشان دادن شماره ردیف یک مثال آموزشی از سرنویس استفاده می کنيم. اين: یک منال خاص در مجموعه داده برچسب‌گذاری شده ما با ( ‎(X(1), (1)) = (Features(1),label(1)‏ تشان داده می‌شود ‎22 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 237:
نابراین. مجموعه داده برچسب گذاری شده ما با ,((3001(01) = ‎D‏ ‎(X(d),y(d))}‏ ,((26)2(,۲۳)2) تشان داده ميشود. ما آن را به دو قسمت تقسیم می کتیم ‏ 7۵10اناو ا5ع۳.بنابرین؛ مجموعه آموزشی ما را می توان ‎Dtrain b‏ = ‎ X(O).9(O)‏ ...۰ ,(042()2 ,((24)1()1) تشان داد. هدف از آموزش یک مدل اين است كه برای هر مثال | در مجموعه آموزشی, مشدار یش‌ینی‌شده مقدار هدف بايذ نا خذ امکان به مقدار واقفی دز نمونه‌ها نزتیک باشد. به عبارت ‎whe ‎Dtest = {X(1),y(1)), ‏بنايراين. مجموعه آزمون مارا مى توان با‎ ‏,((3)2(,902)نشان داد. مقادير يرجسب با يك بردار نشان‎ ..... , )3),3)6(( ‎YY =f yD), ¥(2), one YOM} ‏داده مي شوند‎ ‏درک شرایط توانمندساز يادكيرى ماشينى با نظارت بر اساس توانابى بك الكوريتم براى آموزش يك مدل با استفاده از مثال ها است. یک الگوریتم یادگیری ماشینی با نظارت برای اجرا به شرایط تواتمتدسازی خاصی نباز دارد. این شرایط توانمندساز به شرح زیر است: مثال‌های کافی: الگوریتم‌های یادگیری ماشینی با نظارت به منال‌های کافی برای آموزش یک مدل نیاز دار ‏الگوها در داده‌های تاربخی: نمونه‌هایی که برای آموزش یک مدل استفاده می‌شوند باید دارای الگوهایی در آن باشند. احتمال وقوع رویداد مورد علاقه ما باید به تركيبى از الكوهاء روتدها و رویدادها بستگی داشته باشد. ‏بدون ایهء ما با داده های تصادفی رویرو هستیم که نمی تون از آنها براى آموزش یک مدل استفاده کرد. ‎22 ‎ ‎

صفحه 238:
مفروضات معتبر: وقتی یک مدل یادگیری ماشین با نظارت را با استفاده از مثال ها آموزش می دهیم.انتظار داریم که مفروضانی که در مورد نمونه ها اعمال می شود در آینده تیز معتبز باشتد: بيایید به یک متال واقعی نگاه کنیم: اگر بخواهیم یک مدل یادگیری ماشینی برای دولت آموزش دهیم كه بتواند احتمال اعطاى ويزا به دانشجو را پیش‌بینی کند. درک مسئله این است که وفتی از مدل برای بيش بين استفاده می‌شود. قوانین و سياست‌ها تغییر نخواهند کرد. اگر سياست‌ها با قوانین جدید پس از آموزش مدل اجرا شود. ممکن است مدل برای گنجاندن اين اطلاعات جدید نیاز به آموزش مجدد داشته باشد. تقاوت بین: طبقه بند: ها ی سیون ها در یک مدل یادگیزی فاشینی: برچسب مي تواند یک متفیر گسسته یا یک متغیر پیوسته باشد: توع پرچسب ‎use?‏ سن كند که فا چه نوع مدل یادگیری ماشیتی با نظارت را داریم. اساساًء ما ذو توع مدل یادگیری ماشیتی با نظارت داریم: طبقه‌بندها: اگر بزچسب یک متفیز گسسته باشد. مدل یادگیری ماشینی: طبقه‌بند. نامیده می‌شود. طبقه‌بندهامی‌تونند برای پاسخ به انواع سقالات تجاری زیر استفاده شون * آيا اين رشد غیرطییعی یافت یک تومور بدخیم استت؟ ۰ با توجه به شرایط جوی فعلی فردابران می پارد؟ * ير اساس مشخصات يك متقاضى خاص آبا بايد درخواست وام مسکن آنها Saga aul رگرسیون ها: اگر برچسب یک متفیر پیوسته باشد, یک رگرسیون را آموزش مي‌دهیم. از رگرسیون ها می تون برای پاسخ به انواع سوالات تجاری زیر استفاده کرد ‎causing gull yy ©‏ فغلی آب و هوا. فرداچقذر باران خواهذ ارند؟ ‏© قیمت یک خانه خاص با ویژگی های داده شده چقدر خواهد بود؟ ‏جر ‎ ‎

صفحه 239:
بیابید هر دو طبقه بند و رگرسیون را با جزئیات بیشتری بررسی کنیم. آشتابی با الگوریتم های طبقه بندی در یادگیری ماشین با نظارت, اگر برچسب یک متغیر گسسته باشد. مدل به عنوان یک طبه‌بندی شناخته می‌شودد داده های تاریخی را داده های برچسب دار می ‎sal‏ داده های تولیدی که برچسب باید برای ‎uy Lol‏ پینی شود؛ داده های بدون برچسب تامیده می شوند. تواتایی برچسب‌گذاری دقیق داده‌های بدون برچسب با استفاده از یک مدل آموزش‌دیده, قدرت وافعی الگوریتمهای طبقه‌بندی است. طبقه‌بندها برچسب‌هایی را برای داده‌های بدون برچسب پیش‌پینی می‌کنند تا به یک سوال تجاری خاص پاسخ دهند. قبل از ارائه جزئیات الگوریتم‌های طبقه‌بندی, اجاژه دهید ابتدا یک مسئله تجاری ارائه کنیم که از آن به عنوان چالشی برای طبفه‌بندها استفاده خواهیم کرد. ما سپس از شش الگوریتم مختلف برای باسخ به یک چالش استفاده خواهیم کرد که به ما در مقایسه روش شناسی, رویکرد و عملکرد آتها کمک مي ‎US‏ ارائه چالش طبفه بند ها ابتدا يك مسئله رايج را ارائه خواهيم كرد كه از آن به عنوان چالشی برای آزم ایش شش الگوریتم طبقه بندی مختلف استفاده خواهیم کرد. از اين مسئله رایج در اين فصل به عنوان چالش طبقه بند یاد می شود. استفاده از تمام شش طبقه‌بند بنرای حل یک مسئله به دو رون به ما مک می‌کند: تمام متغيرهاى ورودى بايد به عنوان يك ساختار داده بيجيده پردازش و جمع آوری شوند که بردار ویژگی نامیده مي شود. استفاده از بردار ویژگی یکسان به ما کمک مى كند از تكرار آماده سازى داده براى هر شش الكوريتم جلوكيرى كنيم. 235

صفحه 240:
ما می‌توانیم عملکرد الگوریتم‌های مختلف را با دقت مقایسه کنیم زیرا از همان بردار ويزكى براى ورودی استفاده مىكنيم. چالمش: طبقهبندها جر موز پیش بیی احتمال فرید شفسی آست؛ دز ضتعت خر فروشی, یکی از مواردی که می تواند به حداكثر فروش كمك كند. درك بهتر رفتار مشتريان است. اين كار را مى توان با تجزيه و تخليل الكوهاى موجود در داده هاى تاریخی انجام داد. بيابيد ايتدا مسئله را يبان كنيم. بيان مسئله با توجه به داده‌های تاریخی, آیا می‌تواتیم یک طبقه‌بند دودوبی آموزش دهیم که بتواند بيش بينى كند که آيا یک کاربر خاص در تهایت محصولی را بر اساس بروفایل خود خریداری می‌کند؟ ابتدا, ید مجموعه داده‌های برچسب‌گذاری شده تاریخی موجود برای حل اين مسئله را بررسی کنیم:(0,1 ) 6 17 7۰ 6 ابراى مثالى خاص, وقتی 1 > بء آن را کلاس مثبت می نامیم و زمانی که 0 = ‎WSL Ty‏ منفی می نامیم. اگرچه سطح کلاس مثبت و متفی را می توان خودسرانهانتخاب کرد. اما خوب است تمرين كنيد تنا کلاس مثبت را به عنوان رویداد مورد علافه تعریف کنید.اگر می‌خواهیم تراکتش متقلانه را برای یک بانک علامت‌گذاری کنیم: كلاس مثبت (يعنى 1 > ) باید تراکنش متقلبانه باشد. نه برعكس. حال بياييد يه موارد زير نكاه كنيم: برجسب واقعى كه يا لا مشخص شده است برچسب پیش بینی ‎"YL oad‏ تشان داده شده است. توجه داشته باشید که برای چالش طبقه‌بند ماء مقدار وافعی برچسب موجود در مثال‌ها با نمايش داده مىشود. اكر در مثال ما شخصی کالایی را خریداری کرده باشد: مق گونیم ویژگی ورودی ۶ درای ابعد 4 است. می‌خواهیم تعیین کنیم که با توجه به یک ورودی خاص, احتمال خرید کاربر چقدر است. بنابراین. می‌خواهیم احتمال 1 ح > ل[. مقادير بيش بینی شده با و" نشان داده می شوند. بردار 236

صفحه 241:
را موجه مه سقداز غای بردار وبژگن > ببايیم:آز مطر ریاستی: من -توایم ین مورد را به صورت زیر نان دهیم: y = Ply =1|zx) : 6۲ 6937 حال, بياييد ببينيم جكونه مئتوانيم متغيرهاى ورودی مختلف را در بردار ویژگی ‎1X‏ ‏پردازش و جمع آوری کنیم. روش جمع آوری قطعات مختلف ‏ با استفاده از خط لوله پردازش با جزئیات بيشتر در بخش زیر مورد بحث قرار گرفته است. هدشن وکین با ‎Sb WES spl Bue‏ آماده:ضازی داده:ها بزای الگوزییم یادگیزی ماسین:انتخاب: سده: مهیدستی ویزگن نامیده می شود و بخش مهمی از چرخه زندگی یادگیری ماشین است. مهندسی ویژگی در مراحل با فازهای معتلفی انجام می شود. کد پردازش چند مرحله ای مورد استفاده برای پردازش داده ها در مجموع به عنوان خط لوله داده شناخته من ننبود.ایجاد خط تولهداده با ستفاده از مراحل پزدازش اتتاندزد در ضنهریت امکان. آن را قابل استفاده مجدد می کند و تلاش لازم برای آموزش مدل ها را کاهش می دهد. با استفاده از ماژول‌های نرم‌افزاری بیشتر آزمایش شده, کیفیت. كد نيز افزايش مىيابد. بيابيد طراحی یک خط لوله پردازش قابل استفاده مجدد را برای چالش طبقه‌بند بينیم. هماتطور که گفته شد یک بار داده ها را آماده می کنیم و سپس از آن برای همه طبقه بند ها استفاده می کنیم. وارد کردن داده ها داده های تاریخی برای اين مسئله حاوی نمونه ها در فایلی به نام مجموعه داده با فرمت 09۷. ذخیره می شود. ما از تابع 05۷ _24.70۵0 از ‎uly sles pandas‏ كردن داده ها به عنوان یک دیتافريم استفاده خواهیم کرد ‎dataset = pd.read_csv('Social_Network_Ads.csv')‏

صفحه 242:
انتخاب ویژگی فرآیند اتتخاب ويزكى هابى كه با زمينه مسئله أى كه مى خواهيم حل كنيم مرتبط هستند, انتخاب ويزكى نامیده می شود. ان یک بخش ضروری از مهندسی ویژگی است. پس از وارد کردن فایل, ستون 180 1567 را که برای شناسایی یک شخص استفاده مى شود و بايد هنكام آموزش يك مدل حذف شود را حذف مىكنيم: “User 1D']) dataset = dataset. drop (column: حال پیاید پیش تمایش مجموعه داده را مشاهده کنیم: مجموعه داده به شکل زیر است: dataset head (5) Age Estimated Salary Purchased 19000 0 20000 43000 57,000 76000 19 35 26 27 19 Gender 0 © Male 1 Male 2 Female 3. Female 4 ۰۶ حال, بییید ینیم چگونه می‌توانیم مجموعه داده ورودی را پردازش کنیم. رمزگذاری 0020۶ بسیاری از الكوريتمهاى يادكيرى ماشين نياز دارتد كه همه ویژگی‌ها .متفیرهای بيوسته باشند. به اين معنى كه اكر يرخى از ويزكى ها متغيرهاى موضوعى هستندء 238

صفحه 243:
بايد استراتزى اى براى تبديل نها به مفیرهای پیوستهپیداکنیم. رمزگذاری ‎One‏ ۴ یکی از موثرترین روش های انجام اين تبديل است. براى اين مسئله خاصء تلها متفیز هوشوعی که دازیخ چنستیت اشت: ینید آن را با انتتفاده ار زمرگنداری 006-00 به يك متغير يبوسته تبديل كنيم: enc = sklearn. preprocessing. OneHotEncoder () enc. fit(dataset.iloc[:,[0]]) onehotlabels = enc. transform(dataset.itoc{:, [0]]).toarray() genders = pd.DataFrame({' Female ‘Male’: onehotlabels[:, 1]}) result = pd.concat( [genders dataset.iloc:, axis-1, sort-False) result.head(5) onehotlabels[:, 01, 11 پس از تبدیل, بياييد دوباره به مجموعه داده نگاه کنیم: Female Male Age Estimated Salary Purchased 0 00 10 19 49000 0 0 2000 55 1۵ ۵۵ 1 0 43000 26 00 10 2 0 57,000 27 مم 3 4 00 10 19 76000 0 230

صفحه 244:
توجه داشته باشید که بای تبدیل یک متفبر از یک متفیر موضوعی به یک متیر پیوسته. رمزگذاری 006-00جنسیت را به دو ستون مجزا تبدیل کرده است - ‎Female » Male‏ مشخص کردن ویژگی ها و برچسب بیابید ویژگی ها و برچسب ها را مشخص کنیم. ما از ۷ در اين کتاب برای نشان دادن برچسب وا بای نمایش مجموعه ویژگی استفاده خواهیم کرد ‎y=result['Purchased']‏ Xeresult..drop(colums=['Purchased' ]) ‎X‏ تشان دهنده بردار ویژگی است و شامل تمام متفیرهای ورودی است که باید برای آموزش مدل استفاده کنیم. ‏تقسیم مجموعه داده به بخش های آزمون و آموزشی ‏اکن سون, ببیبد مجموعسه داد آموزشسی را با اس تفاده از ‎split‏ ادها ‎a. sklearn.model selection import. train‏ ۹625 آرس ون و 5 قسمت آموزشی تفسیم کنیم: ‎#from sklearn.cross_validation ‎import train_test_split ‎X train, X test, y train, y test = train test_splitx, ‎y, test size = 0.25, random state = 0) ‎ ‎akin all‏ دده ویر را رده هه هله : ساختار داده ای حاوی ویژگی های داده های آموزشی ‎:X test‏ ساخترداده ای حاوی ویزگی های آزمون ‎ggl> sly : y_train‏ مقادیر برچسب در مجموعه داده آموزشی ‎240 ‎ ‎

صفحه 245:
+65 _لز : بردار حاوی مقادیر برچسب در مجموعه داده آزمون مفیاس بندی ویژگی ها برای بسیاری از الگورنتم های یادگیری ماشین؛ مقباس بندى متغيرها از ۵ تا 7 تمرين خوبى است. به ابن حالت ترمال سازى ويزكى نيز مى گوین. رای رسیدن به اين هدف, تبديل مقياس بندى را اعمال مى كنيم: from sklearn.preprocessing import StandardScaler sc = StandardScaler() X train = sc.fit_transform(x_train) X test = sc.transform(x_test) پس از اينکه داده ها را مقیاس بندی کردیم. آماده استفاده به عنوان ورودی برای طبقه بند های مختلف است که در بخش های بعدی ارائه خواهیم کرد ارزیابی طبقه بند ها هنگامی که مدل آموزش داده شد. باید عملکرد آن را ارزیابی کنیم. برای اين کار از فرآیند زیر استفاده می كنيم: 1. مجموعه داده برچسب‌گذاری را به دو بخش تقسيم مىكنيم - يك بارتيشن آموزشى و يك بارتيشن آزمون. ما از بارتيشن آزمون براى ارزيابى مدل آموزش دیده استفاده خواهیم کرد 2 ما از ویژگی های پارنیشن آزمون خود برای تولید برچسب برای هر ردیف استفاده خواهیم کرد. اين مجموعه ای از برچسب های پیش بینی شده ما است. 3. ما مجموعه ای از برچسب های پیش بینی شده را با برچسب های واقس برای ارزيابى مدل مقايسة مى كنيم. 2a

صفحه 246:
هنگام آرزیایی مدل: برخی: طبقه بندي های اشتباه وجود خواهد داشت :گر آینگه بخواهیم چیزی کاملاً بی اهمیت را حل کنیم. اینکه چگونه اين طبفه‌بندی‌های اشتباه را برایتعبن کیفیت مدل تفسیر کنیم, بستگی به معبارهای عملکردی دارد که انتحاب مىكنيم. وقتى هم مجموعه يرجسبهاى واقعى وهم برجسبهاى پیش‌پینی‌شنده را داشته باشیم: می‌توان از دسته‌ای از معیارهای عملکرد برای ارزيابى مدلها استفاده كرد. يهترين معبار براى تعيين كميت مدل به نيازمنديهاى مسئله تجارى كه مىخواهيم حل كنيم و همچنین ویژگی‌های مجموعه داده آموزشی بستگی دارد. ماتریس سردرگمی ماتريس سرد ركمى براى خلاصه كردن نتايج ارزيابى يك طبهبند ستفاده می‌شود مان مجزدرگمی برك يك عليعه بد مودوين :به ‎cal yg‏ 22

صفحه 247:
1 EN (True Positives) | (False Negatives) FP 1N (False Postivies) | (True Negatives) شكل 1-7: ماتريس سرد ركمى اگر برچسب طبقه‌بندی که آموزش می‌دهیم دارای دو کلاس باشد: به آن طبقه‌بند. تودقنی میگویند: لولین فوزد استعادخخبانی از بانگیری ماسیتی با تطارت ناه طور خاصء طبقه بند دودوبی - در طول جنگ جهانی اول براى تمایزبین هوایسا و پرندگان در حال پرواز بود. اين طبقه بتدی را می توان به چهار دسته زیر تقسیم کرد موارد مثبت واقعی (۲۳): طبقه بندی های مثیتی که به درستی طبقه بندی شده ‎al‏ منفی های واقعی ‎(TN)‏ طبقه بندی های منفی که به درستی طبقه بندی شده اند موارد مثبت کاذب (1۳۳): طبقه بندی های مثيتى که در وفع منفی بودند منفى هاى كاذب (/52): طيقه بندی های منفی که در واقع مثبت بودند مد

صفحه 248:
بيابيد ببينيم جكونه مىتوانيم از اين چهار دسته برای ایجاد معبارهای مختلف عملکرد استفاده کنیم. یک ماتریس سردرگمی تعداد طبقه‌بندی‌های صحیح و طبفه‌بندی‌های اشتباه زا از طریق شمارش ۳۳ :۸1 ,11 و 7۳۸ به شما می‌دهد. دفت مدل به عنوان نسبت طبه‌بندی‌های صحیح در بين همه پیش‌بینی‌ها تعریی می‌شود و می‌تواند به راحتی از ماتریس سرد ركمى به شرح زير نتيجه شود: اگر داده‌های ما کلاس‌های متعادلی داشته باشند (یعنی تعداد کل مثال‌های مثبت تقریاً پرابر با تعداد مال‌های منفی باشد) پس صحت, ینش خوبی تسبت به کیفیت مدل آموزش دیده به ما خواهد داد صحت. نسبت طبقه بندی های صحیح در بین همه پیش بینی ها است. Correct Classifications TP+EP اك تس تاك 2ك = ‎Accuracy‏ ‎TPVFPHFNITN‏ ال 0 درک نرح یادآوری و دفت در حین محاسیه صحت, پین 1۳ و 11 تفاوت فائل نمی شویم. ارزیابی يك مدل از طریق صحت ساده است. اما زماتی که دادههادارای کلاس‌های تامتوازن هستند؛ کیفیت مدل آموزش‌دیده را به‌طور دقیق تعبین نمی‌کند. هنگامی که داده ها دارای كلاس هاى نامتوازن هستند, دو معيار اضافى نرع يادآورى و دقت ,کیفیت مدل آموزش ديده رأ بهتر تعبين مى كند. براى توضيح مفاهيم اين دو معيار اضافى از تمونه ای از فرآیند استخراجالماین محبوب استفاده خواهیم کرد. برای فرن هار استخراج الماس آبرفتی, یکی از محبوب ترین روش های استخراج الساس از شن ‎sla‏ بستر رودخانه ها در سراسر جهان است. هزاران سال فرسایش برای شستن الماس ها از رسوبات اولیه آها به بستر رودخانه ها در نقاط مختلف جهان شناخته شده است. برای استخراج الماس, مردم شن های ساحل رودخانه را در یک گودال روبز بزرگ جمع آوری کرده اند. پس از شستشوی زیاد,تعداد زیادی سنگ در گودال باقی می‌ماند. اکثریت فریب به اتفاق اين سنگ های شسته شده فقط سنگ 2a

صفحه 249:
های معمولی هستند. شناسایی یکی از سنگ ها به عنوان الماس, اتفافی نادر اما بسیار مهم است. صاحبان معدن در حال آزمایش با استفاده از بینایی کامپیوتر هستند تا تشخیص دهند کدام یک از سنگ های شسته شده فقط سنگ های معمولی و کدام یک از سنگ های شسته شده الماس هستند.آنها از شکل, رنگ و انعکاس برای طیقه بندی سنگ های شسته شده با استفاده از بینایی کامپیوتر, استفاده می كتند. در زمينه اين مثال: © 18 يك سنگ شسته شده به درستی به عنوان الماس شناسایی شده است * 121 سنگ شسته شده به درستی به عنوان سنگ شناسایی شده است + ۳ سنگی که به اشتباه به عنوان الماس شناسایی شده است ‎FN ۰‏ الماسی که به اشتباه به عنوان سنگ شناسایی شده است. ‏اجازه دهید ترخ باآوری و صحت را در حين حفظ این فرآیند استخراج الماس از معدن توضیح دهیم. ‏برع اقرع قو رارف برع سبرب را مساضي م كس که بسریت رویدادهای مورد علاقه شناسايى شده در يك مخزن عظيم رويدادها است. به عبارت ‎pS‏ ‏اين معبار توانايى ما را براى يافتن يا "ضربه زدن" بيشتر رويدادهاى مورد علاقه و ناشتاخته ماندن حداقل ممكن را ارزیابی می کند. در زمینه شتاسایی گودال الماس از تعداذ زیادی سنگ شسته شده, نرخ یادآوری در مورد محاسیه م وفقیت "شکار گنج" است. برای یک گودال مشخص که از سنگ های شسته شده پر شده است, نرخ یادآوری نسبت تعداد الماس های شناسایی شده, از تعداد کل الماس های موجود در گودال خواهد بو ‎ ‎No. of correctly identified diamonds ۳ ‎Recall = To eal number of diamonds in the pit TP + FR ‎245 ‎ ‎

صفحه 250:
فرض كنيد 10 الماس در گودال وجود داشت که هر کدام 1000 دلار ارزش داشت. الگوریتم یادگیری ماشین ما توانست 9 مورد از آنها را شناسایی کند. بنايراين» نرخ یادآوری 10/9-0,9 خواهد بود بنابراين, ما فادریم 90 درصد از گنچ خود را بازیابی کنیم. از نظر هزینه دلاری: ما توانستیم 9000 دلار گنج از مجموع ارزش 10000 دلار را شناسایی کنی. دفت: در دقت , ما فقط بر روی نقاط داده‌ای که توسط مدل آموزش‌دیده شده به‌عنوان مثبت علامت گذاری شده‌اند تمرکز می‌کنيم و بقبه موارد را کنار ‎ay hss‏ اگز فقط زویداذهایی زا که تونتظ هل آمورش‌ننتو‌هان بهعتوان مایت علامت گذاری شده‌اند (یعنی 1 و ۳) فیلتر کنیم. و صحت را محاسبه کنیم به آن دفت می‌گویند حال اجازه دهید دقت را در زمیتهمتال استخراج الماس بررسی کنیم. اجازه دهید ستاریویی را در نظر بكيريم كه در آن مىخواهيم از بينايى كامييوتر براى شناسابى الماس در میان گودالی از سسنگ‌های شسته شده استفاده کتیم و آنها را برای مشتریان ارسال نیم قرار است این فرآنند به صورت خودکار انجام شود. رویداد نامطلوب مطلق, الكوريتم طبقه بندی اشتباه سنگ به عنوان الماس است که در تبجه مشتری نهایی آن را در يست خود دريافت مى كتد وهزينه آن را درياقت مى كند. يس يديهى است كه براى عملى شدن اين فرآيند, دقت بايد بالا باشد. براى مثال استخراج الماس: No. of correctly identifed diamonds ___TP. Total number of rocks flagged as diamonds ~ TP-+ FP precision = 246

صفحه 251:
درک موازنهنرخبادآوری و دفت مراف ركم مار كالب مربوظ هدقن و ‎Sala STAAL‏ که متا تزگ کنیم که چگونه یک طبقه بند تصميم می‌گرد. تصمیم گیری برای هر یک از قاط داده, به منظور برچسب گذاری آن با یکی از دو کلاس, یک فرآیند دو مرحله ای است: مرحله 1: طبقه بند یک امتباز تصمیم گیری ایجاد می کند که عددی از 0 تا 1 است. مرحله 2: از مقدار بارامترى به نام آستنه تصمیم برای تخصیص یکی از دو کلاس به نقطه داده فعلی استفاده می کند. هر آستانه تصمیم (امتیاز > تصمیم) مثبت پیش‌بیتی می‌شود و هر نقظه داده‌ای که آستانه تضمیم (امتباز <تصمیم) داشته باشد منفی است. برای توضیح موازنه بين دقت و نرخ بادآوری, مثال استخراج الماس را دوباره بررسی می‌کنيم. شکل 2-7 چند سنگ را تشان می دهد که به ترتیب صعودي امتباز تصمیم گبری از مرحل» 1 الگوریتم. سازماندهی شده اند توجه داشته باشید که سنگ های سمت چپ ‎gute‏ امتیاز را ذازند و کمترین احتمال را دارند که الماس باشند. سنگ های سمت راست بالاترین امتیاز را در سمت راست دارند و ب احمال زیادالماس هستند. برای یک طبقه‌بندی کامل, سنگ‌های سمت راست آستانه ی تصمیم, همگی الماس هستند و سنكهاى سمت چپ همگی سنگ هستند. حال, ابتدا شکل 2-7 (ه) را در نظر بگیرید. آستانه تصمیم گیری در مرکز فرارداد. با نگاهی به سمت راست مرز تصمیم (در کادر سایه دار) 3 طبقه بندی صحیح و یک طبقه بندی اشتباه پیدا خواهید کرد. یعنی 3 ‎FPG TP‏ بیدا خواهد کر دن سمح عي ‎je aa aa 2. nia ala‏ 2 طبقه بتدی اشتباه را خواهید دید. آنها 277 و (2۳ هستند. اجازه دهبد ترخ یادآوری و صحت را برای شکل 2-7 (2) محاسبه کنیم. 27

صفحه 252:
No. of correctly Wdentified diamonds _TP_3 Total number of dlamonde nthe pit TP-+ 0. of correctly identifed diamonds 1 ~ Total number of rocks lagged as diamonds ~ TP + FP Recall precision از شکل 2-7 (0) مشخص است که با افزایش آستانه تصمیم ‎a‏ 0.8 معیارهای طبقه بندی به عنوان سنگ را بسیار سخت می کنیم. مشهوم اين است که دفت افزایش یافته اما ترخ بادآوری کاهش یافته است. در شکل 2-7 (6), آستانه تصمیم را کاهش داده ‎pil‏ به عبارت دیگر, معیارهای خود را برای طبقه بندی سنگ به عتوان الماس کاهش داده ایم. بنابراین, 7۳۵ (كنج از دست رفته) كاهش فى يايد اما ۳8 (سیگنال نادرست) نیز افزايش می یابد. بتابراین. بازی با ارزش مرز تصميم در مورد مديريت موازته بين نرع بادآورى و دقت است. ما مرز تصمیم را افزايش مى دهيم نا دفت بهترى داشته باشيم و مى توانيم انتظار نرخ يادآورى بيشترى داشته باشيم. و ما مرز تصميم را كاهش مى دهيم تا شرخ بادآوری بهتری داشته باشیم و می توانیم انتظار دقت کمتری داشته باشیم. 2۵

صفحه 253:
شکل 2-7: موازنه دقت/ نرخ يادآورى: سنگ ها بر اساس امتياز طبقه بند شان رتیه بندی می شوند.آهایی که بالار از آستانه تصمیم گیری هستندالماس محسوب می شوند. توجه داشته باشيد كه هر جه آستانه بالاتر باشدء دقت بالاتر است اما ترخبادآوری کمتر است. اجازه دهید نمودر بین دقت ونرخبادآوری را برای درک بهتر موازنه ترسیم كنيم.

صفحه 254:
Precision شکل 3-7: دقت در مقابل نرخ یادآوری انتخاب مناسب برای نرخ یدآوری و دقت چیست؟ افزایش نرخ یادآوری با کاهش معیارهایت که برای شماه امس یک نقطه دادم يس عتتوان مایت اتتفادم من کتیم: انجام می شود. انتظار می رود ذفت کاهش یابد. اما در شکل بالا به شدت در حدود ۵8 کاهش می یابد. این تقطه ای است که می توانیم ببه عنوان مقدار مناسب ترخ یادآوری و دفت انتخاب کنیم. در نمودار ‎MU‏ اگر 0.8 را به عنوان ترخ یادآوری انتخاب کنیم, دفت 0.75 است. ما می توانیم ‎ol‏ را به گونه ای تفسیر کنیم که توانستیم 80 از تمام تفاط داده مورد علاقه را علامت گذاری کنيم. دقفت 5 بزای علامت گذاری اين تقاط داده مورد علاقه است. اگر نیاز تجاری خاصی وجود نداشته باشد, برای یک مورد استفاده عمومی, اين ممکن است یک موازنه معقول باشد.راهدیگری برای نشان دادن موازنه ذاتى بين دقت و ترع بادأورى, استفاده از دریافت متحتی عملیاتی (806) است. برای این قضیه اجازه دهید دو اصطلاح را عریف کنیم

صفحه 255:
نرخ مثبت وافعی (1۳18) 9 ‎ojlel FPR (FPR)‏ دهيد با استفاده از شکل 3-7 به منحنی 1306 نگاه کنیم. برای محاسیه 1۳ و ۳, بید الماس را در گودال قرار دهیم. توجه داشته بشید که: 1 1۳ برابر است با نرخ یادآوری یا ترع ضربه. 2 :12/5 رامى توان به نرخ بادآورى با نرخ ضربه روبداد منقى تصور كرد. تعيين کننده موفقیت ما در شناسایی صحیح رویداد منفی است. به آن ‎oui Specificity‏ مى كويند. FPR =1-TNR=1- Specificity 3 بدیهی است که 11 و7816 براى اين ارقام به صورت زیر فابل محاسبه است: Figure Number TPR FPR Xx (a) 3/5=0.6 1/3=0.33 Xoox(b) 2/5=0.4 0/3 = 0 0.33 = 11/3 = 5/5 )سد توجه داشته باشید که ۲8 یا نرخ بادآوری با کاهش آستانه تصمیم ما اف زایش می یبد. در تلاش برای به دست آوردن بیشتر الماس ها از معدن. معبارهای خود را ود

صفحه 256:
‎ly‏ طبقه بندی سنگ هایشسته شده به عنوان الماس :ک اهش می دهیم. تتیجه. اين است که سنگ‌های بیشتری به اشتباه به‌عتوان الماس طبفه‌بندی می‌شوند که 8 را افزايش می‌دهد. توجه داشته باشید که یک الگوریتم طبقه‌بندی با کیفیت خوب باید بتواند امتیاز تصمیم‌گیری را برای هر سنگ در گودال ارائه دهد که تقریبا با احتمال الماس بودن سنگ مطابقت دارد. خروجی چنین الگوریتمی در شکل 2-7 نشان داده شده است. الماس ها در سمت راست و سنگ ها در سمت چب فرار دارند. در شکل, همانطور که آستانه تصمیم را از 08 به 0.2 کاهش دادیم.انتظار می رود افزایش بسیار بیشتری در ‎TPR‏ نسيت به 588 داشته باشیم. در وافع. افزايش شديد :188 با افزايش جزئى در 9886 یکی از بهترین نشانه های کیفیت یک طبقه بند دودویی است. از آنجایی که الگوریتم طبقه بندی فادر به ایجاد امتبازهای تصمیم گیری است, که مستقیمً با احتمال الماس بودن یک سنگ ارتباط دارد. اگر الماس ها و سنگ ها به طوز تصادفی در مجور امتیاز تصمیم قرار گیرتد. به همان اندازه احتمال دارد که کاهش آستانه تصمیم گیری, سنگ ها یا الماس ها زاعلافت گذازی کند: این ندتزین: طبقه بیدد دودوین: محکن آنتت که ین ‎par‏ ‏تصادفی ساز نيز نامیده می شود ‎ ‎

صفحه 257:
| False Positive Rate شکل 4-7: متحنی 06 درک بیش برازش اگر یک مدل یادگیزی ماشینی در یک محبط توسعه عالی عمل کند اما در یک محیط توليد به طور قابل توجهى تنزل يبدا كند. مى گوییم مدل بیش برازش شده است. :یه این مسن ست كه تدل أسيري ريده ازمجموعه دلده أموريسن .رعيعا ‎am‏ مى كند. این تشان می دهد که چزتیات زیادی در قوانن ایجاد ‎sgl ap ty dan ngs ai‏ موازنه بين واربانس مدل و باياس يهترين ايده را نشان مى دهد. بيابيد اين مفاهيم را يكى يكى بررسى كنيم. ‏بایاس ‎ ‎

صفحه 258:
هر مدل یادگیری ماشینی بر اساس مفروضات خاصی, آموزش داده می شود. به لير كلى ‎py Wr SUT Bl‏ اک نیازید دما فا ختتا ‎Gail,‏ ‏هستند. این مفروضات روایط وافعی بین ویژگی ها و مشخصات آنها را ساده می کند و آموزش یک مدل را آسان تر می کند. فرضیات بیشتر به معنای سوگیری پیشتر است. بتایراین. در حين آم وزش یک مدل, مفروضات ساه‌تر < سوگیری زیاد. و مفروضات وافعبینانه‌تر که تمایانگر پدبده‌های واقعی > سوگیری کم هستند. در رگرسیون خطی, غیرخطی یودن ویژگی‌ها نادیده گرفته می‌شود و به عنوان متفیرهای خطی تقریب می‌شوند. بتابراین مدل‌های رگرسیون خطی ذاتاً در برابر نان بت آیری یاف جب سم واربانس اگر از مجموعه داده های متفاوتی برای آموزش مدل استفاده شود. واربانس میزان دقت یک مدل برچسب را تخمین می زند. واریانس حساب می کند که آیا فرمول ریاضی مدل ما تعمیم خویی از الكوهاى زيرينابى است با خير. قوانين بيش برازش خاص بر اساس سناريوها و موقعيت هاى خاص > واريانس بالاء و قوانيني که تعمیم یافته و برای اتاع سناريوها و موقعيت ها قايل اجرا هستند < واربانس ‎dan pS‏ ما در یادگیزی ماشین آموزش مدل هایی است که بایاس کم و وازبانس کم را نشان می دهند. دستیابی به اين هدف هميشه آسان نیست و معمولاً دانشمندان داده را در شب بیدارنگه می دارد موازنه سوگیری-وازبانس هنگام آموزش یک مدل یادگیری ماشینی خاص, تصمیم گیری در مورد سطح تعمیم مناسب برای فواننی که یک مدل آموزش نیده را تشکیل می دهند دشوار اسست. مبارزه برای دستيابى به سطح درست تعميم توسط موازنه سوگیری-واربانس بيه تصویر کشیده مي شود. توجه داشته باشید که مفروضات ساده تر > تعمیم بیشتر

صفحه 259:
> وارانس کم < سوگیری بال. اين موازنه بين سوگیری و واربانس با اتخاب الكوريتم. ويزكى هاى داده ها و فرابارامترهاى مختلف تعيين مى شود. دستيابى به سازش مناسب بين سوكيرى و واربانس بر اساس الزامات مسئله خاصی که در تلاش برای حل آن هستید. مهم است. تعیین فازهای طبقه بندها ين إن آمانة شمن كاذه هاي بحست كدارف بده ‎aang‏ ليقن ينه نه ‎aah‏ ‏آموزش» ارزيابى و استقرار مى شود. اين سه مرحله از پاده سازی یک طبقه بند در چرخه عمر 3150-286 (فرآیند استانداردبین:ضیعتی:بزای:داده کاوق) دز بمودار زپ قات راده نقد أست [چرخه: زندگی 0815۳-036 با جزئیات بیشتر در فصل 5 الگوریتم های نمودار توضیح داده شده است) ] \ / i Y 4 ‏تم‎ ‎re ‏ص‎ Evaluation Training

صفحه 260:
شکل 5-7: چرخه حبات ۸4ظ ‎CRISP‏ عردو موس فيل أرقو يق طیعهبید -مراحل آرمون و آمپری »ار داا‌های برچسب‌دار استفاده می‌کنيم. داده های برچسب گذاری شده به دو پارتیشن تقسیم می شوند ‏ یک پارتیشن بزرگتر به نم داده های آموزشی و یک پارنیشن کوچکتر به نام داده های آرمون. یک تکنیک نمونه‌گیری تصادفی برای تفسیم داده‌های برچسبگذاری شده ورودی به پارتیشن‌های آموزشی و آزمون استفاده می‌شود تا اطمینان حاصل شود که هر دو پارتیشن دارای الگوهای سازگار هستند. توچه داشته باشید که همانطور که نمودار قبل نشان می دهد. ابتدا یک مرحله آموزشی وجود دارد که در آن از داده های آموزشی برای آموزش یک مدل استفاده می شود. هنگامی که مزحله آموزش ‎ar‏ پایان رسید. مدل آموزش دیده با استفاده از دادم های آزمون ارزیای می شود. ماتریس های عملکرد متفاوتی, برای تعبین کمیت عملکرد مدل آموزش دیده استفاده می شود. هنگامی که مدل ارزیابی شد. ما مرحله استقرار مدل را داریم, که در آن مدل آموزش دیده مستقر می شود و برای استنتاج و حل مسائل دنیای واقعی با برچسب گذاری داده های بدون برچسب استفادخ من سود:خال: اجازه ذهید به ترخن: از الگوزیتم های طبقة پندی دگاه کنیم. ما به الكوريتم هاى طبقه بندى زير مى بردازيم. لگوریتم های طبقه بندی زیر را در بخش هاى بعدى بررسى خواهيم کرد * الكوريتم درخت تصميم * الگوریتم 1600054 * الگوزیتم جنگل تصادفی * الگوریتم رگرسیون لجستیک ۰ الگورنتم ماشین برداز پشتیانی ‎(SVM)‏ © الگورنتم یز ساده ببابيد با الگوریتم درخت تصمیم شروع كنيم.

صفحه 261:
الگوریتم طبقه بندی درخت تصمیم درخت تصمیم بر اساس رویکرد پارتیشن بندی بازگشتی (تقسیم و حل) است که مجموعه اى از قوانين را ايجاد مى كند كه مى تواند برای پیش بینی یک برچسب استفاده شود. با یک گره ريشه شروع مى شود ويه جندين شاخه تقسيم فى شود. كره هاى داخلى. آزمايشى را بر روى يك ويزكى خاص تشان مى دهند و نتيجه آزمايش با یک شاخه به سطح بعدى نشان داده مى شود. درخت تصميم به گره های برگ که جاوی تصمیمات هستند ختم می شود. هنگامی که پارتیشن بندی دیگر نتیجه را بهبود نمی بخشد؛ فرآیند متوقف می شود. درک الگوریتم طبقه بندی درخت تصمیم ویژگی متمایز طبفه بندی درخت تصمیم, ولید سلسله مرانب قوانین قابل تفسیر ‎Ghul Lege‏ بتک برای پل نی درجستب کر زان اجرا اشتفاده ی نوک الكوريتم ماهيت بازكشتى دارد. ابجاد اين سلسله مراتب قوانین شامل مراحل زبر است: 1. بيدا كردن مهم ترين ويزكى: از بين همه ويزكى هاء الكوريتم ویژگی زا شناسایی می کند كه يهترين تفاوت را بين نقاط ذاده در مجموعه ذاده آموزشی با توجه به برچسب دارد: لین محاسیه بر اسان معیارهین مانندافزایش اطلاعات یا ناخالصی جینی است. 2. دو شاخه شدن: با استفاده از مشخص ترین ویژگی مهم. الگوریتم معباری را ليجاد مى كند كه يراع تقسیم مجموعه داده آموزشی به دو شاخه استفاده می شود ‎bts»‏ داده ای که شرط را پآورده هی کنند ‏+ نقاط داده ای که شرط را برآورده تمی کنند 3 بررسی گره های برگ: اگر هر شاخه حاصل عمدتاً دارای برچسب های یک کلاس باشد. شاخه تهایی می شود و در نتیجه یک گره برگ ابجاد می شود. ‎ ‎

صفحه 262:
4 بررسی شرایط توقف و تکرار؛ اگر شرایط توق ف ارائه شده برآورده نشد, آنگاهالگورتم بای تکراربعدی به مرحله 1 برمی گردد. در غیر این صورت, مدل به عنوان آموزش دیده علامت گذاری می شود و هر گره از درخت تصمیم حاصل در پاین ترين سطح به عنوان یک گره برگ برچسب گذاری می شود. شرط توفف می‌تواد به سادگی تعریف تعداد تکرارها باشد. یا م‌توان از شرط توق بيش فرض استفاده كرد, جابى كه الكوريتم به محص رسیدن به سطح همگن معینی براى هر يك از كردهاى برك متوقف مىشود. الكوريتم درخت تصميم را مى توان با نمودار زير توضيح داد xoxox oxoxo ‎|x‏ |000| 6 ع ]ست شكل 6-7: درخت تصميم ‏در تمودار قبلى, ريشه شامل يك دسته دايره و صليب است. الكوريتم معيارى را یجاداهن کند که نف فی ‎ew gi SS‏ رن خلییع ما چتا کنو ‎gen‏ ينطو درخت تصمیم پارتیشن‌هایی از داه‌ها را ليجاد مىكند كه انتظار می‌رود از سطع 1 به بالا شتر و پیشتر همگن باشتد. یک طبقه بند کامل دارای گره های برگ است که فقط شامل دایره يا صلیب است. آموزش طبقه‌بند هی کامل به دلیل تصادفی ‏يوان جات تجهوعه دا آموزستن ‎ial gs Vga‏ ‎ ‎

صفحه 263:
استفاده از الگوریتم طبقه بندی درخت تصمیم برای چالش طبقه بند ها حال, بیایید از الگوریتم طبقه‌بندی درخت تصمیم برای مستله رایجی که قباً تعریف کر‌يم استفاده کنیم تا پیش‌پینی کنیم که آیا مشتری در نهایت محصولی را خريدارى مىكند يا خير: 1. براى انجام اين كار. ابتدا الكوريتم طبقهيندى درخت تصميم را مثال مىزنيم و مدلی را با استفاده از بخش آموزشی ذاده‌هایی که برای طبقه‌یند های خود آماده کرد‌يم آموزش مي‌دهيم ‎import sklearn.metrics as metrics‏ ‎y pred = classifier predict (x test)‏ ‎cm = metrics.confusion matrix(y test, y pred)‏ cm خروجی زیر رأ مى دهد: Out[22]: array([[64, 4], [ 2, 30]]) اکتون, ابید صحت, نرخ یدآوری, و مقادیر دقت طبقه‌بند ایجاد شده را با استفاده از الگوریتم طبقه‌بندی درخت تصمیم مجاسیه کنیم netrics.accuracy_score(y test,y pred) recall = metrics.recall_score(y_test,y pred) precision = metrics precision score(y test,y pred) print (accuracy, recall, precision) accurac

صفحه 264:
با اجرای کد قبلی خروجی زیر تولید مى شود 0,8829529411764706 0.9975 0.94 معبارهای عملکرد به ما کمک می کنند تا تکتیک های مختلف مدل سازی آموزشی را با یکدیگر مقایسه کنی. تقاط فوت و ضعف طبقه بندی درخت تصمیم در اين قسمت به تقاط فوت و ضعف استفاده از الگوریتم طبقه بندی درخت تصميم مى بردازيم. تقاط فوت نقاط قوت طبقهبند درخت تصميم به شرح زیر است: قوانين مدل های ایجاد شده با استفاده ار ورین درختت: سیم توسطا اسان قابل تفسیر است. به مدل هایی از اين دست, مدل های ۷/۳/6۵0۷ گفته می شود. هر زمان که برای ردیابی جزئیات و دلایل تصمیمات اتحاذ شده توسط مدل به شفافیت نیاز باشد, مدل‌های ۱۸۵۱1686 یک الزام هستند. اين شفافیت در برنمه‌هایی که مي‌خواهيم از سوكيرى جلوكيرى كنيم و از جوامع آسيبيذير محافظت کنیم. ضروری است. به عتوان مثال, یک مدل ۷1۳۱۲6۵0 به طور کلی ‎ll Se‏ بزا مارد تفا حياس ير ‎ail ag lg ali‏ طبقه بند درخت تصمیم برای استخراج اطلاعات از فضای مسئله گسسته طراحی شده است. این بدان معنی است که بيشتر ویژگی ها متفیرهای موضوعی هستند, بنابراین استفاده از درخت تصمیم برای آموزش مدل انتخاب خوبی است. 260

صفحه 265:
تقاط ضعف نقاط ضعف طبه‌بند درخت تصمیم به شرح زیر است: اگر درخت تولید شده توسط طبقه‌بند درخت تصمیم بیش از حد عمبق باشد. قوانین جزئیات زیادی را ثبت می‌کنند و در نتيجه یک مدل بیش برازش می‌شود. در حین استفاده از الگوریتم درخت تصمیم. ید توجه داشته باشیم که درخت‌های تصمیم در برابر پیش برازش آسیب‌پذیر هستند و بنابراین برای جلوگیری از اين امر بايد هر زمان که لازم بود درخت را هرس کنیم. نقطه ضعف طبه‌بند درخت تصمیم, ناتوانی آن‌ها در درک روابط غیرخطی در فوانینی است که ایجاد می‌کند. مطالعات موردی دز این:بخش: به موارد استفاده ای که الگوزیتم: دزخت تضمیم یرای آلها استفاده فى شود. می پردازم. طبقه بندی سوابی طیقه‌بند دزخت تضمیم را م‌توان برای طبقه‌بندی نقاط داده استفادح کرد مد مثالهاى زير: برنامه های ‎ply‏ مسک: برای آموزنش یک طبقه بنددودویی برای ‎gus‏ اینک آيا متقاضى احتمالاً در بازيرداخت. كوتاهى مى كند يا خير. تقسیم بندی مشتری: برای دسته پتدی مشتریان به فشتریان با ارزش یال متوسط و كم ارزش به طورى كه استراتزى هاى بازاربابى را بتوان براى هر دسته سفارشى كرد. تشخيص بزشكى: براى آموزش طبقه بند كه بتواند رشد خوش خيم يا يدخيم را طبقه بندى كند.

صفحه 266:
تجزیه و تحلیل اثربخشی درمان: برای آموزش طبفه‌بند که بتوندبیمارانی را که به یک درمان خاص واکنش مثبت تشان داده‌اند علامت‌گذاری کند انتخاب ویژگی زیر مه هچریت مسر یرم جموعه کووکن از وگن ها زا ‎SL aval‏ قوانين انتخاب مى كند. وفتى تعداد زيادى ويزكى دارید, مئتوان از اتخاب ویژگی برای انتخاب ویژگی‌های الگوزیتم یادگیری ماشینی دیگز استفاده کرد. آشنایی با روش های جمعی جمعی روشی است. در یادگیری ماشین, برای ایجاد بیش از یک مدل کمی متفاوت با استفاده از پرامترهای مختلف و سپس ترکیب آنها در بک مدل مجموع. برای ايجاد مجموعههاى مؤثر. بايد معبار تجميع ما براى توليد مدل حاصل را بيدا كنيم. بيابيد به يرخى از الكوريتم هاى جمعى نكاه كنيم. 1680056 ‏با الگوریتم‎ 9۳۵0160 boosting .5jlu ost 50 در سال 2014 ايجاد شد وبر اساس اصول 9801606 9 است. اين الكوريتم به يكى از محبوب ترين الكوريتم هاى طبقه بندی جمعى تبديل شده است. اين مدل يك دسته از درختان مرتبط به هم توليد مى كتند و از شیب نزول برای به حداقل رساندن خطای بافیمانده استفاده می کند. اين كار باعث می‌شود که آن را برای زیرساخت‌های توزیه‌شده, مانند 502/1 ۵0۵656 يا برای محاسیات ابری, مانتد 6104۵ 60096 با ‎‘Amazon Web Services‏ (8/5) مناسب باشد. خالا ببينيم جكونه مىتوانيم 60054109 9/8010 رايا الگوریتم 63005یاد‌سازی ‎pa‏ 1. بتدء طبقه‌بند 166861355607 را نمونه‌سازی می‌کنيم و مدل را با استفاده از بخش آموزشی داده‌ها آموزش می‌دهیم: 262

صفحه 267:
ی ‎er‏ ار ‎rain, 9 tot)‏ 4( لومم ‎ ‏رات روز ماو وم رخ ام و ‏الا سات رادم ‎ ‎ ‎ ‎ ‎16, mobs, ‎ ‏سپس, پیش‌بیتی‌هایی را بر اساس مدل آموزش‌دیده جدید ایجاد خواهیم کرد: ‎y_pred = classifier.predict (X_test) ‎ ‎cm = netrics.confusion matrix(y test, y_ pred) en ‏خروجى زير را توليد مى كند:‎ Out[21]: array([[64, 4], ] 3, 29]]) Sc ln yaar alge ‏مز هايم‎ accuracy= metrics accuracy_scorely test,y pred) ‎ ‎recall = metrics.recall_score(y test,y pred) precision = metrics.precision_score(y test,y pred) ‎263 ‎ ‎

صفحه 268:
print (accuracy, recall, precision) این کد خروجی زیر را به ما می دهد: 0.93 0.90625 8 حالاء بياييد به الكوريتم جنكل تصادقى نكاه كنيم. استفاده از الگوریتم جنگل تصادفی چنگل تصادفی یک نوع روش جمعی است که با ترکیب چندین درخت تصمیم برای کاهش بایاس و واریاتس کار می کند آموزش الگوریتم جنگل تصادفی در آموزش. اين الكوريتم ل( نمونه از داده هاى آموزشى مى كيرد و00 زیر مجموعه از داده های کلی ما را ایجاد می‌کند. این زیر مجموعه ها با انتعاب تصادفی برحی از سطرها و ستون های داده های ورودی یجاد می شوند. الگوریتم ‎٩‏ درخت تصميم مستفل مى سازد. این درختان طبقه بندی با 61 تا 60 نسان دادم می شوند استفاده از جنگل تصادفی برای پیش بینی هنگامی که مدل آموزش داده شد. می توان از آن برای برچسب گذاری داده های جدید استفاده کرد. هر یک از درختان جداگانه یک برچسب تولید می کند. پیش‌بینی نهایی با ای دادن به این پیشبینی‌های فردی مشخص می‌شودد همانطور که تشان داده شده است: 268

صفحه 269:
aaa es 46 يآ ۱ 3 55-9 شکل 7-7: جنگل تصادفی توچه داشته باشید که در نمودار قبل, ۴۰ ,درختان آموزیش داده شده اند که با 23 تا 600 نشان داده شده است. بعتی (61,...6۳۳) = 7۲665 می باشد.هر یک از درختان یک ييشبيتى ايجاد می‌کند که با یک مجموعه نشان داده می‌شود: پیش‌بینی‌های فردی ۶ [۳۵۱ ‎{PL‏ <. پیش‌بینی نهایی با 8۲ نشان داده مىشود. اين بيش بينى توسط اكثر بيش بينى هأى فردى تعيين مى شود 265

صفحه 270:
تابع 8006 را مى توان برأى فهميدن تصميم اكثريت استفاده كرد (8006 عددى ست كه اغلب تكرار مى شود 9 ذر اکثریت است).پیش‌بیتی فردی و پیش‌بینی نهایی به صورت زیر مرتبط می‌شوند: (8) 080 - 86 تمایر الگوریتم جنگل تصادفی 41 ‎ensemble boosting‏ هر یک از درختان تولید شده توسط الگوریتم جنگل تصادفی کاملاً مستقل از یکدیگر هستن. از هیچ یک از جزئیات درختان دیگر گروه, آگاه نیست. اين تفاوت آن را از سایر تکتیک هاء مانند 60051109 60560016 متمايز مى كند. استفاده از الكوريتم جنكل تصادفى براى جالش طيقه بند ها بياييد الگوریتم جنگل تصادفی را نمونه‌سازی کنیم و از آن برای آموزش مدل خود با ستفاده از داد‌های آموزشی استفاده كنيم. دو فرابارامتر كليدى وجود دارد كه در اينجا به آنها نكاه خواهيم كرد: n_estimators max_depth فراپارامتر ۵5110060۳5 تعداد درخت های تصمیم گیری منفرد ساخته شده را کنترل مي کند و فراباامتر 00000 8۵1 کنترل می کند که هر یک از اين درخت. های تصمیم منفرد چقدر می توانند به عمق بروند. بتابراین, به عبارت دیگر یک درخت تصمیم می تواند به شکافتن و تقسیم شدن ادامه دهد تا زمانی که یک گره داشته باشد که نشان دهنده هر نمونه داده شده در مجبوعه آموزشی باشد. با تنظیم 460۴ _8۵, تعداد سطوح تقسيم را محدود مى كنيم. اين كار بيجيدكى ‎uo Jas yoo‏ كند وين من كبر كه جعدر ‎oils Ly‏ ای آموزسن قطایفت دارد. اكر يه خروجى زير مراجعه كنيم. 865010810۴5 عرض مدل جتگل تصادفی و ۱9۵14608 عمق مدل را كنترل مىكند: 266

صفحه 271:
fo eile or soar ‏تانسم‎ ‏مس‎ «node tits =, eth = are ‏ی ره‎ ae imi, ‏اا‎ هنگامی که مدل چنگل تصادفی آموزش داده شد؛بییید از آن برای پیش بیتی استفاده کنیم: ‎y_pred = classifier.predict(X_test)‏ cm = metrics.confusion matrix(y test, y_pred) en ‏که خروجی رأ به صورت زیر می دهد‎ out[10]: array({[s4, 4], L 3, 293}) حال, بیایید حساب کنیم که مدل ما چقدر خوب است: ‎metrics.accuracy_score(y test,y pred)‏ recall = metrics.recall_score(y test,y pred) precision = metrics.precision_score(y test,y pred) print (accuracy, recall,precision) accurac خروجی زیر را مشاهده خواهیم کرد

صفحه 272:
0.93 8.30625 8 حالاء بياييد به ركرسيون لجستيك نكاه كنيم. ركرسيون لجستيى رگرسیون لجستیک یک الگوریتم طبقه بندی است که برای طبقه بندی دودویی استفاده می شود. از یک تایه لجستیک برای فرموله كردن تعامل بين ويزكى هاى ورودی و برچسب استفاده می کند. اين يكى از سادهترين تكنيكهاى طيقهيندى است که برای مدل‌سازی یک متفیر وابسته دودویی استفاده می‌شود. مفروضات رگرسیون لجستیک موارد زیر را فرض می‌کند ۰ مجموعه داده آموزشی مقدار گمشده ای ندارد + برچسب یک متفیر موضوعی دودویی است. برچسب ترتییی است - به عبارت دیگرء یک متفیر موضوعی با مقادیر مرتب * همه ويزكى هايا متغيرهاى ورودى مستقل از يكديكر هستند. برفراری رابطه برای رگرسبون لجستیک مقدار پیش‌بنی‌شده به صورت زیر محاسبه می‌شود ([+ 1 ۵) ۵ بییید فرض کنیم 50[ ‎OX+‏ اكنون: 268

صفحه 273:
on oo = ‏علب‎ رابطه قبلى را مى توان به صورت كرافيكى به صورت زير نشان داد: 10 ‏وه‎ ‎os ‎97 ‎9۶ ‎05 ‎94 ‎03 ‎92 توجه داشته باشید که گر 2 بزرگ باشد (2) ۵ برایر با 1 خواهد بود. اگر 2 بسیار کوچک با یک عدد منفی بزرگ باشد (2) 6 برایر 0 خواهد بود. همچنین وفتی 0< 2 باشد, ۵۰.5-(2) 6 است. 5100018 یک ‎wb‏ طبیعی برای نشان دادن احتمالات است, زيرا به طور دقيق بين 0 و1 محدود شده است. هدف از آموزش یک مدل 269

صفحه 274:
رگرسیون لجستیک, یافتن مقادیر صحیح برای ۷ و ژ است. رگرسیون لجستیک به خاطر تابعی که برای فرمول‌بندی آن استفاده می‌شود به نام تابع لجستیک با سیگموید نامگذاری می‌شود. توابع زیان و هزینه تابع زبان تعریف می کند که چگونه مي خواهیم یک خطا را برای یک مثال خاص در داده های آموزشی خود محاسبه کنیم. تايع هزیته تعریف می کند که چگوته می خواهیم یک خطا را در کل مجموعه داده آموزشی خود به حداقل برسانیم. بنابراین, تابع زیان برای يکي از مثال‌های مجموعه داده آموزشی و تاع هزینه برای هزینه کلی استفاده می‌شود که انحراف كلى مقادير واقعى و بيش بين شده را نشان مىدهد. اين تابع به نتضاب ۷ و ظ يستكى ذارد. تايع زيان موزد استقادة در ركرسيون لجشتيك براق مثال خاض 1 در مجموعه آموزشی به شرح زیر است: رت وما ز رت + ‎tog yt)‏ ان باشید که وفتی ‎Loss(y(i), yi)‏ .1 = (۷)1<- ‎(ogy)‏ .یه حداقل رساندن زیان منجر به مقدار زيادى از (ال مى شود. به عنوان یک تابع سبگموید, حداکثر مقدار 1 خواهد بود. اگر ((۱// ,)1۵550 ۵۰ ۶ ‎y(i)‏ ‏()/-1) ود - >. ببه حداقل رساندن زیان منجر به کوچک شدن ( تا حد امکان می شود که 0 است. نیع هزینه رگرسیون لجستیک به شرح زیر است: ‎Cost(w,b) = ; Ye Loss(y,y) ‎ ‎yli)) =‏ ,600 ععصا توجه داشته ‏زمان استفاده از رگرسیون لجستیک ‎270 ‎ ‎

صفحه 275:
رگرسیون لجستیک برای طبقه ند های دودویی عالی عمل می کند. رگرسیون لجستیک زمانی که داده ها بسبرزیاد هستند و کیفیت داده ها عالی تیست, خبلی خوب عمل نمی کند. می تواند روابطی را که خیلی پیچیده تیستند درک کند. دز حالی که معمولا يهترين عملكرد را ندارد, اما معيار بسبار خوبی را برای شروع تعيين مى کند استفاده از الكوريتم ركرسيون لجستيك براى جالش طبفه بند ها در اين بخش, خواهیم دید که چگونه می توانیم از الگوریتم رگرسیون لجستیک برای چالش طبقه بند ها استفاده کنیم: 1. ابتدا بيابيد يك مدل رگرسیون لجستیک را مثال بزنیم و آن را با استفاده از داده های آموزشی ,آموزش دهیم: from sklearn.linear_model import LogisticRegression Classifier = LogisticRegression(random state = 0) Classifier. fit(X train, y train) ابید مقادیرداده های آزمون را پیش بینی کنیم و یک ماتریس سردرگمی ایجاد کنیم: y pred = classifier.predict (x test) cm = metrics.confusion matrix(y test, y pred) cn با اجراى كد قبلى خروجى زير را دريافت مى كنيم:

صفحه 276:
Out [11]: array({[65, 3], ] 6, 26(1( حالا ابید به معیارهای عملکرد نگاه کنیم: accuracy= metrics.accuracy score(y test,y pred) recall = metrics.recall_score(y test,y pred) precision = metrics.precision score(y test,y pred) print (accuracy, recall, precision) با اجراى كد قبلى خروجى زير را دريافت مى كنيم: در مرحله بعد.باید به ‎SVM‏ نگاه کنیم. الگوریتم 5۷۲4 حالا ‎SVM a aul‏ نگاه کنیم. 51 طبقه بندی است که یک ابر صفحه بهینه را بيدا مى كند كه حاشيه بين دو كلاس را به حداكثر مى زساتد. در ‎La SVM‏ هدف بهیته سازی ماء به خذاكتر رسائدن حاشية است. حاشيه به عنوان فاصله بين ابرصفحه جداکننده (مرز تصمیم) و نمونه های آموزشی که نزدیک تر به اين ابر صفحه هستند. که بردارهای پشتیبان نامیده می شوند, تعریف می شود. بنایراین, اجازه دهید با یک مثال بسیارابتدایی با تتها دو بعد 162 و ۱02 شروع کنیم. ما یک خط مى خواهيم نا دايره ها را از صلیب ها جدا کند. این در نمودار زیر تشان داده 2

صفحه 277:
شکل 9-7: الگوریتم ‎SVM‏ ها توح كعم انرو هر جوكاملاً عايب ‎goa We Le ols Ap ta‏ كني با انق حال, بايد يك خط بهينه يا مرز تصميم وجود داشته باشد که بهترین شانس را سرای طبفه‌بندی صحیح بیشتر تمونتهاى اضافى به ما می‌دهد. یک انتضاب معفول ممکن است خطی باشد كه بين اين دو كلاس به طور مساوى فاصله داشته باشد نا يبراي هز كلاس كمن فاضلة ايجاد كندء همانطور که تشان داده شده است: 273

صفحه 278:
‘Support vectors و Decision boundary wik=0 “Negative” “positive” hyperplane hyperplane whe-L w= x شکل 10-7: مفاهیم مربوط به 51/1 حال,ببایید ینیم چگونه می توانیم از 51۸ برای آموزش یک طبقه بندی براق چالش خود استفاده کنیم. استفاده از الگوریتم 5۷1۸ برای چالش طبفه بند ها تا پیید طبقه‌بند 5/9 را نمونه‌سازی کتیم و سپس از بخش آموزشی داده‌های برچسبگذاری‌شده برای آموزش آن استفاده کنیم.فرایاامتر هسته, نوع تبدیلی را که روی داده های ورودی اعمال می شود, تعبین می کند تا بتوان آن را به صورت خطی چدا کرد from sklearn.svm inport SVC classifier = SvC{kernel = ‘Linear’, randon_state = 6) classifier. fit(x train, y train) ama

صفحه 279:
يس أز آموزش: بيابيد جند پیش‌بینی ایجاد كتيم و به ماتریس سردرگمی تگاه کنیم: كفت )ع ذلعمم. معذكتودقكء ع ۱۳ cm = metrics.confusion matrix(y test, y pred) co ‏خروجی زیر را مشاهده كنيد:‎ ‏بهمعیارهای مختلف عملکرد نگاه کنیم:‎ soles ‏اكتونء‎ ‎accuracy= metrics accuracy score(y test,y pred) recall = metrics.recall_score(y test,y pred) precision = metrics.precision_score(y test,y pred) print (accuracy, recall, precision) پس از اجرای کد فبلی,مقادیر زیر را به عنوان خروجی دریافت می كنيم: درک الگوریتم بیز ساده بر اساس تتوری احتمال؛ بیز ساده یکی از ساده ترین الگوریتم های طبقه بندی است. اگر به درستی استفاده شود, می تواند پیش بینی های دقیقی داشته باشد. الگوریتم 825 ۱۱۵/۷۵ به دو دلیل نامگذاری شده است:

صفحه 280:
متس بر یک فرض ساده است که بين وبژگی ها و متیر ورودی استتلال ‎SEs‏ ‏ون ‎ial yyy aged. paltal‏ این الگوریتم سعی می کند نمونه ها را بر اساس احتمالات صفات/نمونه های قبلی با فرض استقلال کامل ویژگی, طبقه بندی كند. سه نوع رويداد وجود دارد: رویدادهای مستقل بر احتمال وقوع یک رویداددیگر تأثیری نمی‌گذارند (به عتوان مثال, دریافت ایمیلی که به شما اجازه ورود رایگان به یک رویداد فناوری و سازماندهی مجدد در شرکت شما را می‌دهد). رويدادهاى وابسته بر احتمال وقوع يك رويداد ديكر تأثير مى كذارد. يعتى بيه توعى به هم مرتبط هستند (مثلاً احتمال ايتكه شما به موقع به يك كتفرانس برسيد مى تواند تحت تأثير اعتصاب كاركنان خطوط هوایی يا پروازهایی باشد كه ممكن أست به موقع اتجام نشونة) رویدادهای انحصاری متقابل نمی توانند به طور همزمان اتفاق بيفتند (مثلاً احتمال انداختن سه و شش روى يك تاس منفرد 0 است - اين دو نتيجه انحصارى متقابل هستند). قضیه بیز قطیه بیز. برای محاسیه اختمال شرطی بین دو رویداد مستقل, ۸ و 8 استفاده می شود. احتمال وشوع روبدادهای ‎PIA) LB A‏ و (۶)8 نشان داده می شود. احتمال شرطی با (۴)8۱۸ نشان داده می شود, که با توجه به اینکه رویداد ۸ رخ داده است. احتمال شرطی رخ دادن رویداد 8 است: P(BIA)P(A) P(AIB) = ‏وت‎ 276

صفحه 281:
محاسیه احتمالات ‎Bayes‏ ۱۱۵/۷6 مبتتی بر اصول احتمال است. احتمال وفوع یک رویداد واحد (احتمال مشاهده‌ای) با در نظر گرفتن تعداد دفعات وقوع رویداد و تقسیم آن بر تعداد کل فرآیندهایی که می‌توانست به آن رویداد منجر شود محاسیه مىشود. به عنوان مثال, یک مرکز تماس روزانه بر اساس 50 باری که در بازه یک ماهه ثبت شده,بیش از 100 تماس پشتیبانی دریافت می کند. شما می خواهید بدانید که بر اساس دفعات قیلی که به یک تماس پاسخ داده شده است, احتمال اینکه در کمتر از 3 دفيقه به آن پاسخ داده شود. چقدر است. اگر مرکز تماس موفق شود اين رکورد زمانی را در 27 بارانجام دهد, احتمال مشاهده 100 تماس در کمتر از 3 ‏دقيقه به ضورت زیر است: ‏۶ (100 تماس پشتیانی در کمتر از 3 دقیقه) ‎ ‎54 (054 = (50/27) = ‏0 تماس را می توان در کمتر از 3 دفيقه در نیمی از زمان پاسخ داد. بر اساس سوابق 50 باری که در گذشته اتفاق افتاده است. ‏فوانین ضرب برای رویدادهای ۸018 برای محاسیه احتمال وقوع دو با چند رویدادبه طور همزمان, مستقل یا وایسته بودن رويدادها را در نظر بگیرید.اگر آنها مستقل باشند, از قانون ضرب ساده استفاده می شود: 8 (نتیجه 1 و نتیجه 2) < ۴ (نتیجه 1) * 8 (نتیجه 2) برای مثال, براى محاسيه احتمال درياقت ايميل با ورود رايكان به يك رويداد قتي و سازماتدهى مجدد در محل كار شماء از اين قانون ضرب ساده استفاده مى شود. ابن دو رويداد مستقل هستند زيرا وقوع يكى بر شاتس وقوع ديكرى تأثير تمن كذارد اكر دريافت ايميل رويداد فتی 31 درصد و احتمال سازماندهی مجدد کارکنان 82 درصد باشد,احتمال وقوع هر دو به شرح زیر محاسبه می شود ‎27 ‎ ‎

صفحه 282:
P(email AND re-organization) = P(email) * P(reorganization) = (0.31) * (0.82) = 0.2542 (25%) قانون ضرب عمومی اگر دو یا چند رویداد وایسته باشند. از فانون ضرب عمومی استفاده می شود. اين فرصول در واقع در هر دو مورد رویدادهای مستقل و وایسته معتیر است: ‎(outcome 1 AND outcome 2)=Ploutcome 1)*P(outcome 2 |‏ ‎a29:.outcomel)‏ داشته باشید که )1 ‎P(outcome 2 | outcome‏ به احتمال مشروط وفوع نتیجه 2 با توجه به اینکه نتیجه 1 قباً رخ داده است. اين فرمول وابستگی ‎gu‏ رویدادها را در بز می گیرد: اگر رویدادها مستقل باشند اختمال شرطی نامربوط است زیرا یک نتیجه بر شانس وشوع دبگری تأثیر نمی گذارد. و ‎P(outcome 2 | outcome 1)‏ به سادگی (2 ‎P(outcome‏ است. توجه داشته باشید که فرمول در اين مورد فقط به قانون ضرب ساده تبديل مى شود فوانین اضافه برای رویدادهای 011 هنگام محاسبه احتمال وفوع یک رویداد یا رویداد دیگر (متقابل انحصاری), از قانون جمع ساده زیر استفاده می شود: = )2 ‎Ploutcome 1 OR outcome‏ ‎Sle! Jie ulgis a Pfoutcome 1) + Pfoutcome 2)‏ )9 آمدن 6 با 3 جقدر است؟ برای پاسخ به اين سوال: ابتدا توجة داشته باشید که هر دو نتیجه نمی توانند به طور همزمان رح دهند. احتمال رو آمدن یک 6 (6/1) است و همین امر را می توان ‎ly‏ رو آمدن یک 3 در تظر گرفت:0.33 - )1/6( + )1/6( = (3 08 ۳66 (3396) در صورتى كه رويدادها متقايل اتحصارى تيستند و مى تواتتد به طور همزمان اتفاق بيفتندء از فرمول جمع كلى زير استفاده كنيد كه هميشه در هر دو مورد اتحصار متقابل و عدم اتحصار متقابل معتير است: 08 3 60/6۵7۵ 278

صفحه 283:
outcome 2) = Ploutcome 1) + Pfoutcome 2) P(outcome 1 AND outcome 2) استفاده از الگوریتم ساده بیز برای چالش طبقه بند ها حالا بياييد از الكوريتم ساده بیز برای حل چالش طبقه‌بند استفاده کنیم: 1. ابتدا ‎oly Ly GaussianNB() eb‏ 0245 و از آن ببرای آموزش مدل استفاده فى کنیم: ۱ ‏8المقتكعنة6 ععدمسة معبرقط متهم معقع‎ GaussianNB() classifier. fit(X train, y train) classifier شل ی سل آمپرس‌عیمهبزای یس پم نا ناه خیم سا از آن بای پیش‌بینی برچسب‌های پاتیشن آزمایشی خود استفاده خواهیم کرد که ‎X fest‏ است: پیش بیس نتیج مجموعه آزمون y_pred = classifier.predict (X test) cm = metrics.confusion_matrix(y test, y_pred) cm حالا بياييد مأتريس سرد ركمى را جاب کنیم: out{ae}: areayit tse, 2), (6, 2811) 279

صفحه 284:
اكتون: بيابيد ماتريس هاى عملكرد را جاب کنیم تا کیفیت مدل آموزش دیده خود را محاسبه ‎iS‏ netrics.accuracy_score(y test,y pred) metrics. recalt_score(y testy pred) precision = metrics.precision score(y test,y pred) accurac recall print (accuracy, recall, precision) که خروجی را به صورت زیر می دهد 0.92 0.2125 0.s2es7iazas7aze6 ‏برای الگوریتم های طبقه بندی, برنده است‎ بيابيد به معيارهاى عملكرد الكوريتم هاى مختلفى كه ارائه كرده ايم نكاه كنيم. اين در جدول زیر خلاصه شده است: الكوريتم = ترج بادآوری ‎a‏ ‏درخت تصميم ۰ [ 037 033 5 ‎XGBoost‏ 033 730 037 ‎salar ES‏ ]093 730 037 ‎oar 031 Logistic‏ 3 57 35 2 037 بي ساي 55 021 7 280

صفحه 285:
با نگاهی به جدول فیل, می‌توان مشاهده کرد که طبقه‌بند درخت تصمیم از نظر صحت و یادآوری بهترین عملکرد را دارذ. اكر ما به دتبال دقت هستيم. بس بين 5 و بيز ساده رابطه وجود دارد. بنابراين هر كدام براى ما كار خواهد كرد. آشنایی با الگوریتم های رگرسیون أكر برجسب يك متفیر پیوسته باشد, مدل یادگیری ماشین نظارت شده از یکی از الگوریتم‌های رگرسیون استفاده می‌کند. در اين مورد. مدل یادگیری مایشین بیک رگرسیون نامیده می‌شود. در اين بخش, الگوریتم‌های مختلفی را ارنه می‌کنيم که می‌توان از آنها برای آموزش یک مدل رگرسیون بادگیری ماشین با نظارت یا به‌طور ساده, رگرسیون استفاده کرد. فبل از اینکه به جزئیات الگوریتم ها بپردازیم. اجازه دهید ابتدا جالشى براى اين الگوریتم ها ایجاد کنیم تا عملکرد. توانایی ها و ثربخشی آنها را آزمایش کنیم. ارائه جالش رگرسیون مشابه رویکردی که با الگوریتمهای طبقه‌بندی استفاده کردیم. نتدا یک مستله را به عنوان چالشی برای همه الگورنتم‌های رگرسیون ارانه خواهیم داد. ما این مسئله رایج را چالش رگرسیون می‌نامیم. سپس, از سه الگوریتم رگرسیون مختلف برای رسیدگی به چالش استفاده خواهیم کرد. اين رویکرد استفاده از چالش مشترک برای الگورنتم های رگرسیون مختلف دو مزیت دارد: می توانیم داده ها را یک بار آماده کنیم و از داده های آماده شده در هر سه الگوریتم رگرسیون استفاده کنیم. ما مىتوانيم عملكرد سه الگوریتم رگرسیون را به روشی معنی‌دار مقایسه کنیم؛ زيرا از آنها براى حل همان مستله استفاده خواهیم کرد اد به بیان مستله چالش نگاه كنيم.

صفحه 286:
بیان مسئله چالش رگرسیون پیش بیتی مسافت پیموده شده خودروهای مختلف این روزها از اهمیت زبادی ‎Sal A aly ling Se SA Adi‏ براق حرط ززست عوی ‎i a 9 il‏ مقرون به صرفه است. مسافت پیموده شده را مى توان از روی شدرت مونور و ویژگی های وسیله نقلیهتخمین زد. ابید چالنتی را برای رگرسیون ایجاد کنیم تا مدلی را آموزش دهند که بتواند مایل در هر گالن (۸۸8۵) یک وسیله نقلیه را بر اساس ویژگی‌های آن پیش‌بینی کند. بیایید به مجموعه داده‌های تاربخی که برای آموزش رگرسیون استفاده خواهیم کرد نگاه کنیم. کاوش مجموعه داده های تاربحی ویژگی‌های مجموعه داده‌های داده تاریخی که ما در اختبار داريم, به شرح زير we ‏تم‎ 00 ‎Taina Epp TENE]‏ | وسله نله حاص را متخص می ‎as‏ ‎EUS pal bala ‏تمد‎ apr] CYLINDERS ‎ae a Tia] DISPLACENENT ‎ag] HORSEPOWER‏ آسب بخار موتور ‎apr] ACCELERATION |‏ زهان لم براق شاب كبرق 1ر165 ‎ule 60‏ در ساعت (بر حسب ‎ ‎ ‎ ‎ ‏ود ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 287:
برچسب این مسئله یک متفیر پیوسته ۱/86 است که ۴0۴9 را برای هر یک از وسایل تقلیه مشخص می کند. اجازه دهد ایتدا خظ لوله پردازش داده را برای این مستله طراحن کتیم. مهندسی ویژگی با استفاده از خط لوله پردازش دا بیابیدببينیم چگونه می‌توانیم یک خط لوله پردازش قابل استفاده مجدد برای مقابله با چالش‌های رگرسیون طراحی کنیم. همانطور که گفته شد داده ها را یک بار آماده کرده و سپس در تمامی الگوریتم های رگرسیون استفاده می کنیم. بیبید اين مراحل را دتال نیم 1. ما با وارد كردن مجموعه داده به شرح زير شروع مى کنیم dataset = pd. read_csv(‘auto.csv') حال پیاید پیش تمایش مجموعه داده را مشاهده کنیم: dataset head (5) مجموعه داده به اين صورت خواهد بود: 283

صفحه 288:
حالا بيابيد به انتخاب ويزكى ادامه دهيم. بياييد ستون ۱۷۵۱۸8 را حذف کنیم زیرا فقط یک شناسه است که برای خودروها لازم است. ستون‌هایی که برای شناسایی ردیف‌های مجموعه داده ما استفاده می‌شوند. برای آموزش مدل مرتبط نیستند. پیایید این ستون را حذف کنیم: dataset=dataset..drop(columns=[ 'NAME" ]) بییید همه متفیرهای ورودی را تبدیل کنیم و تمام مقادیرتهی را به آن اضافه کنیم dataset=dataset .drop (coLunns=[ 'NAME']}) dataset= dataset .apply(pd.to_nuneric, error: dataset. fillna(®, inplace coerce’) rue) ‏کیثیت داده ها را بهبود می بخشد و آنها را برای استفاده برای‎ ۱۳۱۵200 ‏آموزش مدل آماده می کند. الا بيابيد مرخله تهابى رأ ببينيم:‎ باید دده ها را به پارتیشن های آزمون و آموزشی تقسیم کنیم: ‎from sklearn.nodel selection import train test split‏ ‎#from sklearn.cross validation import train test split‏ ‎X train, X test, y train, y test = train test_split(x,‏ ‎y, test size = 0.25, random state = 0)‏ بخ ‎pL URIS‏ 60 زا اج 6335 ‎iia‏ ‏: ساختار داده ای حاوی ویژگی های داده های آموزشی ‎ol ela bola : 2۴‏ حاوی ویژگی های آزمون ‎train‏ ¥ : بردار حاوی مقادیر برچسب در مجموعه داده آموزشی ‎29 ‎ ‎

صفحه 289:
5۴( : بردار حاوی مقادیر برچسب در مجموعه داده آزمون حال ‎ule‏ ازداذة هاى آماده شده بر روی سه رگرسیون مختلف استفاده کنیم تا يتوانيم عملكرد آنها رايا هم مقايسه كنيم. رگرسیون خطی از بين تمام تکنیک‌های یادگیری ماشیتی با نظارت, الگوریتم رگرسبون خطی ساد‌ترن الگوریتم برای درک است. ابتدا به ركرسيون خطى ساده نگاه می کنیم و سپس مفهوم را به رگرسیون خطی چندگانه گسترش می دهیم. رگرسیون خطی ساده در ساده ترين شکل, رگرسیون خطی رابطه بين يك متغير مستقل ببوسته ويك متغیر مستقل پیوسته منفرد را فرموله می کند. از یک رگرسیون (ساده) برای تشان دادن میزانی استفاده می شود كه تغييرات در يك متغير وابسته (نشان ذاده شده در محور ۷) را می توان به تغییرات یک متفیر توضیحی (نشان داده شده در وألاة») نسيت داد. مى توان آن را به صورت زير نشان داد: y=(X)wt+a این فرمول را مى توان به صورت زیر توضيح داد ‎Y‏ متفیر وایسته است. ‎285 ‎ ‎

صفحه 290:
‎X‏ متفیر مستقل است. ‏تاشیبی است که نشان مي دهد برای هر افزایش * چقدر خط افزايش می باید. » فاصله ای است که مقدار لا را در زمانی که ۵ * 1 نشان می دهد. ‏ید موه از روط نزن یک هیر واه نون ویک ‎aia Sida jin‏ تمرح ویر است: ‏* وزن فرد و کالری دریافتی او ‏> افيس اه تساج آنبن سسب افو ريع درنگ معلذفامن, ‏*_ رطویت هوا و احتمال بارندگی برای رگرسیون خطی, هم متفیر ورودی (مستفل) و هم متغیر هدف (وایسته)باید عددی باشند يهترين رابطه با به حداقل رساندن مجموع مجذورات فواصل عمودی هر نقطه از ‎wins Lav‏ نت ار 1 1 ا[ فترسن زتر این شنت که رابطه بن متفیز پیش بینی کننده و برچسب خطی است. به عنوان مال: هر چه پول بیشتری در تحقیق و توسعه سرمایه گذاری شود, فروش بالاتری خواهد داشت: پيایید به یک متال خاص نگاه کنیم. بیانید سعی کنیم رابطه بین هزینه های بازاربابی و فروش را برای یک محصول خاص فرصول بندی کنیم. نها به طور مستقیم با یکدیگر در ارتباط هستند. هزینه های بازاربایی و فروش بر روى يك تموداردو بعدی ترسیم شده و به صورت الماس آپی تشان داده شده است. ان رابطه را می توان با ترسیم یک خط منتقیم. مانتدتمودار زیر, تقریب زد ‎286 ‎ ‎

صفحه 291:
sales ($ 0005) ۰ 10 20 30 0 50 60 Marketing Expenditure ($ 0005) شکل 11-7: رگرسیون خطی هنگامی که خط رگرسیون خطی ترسیم شد. می تونیم رابطه ریاضی بین هزینه ها بازاريابى و فروش را مشاهده كنيم. ارزیابی رگرسیون خط رگرسیون خطی که رسم کردیم تقریبی از رابطه بین متفیرهای وابسته و مستفل است. حتی بهترین خط دارای مقداری انحراف از مقادیر واقعی خواهد بود. همانطور که نشان داده شده است:

صفحه 292:
شکل 12-7: ارزیابی رگرسیون یک روش معمولی برای محاسبه عملکرد مدل های رگرسیون خطی با استفاده از ريشه میانگین مریعات خطا (8۸5) است. این انحراف استاندارد. خطاهای ایجاد شده توسط مدل آموزش دیده را به صورت ریاضی محاسبه می کند. به عنوان مثال, در مجموعه داده آموزشی, تایع زیان به صورت زیر محاسبه مي شود: ‎Loss‏ ‎prio Jged oul (HUD, YD) = L2G YD)?‏ به تايع هزيته زير مى شود. ,كه زيان تمام نمونه های مجموعه آموزشی را به حداقل می رساند: بيابيد سعى كتيم 81156 را تفسیر کنیم. اگر 8۱/58 برای مدل مثال ما 50 دلار باشد که قیمت یک محصول را پیش‌بینی می‌کند, به اين معنی است که حدود 238

صفحه 293:
6.2 از پیش‌بینی‌ها در 50 دلار ارزش وافعی (یعتی 0) قرار می‌گیرند. همچتین به اين معتی است که 95 از پیش بینی ها در 100 دلار(یعنی 20) از ارزش واقعی قرار می گیرند. در نهایت. 799.7 از پیش بینی ها در 150 دلار از ارزش واقعى قرار مى كيرند. رگرسیون چندگانه وافعیت این است که بیشتر تحلیل های دنیای وافعی بیش از یک متفیر مستقل دارند. رگرسبون چندگانه بسط رگرسیون خطی ساده است. تفاوت اصلی این است که ضرایب بتا اضافی برای متغیرهای پیش بینی اضافی وجود دارد. هنگام آموزش یک مدل, هدف یافتن ضرایب بتا است که خطاهای معادله خطی را به حداقل می رساند. بيابيد سعى كنيم رابطه بين متغير وابسته و مجموعه متغيرهاى مستقل (ويزكى ها) را به صورت ریاضی فرموله کنیم. مشابه يك معادله خطی ساده. متغير وابسته. لا به عنوان مجموع یک جمله ثابت به اضافه حاصل ضرب ضرایب 8 محاسیه می شود. ضرب در مقدار < برای هر یک از ویژگی های > لا :أ ع +۵ ج+2 82 +8111 +۵ خطا باع نمایش داده می شود و نشان می دهد که پیش بینی ها کامل نیستند. ضرایب 8 به هر ویژگی اجازه می دهد تا اثر تخمینی جداگانه ای روی مقدار لا داشته باشد زیرا لا با مقدار | 8 برای هر واحد افزایش در ‎xi‏ تغيير مى کند.علاوه بر ان. فاصله (۵) مقدار مورد نتطار زرا زمانی تشان می‌دهد که متفیرهای مستقل همه 0 باشتد. توچه داشته باشید که همه متفیرهای معادل» قبلی را می‌توان با دسته‌ای از بردارها تشان داد ‎UL GLA‏ 9 1 0 ركرسيون» 8. و خطاها © , نيز بردار هستند. استفاده از الگوریتم رگرسیون خطی برای چالش های رگرسیون 289

صفحه 294:
حالا بایید مدل راب استفاده از بخش آموزشی مجموعه داده. آموزش دهیم: 1. ببابيد با وارذ كردن بسته ركرسيون خطى شروع کنیم: from sklearn.Linear_model import LinearRegression سپس بیایید مدل رگرسیون خطی را مال بزتیم و آن را با استفاده از مجموعه داده آموزشی آموزش دهیم: ‎regressor = LinearRegression()‏ ‎regressor.fit(X train, y train)‏ حال, بياييد نتايج را با استفاده از بخش آزمون مجموعه داده بیش بینی کنیم: y_pred = regressor.predict (X_test) from sklearn.metrics import mean_squared error from math import sqrt sqrt (mean_squared error(y test, y pred)) خروجی تولید شده با اجرای کد قبلی, موارد زیر را ایجاد می کند 00 ]101: 4 9 هماتطور كه در بخش قبل بحث شد, 8045۴ انحراف استاندارد خطا است. این نشان می دهد که 768.2 از پیش بیتی ها در 4.36 از مقدار برچسب فرار می 5 290

صفحه 295:
جه زمانی از رگرسیون خطی استفاده می شود؟ رگرسیون خطی برای حل بسیاری از مسائل دنبای واقعی از جمله موارد زبر استفاده می شود: پیش بینی فروش پیش بینی قیمت بهینه محصولات محاسبه رابطه علی بین یک رویداد و پاسخ. مانند آزمایشات دارویی بالینی: تست های آیمنن مهندسی, یا تفیقات ‎oily‏ یفتانتنایین الگوهانی که امت‌تزانند باق پیش تیا راخاز یه با توجهابه: معیارهای شناخته شده مورد استفاده فرار گیرند- برای مثال, پیش‌بینی خسارت بیمه, حسارت بلایای طبیعی, نتايح انتخانات, و میزان جرم و جنیت نقاط صعف رگرسیون خطی تقاط ضعف رگرسیون خطی به شرح زیر آست: فقط با ویژگی های عددى كار مى كند. داده های موضوعی بايد از قبل بردازش شوند. به خوبی با داده هاى كمشده كثار تمى آيد. در مورد داده ها مفروضاتى ايجاد مى كند. الگوریتم درخت رگرسیون فريس ‎cays‏ رگرسیون ماب انگوریم درفت طبقهبندی ات با لین تاو که برچسب یک متغیر پیوسته است, نه یک متفیر گسسته. استفاده از الگوریتم درخت رگرسیون برای چالش های رگرسیون 2a

صفحه 296:
در این بخش. خواهیم دید که چگونه می توان از الگوریتم درخت رگرسیون برای چالش رگرسیون استفاده کرد: 1. ابتدا مدل را با استفاده از الگوریتم درحت رگرسیون آموزش می دهیم: ‎y train)‏ رمتهی 5و دعوم ‎ ‎ ‎ ‎ ‎ ‏هنگامی که مدل درخت رگرسیون آموزش داده شد؛ از مدل آموزش دیده برای پیش بینی مقادیز استفاده می کنیم: ‎y_pred = regressor.predict(X_test)‏ ‏سپس, 8805۴ را برای عملکرد مدل محاسبه مىكنيم: ‎from sklearn.metrics import mean squared error‏ ‎from math import sqrt ‎sqrt(mean_squared error(y test, y pred)) ‏خروجی زیر را دریافت می کنیم: ‏ممم جد :[5م]غنية ‏الكوريتم ركرسيون تقويت كراديان ‏فد ‎ ‎

صفحه 297:
بیایید اکنون به الگوریتم رگرسیون تقویت گرادیان نگاه کتیم. از مجموعه ای از درختان تصمیم در تلنش برای فرموله کردن بهتر الگوهای اساسی در داده ها استفاده می کند. استفاده از الگوریتم رگرسیون تقویت گرادیان برای چالش رگرسیون در این بخش, خواهیم دید که چگونه می توانیم از الگوریتم رگرسیون تقویت گرادبان برای چالش رگرسیون استفاده کنیم: 1. ايتدا مدل را با استفاده از الگوربتم رگرسیون تقویت گرادیان آموزش می 59 هنگامی که مدل الگوریتم رگرسیون گرادیان آموزش داده شد. از آن برای پیش‌بینی مقاذیر استفاده می‌کنيم: y_pred = regressor.predict (X_test) 293

صفحه 298:
در تهایت, ما ‎RMSE‏ را برای محاسبه عملکرد مدل محاسبه می‌کنيم: from sklearn.metrics import mean_squared error from math import sqrt sqrt (mean_squared error(y test, y pred) اجرای اين مقدار خروجی را به صورت زیر به ما می دهد: out[7}: 4.0s4836373005085, برایالگوربتم های رگرسیون, برنده است بيابيد به عملكرد سه الگوریتم رگرسیون که در داده‌های مشابه و دقيقاً مورد استفاده یکسان استفاده کردیم نگاه کنیم: الكوريتم ‎RMSE‏ ‏رگرسیون خطی 7075 درخت رگرسیون 702288377 5.2771 رگرسیون تقویت گرآدبان 75 با نگاهی به عملکرد همه الگوریتم‌های رگرسیون, بدبهی است که عملکرد رگرسیون تقویت گرادیان بهترین است زیرا کمترین 8145 را دارد. به دنبال آن رگرسیون خطی انجام می شود. الگوریتم درخت رگرسیون بدترین عملکرد را برای اين مسئله دارد مثال عملی - چگونه آب و هوا را پیش ببنی کنیم 208

صفحه 299:
بیییدببنيم چگونه من توأنیم از مقاهیم توسعه یافته دز این فصل بیرای پیش بدنی آب و هوا استفاده کنیم. بایید فرض کتیم که می‌خواهیم بر اساس داه‌های جمع‌آوری‌شده در طول یک سال برای یک شهر خاص, پیش‌بینی کنیم که آبا فردا باران خواهد بارید یا خیر. داده‌های موجود برای آموزش این مدل در فایل 65۷ به نام ۱۷6۵۱۳۵۲۰۵۷ است: 1. ببابيد داده ها را به عنوان يك قاب داذه 3003م وارد كنيم: ‎import nunpy as np‏ ‎import pandas as pd‏ ‎df = pd.read_csv(“weather.csv")‏ بيابيد به ستون ‎sla‏ قاب داده نگاهکنیم ‎‘Evaporation’, “sunsne’,‏ و ‎ ‎ ‎ ‎we ‎ ‏در مرحله بعد. بیایید به سربرگ 13 ستون اول داده های ‎lS: weather.csv‏ ‏كنيم: ‎295 ‎ ‎

صفحه 300:
اکنون,اجازه دهید به 10 ستون آخر داده های ۱/6۵8067,>5۷ نگاه كنيم: پییید از« برای نمایش ویژگی های ورودی استفاده کنیم. ما فیلد تاریخ را برای لیست ویژگی حذف می کنیم زیرا در زمیته پیش بینی ها مفید تیست. ما همچتین برچسب ‎Ly RainTomorrow‏ حذف مى كنيم: df.drop({'Date' , ‘RainTomorrow' ] ,axis=1) بیبید از با برای نشان دادن برچسب استفاده کنیم 9 حالا بباييد داده ها را به 5 ۵63181851 تفسیم کنیم 296

صفحه 301:
from sklearn.model_selection import train test split train.x , train y ,test x, test_y = train test_split(x,y , test_size = 0.2,random state 2) از آنجابی که برچسب یک متفیر دودوبی است, ما در حال آموزش یک طبقه‌بند هستيم. بتايراين, ركرسيون لجستيك در اينجا انتخاب خوبى خواهد يود. ابتدا بياييد مدل ركرسيون لجستيك را مثال بزنيم: model = LogisticRegression() اكنون مى توانيم از 7۵/0 و ۱۵51 برای آموزش مدل استفاد كنيم: model.fit(train x , test_x) يس از آموزش مدل, بیبید از آن برای پیش بینی استفاده کنیم predict = model.predict(train y) jp lau Ly 29% oar ‏اکنون,باییددقت مدل آموزش‎ et ‏لام سصع‎ ا ل :]0[ بر tm [21] accuracy seore(predict , test y) out[91] + 0.9696969596069697

صفحه 302:
اکنون می توان از این طبقه بند دودوبی برای پیش بینی بارندگی فردا ستفاده کرد wells در اين فصل, با نگاهی به اصول یادگیری ماشینی با نظارت شروع کردیم. سپس. الگوریت‌های طبفه‌بندی مختلف را با جزئیات بیشتری بررسی کردیم. در مرحله بعد روش‌های مختلفی را برای ارزیایی عملکرد طبقه‌بندها بررسی کردیم و الگوریت‌های رگرسیون مختلف را مطالعه کردیم. ما همچنین روش‌های مختلفی را که م‌توان برای ارزیابی عملکرد الگوریتمهایی که مورد مطالعه فراز دادیم؛ مورد بررسى قرار داديم. در فصل بعدى, به شبکه‌های عصبی و الگویتم‌های یادگیری عمیق خواهیم پرداخت. ما به روش های مورد استفاده برای آموزش یک شیکه عصبی و همچتین به ابزارها و چارچوب های مختلف موجود برای ارزیابی و استقرار یک شبکه عصبی نگاه خواهیم کرد. 208

صفحه 303:
8 الگوریتم های شبکه عصبی "هیچ الكوريتمى براى طنز وجود ندارد". -- رابرت منكف تركيبى از عوامل مختلف, شبکه‌های عصبی را به يكى از مهم‌ترین تکنیک‌های بادكيرى ماشين تبديل كرده است. اين عوامل عبارتند از: نياز به حل مسائل یچیده ترء انفجار داده هاء و ظهور فناوری هایی مانتد محاسبات ابری که قدرت محاسياتى لازم براى طراحى و استفاده از الكوريتم هاى بسبار بيجيده را قراهم مى كند. در وافع, شبکه های عصبی یک حوزه تحقیقاتی است که به سرعت در حال تکامل اسنت و مستول بسیاری از پیشرفت‌های عمده ادعا شده توسط حوزه‌های فناوری پیشرفتهمانن بنیک, محاسیات لیه؛پردازش زنان طبیعی. و ماشین‌های خودران است. این فصل ابتدا به معرفی مفاهیم و اجزای اصلی یک شبکه عضبی معمولی پرداخته و سپس انواع مختلف شبکه های عصبی را ارائه کرده و انواع مختلف توانع فعال سازی مورد استفاده در اين شبکه های عضبی را توضیح می دهد: سپس الگوریتم پس انتشار به تفصیل مورد بحث قرار مى كبرد كه بركاربردترين الكوريتم ‎sly‏ آموزش شبکه عصبی است. در ادامه, تکنیک بادگیری انتقالی توضیح دادم می‌شود که می‌تون از آن برای ساده‌سازی و تا حدی خودکارسازی آموزش مدل‌ها استفاده کرد. در نهایت, نحوه استفاده از یادگیری عمیق برای علامت گذاری اسناد تقلبی از طریق یک نمونهکاربردی در دنبای واقعی بررسی می‌شود. مفاهیم اصلی زير در اين فصل مورد بحث قرار كرفتهاند ‎٠‏ آشتايى با شبكه هاى عصبى ‏* سير تکاملی شبكه هاى عصبى ‏* آموزش شيكة عصی ‏* ابزارها وجارجوب ها ‏* يادكيرى انتقالى ‎200 ‎ ‎

صفحه 304:
* مطالعه موردی: استفاده از بادگیری عميق برای کشف تقلب بیابید با نگاهی به اصول اولیه شبکه های عصبی شروع کنیم. تکامل شبکه های عصبی با نگاهی به ساختار یک شبکه عصبی مشاهده می کنیم. واحد اصلی آن یک نورون است. قدرت وافع شبکه عصبی در توانیی آن در استفاده از قدرت نورون های متعدد با سازماندهی آنها در یک معماری لابه ای تهفته است. یک شبکه عصبی با زنجیر کردن تورون ها به یکدیگر در لایه های مختلف, یک معماری لایه ای ابجاد می کند. سیگنالی از اين للیه ها عبور می کند و در هر یک از لایه ها به روش های مختلف پردازش می شود تا خروچی مورد تیازنهایی تولید شود. همانطور که در این فصل خواهیم دید. لیه‌های پنهان استفاده شده توسط شبکه‌های عصبی به‌عنوان لایه‌های انتزاع عمل می‌کنند و یادگیری عمیق را امکانپذیر می‌کنندد که به طور گسترده در تحقق برنامه‌های فدرتمندی مانند الکسای آمازون, جستجوی تصویر گوگل و ۳0105 600916 استفاده می‌شود تاريخجه با الهام از كار تورون ها در مغز انسان, مفهوم شبكه های عصبی توسط فرانک زوزنيلات در سال 1957 ارائه شد: براى ذرك كامل معمارى: تكاهى كوتاه به ساختار ‎a‏ ای نورون ها در مغز انسان مفيد است. (به شكل 1-8 مراجعه کنید تا ايده اى در مورد نحوه زنجير شدن تورون هاى مغز انسان به هم بيدا كنيد.) در مغز انسان, دندريت ها به عنوان حسكرهابى عمل مى كتند كه سيكتال را تشخيص مى دهند. سپس سیگنال به آکسون ارسال می‌شود كه یک برآمدگی بلند و باريك از يك سلول عصبی است. وظیفه آکسون انتقال اين سیگنال به عضلات, غدد و سایر تورون ها است. همانطور که در نمودار زیر نشان داده شده است. سیگنال قبل از 300

صفحه 305:
أبنكه به نورون های دیگر منتقل شود از طریق بافت متصل به هم به نام سینایس حرکت می کند. توجه داشته باشید که از طریق این خظ لوله ارگانیک, سیگنال به حرکت خود دام من دهد با زمانن كه به ‎atl Sil apa ban oad ly alan‏ عمل مورد تباز می شود. معمولاً هفت تا هشت میلی ثانیه طول می کشد تا سیگنال از زنجبره نورون ها عبور کند و به مقصد برس شکل 1-8: نورون زنجير شده در مغز انسان فرانک روزنبلات با الهام از اين شاهکار معماری طبیعی پردازش سیگنال, تکنیکی را ابداع کرد که به اين معنی است که اطلاعات دیجیتال را می توان در لایه ها براى حل یک مسئله یچیده ریاضی پردازش کرد. تلاش اولیه او برای طراحی یک شبکه عصبی بسیار ساده بود و شبیه یک مدل رگرسیون خطی بود. اين شبکه عصیی شاده هيع لایه پنهانی تداشت و پرسبترون نام گرفت: یک شبکه عضبی ساده بدون هیچ لاي اى به نام پرسبترون و تبدیل به واحد اصلی شیکه های عصبی زمستان هوش مصنوعی و طلوع بهار هوش مصنوعی متأسفانه. هنگامی که تمام هیجانات نضبت به پرسبترون پیشتهادی کاهش یافت: تجزیه و تحلیل دقیق و جزثی پرسیترون دارای محدودیت های جدى بود. در سال a0

صفحه 306:
9 ماروین مینسکی و سيمور بايرت روى تحقيقاتى کار کردند که به اين نتيجه رسيدند كه برسيترون قادر به بادكيرى هيح منطق بيجيده ای نیست. در وافت, آنها نشان دادند که یادگیزی توایع متطقی به سادگی ۱08 بزای یک پزسبترون سخت است. ‎oe‏ کار منجر به کاهش علاقه بهیادگیری ماشین به طور کلی و شبکه های عصبی به طور خاص شد و عصری را آغاز کرد که اکنون به عنوان زمستان هوش مصنوعى شناخته مى شود. محققان در سراسر جهان هوش مصتوعى را جدى نمی‌گیرند و فکر می‌کنند که اين هوش مصتوعی قادر به حل مشکلات پچیده نیست. با نگاهی به گذشته: یکی از دلایل اصلی به اصطلاح زمستان هوش مصنوعی, محدودیت قابلیت های سخت افزاری موجود در آن زمان بود. یا قدرت محاسباتی لازم در دسترس نبود, با بسیار گران بود. در اواخر دهه 1990 یک تغییر جرر و مدی در مورد تصویر هوش مصنوعی و پتانسبل درک شده آن وجود داشت. كاتاليزور اين تغيبر. بيشرفت در محاسبات توزيع شده بود که زیرساخت های یه راحتى در دسترس و مقرون به صرفه را فراهم کرد. با دیدن پتانسیل, غولهاى فتاورى اطلاعات آن زمان (مانند كوكل) كه به تازكى تاجكذارى كرده بودندء هوش مصنوعی را به عنون تمرکز تلاش‌های تحقیق و توسعه خود قرار دادند. علافه مجدد به هوش مصنوعی منجر به گرم شدن زمستان موسوم به هوش مصنوعی شد. گرم شدن تحقیفات , هوش مصنوعی را تقویت کرد. این در نهایت منجر به تبديل دوره فعلى به دوره اى شد که می توان آن را بهار موش مصنوعی نامید. جابى كه علاقه زيادى به هوش مصنوعى و شيكه هاى عصبى وجود دارد. آشنايى با شبکه های عصبی بدا اجازه دهید با قلب ‎Sa‏ عصبی, پرسیترون شروع کتیم. شما می توانید یک پرسیترون را به عنوان ساده ترین شیکه عصبى ممکن در نظر بگیرید که بلوک ساختار اصلی معماری های چند له پیچیده مدرن را تشکیل می دهد.اجازه نهيف ,1 درک عملکرد یک پرسبترون شروع کنیم. 302

صفحه 307:
درک برسپترون یک پرسیترون منفرد چندین ورودی و یک خروجی دارد که توسط یک نایم فعال سازی کنترل یا فعال می شود. در شکل2-8 نشان داده شده است. Inputs ‏وا‎ Weighted Activation output sum Function wrt Dla wis شکل 2-8: پرسیترون پرسیترون نشان داده شده در شکل 2-8 دارای سه ویژگی ورودی است. 2 ,2 و 33. ما همچتین یک سیگنال تابت به نام باباس اضافه می کنیم. ویژگی‌های ورودی و بایاس در وزن‌ها ضرب می‌شوند و به صورت جمع وزنی خلاصه می‌شوند بتابراین مجموع وزنی به ‎wl‏ فعال سازی منتقل مى شود که خروجی لآ را تولید می کند. توانایی استفاده از طبف گسترده ای از توایع فعال سازی برای فرموله 303

صفحه 308:
کردن روابط پیچیده بين ویژگی ها و برچسب ها یکی از نقاط فقوت شبکه های عصبی است. تنوع توايع فعال سازى از طريق فرابارامترها قابل انتخاب است. درک شهود پشت شبکه های عصبی در فصل قبل, برخی از الگوریتم‌های بادگیری ماشین سنتی را مورد بحث قرار دادیم. این الگوریتم‌های یادگیری ماشین سنتی برای بسیاری از موارد استفاده مهم. عالی عمل می‌کنند. ما آنها محدودیت هایی نیز دارتد. زمانی که الگوهای خطدار در مجموعه داده آموزشی شروع به غیرخطی و چند بعدی شدن می‌کنند, شروع به فراتر رفتن از قابلیت‌های الگوریتم‌های یادگیری ماشین سنتی می‌کند تا روايط بيجيده بين ويزكىها و برجسب را بءطور دقيق ثبت كتد. اين فرمول بندىهاى رياضى تا حدى ساده وغير جامع از الكوهاى بيجيده منجر به عملكرد غيربهينه مدلهاى آموزشديده براى اين موارد استفاده مىشود. در دتياى واقعى در بسيارى از موارد استفاده, رابطه بين برجسب و ويزكى هاء الكوهاى پیچیده تری را تشان می دهد. شبکه‌های عصبی به کمک می‌آیند و گزینهای قدرتمند برای آموزش مدل‌ها با برخی محدودیت‌هایی که بعدا در اين فصل مورد بحث قرار می‌گيرند. به ما مي‌دهند. اجازه دهید برخی از الگوهای رایج و چالش‌هایی را که آنها برای الگوریتم‌های یادگیری ماشینی ساده‌تر اند الگوریتم‌های استفاده شده توسط رگرسیون خطی ایجاد می‌کنند. درک کنیم. فرض کنید که می‌خواهیم حقوق یک دانشمند داد را با استفاده از «سال‌های صرف شده در آموزش» پیش‌بینی کنیم. ما دو مجموعه داده متفاوت داریم که از دو سازمان مختلف جمع‌آوری شده‌اند. مجموعه داده 1. شکل ۵(3-8): اين یک رابطه تسبناً ساده بين ويزكى و برچسبی است که خطی بودن را تشان می‌دهد. اما هنگام تلاش برای فرمول‌بندی ریاضی آن از طریق یک الگوریتم خطی, دو چالش در اين الگوی ساده وجود دارد اول. می‌دانیم که حقوق نمی‌تواند منفی باشد. اين بدان معناست که صرف نظر از مقدار ۷ (یعنی حفوق), لا تمی تواند منفی باشد. به نطر مي رسد حداقل یک 308

صفحه 309:
دانشمند داده جوان وجود دارد که شاید به تازگی با 1 سال تحصیلی فارغ التحصیل شده باشد و بنابراین حفوفش صفر باشد. شاید در حال کارآموزی باشد... بتايراين براى مقادير ) از 0 تا 0< مقدار با صفر می ماند. شکل 9(3-8) را ببينيد. همانطور كه بعدا خواهيم دید که از طریق نع فعالسازی خطی اصلاح شده موچود در سبکه عضیی: ما قارز عتواهیم یود روابط فچینده ای منت این تین برچسب و ویژگی را ثبت کنیم. مجموعه داده 2, شکل 0(3-8): غیر خطی بودن رابطه بين ویژگی و برچسب را نشان می دهد, به شکل 3-8(ب) مراجعه کنید. دستمزد برچسب ()- ۵ بافی می ماند زیرا « از ۵ تا 1 تغییر می کند. با نزدیک شدن مقدار به 2+ تسیت آن به شدت افزايش مى يابد. اما: با افزايش مقندار ‎Y‏ ‏به بای 2اه مقدار لا هموار می شود. همانطور که بعداخواهیم دید که از طریق تانع فعال سازی سیگموید. می توانیم در حین استفاده از شبکه عضبی, چنین روابطى را درك كنيم. ae 0 ۳ شکل 3-8: حقوق - سال های تحصیل 305

صفحه 310:
مجموعه داده 1: الگوهای خطی (ب) مجموعه داده 2: الگوهای غیر خطی آشنایی با معماری های یادگیری عمیق لایه ای برای مسائل پیچیده تر: فحققان یک شبکه عضبی چند للیه به نام پرسپترون چند لاه ایجاد کرده ان. یک ننبکه عصیی چند لیهدارای چندلایه مختلف است که در نمودار زیر نشان داده شده است. اين لایه ها به شرح زيز است: ‎oul tinue aid‏ یه ,له ورودی است. ذر للبه ورودی, مقادیر وینژگی به عنوان ورودی به شیکه تغذیه می شود ‏لاه (های مخفی)؛ لیه ورودی توسط یک با چند لاه پنهان دنبال می شود. هر لابه يتهان آرايه هايى از تابع فعال سازی مضابه هستن. ‏الايه خروجى: لابه تهابى ,لبه خروجي تاميدة مى شود ‏یک شبکه عصبی ساده يك لايه بنهان خواهد دالشت. شبكه عصيى عمیق, یک شبکه عضبى با دويا جنذ لايه بنهان است. شكل (4:8) رأ ببينية ‎‘Simple Neural Network Deep Neural Network a a ‎ ‎ ‎$0 ‎ ‎oO ‎© ‎eo ‎© ‎eo ‎@rrputLayer — @Hidden Layer @ Oxtpat ayer ‎306 ‎ ‎

صفحه 311:
شکل 4-8: شیکه عصبی ساده و شیکه عصبی عمیق در مرحله بعد. اجازه دهید سعی کنیم عملکرد لایه های پنهان را درک کنیم. توسعه شهود برای لایه های پنهان برای ایجاد درک عمیق تر در مورد چگونگی ترکیب و انتزاع لابه هاى بنهان ويزكى های ورودی. اجازه دهید مسئله پیش بینی حفوق داتشمند داده را دوباره در نظر بكيريم. فرض کنید پنج ویژگی ورودی داریم: 1) تجربه شغلی 2) سال های تحصیل 3) مهارت های 4 501) مهارت های برامه تویسی و 5) دانش الگوریتمی. برای درک شهود پشت لایه های پنهان, ما روی لایهپنهان با سه گرهایجاد کرده ایم. گره ها ورودی اولین گره یه پنهان, تجربه شغلی و سال‌های تحصیل است. گره بالای ‎ad‏ نهان یک گره واحد را ارائه مى دهد كه اثر تركيب اين ذو متغير را انتزاعى فى کند. ما آن را به عنوان "پس زمینه" نام گذاری کرده ایم. ورودی گره میانی ‎ad‏ ‏های مخفی مهارت های 501 و مهارت های برنامه نویسی است و به عنوان مهارتهای مهندسی داده نامگذاری می شود. گره سوم لابه پنهان دارای ورودی هایی به عنوان مهارت های برنامه نویسی و دانش الگوزیتمی است و به عنوان مهارت های یادگیری ماشین نامگذاری می شود

صفحه 312:
Job Experience sat sits ‏يل‎ ی > Sa Programming sa ‎qa‏ ,> ال ‎Te‏ ‎“Algorithmic ae‏ ‎Knowledge ‎ ‏شکل 5-8: حل مسئله با استفاده از چندین للیه ‏از چند لایه بنهان باید استفاده کرد؟ بوچه:داستة‌باسید که بعداد بهننه لاه های پنهان از منتتله؛ ای به:مستظه دیگر متفاوت است. برای برخی مسائل باید از شبکه های عصبی تک لاه استفاده شود بزای مسنائل دیگر ما باید چندین لایة برای به ترین عملکرد اضافه کننیم, نه طور کلن: این بستگیبنه پیچیندگن: الگوهای ذائن:داده‌هنا داردکه تا درجلاش بترای فرمول‌بندی با استفاده از شبکه‌های عصبی هستیم: برای مسانلی که الگوهاق ساده را تشان می دهند.استفاه از تعدادزیادی از یه های پنهان منجر به بیش برازش می شود. از سوی دیگر, اگر با مسائل پیچیده ای سر و کار ذاشته باشيم, تعداد کفی از ‎ad‏ های پنهان ممکن است نتوانند الگوها را به طور کامل ثبت و فرموله کنند که منجر به مدلی کم برازش مى شود. تجزيه و تحليل دقيق مسئله و آزمایش با یک مدل تجربی پا به ما کمک می کند تا ‎alias‏ مناسبی از ‎cole ad‏ ‎le‏ رأ بيدا كنيم. ‎308 ‎ ‎

صفحه 313:
مبانی ریاضی شبکه عصبی ‎Se Com‏ 5 ند تق | اساتسات ‎١‏ اه ‎ott‏ ‎ ‏شکل 6-8: یک پرسیترون چندلیه ‎ead yl eit angel! anole sage at‏ دورون واحد سل ‎EB gil‏ انست و هر تورون یک یه به تعام نورون ‎Sit ls ceil Junta aes a ld‏ های پیچیده: تفداد لین اتصالات متفچر می شنود و ما راه های مخلفن را بزای کاهش این اتصالات بدون از دست دادن کیفیت زیاد بررسی خواهیم کرد.ابتدء ييابيد سعى كنيم مسئله أى را كه مى خواهيم حل کنیم, فرمول بندی کننیم. ورودی یک بردار ویژگی , بهایعاد ‏ است. ما از شبکه عصبی می خواهیم مقادیر را پیش بیتی کند.مقادیرپیش‌بینی‌شنده از تشان داده می‌شوند. از نظر ریاضی: ما می‌خواهیم با توجه به یک ورودی خاص, احتمال جعلی بودن یک تراکنش را تعیین کنیم. به عبارت دیگر, با توجه به مقدار خاضی از «, احتمال اینکه 1 ‎ ‏۷ باشد ‏چقدر است؟ از نطر ریاضی, می توانیم این را به صورت زیر نشان دهیم ‎309 ‎ ‎

صفحه 314:
y = P(y = 1 |x) : ۷۵۳۵ توجه داشته باشید که ‎SX‏ بردار 0۷-بعدی است که 8 تعداد متفیرهای ورودی است. این شبکه عصی دارای چهار لیه است. لبه های بین ورودی و خروجی لابه های پنهان هستند. تعداد نورون ها در اولین لایه پنهان با 2 تشان داده می شود پیوندهای بين كره هاى مختلف با پارامترهایی به نام وزن ضرب می شوند. آموزش یک ‎Sub‏ عصین در موردیافتن مقادیر مناسب یرای وزن ها است: پیایید ببیتیم چگونه مى توانيم يك شبکه عصبی را آموزش دهیم. آموزش شبکه عصبی ‎Guat Gad) Si cable auld‏ با استفاده از مجموعه داده معین: آموزش شبکه عضین نافیده من هو پنایی بهآناتومن یک هن یکه عضتین_ فعولن گام کنم: وقتی در مورد آموزش شبکه عصبی صحبت ‎ye‏ كنيم, در مورد محاسيه بهترین مقادیر بای وزن ها صحبت مى كنيم. آموزش به صورت مکرر با استفاده از مجموعه ای از مثال ها در قالب داده های آموزشی انجام می شود. نمونه های موجود در داده هاى آموزشى داراى مقادير مورد انتطار خروجى براى تركيب هاى مختلف مقادير ورودی هستند.فرآند آموزش شبکه‌های عصبی با روش آموزش مدل‌های سنتی متفاوت است (که در فصل 7, الگوریتم‌های یادگیری با تظارت ‏سنتی مورد بحث فرار گرفت) ‏آشنایی با آناتومی یک شبکه عصبی بيابيد ببينيم يك شیکه عصبی: از چه عناصری تشکیل شده است: ‎310 ‎ ‎

صفحه 315:
لاه ها: ‎bb a‏ بلوک های اصلی یک شبکه عصبی هستند. هر لابه یک ماژول پردازش داده است که به عنوان یک فیلتر عمل می کند. یک با چند ورودی می گیرد. آن را به روشی خاص پردازش می کند و سپس یک با چند خروجی تولید می کند. هر بار که داده ها از یک لایه عبور می کنند, از مرحله بردازش می گذرد و الگوماین زا سان سن نعد که:مزبوط به نبوال بجاری آنتت که ما تنعی دارم به: آن باسخ دهيم. ‎eb‏ زيان: يك تايع زبان سیگنال بازخوردی را ارائه می دهد که در تکرارهای مختلف فرآیند یادگیری استفاده می شود تایع زيان اتحراف را براى يك مثال فراهم می کند ‏تابع هزینه؛ تابع هزینه تایع زیان در مجموعه کاملی از مثال ها است. ‏بهینه ساز؛ بهینه ساز تعبین می کند که سیگنال بازخورد ارائه شده توسط بای زیان چگونه تفسیر شود ‏داده های ورودی: داده های ورودی داده هایی هستند که برای آموزش شبکه عصبی استفاده می شود و متفیر هدف را مشخص مى كند. ‎ ‏وزن ها: وزن ها با آموزش شبکه مجاسیه می شوند. وزن ها تقريباً با ميزان اهمیت هر یک از ورودی ها مطایقت دارند. بهعنوان مثال, اگر یک ورودی خاص مهمتر از سایر ورودی ها باشد, پس از آموزش, وزن بیشتری به آن داده می شود و به عنوان یک ضریب عمل می کند. حتی یک سیگنال ضعیف برای آن ورودی مهم: قدرت را از مقدار وزن زیاد (که به عنوان یک ضریب عمل می کند) جمع آوری مى كند. بنابراين وزن هر يك از ورودى ها را با توجه به اهميت آنها تغيير مى ‎ ‏تابع فعال سازی: مقادیر در وزن های مختلف ضرب می شوند و سپس جمع مى شوتد. اينكه دقيقاً چگونهآنها جمع می شوند و چگونه مقدار آنها تفسیر مى شود با توجه به نوع تایع فعال سازی انتخاب شده تعیین مي شود. ‎an ‎ ‎

صفحه 316:
حال بییید نگاهی به جتبه بسیار مهم آموزش شبکه های عصبی بيندازيم. در حین آموزش شبکه های عصبی, هر یک از مثال ها را یکی يکي مي آوریم. برای هر یک از مثالهاء خروجى را با استفاده از مدل زیر آموزش, تولید می‌کنيم. ما تفاوت بين خروجی مورد انتظار و خروجی پیش پینی شده را محاسبه می کنیم. برای هر نمونه جداگانه: اين تفاوت ,زیان نامیده می شود. در مجموع: زیان مجموعه داده آموزشی کامل, هزیته تامیده می شود. همانطور که به آموزش مدل ادامه مي‌دهیم. هدف ما افتن مقادیر مناسب وزن‌ها است که منجر به کمترین مقدار زیان می‌شود. در طول آموزش, ما به تتظیم مقادیر وزن ها ادامه می دهیم تا زمانی که مجموعه ای از مقادیر وزن ها را بيدا نیم که منجر به حدافل هزینه کلی ممکن می شود. هنگامی که به حداقل هزینه رسیدیم. مدل را به عنوان آموزش دیده, علامت گذاری مى كنيم. تعریف نرول گرادیان ‎se‏ ار آموزش مدل شبکه عسبی:یافین مقاذیرمتاسب بزاق ورن ها ‎Le aia‏ شروع به آموزش یک شبکه عصیی با مقادیر تصادفی یا پیش فرض برای وزن ها مى كنيم. سيسء ما به طور مكرر از يك الكوريتم يهبنه ساز, مانند نزول كراديان, استفاده من أكبيم :ما ورن :ها را بها كوبه أت تعييز دهیم که پیش بیدی:های ها بهبو: يابد. نقطه شروع یک الگورنتم نزولی گرادیان,مقادیر تصادفی وزن هابى است كه بايد در حين تكرار الكوريتم بهبنه شوند. در هر يك از تكرارهاى بعدى, الكوريتم با تغبير مقادير وزن ها به كونه أى بيش مى رود كه هزینه به حدافل پرسد. تصودار زير منطق الكوريتم نزول كراديان را توضيح می دهد ae

صفحه 317:
X Feature Vector ممم بعرم ‎Transtormation)‏ او ‎wien‏ ‏7 7 وس و ‎inne‏ ‏- < 1 ‎cot‏ شکل 7-8: الكوريتم نزول كراديان در تصودار قبلی, ورودی «بردار وییژگی ۷( است. مقدار واقعی متفیر هدف ۷ و مقدار پیش‌بینی‌شده متفبر هدف ۷" است. ما انحراف مقدار وافعی از مقادیر پیش بینی شده را حساب می کنیم. وزن ها را به روز می کنیم و مراحل را تا زمانی که هزینه به حداقل برسد تکرار می كنيم. نحوه تغبير وزن در هر تكرار الكوريتم به دو عامل زير يستكى دارد: * جهت: براى به دست آوردن حداقل تابع زيان به كدام جهت بابد رفت * نرخ يادكيرى: تغيير در جهتى كه ما انتخاب كرده ايم جقدر بايد باشد یک فرآیند تکراری ساده در نمودار زیر نشان داده شده است: درد

صفحه 318:
شکل 8-8: الگوریتم نزول گرادیان, یافتن حدافل ها نمودار نان مى دهد كه جكونه با تغببر وزنء نزول كراديان سعى در يافتن حداقل ‎cae gags oleae:‏ انتات:سده:: نقطه یعدی نمودار زا بعیین امی: کید نتخاب مقدار مناسب برای نرخ بادگیری مهم است. اگر نرخ یادگیری خیلی کم باشد: ممکن است مسئله ,زمان زیاد برای همگزایی تیاز داشته باشند. اگر درخ یادگیری خیلی زیاد باشد. مسئله همگرا نخواهد شد. در نمودار قبلی, تقطه ای که ‎LS ys Gur aad Glas Ula clad J‏ معالق تمواز در توشتان آیتبنت: جا بياييد یم که چگونه یک گرادیان را به حدافل پرسانيم. فقط دو متفیر ‏ ول را در نظر بگیرید. گرادیان ۱ ول به صورت زیر محاسیه مي شود gradient = — براى به حداقل رساندن كراديان مى توان از روش زير ستفاده کرد while(gradient !=0) : if (gradient <0); move right au

صفحه 319:
if (gradient > 0); move left اين الكوريتم همجنين مىتواند براى يافتن مقادير بهبنه يا تزديك به بهينه وزنها ‎cual oS. duly analy ais Su Salata Ghar aa Sil‏ مرول گزاذینان: در سراسر شبکه به عقب انجام می‌شود. ابتدا گرادیان لایه نهابی را محاسبه می كنيم و سيس لابه دوم به آخر و سپس لاه قبل از آن را محاسیه می کنیم تا به یه اول برسیم. اين کار بپس انتشار نامیده می شود که توسط هینشون, ويليامز و روملهارت در سال 1985 معرفی شد. در ادامه؛ اجازه دهیدبه توابع فغال سازی نگاه کنیم. توابع فعال ساری يك تابع فعال سازى نحوه پردازش ورودی‌های یک نورون خاص برای تولید خروجی را فرمول‌بندی می‌کند. هماتطور که در تعودار زير تشان داده شده است, هر یک از نورون‌های یک شبکه عصبی دارای یک تایع فعال‌سازی است که نجوه بردازش ورودی‌ها را تسین می‌کند 0550-5 2, Activation Function ۵ السام ]| صصهمو شكل 9-8: تايع فعال سازی ‎ais‏

صفحه 320:
در نمودار قبلی, می بینیم که نتایج تولید شده توسط یک تابع فعال سازی به خروجی منتقل می شود. تابع فعال سازى معبارهابى را تعيين مى كند كه چگونه مقادير ورودى ها قرار است براى توليد یک خروجى تفسير شوند. برای مقادير ورودى دفيقاً يكسان, توابع فعال سازى مختلف خروجى هاى متفاوتى توليد مى کنند. درک تحوه انتخاب تایع فعال سازی مناسب هنگام استفاده از شبکه های عصبی برای حل مسائل مهم است. اکنون اجازه دهید اين توابع فعال سازی را یکی یکی بررسی کنیم. Step el ‏آستانه است. خروجی تابغ آستانه یک مقدار‎ gb ‏ساده ترین تایع فغال سازی ممکن‎ ‏دودویی است: 0 یا 1. اگر هر یک از ورودی ها بزرگتر از 1 باشد؛ 1 را به عنوان‎ خروجی تولید می كند. ابن را مى توان در تمودار زير توضيح داد شكل 10-8: تابع م516 00

صفحه 321:
توجه داشته باشید كه به محض اينكه در مجموع وزنی ورودی‌ها نشانه‌هایی از حبات مشاهده شود خروجی ()به 1 تبدیل می‌شود. این باعث می شود که عملکرد فعال سازی آستانه بسیار حساس باشد. ‎eb gi‏ کاملا آسیب پذیر است که به اشتباه توسط کوچکترین سیگنال در ورودی به دلیل يك تفص با نوبز ایجاد شود سیگموید تابع سیگموید را می توان به عنوان بهبود تايع آستانه در نظر كرفت. در اينجاء ما روى حساسيت تابع فعال سازى كنترل داريم: شكل 11-8: تابع فعال سازى سيكمويد. تابع سيكمويد. لا؛ به صورت زیر تعریف می شودد

صفحه 322:
1 _- هم 14 می توان آن را به صورت زیر در پیتون پیاده سازی کرد y = f(z) def signoidFunction(2): return 1/ (1#np.exp(-2)) ‏توجه داشته باشید که با کاهش حساسیت عملکرد فعال سازی, اشکالات ورودی را‎ ‏کمتر مختل می کنیم. توجه داشته باشید که خروجی تایع فعال سازی سیگموید‎ 3 ‏با‎ 0 in ‏همچتان دوذونت آنت:‎ ‏واحد خطی اصلاح شده (۷0ا8۵)‎ ‏خروجى دو نايع فعال سازی اول ارائه شده در اين فصل دودوبى بود اين بدان‎ ‏معنی است که آنها مجموعه ای از متفیرهای ورودی را می گیزند و آنها رابه‎ ‏خروجی های دودویی تبدیل می کنند. لاا یک تابع فعال سازی است که مجموعه‎ ‏اى از متغيرهاى ورودى را به عنوان ورودى مى كيرد وآنها را به يك خروجي‎ ‏پیوسته تبدیل می کند. در شبکه‌های عصبی: [1 8۵1 محبوب‌ترین تایع فعال‌سازی‎ ‏است و معمولاً در لایه‌های پنهان استفاده می‌شود. جایی که نمی‌خواهیم متفیرهای‎ ‏پیوسته را به متفیرهای گسسته تبدیل کنیم. نم ودار زیر تابع فعال‌سازی 8۵ را‎ ‏نشان می دهد‎ ae

صفحه 323:
ky شکل 12-8: واحد خطی اصلاح شده توجه داشته باشید که وقتی 0 >< باشد. اين به معنای 0 - لا است. اين بدان معنی است که هر سیگنالی از ورودی که صفر با کمتر از صفر باشد به یک خروجی صفر تبدیل مي شود؛ y= f(z) -< 0( ود

صفحه 324:
2 > ۱ نه 2 (2) < ۷ ۲ << ۱0( به محض اینکه »پیش از صفر شد, خروجن برایر »< می شنود.تایع لا یکی از پرکاربردترین ‎elas‏ فعال سازی در شبکه های عصبی است. می توان آن را به صورت زير در پایتون پیاده سازی کرد: def ReLU(x) if x0 return @ else return x 320

صفحه 325:
cul RELU ‏میتتی بر‎ aS Leaky RELU ay sul ‏حال‎ Leaky ReLU ‎ade Se ReLU 32‏ منفی برای ‏ منجر به یک مقدار صفر برای لا می شود. این بدان معتن اننت که-پرهی از اطلاعات ‎out has yl po‏ هن زود که يناعت مت شود دوره های آموزش به خصوص در شروع آموزش طولانی ثر شود. عملکرد فعال سازی لام ‎Leaky‏ اين مشکل را حل می کند. موارد زیر برای ‎Leaky‏ ‏قناع۹؟ اعمال می شود: ‎ ‎

صفحه 326:

صفحه 327:
Leaky ReLU :8.13 Ju در اینجاء 6 یک پارامتر با مقدار کمتر از یک است. می‌توان آن را به صورت زیر در پانتون پیاده‌سازی کرد: 0(: def LeakyReLU(x,beta=é if x<0 return (beta*x) else return x ‎querdljeclyau‏ مقا :وجوه ره مى توانيم مقدار پیش فرض 8 را تعيين كنيم. ‏ما مى توانيم 8 را به يك بارامتر در شبكه عصبى خود تبديل كنيم و مى توانيم به شبكه عصبى اجازه دهيم ‏مقدار را تعيين كنيد (به آن لالا86 بارامترى مى كويند). ‏ود ‎ ‎

صفحه 328:
مرتوانيم 8 را یک مقدرتصادفی ‎ust‏ كنيم (به آن 8 تصادفی می‌گویند) مماس هایپریولیک (20) تايع :1۵ مشابهتایع سیگموید است. اما تونایی دادن سیگنال منفی را نيز دارد. نمودار زیر این موضوع را تشان می دهد شکل 8.14: مماس هایپریولیک ای زبه صورت زیر است: 2

صفحه 329:
م 1 هم 1 y = f(a) توسط کد پایتون زیر فابل پیاده سازی است: ‎def tanh(x)‏ numerator = 1-np.exp(-2*x) denominator = 1+np.exp(-2*x) return numerator/denominator حالا بیید بهتیع 50۴68۵ نگاه کنیم. Softmax گاهی اوقات برای خروجی تایع فعال سازی به بیش از دو سطح نیاز درم ۴ یک تانع فعال سازی است که پیش از دو سطح را برای خروجی در اختبار ما فرار می دهد. برای مسائل طبقه بند چند کلاسه مناسب است. بیایید فرض کنیم که ۸ كلاس داريم. ما مقادير ورودى را داريم. مقادير ورودى كلاس ها را به صورت زیر ترسیم می کند:50۴۵099 .2(,....2)0(1)», (1)*) 2 بر بر اساس نظريه احتمال عمل مى كند. اختمال خروجی 6۳ کلاس 50۴08۵ بيه صورت زیر محاسبه می شود 225

صفحه 330:
et daa برای طبفه‌بندهای دودوبی, تابع فعال‌سازی در لابه نهایی سیگموید و برای طیفه‌بندهای چند کلاسه :50۴008 خواهد بود prob) = ابزارها و چارچوب ها در اين بخش, چارچوب‌ها و ازازهای موجود بای پیاده‌سازی شبکه‌های عصبی را به تقصیل بررسی خواهیم کرد. با گذشت زمان؛ چارچوب‌های مختلفی برای پیده‌سازی شبکه‌های عصیی ایجاد شده‌اند. چارچوب های مخف نقاط فقوت و صعف خود را دارند. در اين بخش. ما روى ۷6۳۵5 با یک 8060608 1205061600 تمركز خواهيم كرد Keras ‏یکی از محبوب‌ترین و آسان‌ترین کتابخانه‌های شبکه عصبی است که به‎ 6۳۵5 ‏زبان پایتون نوشته شده است. اين کتابخانه با سهولت استفاده در ذهن نوشته‎ ‏شده است و سريع ترین راه را براى بياده سازى يادكيرى عمیق ارائه می دهد.‎ ‏فقط بلوک های سطح بالا را ارانه می دهد و در سطح مدل در نظر گرفته‎ ۵۲۵5 می شود. 226

صفحه 331:
Backend of ۷۵۲۵5 ‏موتورهای‎ 6۳۵5 برای انجام دستکاری‌های سطح تتسور به یک کتابخانه بادگیری عمیق سطح بابينتر تياز دارد. اين كتابخانه يادكيزى عميق سطح بايين تر موتور 68 ناميده مى شود. موتورهاى 886100 احتمالى برای ۷۵۲۵5 شامل موارد زیر است: ww. tensorflow.org) ‏ورک در توع خود است و توسط گوگل منبع باز است.‎ ۵ ۲6050۲۴10۷: اين محبوب ترین فریم ‎Sug at oul ‘Theona (deeplearning.net/software/theano)‏ در آزمایشگاه ۱۲11 در دانشگاه مونترال توسعه یافته است. ‏مايكروسافت (61/56) 7001148 6090141106 اين ابزار توسط مايكروسافت ‏توسعه يافته است. ‏قالب اين يشته ى فناورى يادكيرى عميق مدولار در نمودار زير تشان داده شده ‎ ‎

صفحه 332:
‘TensorFlow/Theano/CNTK CUDA/cuDNN BLAS, Eigen : GPU ‏نامع‎ شکل 15-8: معماری ۸۵/۵5 مزیت اين معماری یادگیری عمیق ماژولاراين است که 16۳۵5 861:608ظ را می توان بدون بازنویسی هیچ کدی تغییر داد. به عنوان مثال. اگر 76050۴۴10 را برای یک کار خاص بهتر از 106082 بدانیم. می‌توانیم به سادگی 8ظععهط را بدون بازنویسی هیچ کدی به 161150۴۴100۷ تغییر دهیم. ‎ad‏ های سطح پابین پشته بادگیری عمیق ‏سه موتور 3۵01004 که به آنها اشاره کردیم همگی می‌توانند هم روی ل۳) و هم ‏لا با استفاده از له‌های سطح پاین پشته اجرا شوند. برای 68۱۵ هاء یک کنابخانه ‏سطح پایین از عملیات تنسور به نام ‎Eigen‏ استفاده می شود. برای پردازنده‌های ‎ze‏ ‎ ‎ ‎ ‎ ‎

صفحه 333:
گرافیکی, 760507۴10۷ از کتابخانه شکه عصبی عمیق ‎CUDA (CUDNN)‏ انیدیا استفاده می‌کند. تعریف فراپارامترها همانطور که در فصل 6, الگوریتم‌های یادگیری ماشین بدون نظارت بحث شد, یک فراپارامتر, پارامتری است که مقدار آن قبل از شروع فرآیند یادگیری انتخاب می‌شود. ماب مقادير منطقی شروع می کنیم و سین سعی می کنیم بعد ها را بهينهکنیم برای شبکه های عصبی, فراپارمترهای مهم عبارتند از * تا فعال سازی ۰ نرخ یادگیری ۶ تعداد للیه های پنهان * تعداد نورون ها در هر لابه ينهان بياييد بررسى كنيم كه جكونه مى توانيم يك مدل را با استفاده از 1۵۳۵5 تعریف كنيم. تعريف مدل 66785 ‎sly‏ تعریف یک مدل کامل 16۵۲۵5 سه مرحله وجود دارد 1 لايه ها را تعریف کنید ما می توانیم با استفاده از ۱6۵۳۵5 به دو روش ممکن یک مدل بسازیم: ۸8۲ متوالی: به ما امکان می دهد مدل هایی را برای یک بشته خطی از لیه ها طراحی کنیم. برای مدل های نسبتا ساده استفاده می شود و اتتخاب معمولی برای ساختن مدل ها است: 329

صفحه 334:
Import Packages مسا توجه داشته باشید که در اینجا ما سه لایه ایجاد کرده ایم - دو لابه اول تایه فعال ‎ReLU sla‏ و ‎egw a‏ دارای 50۴00۵ به عنوان تابع فعال سازی است. ‎API‏ ۴0»6308۵1:_به ما اجازه می دهد تا مدل هایی را برای نمودارهای غیر چرخه ای لابه ها طراحى كنيم. مدل هاى بيجيده ترى را مى توان با استفاده از ۲ ۴۵06۵100۵1 ایجاد کرد ‎ ‎ ‎ ‎330 ‎ ‎

صفحه 335:
توجه داشته باشید که ما می توانیم یک شبکه عصبی را با استفاده از ‎SLO APT‏ متوالی و کاربردی تعریف کنیم. از نقطه نظر عملکرد. فرقی نمی‌کند که از کدام رویکرد برای تعریف مدل استفاده کنید فرآیند بادگیری را تعریف کنید. در اين مرحله سه چیز را تعریف می کنیم: glu aig * ۰ تايعازيان * معيارهايى كه كيفيت مدل را محاسیه می کند: rodel.corpite (optinizer= optiniser, loss'nso', mtr foe = [‘accursey'}) توجه داشته باشید كه ‎model. compile gl jl ls‏ برای تعریف بهینه ساز, تايع ‎oly‏ و معبارها استفاده می کنیم. :ندال را آهورنی دهید هنگامی که معماری تعریف شد, نوبت به آموزش مدل می رسد ‎model.fit(x_train, y train, batch_size=128, epochs=10)‏ توجه داشته باشید که بارامترهایی مانند 03865126 و 6006115 پارامترهای قايل تنظيم هستند و آنها را به فرابارامترها تبديل مى كند. انتخاب مدل متوالى يا کاربردی مدل ترتيبى, شبکه عصبی را به عنوان یک پشته ساده از لايه ايجاد مى کند. درک و یاه‌سازی مدل ترتیبی آسان و ساده است: اما معماری ساده‌گرابنه آن نیز an

صفحه 336:
محدودیت عمده‌ای دارد. هر لایه دفیقاًبه یک تنسور ورودی و خروجی متصل است. اين به اين معنى است كه أكر مدل ما دارای چندین ورودی یا خروجی های متعدد در ورودى با خروجى يا در هر يك از لايه هاى بنهان باشدء آنكاه نبايد اززيكى مدل ترتيبى استفاده مى كنيم. در اين صورت بايد از مدل كاريردى استفاده كنيم. درک 7۵0507۴1۵۷ ۳1۷ یکی از محيوب ترين كتابخاته ها برای کار با شبکه های عصبی است. در بخش قیل, دیدیم که چگونه می‌توانيم از آن به عنوان موتور پشتیبان ۵۳۵5 استفاده كنيم. اين يك كتابخاته منيع باز و با كارايى بالا است که در وافع می تواند برای هر محاسبات عددی استفاده شود. اگر به پشته نگاه کنیم. می‌بي نیم كه می‌توانم کد 16050۴۴1014 را در یک زبان سطح بل مانشد 0۷980 یا + ) بنویسیم که توسط موتور اجرای توزیع‌شده 76050۴10۷ تفسیر می‌شود و آن را برای توسعه دهندگان بسیارمفید و محبوب می کند. روشی که ۲6090۴10 کار مى كند اين است که شما یک گراف مستقیم (06) برای تمایش محاسیات خود ایجاد من كريد انضال گره:هاء لبه ها وزودی و ختروجی :عملیآت:رباسی اشت: همجنين, آنها آرايه هابى از داده ها رأ نشان مى دهند. ارائه مفاهيم بايه تنسورفلو بيابيد نكاهى كوتاه به مفاهيم :760506160 مانتد اسكالرهاء بردارها و ماتريس هذا بيندازيم. مى داتيم كه عدد ساده اى مانتد سه يا بنج در رياضيات سنتى اسکالر نامیده می شود. علاوه بر اين. در فيزيك, بردار جيزى با مقدار و جهت است. از ‎jl le ‘TensorFlow ss‏ بردار به معناى آرايه هاى یک بعدی استفاده می کنیم. با كسترش اين مفهوم, يك آرايه دو بعدى یک ماتریس است. برای یک آرابه سه بعدى از اصطلاح تنسور سه بعدى استفاده مى كنيم. ما از اصطلاح رتبه براق aR

صفحه 337:
دریافت ابعاد یک ساختار داده استفاده می کنیم. به اين ترتیب, یک اسکالر یک ساختار داده رتبه ۵, یک بردار یک ساختار ذاده رتبه 1 و یک ماتریس یک ساختار داده رتبه 2 است. این ساختارهای چند بعدی به نام تتسور شناخته می شوند و در نمودار زیر نشان داده شده اند Rank Rankt Rank 2 Rank 3 Rank 4 Tensor Tensor Tensor “Tensor Tensor شکل 16-8: ساتارهای چند بعدی يا تتسورها همانطور كه در نمودار قبلى مى بينيم. رتبه .بعاد يك تتسور را مشخص می کند. اكنون به بارامتر ديكرى, به نام فرم نكاه مى كنيم. فرم جندين عدد صحيح است كه طول يك آرايه را در هر بعد مشخص مى كند. تمودار زير مقهوم شكل را اتوضيح مى دهد ممع ‎Rank 2 tone; a matic wth shape. 3)‏ تسوا ‎[ley ee Sede Uae Ser 6 ‘Rank 3 tensor with‏ ‎shape 2.1.3)‏ Ue 2ep 3d ‏ممع قة‎ با استفاده از فرم و رتبه مى تواتيم جزئيات تنسورها را مشخص کنیم. 333

صفحه 338:
درک رياضيات تنسور اكتون به محاسبات مختلف رياضى با استفاده از تنسورها نكاه مى كنيم: بيابيد دو اسكالر تعريف كنيم و سعى كنيم آنها را با استفاده از 7605061600 جمع و ضرب کنیم: in [13]: print(*Define constant tensors") b= tf constant(2) print('s= ai" 4a) b= "ef constant) print('b = si" 5b Define constant tensors a=? ما مى توانيم آنها را اضافه و ضرب كنيم و نتايج را تمايش دهیم n [14]: print (“Running operations, without tf.Session") Cees print(’a+ b= a1") gear print('a* b= Si" 4d) Running operations, without tf.Session Bess at bee همجنين مى توانيم با اضافه كردن دو تنسور يك تنسور اسكالر جديد ايجاد كنيم: In (16): |c = a+b print("a +b = %s" % c) a +b = Tensor(*add:0", shape=(2, 2), dtype=float32) ما همجنين مى توانيم توابع تتسور پیچیده را انجام دهیم: au

صفحه 339:
In [7]: d= tf.matmutia, b) print(ia* b= 4s" $d) at b= Tensor("Mathul:0", shapen(2, 2), dtype=float32) آشنایی با انواع شبکه های عصبی بيش از يك رأ برای ساخت شبکه های عصبى وجود دارد. اگر هر نورون در هر للیه به هر یک از تورون های لایه دیگر متصل بانشد. آن را یک شبکه عصبی متراکم یا تمام متصل می نامیم. بییید به برخی از اشکال دیگر شبکه های عصبی نگاه كنيم. شبکه های عصبی کانولوشنال شبکه های عصبی کانولوشن (6(00) معمولاً برای تجزبه و تحلیل داده های چند رسانه ای استفاده می شوند. به متظور کسب اطلاعات بیشتر دز مورد چگونگی استفاده از 6 برای تجزیه و تحلیل داده های مبتتی بر تصویر, بایدفرآیندهای زیر را درک کنیم: ۶ کانولوشن ‎٠‏ انغام ‏ببابيد آنها را يكى يكى بررسى كنيم. ‏کانولوشن ‏فرآيند كانولوشن بر الگوی مورد علاقه در یک تصویر خاص با پردازش آن با تصویر ‏کوچکترٍ دیگری بة نام فیلتر (که هسته نیز نامیده می شود) تأکید می کند. به عنوان ‏مثال, اگر بخواهیم لبه‌های اشیاء را در یک تصویر پیدا کنیم, می‌توانیم تصویر را با 35 ‎ ‎

صفحه 340:
یک فیلتر خاص فیلتر کنیم تا آنها را بدست آوریم. تشخیص لبه می تواند در تشخیص اشیاء طبقه بندی اشبا و سار برنامه ها به ما کمک کند. بنابراین, فرآیند کانولوشن در مورد یافتن ویژگی‌ها و مشخصه ها در یک تصویر است. رویکرد بافتن الگوها مبتتی بر بافتن الگوهایی است که می‌توانند مجدداً روی داده‌های مختلف استفاده شوند.الگوهای فابل استفاده مجدد. فیلتر با هسته نامیده می شوند ادعام بخش مهمی از پردازش داده‌های چندرسانه‌ای به منظور یادگیری ماشینی, نمونه برداری از آن است. اين كار دو فايده دارد: © ایعد کلی مسئله را کاهش می دهد و زمان مورد نیز برای آموزش مدل را به طور عمده کاهش می دهد * از طریق تجميع ما جزئيات غير ضرورى را در داددهاى جندرسانداى انتزاعى مىكنيم و آن را عموموتر و معرف مسائل مشابه مىكنيم. نمونه بردارى به صورت زير انجام مى شود 4432510 EEE ‏صصص‎ CE ‏تا‎ 78 45 [22 input Output شکل 17-8: نمونه برداری کاهشی توجه داشته باشید که ما هر بلوک چهار پیکسلی را با یک پیکسل جایگزین کرده ‎pil‏ و بالترین مقدار از چهار پیکسل را به عنوان مقدار آن یک پیکسل انتخاب مى كنيم. اين به اين معنى است كه ما با ضريب جهار تمونه بردارى كاهشى انجام داده مود

صفحه 341:
ايم. از آنجابى كه حداكثر مقدار را در هر بلوک انتخاب کرده‌ايم.اين فرآیند ادغام حداکثر نامیده می‌شود. ما می توانستیم مقدار متوسط را انتغاب کنیم. ذر آن صورت. ادغام مبانگین خواهد بود شبکه های عصبی بازگشتی شبکه‌های عصبی پازگشتی (8۱)نوع خاصی از شبکه‌های عصبی هستند که مبتنی بر معمارى حلقهاى هستند. به همين دليل به آنها بازركشتى مى گویند. نکته مهمی که باید به آن توجه کرد اين است که ۴۸۷ ها دارای حافظه هستند. این بدان معنی است که آناتانایی ذخبره اطلاعات تکرارهای اخیر را دارند. نها در زمینه هایی مانند تجزیه و تحلیل ساختار جمله برای پیش پینی کلمه بعدی در یک جمله استفاده می شوند. شبکه های متحاصم مولد شبکه‌های متخاصم مولد (6۸01) توعی شبکه عصبی هستند که داده‌های مصنوعی توليد می‌کنند. اين شبکه ها در سال 2014 توسط 6000۶0110۷ 1۵0 و همکارانش ساخته شدند. می توان از آنها برای تولید عکس هایی از افرادی استفاده کرد که هرگز وجود تداشته اند. مهمتر از آن,آها برای تولید داده های مصنوعی برای تقویت مجموعه ذاده های آموزشی استفاده می شوند. در بخ آینه. خواهیم ديد كه يادكيرى انقالی چیست. بادگیری نتفای در طول سال‌ها, بسیاری از سازمان‌ه, گروه‌های تحقیقانی و افراد در جامعه منب. بار. مدل‌های ‎lease‏ را که با استفاده ار مقاذیر غظیمی ار ذادمها ببراق موارد a7

صفحه 342:
استفاده عمومی آموزش دادهنشده‌اند تکمیل گرده‌ن. در برخی موارد ها سال ها تلاش خود را برای بهته سازی این مدل ها اتجام داده اند. برخی از این مدل های متیع باز را می توان برای برتامه های زیر استفاده کرد: * تشخيض أشياء در ويدلق * تشخيص اشيا در تصاويز ۶ روئویسی برای صدا = +تحلیلاختتاشات رنه هر زمان که ما شروع به کار بر روی آموزش یک مدل جدید یادگیری ماشین مي کلب وی که بر زود ینیم این آشت: آبامی‌تونیم بجای شروع از ضفر: یک مدل از پیش آموزش‌دیده‌شنده را براق اهداف خود سفارشی کنیم؟ به عبارت دیگر آیا می توانیم یادگیری مدل های موچود را به مدل سفارشی خود منتقل كنيم نا بتوانيم به سوال نجاری خود باسخ دهيم؟ اكر بتوانيم ين کار را انجام متس ارات بابرا عوابا ‎usb‏ © تلاش‌های آموزشی مدل ما یک شروع سریع خواهد يود. *_ با استفاده از یک مدل کاملا آزمایش شده و تثبیت شده, کیفیت کلی مدل ما احتما بودود من وأيد ‎٠‏ اكر دادههاى كافى براى مسئله اى كه روى آن كار مىكنيم نداريم, استفاده از يك مدل از بيش آموزشديده از طريق يادكيرى انتقالى ممكن است كمى کند. بباييد به دو مثال وافعى كه مفيد است نكاه کنیم: هنگام آموزنش یک ربات, ابتذا مئتوانيم از يك بازى شبيه سازى بزاى آموزش مدل شبكه عصبى استفاده كنيم. 338

صفحه 343:
در آن شبیه‌سازی, ما می‌توانیم همه آن رویدادهای نادر را ایجاد کنیم که یافتن آنها در دنبای واقعی بسیار سخت است. پس از آموزش, مرتوانيم از يادكيرى انتقالى برای آموزش ‎Jae‏ برای دنیای واقعی استفاده کنیم. ببابيد فرض كيم كه مىخواهيم مدلى را آموزش دهيم كه بتواند لبتاب‌های ايل و ويندوز رأ از طريق فيد ويديوبى طبقهبندى كند. در حال حاضر مدل‌های کاملاً تبیت‌شده‌ای وجود دارد که به‌عنوان منبع باز موجود است که می‌تواند اشیاء مختلف را در یک فید ویدیوبی به‌طور دقیق طبقه‌بندی کند. ما می تونیم از اين مدل ها به عنوان تقطه شروع استفاده کنیم و اشیاء را به عتوان لب تاپ شناسایی کنیم. هنگامی كه اشياء زا به عتوان لب‌تاب شناسایی کردیم. م‌توانيم مدل را برای تمایزبين لبتاب‌های ۸0816 و ۷30405 ,بیشتر آموزش دهیم. در بخش بعدی: مقاهیمی را که در اين فصل پوشنش داه‌ایم برای ساخت یک سند تقلیی طبقه‌بندی شبکه عصبی اعمال خواهیم کرد مطالعه موردی - استفاده از یادگیری عمیق برای کشف تقلب استفاده از تکنیک‌های یادگیری ماشینی (0۸۲) برای شناسایی استاد تقلبی یک زمیته تحقیقاتی فعال و چالش برانگیز است. محققان در حال بررسی هستند که تا چه حد می توان از قدرت تشخیص الگوی شبکه های عصبی برای اين منظور استفاده كرد. به جاى استخراج كننده دستى ويزكى هاءپیکسل های خام را می توان برای چندین ساختار معماری یادگیری عمیق استفاده کرد. 339

صفحه 344:
روش شناسی تکنک ارائه شده در اين بخش از نوعی معماری شیکه عصبی به نام سیامی استفاده می کند ub ‏عضبی: که جازای جو شاخ انتت که معیازی ها و پازامترهناق‎ lw aa ‏رابه اشتراک می گذارند. استفاده از شبکه های عصبی سیامی برای علامت‎ ‏گذاری انتاد تقلیی در نمودار زیر تشان داده شده است:‎ امه سس محر در سس سا سس سس شکل 18-8: شبکه های عصبی سیامی هنگامی که یک ستد خاص نیاز به تأیید صحت ذارد. ابتدا سند را بر اساس طرح و نوع آن ظبعه بندی می کنیم و سپس آن را یا قالب و الگوی مورد اتظارش مقایسه می کنیم. اگر از یک آستانه خاص منحرف شود, به عنوان یک سند جعلی ‎awa AS CE‏ نود در لین این ‎ii iss gas Glaslyn SS gaa‏ برای موارد استفاده حبانی, مي‌توايم یک فرآیند دستی برای موارد مرزی اضافه کنیم که دز آن الگوزيتم شبکه عضبی یه طوز قطعی یک سند را بة عنوان مفتبرزیا جعلی طبقه‌بتدی نمی‌کند. برای مقایسه یک سند با الگوی مورد انتظار آن. از دو ‎CNN‏ یکسان در معماری سیامی خود استفاده می‌کنيم. 61۸ ها از منزیت یادگیری آشکارسازهای ویژگی محلی با تغيير ناپذیربهینه برخوردار هستند و مى توانند 340

صفحه 345:
نمايش هابى را اجادکنند که در برایر اعوجاح های هندسی تصویر ورودی, مفاوم هننتند. این به خوبی برای مننثله ما مناسب اننت زیرا قذف ما این است که استاد معتبر و آزمايشى را از طريق یک شبکه واحد منتفل کنیم و سپس نتایج آنها را برای شیاهت مقایسه کنیم.برای رسیدن به اين هدف, مراحل زیر را اجرا مي كنيم. فرض كنيد مى خواهيم يك سند را آزمايش كتيم. براي هر كلاس از سند مراحل زیر را اتجام مى دهیم 3 ویر حیزه هحه هد معب ‏ یاف گید مان زا منندوآفعن من لبي سند آزمون باید شبیه سند واقعی باشد. 2. سند واقعی از لایه های شبکه عصبی عبور داده می شود تا یک بردار ویژگی ایجاد شود که نمايش ریاضی الگوهای سنذ واقعی است. هماتطور که ذر تمودار قبل نشان داده شده است: ما آن را بردار ویژگی 1 می تامیم. 3 مدرکی که نیاز به آزمایش دارد را سند آزمون می نامند. ما ان سند را از طریق یک شبکه عصبی مشابه شبکه ای که برای ایجاد بردار ویژگی برای سند واقعی استفاده شده است عبور می دهیم. بردر ویژگی سند آزمون, بردار وسژگی 2 وه تن نون 4. ما از فاصله افلیدسی بین بردار ویژگی 1 و بردار ویژگی 2 برای محاسبه امتیاز شیاهت بین سند واقعی و سند آزمون استفاده می کنیم. اين امتیاز شباهت. اندازه گیری شباهت (1005) نامبده می شود. ۷05 عددی بین 0 و 1 است. عدد بالاتر تشان دهنده فاصله کمتر بین اسناد و احتمال بیشتر مشابه بودن اسناد است. 5. اگر امتیاز شباهت محاسبه شده توسط شبکه عصبی زیر یک آستانه از پیش تعریف شده باشد. سند را به عنوان تقلبی علامت گذاری می کنیم. نايد ‎tt‏ چگونه می توالیم شبگه های عصبی سیامی را با استفاده از بایتون بياده سازى كنيم: aa

صفحه 346:
1. ابتدا ابید بسته های پایتون مورد تباز را وارد کنیم: import random import numpy as np import tensorflow as tf در مرحله بعد. شبکه عصبی را که برای پردازش هر یک از شاخه های شبکه سیامی استفاده مي شود, تعریف می کنیم. def createTemplate(): return tf.keras.models.Sequential({ tf.keras. layers.Flatten(), tf.keras. layers.Dense(128, activation='relu'), tf.keras. layers Dropout(0.15), tf.keras. layers.Dense(128, activation='relu'), tf-keras. layers Dropout(0.15), tf.keras. layers.Dense(64, activatior 1۱ relu'), توجه داشته باشید که برای كافش بيش برازش, ترخ حذف تصادفی را نیز 0.15 تعین کرده یم 1. برای پیاده سازی شبکه های سیامی از تصاویر ۱۵1157 استفاده می کنیم. تصاوير 18/557 برای آزمایش اثربخشی رویکرد ما ایده آل هستند. رویکرد ما مستلزم آماده سازی داده ها به گونه ای است که هر تمونه دارای دو تصویر و یک علامت شیاهت دودوبی باشد. این علامت نشان می دهد که آنها از یک طبقه ae

صفحه 347:
هستند.ببیید اکنون تابعی به نام‌۵۳۵۵۵021۵ را پیاده سازی کتیم که می تواند داده ها را برای ما آماده کند def prepareData(inputs: np.ndarray, Labels: np.ndarray) classestumbers = 10 digitaltdx = [np.where(Labels range(classesNunbers) ] pairs = list() labels = List() n = min({len(digitalldx(d]) for d in range(classesNunbers)}) ~ 1 for d in range(classesNunbers) : for i in range(n): zi, 22 = digitaltdx{d]{i], digitaltdxtd}{i + 1] pairs += [[inputs(z1], inputs(2211] ine = random.randrange(1, classesNunbers) dn = (d + inc) % classesNumbers zl, 22 = digitalldx(d][i], digitaltdx(dn] [4] pairs += [[inputs(z1], inputs(22]]] labels += ‏بدا‎ 4)[0] for 4 in return np-array(pairs), np.array(Labels, dtype=np. float32) توجه داشته باشید که (/۵۳6۴۵۳60۵۴۵ منجر به تعداد مساوی نمونه در تمام ارقام می شود مد

صفحه 348:
آکنون مجموعه داده های آموزشی و آزمون را آماده می کنیم: (x train, y train), (test, y test) = tf.keras.datasets.mnist.load_data() x train = x_train.astype(np. float32) x test = x test .astype(np. float32) x_train /= 255 x test /= 255 input_shape = x_train.shape[1:] train pairs, tr_labels = prepareData(x train, y train) test_pairs, test_labels = prepareData(x test, y test) ‎aa 93 aula >‏ سیستم سیامی را یجاد کنیم: ‎input_a = tf.keras. layers. Input (shapesinput_shape)‏ ‎enconderl = base network(input_)‏ ‎input_b = tf.keras. layers. Input (shapesinput_shape) enconder2 = base_network(input_b) ‏اکنون, معیارتشابه (005) را یاده سازی می کنیم, که فاصله پین دو سندی را که می خواهیم مقایسه کنیم. مجاسیه می کند ‎distance = tf.keras. layers. Lanbda( ‎Lanbda enbeddings: tf.keras.backend.abs (enbeddings[@] - ‎enbeddings(1])) (Tenconder1, enconder ‎measure0fSimilarity = tf.keras.layers.Dense(1, ‎activation='signoid') (distance) ‎34 ‎ ‎

صفحه 349:
حالا ینید مدل را آموزش دهیم. برای آموزش این مدل از 10 93 ‎(epoch)‏ ‏استفاده خواهیم کرد: توجه داشته باشید که با استفاده از 10 دور به دفت 97.49 درصد رسیدیم. افزایش تعداد دوز ها باعث بهبود بیشتر سطح دقت می شود. 245

صفحه 350:
خلاصه در اين فصل ابتدا جزئيات شبكه هاى عصبی را بررسی کردیم. ما با بررسی چگونگی تکامل شبکه‌های عصبی در طول سال‌ها شروع کردیم. ما انواع مختلف ‎ole Su‏ عصبی را مورد مطالعه فرار دادیم. سپس, ما به بلوک های سازنده مختلف شبکه هاى عصبى نكاه كرديم. ما الكوريتم نزول كراديان را به طور عميق مورد مطالعه رار دادیم که رای آموزیش شبكههاى عصبى استفاده می‌شود. ما توایعفعال سازی متلف را مورد بحث قرار دادیم و کابردهای توایع فعال سازی را در یک شبکه عصبی مورد مطالعه قرار دادیم. همچنین مفه وم یادگیری انتقالی را بررسی کردیم. در تهایت. ما به یک مثال عملی از تجوه استفاده از یک شبکه عصبى براى آموزش یک مدل یادگیری ماشینی که می‌تواند برای علامت‌گذاری استاد جعلی با تقلبی استفاده شود, نگاه کردیم. با نگاهی به آینده, در فصل بعدی به نجوه استفاده از چنین الگوریتم‌هایی برای پردازش زبان طبیعی خواهیم پرداخت. ما همچنین مفهوم جاسازی وب را معرفی خواهیم کرد و به استفاده از شبکه های بازگشتی برای پردازش زبان طبیعی خواهیم پرداخت. در تهايت, نجوه اجراى تحلیل احساسات را نیز بررسی خواهیم کرد 26

صفحه 351:
بخش 13 موضوعات پیشرفته همانظور که از افش پیداست, در این قسمت به چند موضهع پیشرفته منتخب مرتبط با الكوريتم ها مى بردازيم. رمزنكارى و الكوريتمهاى مقباس بزرگ از نکات يرجسته اين بخش هستنذ. ما همچنین به مسائل مربوط به زیرساخت در مقیاس بزرگ مورد ناژ برای آموزش الگوریتمپیچیده نگاه خواهیم کرد. فصل آخر این بخش به بررسی ملاحظات عملی می‌بردازد که باید هنگام پیاده‌سازی الگوریتم‌ها در نظر داشت. فصول موجود در اين بحش عبارتند از: فصل 9, الگوریتم های دادم فصل 10, رمزنگاری فصل 11, الگوریتم های مقیاس بزرگ فصل 12, ملاحظات عملی 27

صفحه 352:
9 الگوریتم داده "داده ها نفت جدید اقتصاد دیجیتال است": مجله ‎Wired‏ تصمیم گیری در سراسر چهان به طور فزاینده ای میتنی بر داده است. دادها اطلاعات مربوط به پدیده را جمع‌آوری می‌کنند و الگوریتمها می‌توانند به ما دز استخراج و استفاده معنادار از آن کمک کنند. اين فصل در مورد چنین الگوریتم های داده محور است و به طور خاض, بر سه چنبه از الگوریتم های داده محور تمرکز دارد: ذخیره سازی, جربان و فشرده سازی, اين فصل با مروری کوناه بر الگوریتم های داده محور شروع می شود, سپس در مورد استراتژی های مختلفی که ‎on‏ توانند در قفیره سازی داده ها نتفاده شوند بعت خواهیم کنرد. دز آدامه: نجوه اعمال الگوریتم‌ها در جریان داده توضیح داده می‌شود, سپس روش‌های مسلف:ترای فهرده‌تاري داده‌ها موزد تحت قنزر میگبرد: جز هابتت ما اه خواهيم كرفت كه جكوته مى توانيم از مقاهيم توسعه بافته در اين فصل برای نظارت بر شرعت خودروهایی که در بزرگراه با استفاده از یک شبکه حسگر بيشرفته در حال حركت هستند استفاده كنيم. در بايان اين فصل, شما بایدبتانید مفاهیم و موازته های مربوط به طراحی الگوریتم های مختلف داده محور را درک كنيد. اين فصل مفاهيم زیر را مورد بحث فرار می دهد + طیقه بندی داده ها ۰ الگورتم های ذخبره سازی داده ها ‎ogo»‏ استفاده از الگورتم ها برای فشرده سازی داده ها ‏*_ تحوه استفاده از الگوریتم ها برای جریان داده ها ‏اجازه دهید ابتدامفاهیم اولیه را معرفی کنیم. ‏مقدمه ای بر الگوریتم های داده ‎348 ‎ ‎

صفحه 353:
جه بدنیم چه ندانیم, در عصری از کلن داده زندگی می کنیم. فقط برای دریافت ایده در مورد میزان تولید مدوم داده هاء کافی است به برفی از اعداد متتشنر شده توسط 660016 برای سال 2019 نگاه کنید. همانطور که می دانیم: ۵۶ 600916 مخزن چند رسانه ای برای ذخیره عکس های ابجاد شده توسط 60016 اسث. در سال 2019, روزاته به طور متوسط 1.2 میلبارد عکس و ویدیو در ‎Google Photos‏ آبلود شد. همجنين هر روز به طور متوسط 400 ساعت ويذيو (به ميزان 1 ‎PB‏ داده) در ۷۵۱/۲۷۵۵ آپلود می شد. می توان با اطمینان گفت که مقدار داده ای که تولید می شود به سادگی منفجر شده است. علاقه فعلى به الكوريتم هاى ميتنى بر داده به ذليل اين واقعیت است که داده ها حاوی اطلاعات و الگوهای ارزشمندی هستند. اگر از داده ها به روش صحح استفاده شود, می تواند مبنای تصمیم گیری های سیاست گذاری, بازاریابی, حاکمیت و تجزیه و تحلیل روند باشد: به دلایل واضح. الگوزیتم هایی که با داده ها سروکاردارند روز به روز اهميت بيشترى ببدا مى كننذ. طراحى الكوريتم هابى كه می توانددده ها را به طور کارآمد پردازش کنند. یک حوزه فعال تحقیق است. شکی تیست که کاوش در بهترین راه‌ها برای استفاده از داده‌ه, رای ارائه برخی مزایای قابل اندازه‌گیری, تمرکز سازمان‌ها, کسب‌وکارها و دولت‌های مختلف در سراسر چهان است. اما ذانه ها به شکل خام به تدرت مفید هستند. برای استعراج اطلاعات از داده های خام؛ باید پردازش, آماده سازی و تجزیه و تخلیل شود: روش های کارآمد بای ذخبره داده ها روز به روز اهمیت بیشتری پیدا می کنند. توجه داشته باشید که با توجه به محدودیت‌های ذخیره‌سازی فیزیکی سبستم‌های تک‌گره: داده‌های بزرگ را فقط می‌توان در فضای ذخیره‌سازی توزيعشده متشكل از بيش از یک گره که با لینک‌های ارتباطی پرسرعت متصل هستند. ذخیره کرد. بنابراین: منطقی است که برای یادگیری الگوریتم‌های داده. با نگاه کردن به الگوریتم‌های مختلف ذخیره‌سازی داده‌ها شروع کنیم. ید, اجازه دهیدداده‌ها را در دسته‌های مختلف طبقه‌بندی کنیم. 349

صفحه 354:
طبقه بندی داده ها بیمید ببينیم چگونه فی توانیم داده ها را در زفینه طراحی الگوریتم های دادهد طبعه بندی کنیم. همانظور که در فصل 2. ساختارهای ذاده مورد استفاده در الگوریتم ها بحث شد می توان از مجاسبه حجم, تتوع و سرعت داده ها برای طبقه بندی ‎Lgl‏ استفاده کرد. این طبقه‌یتدی می‌تواند مبلایی برای طراحی الگوزیتم‌های داده‌ای باشند که می‌تواندبرای ذخیره و پردازش آن استفاده شوند. یبد این ویژگی‌ها را یک به یک در زمین الگوتم‌های داده بررسی کنیم: حجم. مقدار داده‌هایی را که باید در یک الگوریتم ذغیره و بردازش شون به ضورت عددق فان می‌دهد با افزایش حجن کازداده فشرده می شود و تیاز به تهیه منابع کافی برای ذخیره, کش کردن و پردازش داده ها دارد. کلان داده اصطلاحی است که به طور مبهم حجم زیادی از داده را تعریف می کند که توسط یک گره واحد قابل مدیریت نیست. سرعت, ترخ تولیدداده های جدید را مشخص می کند. معمولً اههای نبرعت با ‎ly‏ داد‌های دلغ ی جریان دلغ وداه‌های سرعت پا را جونان سرد ها ساون ساده داده‌های سرد می‌گویند. در بسیاری از برنامه‌هاء داده‌ها ترکییی از جریان‌های گرم و سرد خواهند بود که ابتداباید آماده شوند و در یک جدول واحد ترکیب شوند تا بتوان با الگوریتم استفاده کرد. تنوع به انواع مختلف داده های ساختاريافته و بدون ساختار اشاره دارد که فبل از استفاده توسط الگوریتم باید در یک جدول واحد ترکیب شوند. بخش بعدی به ما کمک می کند تا موزنات مربوط به آن را درک کنیم و انتخاب های معتلف طراحی را هنگام طراحی الگوربتم های ذخبره سازی ارائه می دهد ارائه الگوریتم های ذخبره سازی داده ها 380

صفحه 355:
یک مجزن داده قابل اعتماد و کارآمد.قلب یک سیستم توزیع شده است. اگر این مخزن داده برای تجزیه و تحلیل ایجاد شود. به آن درباچه داده تیز می گویند. یک مخزن داده,داده های حوزه های مختلف را در یک مکان واحد گرد هم می آورد اید یناب درک مسائل مختلف مربوط به ذخیره سازی داده ها در یک مخزن توزيع شده شروع كنيم. آشنايى يا استراتزى هاى ذخيره سازى داده ها در سالهاى اوليه محاسبات ذيجيتال. روش معمول طراحی مخزن داده با استفاده از معمارى تك كره بود. با افزايش روزافزون اندازه مجموعه داده هاء ذخیره سازى توزيع شده داده ها اکتون به چربان اصلی تبدیل شده است. استراتزی مناسب برای ذخیره داده ها در یک محبط توزیع شده به توع داده و الگوی استفاده موردانتظار آن و همچنین نیازمندبهای غیر کاربردی آن بستگی دارد. برای تجزب» و تحلیل بیشتر نیزمندی‌های یک ذخبره‌سازی داده‌های توزیع‌شده. اجازه دهید با فضیه سازگاری دسترسی پذبری تحمل پارتیشن (6/0) شروع کنیم. که اساس ابداع ینک استراتژی ذخبره‌سازی داده برای یک سیستم توزی‌شده را در اختیار ما فرار ارائه فضبه ۵۴ در سال 1998 اریک بروثر قضبه ای را مطرح کرد که بعدها به قصیه 648 معروف شد. براق درك قضيه 688, ابتدا سه ویژگی زیر را در سیستم های ذخیره سازی توزیع شده تعریف می کنیم: سازگاری, دسترسی پذیری و تحمل پارتیشن. 6۸6 در وافع یک مخفف است که از اين سه ویژگی تشکیل شده است: سازگاری (يا به سادگی 6): ذخیره سازی توزیع شده از گره های مختلفی تشکیل شده است.

صفحه 356:
هر یک از این گره ها را می توان برای خواندن» توشتن با به روز رسانی رکوردها در مخزن داده استفاده کرد. سازگاری تضمین می کند که در یک زمان خاص, 11 مستقل از اينكه از کدام گره برای خواندن داده ها استفاده می کنیم. همان نتیجه را خواهیم گرفت. هر عملیات خواندن, با آخرین داده هایی را که در مخزن توزيع شده یکسان است برمی گردان با یک پیام خطا می دهد دسترسی پذیری (با به سادگی ۸): دسترسی پذیری تضمین می کند که هر گره در سیستم ذخیره سازی توزیع شده فادر خواهد بود بلافاصله درخواست را با با بدون سازگاری انجام دهد. تحمل بارتيشن (یا به سادگی 8): در یک سبستم توزیع شده. چندین گره از طریق یک شبکه ارتباطی به هم متصل می شوند. تحمل پارتیشن تضمین می کند که در صورت خرابی ارتباط بین یک زیر مجموعه کوچک از گره ها (یک با چندار سیستم, عملیاتی بافی می ماند. توجه داشته باشید که برای تضمین تحمل پارتیشن, داده ها باید در تعداد کافی گره تکزار شوند با استفاده از اين سه ویژگی, قضیه ۲۸۴ به دقت موازنه های موجود در معماری و طراحی یک سیستم توزیع شده را خلاصه می کند. به طور خاص, قضیه ۲۸8 بیان می کند که, در یک سیستم ذخبره سازی, ما فقط می توانیم دو مورد از ویژگی هاق ریز را رامد پامتیره سارکاری یا مسروس وديرى ا ‎Legal ery‏ ظ. این قضیه در تمودار زیر تشان داده شده است: ase

صفحه 357:
Consistenc Pare tt ۷۳ Tolerance | | / aNd \ CA 1 Hay ۳ | Availability 3 ‏زر‎ شکل 1.9: قضیه 6۴ قضیه ۲۸6 همچنین به ین معتی است که ما می‌تونیم سه توع سیستم ذخیره سازی توزیع شده داشته باشیم ۰ یک سبستم ۸) (پیاده‌سازی سازگاری-دسترسی پذیری) * يك سیستم ۸8 (دسترسی پذیری- تحمل پارتیشن را پیاده سازی می کند) ۶ يك سيستم 66 (اجرای سازگاری-تحمل پارتیشن) بياييد آنها را يكى يكى بررسى كنيم. سیستم های 4 33

صفحه 358:
سیستم های تک گره سنتن سیستم های ‎CA‏ هستند. این به این دلیل است که اگر سیستم توزیع شده نداشتهباشیم. دیگر نیازی به نگرانی در مورد تحصل بارتيشن تداريم دز آن صورت: ما مي‌توانيم سیستی داشتهباشیم کنه هم سنازگاری و هم دسترسی پذیری یعنی یک سیستم ) داشته باشد. پایگاه‌های داده سنتی تک گره ماند 0۳۵616 با ۱/۷50۱ همگی نمونه‌هایی از سیستم‌های ‎CA‏ هستند سیستم های ۸۶ سیستم های ۸ سیستم های ذخیره سازی توزیع شده ای هستند که برای دسترسی پذیری تنظیم شده اند نا که به عنوان سیستم‌هایی با وکتش‌پذیری بالا طراحی شده‌اند. می‌توانند در صورت نباز, سازگاری را فربانی کنند تا داده‌های با سرعت بالا را در خود جای دهند. اين بدان معناست که ايتها سیستم های ذخیره سازی توزیع شده ای هستند که برای رسیدگی فوری به درخواست های کاربران طراحی شده اند. درخواست های کاربر معمولی خواندن با نوشتن داده هایی است كه به سرعت در حال تغيير هستند. سيستمهاى 87 معمولى در سیستم‌های مانیتورینگ بلادرنگ مانتد شبکه‌های حسگر استفاده می‌شوند. پایگاه‌های اطلاعاتی توزيع شده با سرعت ‎Yb‏ مانند 65580078, نمونههای خوبی از سیستم‌های ۸۳ هستند. اگر ۲0۵02 7۳۵0500۳۴ بخواهد ترافیک یکی از بزرگراه های اناوا را از طریق شبکه ای از حسگرهای نصب شده در مکان های معتف بزرگراه نظارت کند, یک سیستم ۸6 برای اجرای دخیره سازی داده های توزیع نشده توصیه می شود سیستم های 6۴ سیستم های 6۴ هم سازگاری و هم تحمل بارتيشن دارند. اين بدان معناست كه ایها سیستم‌های ذخبره‌سازی توزیع‌شده‌ای هستند که تنظیم شده‌اند تا قبل از ‎Sl‏ ase

صفحه 359:
فرآیند خواندن یک مقدار را دریافت کند. سازگاری را تضمین می‌کنند. یک مورد معمول استفاده براى سيستمهاى © زمانى است كه مىخواهيم فايلهاى سند را در قالب 15011 تخیره کتیم. ذخیره‌سازی داده‌های ستد مانتد ‎MongoDB‏ ‏سیستم‌های ۲0 هستند که برای سازگاری در یک محبط توزیع‌شده تنظیم شده‌اند. ذخیره‌سازی داد‌هایتوزی‌شده به طور فزیندهای به مهم‌ترین بخش زیرساخت فناوری اطلاعات مدرن تبدیل می‌شود. ذخیره سازی داده های توزیع شده باید بر اساس ویژگی های داده ها و تیازمندبهای مسئله ای که می خواهیم حل ‎spas‏ دفت طراحی شود. طبقه‌بندی ذخبره‌سازی داده‌هابه سیستم‌های ۸۵ ۲ و ۲ به ما کمک می‌کند تا وازتات مختلف مربوط به طراحی سیستم‌های ذخبره‌سازی داده را درک کتیم. اکنون, ييابييد يه الگوریتم‌های جریان داده نگاه کنیم. ارائه الگوریتم های جریان داده ‎aLAasl Sp our Me yasab Laisa epi orGs Lila ols‏ لتق داده های در حالت استراحت هستند و معمولاً از طریق یک فرآیند دسته‌ای پردازش می‌شوند. جریان, اساسا پردازش داده بر روى داده هاى تامحدود است. ببابية يه يك مثال نكاه كنيم. بباييد فرض كنيم كه در حال تجزيه و تحليل تراكنش هاى تقلين در یک بانک هستیم. اگر بخواهیم به دتبال تراکنش های کلاهبرداری 7 روز بیش باشیم. باید به داده های در حالت استراحت نگاه کنیم. اين نمونه ای از یک فرآیند دسته ای است. از سوی دیگر, اگر بخواهیم تقلب را در زمان واقعی شناسایی کنیم. ین نمونه ای از جریان است. از اين روء الكوريتمهاى داده جريانى, الكوريتمهابى هستند كه با يسردازش جریانهای داده نیوک درن. اه اسانتی این نست كداجزيأى وأده يداف براق را به دسته هابى تقسيم کنیم که سپس توسط گره ی پردازش ,پردازش مي شود الكوريتمهاى جريان بايد در مقابل خطا تحم ليذير باشند و بايد يتواند سرعت ass

صفحه 360:
ورودى داده را مديريت كند. با افزایش تقاضا برای تحلیل روند بلادنگ, اين روزها ‎Lola‏ برای پردازش جریان نيز در حال افزايش است. توجه داشته بشید که برای کارگرد: چزیان: داده:ها بای نتریع پزدارش:هوند: و ‎sks niga SI col plo (olin go‏ باید همیشه در نظر گرفته شود. کاربردهای چریان کاربردهای زیادی از جریان داده و استفاده از آن به روشی معتادار وجود دارد. برخی از برنمه های کاربردی به شرح زیر است: * تشخيص تقلب نظارت بر سیستتم ‎lk lide ¢‏ هو ‏© داشیوردهای زنده ‎ *‏ سنسورهای ترافیک در بزرگراه ها ‎ *‏ تراکنش های کارت اعتباری ‏۰ جرکت کاریر در بزی آنلاین چند کاربره ‏آرائه الگوریتم های فشرده سازی داده ها ‏الگوریتم‌های فشرده‌سازی داده‌ها در فرآیند کاهش اندازه داده‌ها نقش دارند. در این فصل, یک الگوریتم فشرده‌سازی داده‌ها به نام الگوریتم فشرده‌سازی بدون ‏زیان را بررسی می‌کنیم. ‏الگوریتم های فشرده سازی بدون زبان ‎386 ‎ ‎

صفحه 361:
اینها الگوزیتم هایی هستند که می توانند داده ها را به گونه ای فشرده کتند که بدون از دست دادن اطلاغات, از حالت فشرده خارج شوند.آنها زمانی استفاده مى شوند که بازبابی دقیق فایل های اصلی پس از فشرده سازی مهم باشد. کاربردهای معمول الگوریتم های فشرده سازی بدون زیان به شرح زیر است: * برای فشرده سازی استاد * برای فشرده سازی و بسته بندى كد منيع و قايل هاي اجرایی * براى تبديل تعداد زيادى فابل كوجى به تعداد كمى فايل بزرك آشنايى با تكنيكى هاى اساسى فشرده سازى بدون زيان فشرده‌سازی داده‌ها ر این اصل استوار است که اکتر داده‌ها پیشتر از یت‌هاین استفاده می‌کنند که آنترویی آن نشان می‌دهد بهینه است. به ياد بياوريد كه آنترويى اصطلاحی است که برای مشخص کردن اطلاعاتی که داده ها حمل می کنند استفاده مى شود. به اين معتی كه نمايش بيت بهینه تری از همان اطلاعات امکان پذیر است. کاوش و فرمول‌بندی نصايش بيت كارآمدتر مبتابى براي ايداع الگوریتمهای فشرده‌سازی می‌شود فشرده‌سازی بدون زیان از این افزونگی برای فشرده‌سازی داده‌ها بیدون از دست دادن اطلاعات استفاده می‌کند. در اواخر دهه 80 2۷ و ‎slaSuS Lempel‏ فشرده‌سازی داده متتی بر فرهنگ لفت را پيشنهاد کردتد که می‌توان از آن برای اجرای فشرده‌سازی داده‌های بدون زیان استفاده کرد. اين تکنیک‌ها به دليل سرعت و نرخ فشرده‌سازی خوب, فورا مود استفاده قرار گرفنند. از ‎oul‏ کیک ها برایایجاد یزار فشرده سای محبوب 1:/9۵500:لا استفاده شد. همچنین: فرمت تصویر گیف فراگیر .از اين تکنیک‌هاي فشرده‌سازی استفاده می‌کند, که ثابت شد محبوب هستند زیرا می‌توان از آن‌ها برای نمایش همان اطلاعات در تعداد کمتری ببت, صرفه‌جویی در فضا و بهنای باند ارتباطی استفاده کرد. اين تکنیک‌ها بعداً منای توسعه ابزر 2 و انوع آن شدند.استاندارد فشرده‌سازی, ۷,44, که 357

صفحه 362:
دز موجم‌ها آسفاده سمطو ميو م آسانن آن ‎asa‏ کون بز بقل های آینده تكنيكها ا یکی یکی بررسى مىكنيم. كد كذارى هافمن کدگذاری هافمن یکی از قدیمی ترين روش های فشرده سازی دادح ها است و بر پایه ایجاد درخت هافمن است که هم برای رمزگذاری و هم برای رمزگش ایی داده ها استفاده می شود. کدگذاری هافمن می‌تواند محتوای داده‌ها را به شکل فنفترته‌تری با ‎od al aber‏ واخیت کعا برع ‎ls) Lesa J‏ 21355 کاراکترهای حروف الفبا) بیشتر در یک جریان داده ظاهر می‌شوند, نمايش دهد. با استفاده از رمزگ‌ذاری‌هایی با طول‌های مختلف (کوتاه‌تر سرای پرنکرارترین كاراكترها و طولای‌تر بای کم‌نگرارترین کاراکترها),دده‌ها فضای کمتری مصرف می‌کنند. حال, ببایید چند اصطلاح مرتبط با کدگذاری هافمن را بیاموزیم: کدگذاری: کدگذاری در متن داده «نشان دهنده روش نمایش داده ها از یک شکل به شکل دیگر است. ما می خواهیم فرم حاصل مختصر باشد. کلمه ومز: یک کاراکتر خاص به شکل رمزگذاری شده کلمه رمز نامیده مي شود کدگذاری با طول ثابت: زمانی است که هر کاراکتر رمزگذاری شده: يعني کلمه رمز, از تعداد پیت های یکسانی استفاده می کند کدگذاری با طول متعبر: کلمات رمز می توانند از تعداد بیت های متفاوتی استفاده کند. آرزیابی کد؛ اين تعداد بیت مورد انتظار در هر کلمه رمز است. کدهای رایگان پیشوندی: اين بدان معناست که هیچ کلمه رمزی پیشوند هیچ کلمه رمز دیگری تیست. ase

صفحه 363:
رمزگشایی: به اين معنی است که یک کد با طول متفیر باید عاری از هر پیشوندی باشد. براى درك دو عبارت آخر, ابتدا بايد به اين جدول نكاهى بيندازيد: کارا فرکانس طول ثابت طول متغير 1 045 000 0 ‎Tor 1 013 1‏ ‎Or N‏ 0 100 016 1 111 ‎Too 0.05 ¥‏ 107 ‎Tor 00‏ 170 حال می توانیم موارد زیر را استباط کنیم كد طول نابت: كد با طول ثابت برای این جدول 3 است. كد طول متغير: كد با طول متغير براى اين جدول 1(45) + 3(0.13) + 0.12( ‎ssl 2.24 = (4}0.05 + (4)0.09 + (3)0.16 + (3‏ تمودار زیر درخت هافمن ایجاد شده از مثال قبل را نشان مى دهد: وود

صفحه 364:
شکل 2-9: مثالی از درخت هافمن توجه داشته باشید که رمزگذاری هافمن در مورد تبدیل داده ها به درخت هافمن است که فشرده سازی را امکان پذیر می کند. رمزگشایی یا لفو فشرده سازی: داده ها را به فرمت اصلی باز می گرداند. یک مثال عملی - تحلیل احساسات بلادرنگ توبیتر 360

صفحه 365:
گفته می شود توبيتر تقريياً 7006 توبيت در هر ثانيه در موضوعات مختلف دارد. بياييد سعئ کنیم یک تحلیلگر احساسات بسازیم که بتواند احساسات اخبار را از منایع مختلف خبری در زمان وافعی ضبط کند. ما با وارد کردن بسته های مورد نیاز شروع می کنیم: 1. بسته هاى مورد تياز را وارد كنيد: import tweepy, json, time import numpy as np import pandas as pd import matplotlib.pyplot as plt from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer analyzer = SentimentIntensityAnalyzer() توجه داشته باشید که ما از دو نسته زیر استفاده می کنیم: 2. تجزیه و تحلیل احساسات ۷۸۵۴8 که محفف کلمات ۸/۵۲۵ ۷۵/۵96۵ 00۵ و 8625008۲ 560/۳۵۸۲ است و یکی از ابزارهای محبوب تجزیه و تحلیل احساسات میتتی بر قوالین است که برای رسانه های اجتماعی توسعه یافته است. اگر قباً از آن استفاده نکرده اید.ابتدا باید موارد زیر را اجرا كنية: pip install vaderSentinent ‏که یک الله مبتنى بر بايتون براى دسترسى به تويتر است: مجددآء أكر‎ ۷ ‏قبلاً از آن استفاذه تكرده ايد. ابتدا بابد كد زير را اجرا كنيد:‎ pip install Tweepy

صفحه 366:
مرحله بعدی کمی مشکل است. برای دسترسی به جریان زنده توبيتهاء بايد درخواستی برای ایجاد یک حساب توسعه‌دهنده با توییتر ارائه دهید. هنگامی که کلیدهای ۸۱ را دارید. می توانید آنها را با متفیرهای زیر نشان دهید: twitter access token = <your_twitter access token> twitter_access token secret = <your_twitter_access_token_secret> twitter_consumer_key = <your_consumer_key> twitter_consumer_secret <your_twitter_consumer_secret> سپس اجازه دهید احراز هویت /(70/6۵0 ۸8۱ را پیکریندی كنيم. براى آنء بايد متغيرهاى ايجاد شده قبلى را ارائه كنيم: auth = tweepy.QAuthHandler (twitter consumer_key, twitter_consumer_secret) auth.set_access_token(twitter access token, twitter_access_token secret) api = tweepy.API(auth, (()معومقعاا0ك3. فمععمهم . رمعميعم ] حالا فسمت جالب مى آيد. ما دستههاى توبيتر منابع خبرى را كه مىخواهيم برای تحليل احساسات, نظارت كنيم, انتخاب مىكنيم. براى اين مثال. منایع خبری زیر را pil ‏انتخاب کرده‎ news_sources = ("@BBC", “@ctvnews", "@CNN", "@FoxNews", "@dawn_com") 362

صفحه 367:
تال باه طفه آفدلی را یجان لمم قن سق مايق أرق يتلق ديام ‎sly array_sentiments‏ تكهدارى احساسات شروع مى شود. سيس, هر ينج متبع خبرى را مرور مى كنيم واز هر كدام 100 توبيت جمع آورى مى كنيم. سپس, بای هر تییت, تمايل آن را محاسبة مى كنيم: ‎si‏ ببابيد تمودارى ايجاد كنيم كه تمايل اخبار را از اين متايع خبرى جداكاتة نشان دهد ‎363 ‎ ‎

صفحه 368:
1. توجه داشته باشید که هر یک از منایع خبری با رنگ متفاوتی نشان داده شده 2. حال پییید بهآمارخلاصه نگاه کنیم: اعداد قبلی روند اخساسات را خلاصه می کنند. ببه عنوان مثال؛ احساسات. بی‌بی‌سی مثیت‌ترین است و به نظر می‌رسد کانال خبری کانادایی 6/0۵۷5 بیشترین احساسات منفی را ذارد. 364

صفحه 369:
خلاصه در این فضل به طراحی الگوریتم های داده مجنوزپزداشتیم. ما روی سنه جنبه از الكوريتمهاى داده محور تمرکز کردیم: ذبره‌سازی, فشرده‌سازی, و جريان. ما ‎UGS gia abo Lele tins 1 Ry EN ABN Gays‏ دیکته کند: ما دو نوع مختلف الگ وزیتم فشرده سازی داده را برزستن کردیم: در فصل بعدی, بهالگوریتمهای رمزنگاری نگاه خواهیم کرد. ما ید خواهیم كرفت كه جكونه مى توانيم از فدرت این الكوريتم ها بای ايمن سازى بيام هاى تبادل شده و تخیره شده استفاده نیم 0 رمزنگاری 365

صفحه 370:
"من شعرهای نانوشته ام را به صورت رمزی روی صورتم حمل می کنم!" - جورج البوت اين فصل شما را با الكوريتم هاى مرتبط با رمزتكارى آشنا مى كند. ما با ا/ بيشينه شروع می کنیم. سپس الگوریتم های رمزگذاری متقارن را مورد بحث قرار می دهیم. سپس الگوریتم (1/۵5) 5 ۸06۵5۵96019۵5 و الگوریتم هش ایمن ( 5۸) را توضیح می دهیم و محدودیت ها و ضعف های پیاده سازی الگوریتم های متقارن را ارائه مى دهيم. در ادامه. الگوریتم‌های رمزگذاری نامتفارن و نحوه استفاده از آنها براى ايجاد كواهىهاى ديجيتال را مورد بحث قرار خواهيم داد. در ‎seule‏ ما یک مثال عملی ارائه خواهیم داد که تمام اين تکنیک ها را خلاصه می کند. در پایان اين فصل, شما یک درک اساسی از مسائل مختلف مربوط به رمزنگاری خواهید داشت. موضوعات زیر در اين فصل مورد بحث فرار می گیرند: * مقدمه ای بر رمزنگاری ‎٠‏ آشتابي با اواع تکنیک های رمزنگاری * . مثال - نگرانی های امنیتی هنگام استقرار یک مدل یادگیری ماشینی بییید با نگاه کردن به مفاهیم اولیه شروع کنیم. مقدمه ای بر رمزنگاری تکنیک های محافظت از اسرار قرن هاست که وجود داشته است. اولین تلاش ها برای ایمن سازی و مخفی کردن داده ها از دشمنان به کتیبه های باستانی کشف شده بر روى بناهای تاریعی در مصر برمی گردد, جایی که از القبای خاصی استفاده می شد که تتها معدودی از افراد مورد اعتماد آن زا مى شتاختند. اين شکل اولیه امتیت. ابهام تامیده می شود و امروزه نیز به اشکال مختلف استفاده مى شود. براى اینکه اين روش کار کند, محافظت از راز بسیار مهم است. که معنای مخفی الفبا در مثال بالا خواهد ببود. بعداً در زمان جنگ جهانی اول و دوم 366

صفحه 371:
یافتن راه‌های بی ‎obit‏ برای محافظت از پیمهای مهم,اهمیت پیداکرد: در اوافر فرن بيستم, با معرفى الكترونيك و كامييوتر, الكوريتم هاى ييجيده اى براى ايمن سازى داده ها توسعه يافتند كه زمينه جديدى به نام رمزتكارى را به وجود آورد. اين فصل جنبه هاى الكوريتمى رمزنكار را مورد بحث قرار مى دهد. هدف اين الكوريم ها امكان تاذل امن داذه نين دو عرآينة يا كانن افست. الكورتهنات: رمزنكارى استراتزىهاى استفاده از توابع رياضى را براى تضمين اهداف امنيتى بیان شده پیدا می‌کنند. ابتذا ببه اهمیت «ضعیف‌ترین پیوند» در زیرساخت نگاه مىكنيم. درک اهمیت ضعیف ترین پیوند كاهى اوقات, هنكام معمارى امنيت زيرساخت ديجيتال. بر امنيت هر يك از تهادها ‎AS SSE, NASH, Bip aE, seal ay‏ می‌تواند منجر به نادبده گرفتن برخی از حفره‌ها و آسیب‌پذیری‌ها در سیستم شود که بعدامی‌توانند توسط هکرها برای دسترسی به داد‌های حساس مورد سوء استفاده قرار كيرند. نکته مهمی که بایدبه خاطر بسپارید این است که یک زیرساخت دیجیتال, به عنوان ‎JS Se‏ به اندازه ضعیف ترین حلقه آن. وی است. برای یک هکر این ضعیف ترین پیوند مي تواند دسترسی درب پشتی به داده های حساس در زیرساخت دیجیتال را فراهم كند. فراتر از یک نقطه خاصء تقوبت درب جلو بدون بستن تمام درهای پشتی فایده چتدانی ندارد. همانطور که الگریتمها و تكنيكهاى حفظ زيرساخت ديجيتالى. پیچیدهتر و پیچبده‌تر می‌شوند. مهاجمان نیز به ارتفای تکنیک‌های خود ادامه می‌دهند: هميشه مهم است که به یناد داشته باشید که یکی از ساده‌ترین راهها

صفحه 372:
برای مهاجمان برای هک کردن زیرساخت‌های دیجیتال, استفاده از این آسیب‌پذیری‌ها برای دسترسی به اطلاعات حساس است. در سال 2014, یک حمله سایبری به يك موسسه تحقيقاتى فدرال كانادا - شوراى تحقيقات ملى (8/80) - تخمين زده مى شود كه صدها ميليون دلار هزينه داشته باشد مهاجمان توانستند دهدها دادههاى تحقيقاتى و مطالب مالكيت معنوی را به سرقت ببرند. آنها ازيك حفره در ثرم افزار آياجى استفاده كردتد كه دز سرورهاى وب برای دسترسی به داده های حسان استفاده می شد. در اين فصل, آسیب‌پذیری‌های الگوریتمهای رمزنگاری مختلف را برجسته می‌کنيم بیاییدابتدا به اصطلاحات اساسی مورد استفاده نگاه کنیم. اصطلاحات بایه بیانید به اصطلاحات پایه مربوط به رمزنگاری نگاه کنیم: رمز؛ الگوریتمی است که عملکرد رمزنگاری خاصی را انجام می دهد. سین عفد های ‏ ممت مؤاب ركفلل محم نگ ویو بمب إ ‎gad 8 al lls, gles‏ فش :ملق متانم اه اصورت ۴ انش مت ‎re‏ متن ومز؛ منن درهم شده ای است که پس از اعمال رمزنگاری روی من ساده بترم ‎posal‏ لین فصل: ما آن راد سوت 6 نشان: خولدیم با مجموعه رمز: مجموعه با مجموعه ای از اجزای نرم افزار رمزنگاری, هنگامی که دو گره مجزا می خواهند با استفاده از رمزنگاری پیام ها را رد و بدل کنند. ابتدا باید روی یک مجموعه رمز به توافق برسند. اين کار برای اطمینان از اينكه آنها دفیقاً از همان پیاده سازی توایع رمزنگاری استفاده می کنند مهم است. 368

صفحه 373:
رمزكذارى: فرآيند تبديل متن ساده, 8, به متن رمز 6. رمزگذاری نامیده من شود. از نظر رياضى. باع > ‎encrypttP)‏ نشان داده مى شود رمزكشابى: فرآيند تبديل متن رمزى به متن ساده. از نظر رياضىء با 8 > (066/6)6تشان دادة مى شود. ‎:Cryptanalysis‏ روش‌های مورد استفاده برای تجزی» و تحلیل فدرت لگوریتم‌های رمزنگاری. تلیلگر سعی می كند متن ساده را بدون دسترسی به رمز بازيابى كند. ‏اطلاعات قابل شتاسايى شخصى (811): 61 اطلاعاتى است كه در صورت استفاده به تنهایی یا همراه با سایر داده های مرتبط می‌توان برای ردیایی هویت یک فرد استفاده کرد. برخی از نمونه‌ها شامل اطلاعات محافظت‌شده. مانند شماره تامین اجتماعی, تاریخ تولد. یا تام خانوادگی مادر است. ‏اجازه دهید ابتدانیازهای امنیتی یک سیستم را درک کنیم. ‏آشنایی با نیازهای امنیتی مهم است که ابتدا بازهای امنیتی دقیق یک سیستم را درک کنید. درک این موضوع به ما کمک می کند تا از تکنیک رمزنگاری صحیح استفاده کنیم و حفره های احتمالی یک سیستم را کشف کنیم. یکی از راه‌های ایجاد درک بهتر از بازهای امنیتی یک سیستم. پاسخ به چهار سوال زیر است: ‏* کدام افراد با فرآندهاباید محافظت شوندک ‏* ما از افراد و فرآیندها در برابر چه کسی محافظت می کنیم؟ ‏+ كجا بايد از آنها محافظت كنيم؟ ‏* جرا از آنها محافظت می کنیم؟ ‎369 ‎ ‎

صفحه 374:
اجازه دهید منالی از یک ابر خصوصی مجازی (۷۴6) 42 ‎Cloud‏ ۸۷5 بزنیم: ۱۷۳6 به ما اجازه می دهد تا یک شبكه ايزوله متطقى ايجاد كنيم كه در آن منابعی مانشد ماشین های مجازی به آن اضافه می شوند. برای درک نیازهای امتیتی یک ۷86 مهم است که ابتدا هویت ها را با پاسخ دادن به چهار سوال بالا شناسایی کنید ۰ چند نفر قصد استفاده از این سیستم را دارند؟ * چه نوع اطلاعاتی باید محافظت شود؟ » آا باید فقط از ۷۴ محافظت کنیم با در حال ارسال پیامی به سیستم هستیم که باید رمزگذاری شود و به ‎VPC‏ مخابره شود؟ * طبقه بندی امنیتی داده ها چیست؟ خطرات احتمالی چیست؟ چرا کسی انگیزه ای برای تلاش براى هك كردن سيستم داشته باشد؟ پیشتر پاسخ‌های اين سوالات با انجام سه مرحله زیر به دست ‎aise‏ ‏مرحله 1: موجودیت ها را شناسایی کنید. مرحله 2: اهداف امنیتی را تعبین کنید. مرحله 3: حساسیت داده ها را درک کنید ید ان مراحل را يكى يكى بررسى كنيم. مرحله 1: شناسايى موجوديت ها يك موجوديت را مى توان به عنوان يك فرد يك فرآبند يا يك منيع كه بخشى از يك سیستم اطلاعاتی است, تعریف کرد. تا ید شتاسایی کنیم که کاربران, منایه و فرآیندها چگونه در زمان اجرا حور دارند. سپس. نبازهای امنیتی اين موجودیت های شناسایی شده را به صورت جداگانه با گروهی تعبین می کنیم. هنگامی که اين تیازها را بهتر درک کنیم. می توانیم اهداف امتیتی سیستم دیجیتال خود را تعيين كنيم. 370

صفحه 375:
مرحله 2: تعیین اهداف امنیتی هدف از طراحی یک سیستم امتیتی محافظت از اطلاعات در برابر سرفت, به خطر افتادن با حمله است. الگوریتم‌های رمزنگاری معمولاً برای دستیابی به یک با چند هدف امنینی استفاده می‌شوندد احراز هویت: به زبان ساده, احراز هویت روشی است که ما ثابت می کنیم کاریر همان کسی است که ادعا می کند. از طریق فرآینداحراز هویت, ما اطمینان اخاصل من کنیم كه عونت كاري جابيد تدة: اسنت : عرآيية إخزال هويت با ازاله هويت: كارير شروع مى شود. به دنال آن اطلاعاتى ارائه مى شود كه فقط توسط ‎AS‏ ‏شناخته شده است و پنابراین فقط می تواندتوسظ آنها توليد شوة. محرمانگی: داده هایی که نیز به محافظت دارند. داده های حساس نامیده می ‎agen‏ كرالك ووس ‎wal aS Gail‏ هاق خشانن زا فنط بته کازبزان فجار محدود می کند. برای محافظت از محرمانگی داده‌های حساس در طول انتقال یا ذغیره‌سازی آن, باید داده‌ها را به گونه‌ای ارائه کنید که غیرقابل خواندن باشد مگر توسط کاربران مجاز. اي کار با استفاده از الگوریتم های رمزگذاری انجام مى شود که در ادامه در اين فصل به آنها خواهيم برداخت. یکپارچگی: یکبارچگی فرآیندی است که نشان می دهد داده ها به هچ وجه در طول انتقال با ذخبره سازی تغییر نکرده اند. به عنوان مثال, 76۴/۱۴ (یروتکل كنترل انتقال/بروتكل اينترنت) از الگوریتمهای جمع کنترل با بررسى افزونگی چرخه‌ای (36) برای تأیید یکیارچگی داده‌ها استفاده می‌کند. عدم انكار: عدم انكار توانابى توليد شواهد غیرفایل جعل و انکار ناپذیر مبنی بر ارسال با دریافت پیام است. از اين شواهد می توان بعدًبرایاثبات دریافت داده ها استفاده کرد

صفحه 376:
مرحله 3: درک حساسیت داده ها درک ‎ate cana‏ پندی تلع ناد ها مهم اند دادمه) توتنظ مفاات نط اردن ماننددولت‌ها,آزانس‌ها یا سازمان‌ها بر اساس مبزان چدی بودن عواقب در صورت به خطر افتادن آن دسته‌بندی می‌شوند. دسته بندی داده ها به ما کمک می کند تا الگورتم رمزنگاری صحیح را انتخاب کنیم. بیش از یک راه برای دسته بندی داده هاء بر اساس حساسیت اطلاغاتیآنها , وجود دارد. ایید به روش های معمول طبقه ‎sai‏ داده ها نگاه کنیم: داده های عمومی با داده های طیقه بندی نشده: هر چیزی که برای مضرف عمومی در دسترس است: به عنوان متال: اطلاعاتی که در وب سایت ینک شرکت با پورتال اطلاعاتی یک دولت یافت می شود داده های داخلی با داده های محرمانه؛ اگرچه برای مصرف عمومی نیست, اما افشای این داده ها در معرض عموم ممکن است عواقب مخربی نذاشته باشد. برای مثال, اگر ایمیل‌های یک کارمند که از مدیرش شکایت می‌کند فاش شود ممکن ات برای شرکت ‎Tal Sal lp yal‏ معکن اسست عوافب مقتربی نداشته باشد داده‌های حساس با داده‌های شری: داده‌هایی که قرار تیست پرای مصرف عمومی باشند و افشاى آن در معرض عموم عواقب زیانباری برای یک فرد با یک سازمان دار. به عنون مثال.افشای جزئیات یک آینوتی که قرار است در آینده عرضه شود: ممكن اننت به اهداف تجاری ایل آسیب پرساند و به رقبایی مانتد سامسونگ امتباز بدهد. نامه هی بیان حمتانی نله ای ف وق سبری سیرآمیده من سود ین اطلاعاتی است که در صورت افشای آن به شدت برای سازمان زیان آور خواهد ‎age‏ لين ‎oa cle Mel‏ تواند شامل شمارهتامین اجتماعی مشتری: شماره کارت اعتباری یا سایراطلاعات بسیار حساس باشد. داده های فوق سرى از طريق چندین لابه امنيتى محافطت مى شوند و برای دسترسی به مجوز خاصی نیا دارند. ar

صفحه 377:
به طور كلى, طراحی های آمنتی پیچیده تر بسیار کندتر از الكوريتم هاى ساده هستند.ایجاد تعادل مناسب پین امنبت و عملکرد سیستم بسیار مهم است. آشنایی با طراحی پایه رمزها طراحی رمزها در مورد ایجاد الگورنتمی است كه مى تواندداده هاي حساس را به هم بزند تا یک فرآيند مخرب يا يك كاربر غيرمجاز نتواند به آن دسترسى بيدا كند. اكرجه با كذشت زمان رمزنكارىها بيجيدهتر و ييجيدهتر شدهاند. اصول بايه كه رمزها بر اساس آنها هستند, بدون تغيير ياقى مىمائند. ببابيد يا تكاهى به برخي رمزهاى تسبتاً ساده شروع كنيم كه به ما در درك اصول ياية که در طراحی الگوریتم‌های رمزنگاری استفاده می‌شوند کمک می‌کنند. ارائه رمزهای جایگرین رمزهای جایگزین صدها سال است که در اشکال مختلف مورد استفاده فرار گرفته اند. همانطور که از نام آن مشخص است, رمزهای جایگزین بر اساس یک مفهوم ساده هستند - جایگزینی کاراکترها در متن ساده با سایر کاراکترها به روشی از بيش تعيين شده و سازماندهى شده. بيابيد به مراحل دقيق مربوط به اين موضوع نكاه كنيم: 1. ابتدا هر كاراكتر را به يك كاراكتر جايكزين نكاشت مى كنيم. 2. سپس, با جايكزين كردن هر كاراكتر در متن ساده يا كاراكتر ذيكرق دز متن رمزى با استفاده از نكاشت جايكزين: متن ساده را رمزگذاری و به متن رمز تبديل ‎oS‏ 3. برای زمزگشایی: متن ساده را با استفاده از نگاشت جایگزین بازگردانید در زیر نمونه هایی از رمزهای منت بر جایگزینی آورده شده است. وود

صفحه 378:
۶ رمز سزار * چرفنق 13 اجازه دهید آنها را با جزئیات بیشتر بررسی کنیم رمز سزار در سزار رمزها بر اساس یک تقشه جایگزینی است. یک نگاشت چایگریی با اعمال یک فرمول ساده که مخفی نگه داشته می شود, رشته وافعی را به روشی قطعی تغییر می دهد. نگاشت جایگزینی, با جایگزینی هر کاراکتر با کاراکتر سوم سمت راست آن ایجاد می شود. اين نگاشت در نمودار زیر توضیح داده شدم شکل 1: نگاشت جایگزینی رمزهای سزار بيابيد ببينيم جكونه مى توانيم رمز سزار را با استفاده از بايتون بياده سازى كنيم: 27

صفحه 379:
import string rotation = 3 P= ‘CALM’; for letter in P: C = C+ (chr(ord(letter) + rotation)) مت بیج که منک رم سراز رزوی مدن تلد ‎S CALM nel‏ رديم: بان مسن رمز را يس از رمزكذارى با رمز سزار چاپ کنیم: كفته مى شود كه رمزهاى سزار توسط ژولیوس سزار برای برفراری ارتباط با منناورانش استفاده شده است. زمر سزار یک رمز ساده آست وپیده ساری آن آسآن آشت: کته مفی ین آشت: که شکستن آن خیلی سخت نيست زيرا يك هکر مى تواند به سادگی تمام تعیبرات احتمالی القبا را تکرار کند (همه 2626 مورد) و ببیند آیا پیام معقولی ظاهر می شود. با توجه به تونیی‌های پردازشی ‎Lally led‏ اين تعداد تسيتاً كمى از ترکی‌هابرای انجام دادن اننت. تبیدبرای محافظت از داده های بشیار حضاس استفاده شود چرحش 13 ‎(ROT13)‏ ‏80713 یکی دیگر از رمزگ‌ذاری های مبتنی بر جایگزیتی است. در 80713 نگاشت جایگزینی با جایگزینی هر کاراکتر با نویسه 13 در سمت راست آن ایجاد می شود. تمودار زیر این موضوع را تشان می ‎ans‏ وود

صفحه 380:
شکل 2-10:رمز 20713 این بدان معتی است که اگر (807134 تابعی باشد که 80713 را پیاده سازی می کند, پس موارد زير اعمال مى شود: import codecs a_message = CALM" ah, c=codecs.encode(a message, 'rot_13") الا بياييد مقدار كدكذارى شده ۴ را چاپ کنیم: >> print(c) ۳2 تحلیل رمز رمزهای جابگزین بياده سازی و درک رمزهای جایگزین ساده است. متأسفانه شکستن آنها نیز آسان است. یک تحلیل ساده رمزي رمزهای چایگزین نشان می‌دهد که اگر از الفبای زبان انگلیسن استفاده کنیم::تنها,چیری که برای شکستن: زمر بیاز دأنيم این اسست. که چغدر در حال چرخش هستیم. می‌توانیم تک تک حروف الفبای انگلیسی را امتحان کنیم تا زمانی که بتوانیم متن را رمزگشایی کنیم. این بدان معتاست که 376

صفحه 381:
‎sly‏ بارسازی متن ساده حدود 25 تلاش لازم است. اکنون: اجازه دهید توع دیگری از رمزهای ساده را پررسی کنیم. ‏درک رمزهای جابجایی در رمزهای جابجایی, کاراکترهای متن ساده جابه‌جا می‌شوند. ید به مراحل مربوط به این کار نگاه کنیم: 1 ماتریس را ایجاد کنید و اندازه ماتریس جابجایی را انتخاب کنی. باید به اندازه کافی بزرگ باشد تا با رشته متن ساده مطابقت داشته باشد. 2. ماتریس را با توشتن تمام کاراکترهای رشته به صورت اففی پر کنید. 3 تمام کاراکترهای رشته را به صورت عمودی در ماتريس بخوانيد. بيابيد به يك مثال نگاه کنیم. بییید متن ساده (8) 8025 018۵0۵ را در نظر بكيريم. ابتداء اجازه دهيد 6 را رمزگذاری کنیم. برای آن, از یک ماتریس 43 استفادة فى كنيم و در متن ساده به ضورت افقی می نویسیم: ‎Otta ‎waRo ‎cks ‏فرآیندخواندن, رشته را به صورت عمودى مى خواند, كه متن رمز را توليد مى كند ‎00 ‏آلمانی ها در جنگ جهانی اول از رمزی به نام ۸۵۴6۷ استفاده كردند كه هم از ‏رمزهای جابجایی و هم جایگزینی استفاده می کرد. سال ها بعد, توسط جورج ‏پینوین کرک شد. ‏ينايراين, انا رخی از انواع رمزها هستند اکنون,اجازه دهبد به برخی از تکنیک ‏های رمزنگاری که در حال حاضر استفاده هی شود نگاهی بیندازیم. ‎an ‎ ‎

صفحه 382:
آشنایی با انواع تکنیک های رمزنگاری انواع مختلف تکنیک های رمزنگاری از انواع مختلفی از الگوریتم ها استفاده می کنند و تحت شرایط مختلف مورد استفاده قرار می گیرند. به طور کلی, تکنیک های رمزنگاری را می توان به سه نوع زیر تفسیم کرد ‎٠‏ هش كردن * متقارن + نامتفارن ‏بيابيد يك به یک آنها را بررسی کنیم. ‏با استفاده از تابع هش رمزنگاری تابع هش رمزنگاری یک الگوریتم ریاضی است که می تواند برای ایجاداثر انگشت متحصر به فرد از یک پیام استفاده شود. ان یک خروجی با اندازهثابت به نام هش از متن ساده ایجاد می کند. از نظر ریاضی, اين کار به صورت زیر است: ‎C1 = hashFunction (P1) ‏توضيحات به شرح ذيل مى باشد: ‏1 متن ساده ای است که داده های ورودی را نشان می دهد ‏1 یک هش با طول ثابت است که توسط تایع هش رمزنگاری تولید می شود. ‏این قضیه در نمودار زیر نشان داده شده است. داده های یا طول متف بر از طریق یک تابع هش یک طرفه به یک هش با طول ثابت تبدیل می شوند: ‎a78 ‎ ‎

صفحه 383:
ONE-WAY Data HASH > Hash FUNCTION Variable length Fixed length 128 bit 160 bit شکل 3-10: توایع هش یک طرفه تابع نش داری 04 ويزكى زد 1. فطعى است. همان متن ساده همان هش را توليد مى كند. 2. رشته هاى ورودى منحصر به فرد بايد مقادير هش خروجى منحصر به فردى ‎aS abel‏ 3. صرف نظر از ييام ورودىء طول ثابتى دارد. 4. حتى تغييرات كوجك در متن ساده يكى هش جديد ايجاد مى كند. 5 اين يك تابع يق طرفه استء به اين معنى كه متن ساده. 61 نمی تواند از متن ‎jay‏ 1© توليد شود. اگر شرابطی داشته باشیم كه هر پیاممتحصربهفرد دارای یک هش متحصربه‌فرد نباشد: بة آن پرخورد م نكوييم: یعین اگر دو متن :۴1 و ۴2 دانسته بانیم در منورو ‎hashFunction(P1) = hashFunction(P2) wuss « collision‏ است. صرف نظر از الگوریتم هش انتفاده شنده, برخوردها نادر هستند. ذر غیر اين مورت 79

صفحه 384:
هش کردن مفید نخواهد بو. با اين حال, برای برخی از برنامه هاء برخوردها را نمی توان تحمل کرد. در اين موارد. ما بايد از يك الكوريتم هش استفاده كنيم كه پیچیده‌تر است اما احتمال تولید مقادیر هش که با هم برخورد داشته باشند بسیار کمتر است. پیاده سازی توابع هش رمزنگاری توایع هش رمزنگاری را می توان با استفاده از الگوریتم های مختلف پیاده سازی کرد بیایید نگاهی عمیق تر به دو مورد از آنها بیندازیم. MpS-tolered ‏درك‎ 1/84 ‏در سال 1994 ساخته شد تا جايكزين‎ Poul-Henning Kamp Laws: MDS ‏شود. یک هش 128 بیتی تولید می کند. ۸۸۵5 یک الگوریتم تسبتا ساده است که‎ Las lags ‏که بمب جوان‎ abe coli gs cad jay cal asin ‏تريراير‎ ‎MDS ‏کرد, ۱۸۵5 نباید استفاده شود. بيایید به یک مثال نگاه کنیم. برای تولبد هش‎ ‏در پیتون, از کنابخانه«ا855ع استفاده می کنیم که یکی از محبوب ترین کتابغات»‎ ‏هاى منيع باز است که بیش از 30 الگوریتم هش رمز عبور را پیده سازی مي کند.‎ ‏انتت. با استفاده از کذزیز در یک نوت بوک‎ oat ‏اكز هيلا زوی دسگاه سماانست‎ iS ‏را تصب‎ ol Jupyter !pip install passlib ‏در پایتون می توانیم هش ۱۸۵5 را به صورت زیر توليد كنيم:‎ sn (36): ‏سره‎ ' رصم میور همق :361 اغيم توجه داشته باشید که ۱/۵5 هش 128 بیتی تولید می کند. همانطور که گفته شد. می توانیم از این هش تولب د شنده به عنوان اثر انگشت متن اضلی که 380

صفحه 385:
‎myPassword‏ بود استفاده كنيم. بباييد ببينيم جكونه مى توانيم اين كار را در بايتون انجام دهيم: ‎ ‎ ‏توجه داشته باشيد كه هش توليد شده براى رشته 035510/010/إ5! با هش أصلى مطابقت دارد كه يك مقدار 7:06 ايجاد مى كند. ‏با اين حال, به محض تغيبر متن ساده به ۴۵/56 ,۲۳۷۳۵550۵۲۵2 را برگرداند ‏زمان استفاده از 1۸05 ‏با نگاهی به تاریخ, تقاط ضعف ۲۵5 در اواخر دهه 1990 کشف شد. علیرغم چندین مشکل, استفاده از ۱۸۵5 همچنان محبوب است. ایده آل است که برای بررسی یکپارچگی داده ها استفاده شود. توجه داشته باشید که خلاصه پیام ۸۸۵5 به طوز متخضر به فردی هنق را با مالک آن مرتبط نمی کند. از آنجایی که خلاصه 5 یک هش امصا شده نیست 14۵5 برای اثبات ايتكه فايلى از زمان محاسبه هش تفر نکرده است اننتفاده می شود.برایاثبات صحت یک فایل استفاده نمی شود. اكنون, ببابيد به الكوريتم هش ديكرى نكاه كنيم - الكوريتم هش ایمن ( ‎(SHA‏ ‏آشنایی با الگوریتم هش امن ‎(SHA)‏ ‎SHA‏ توسط موسسه ملی استاندارد و فناوری ‎ang (NIST)‏ یافنه است. بیایید ببینیم چگوته می توانیم از پایتون برای ایجاد هش با استفاده از الگوریتم ‎SHA‏ ‏استفاده کنیم: ‎ ‎

صفحه 386:
from passlib.hash import sha512_crypt sha512_crypt.using(salt = "qlobfox5" , rounds=5000) .hash("myPassword" ) myHash=sha512_crypt.using(salt="qIo0foxS" , rounds=5000). hash("myPassword" ) به استفاده أز بارامترى به نام غ531 توجه کنید. 5211109 رویه اضافه کردن كاراكترهاى تصادفى قبل از هش است. اجراى اين كد نتيجه زير را به ما مى دهد: توجه داشته باشید که وفتی از الگوریتم 514۸ استفاده می کنیم. هش تولید شده 512 بایت است. کاربرد تابع هش رمزنگاری توايع هش برای بررسی یکپارچگی یک فایل پس از کپی کردن از آن استفاده می شود. برای دستیابی به اين هدف, هنگامی که یک فایل از یک منبع به مقصد کپی ‎gis as) agit’ Go‏ مثال: زمانی که از یک وب سترور دانلود می شود)؛ یک هش مربوطه نیز با آن کپی می شود. اين هش اصلی, /۵//۵/03, به عتوان اثر انگشت فايل اصلى عمل مى كند. پس از کبی کردن فایل, هش را دوباره از نسخه کپی شده فایل ایجاد می کنیم - بعنی 06۵۴160 اگر ۱6۵۵6۵ = ‎wis -horiginal‏ هش تولید ده با هش اصلی مطابقت دارد- این تأیید می کند که فایل تفییز نکرده است و هیچ یک از داده ها در طول فرآيند داتلود از بين ترفتند. ما مىتوانيم از هر تابع هش رمزنكارى: مانند 1405 يا 5/8 يراى توليد هش براى اين منظور استفاده كنيم: اكتونء اجازه دهيد به رمزكذارى متقارن تكاه كتيم. ae

صفحه 387:
استفاده ار رمزگذاری متفارن در رمزنگاری, یک کلید ترکیبی از اعداد است که برای رمزگذاری متن ساده با استفاده از الگوزیتم انتخابی ما استفاده می شود. در رمزگذاری متفارن: براق رمزگذاری و رمزگشایی از یک کلید استفاده می کنیم. اگر کلید مورد استفاده برای رمزگذاری متفارن ‏ باشد. برای رمزگداری متقارن؛ معاله زیر برشرار است: ‎vie C9 orlw vie EK(P) = CHere. P‏ رمز است. برای رمزگشابی, از همان کلید 1 استفاده می کنیم. برای تبدیل آن به 8 (۴:۵۴)6 اين فرآیند در نمودار زیر نشان داده شده است: یی مره ‎‘Rey Koy.‏ ‎Bi‏ ل ‏سا ‎ ‏شکل 4-10: رمزگذاری متقارن ‏جالا بيابيد ببينيم جكونه مى توانيم از رمزكذارى متقارن با بايتون استفاده كنيم. ‏کدگذاری رمزگذاری متفارن ما از بسته رمزنگاری ۴9۸8008 در اين بخش برای نشأن دادن رمزگذاری متفارن استفاده خواهیم کرد. این یک بسته جامع است که بسیاری از الگوریتم های رمزنگاری مانند رمزهای متفارن و خلاصه های مختلف پیام را پیاده سازی می کند هنگام استفاده از ‎ol‏ برای اولین ‎yb‏ ابتدا بايد آن را با استفاده از دستور ۵8 تصب کنیم: ‎pip install cryptography ‎3 ‎ ‎

صفحه 388:
پس از نصب, اکنون می توانیم از بسته برای پیاده سازی رمزگذاری متفارن: به شرح زیر استفاده کنیم: ابتداء بیایید بسته هاى مورد نیاز خود را وارد کنیم: import cryptography as crypt from cryptography. fernet import Fernet بياييد كليد را توليد كنيم: = اس حالا بياييد كليد را باز كنيم: ‎fille = open('mykey. key’, ‘wb')‏ ‎file.write(key)‏ ‎file.close()‏ با استفاده از کلید.اکنون سعی می کنیم پیام را رمزگذاری کنیم: ۱ ‎key = file.read()‏ ‎file.close()‏ ‏حالا بيابيد بيام را با استفاده از همان کلید رمزگشایی کنیم: from cryptography. fernet import Fernet message = “Ottawa is really cold" .encode() f = Fernet(key) ae

صفحه 389:
encrypted = f.encrypt (message) يبابيد ييام را رمزگشایی کنیم و آن را به متفبری به نام 466۷/0 اختصاص ذهیم: decrypted = f.decrypt (encrypted) حالا بیید متغیر ‎le Ly decrypt‏ کنیم تا بررسی کنیم که آیا می‌توانیم همان بيام را دریافت کنیم: پیاید به برخی از مزایای رمزگذاری متقارن نگاه کنیم مزایای رمرگداری متقارن آگرچه عملکرد رمرگذازی"متقارن پستگن به الگوریتم دقیقن دارد که انستفاده فی شود, اما به طور کلی, سرعت آن بسیار پیشتر از رمزگذاری نامتقارن است. مشکلات رمرگذاری متفارن هنگامی که دو کاریر با فرآيند قصد دارند از رمزگذاری متقارن برای برفراری ارتباط استفاده كنند. بايد كليدها را با استفاده از یک کانال امن مباله کنند. این امر یاعت دو مشکل زیر می شود ۰ حفاظت از کلید: نحوه محافظت از کلید رمزگذاری متقارن. *_ توزیع کلید: نحوه اشتراک گذاری کلید رمزگذاری متقارن از مبدا تا مقصد. حالا بيابيد يه رمزكذارى نامتقارن نكاه كنيم. 385

صفحه 390:
رمرگذاری نامتفارن در دهه 1970, رمزگذاری نامتقارن برای رفع برخی از نقاط ضعف رمزگذاری متقارن ابداع شد كه در بخش قبل مورد بحث قرار كرفت. اولين گام در رمزگذاری نامتقارن. توليد دو كليد متفاوت است كه كاملاً متفاوت به نظر مى رسند اما از نظر الگوریتمی به هم مرتبط هستند. یکی از آنها به عنوان کلید خصوصی, ۲۵۲ و دیگری یه عنوان کلید عمومن: دا انتغاب می شود. از نظر ریاضی, می توائیم این را به صورت زیر نشان دهیم: Ekpr(P) = C در اینجا ۶ متن ساده و ۴ متن رمز است. ما می توانیم آن را به صورت زیر رمزگشایی ‎aS‏ ‎DKpu(C) = P‏ کلیدهای عمومی قرار است آزاداته توزيع شوند و كليدهاى خصوصی توسط صاحب ‎US eta‏ محفت نگه ذانشته ‎GSE VES CN Gil Sula Ul Sig‏ کلیدها رمزگذاری کنید, تتها راه رمزگشایی آن استفاده از کلید دیگر است. به عنوان مثال, اگر داده ها را با استفاده از کلید عمومی رمزگذاری کنیم, باید آن را با استفاده از کلید دیگر-یعتی کلید: حصوصی ۰ زمر گساین کننیم: آکنون: ‎‘as acl‏ یکی از پرونکل‌های اساسی رمزگذاری نامتفارن نگاهی بیندازیم - دست دادن لاه سوکت‌های امن (551) /امبت له نتقال (۲15) - که مسئول برفراری ارتساط بين دو كره با استفاده از رمزگذاری تامتقارن است. الكوريتم دست دادن 551/515 386

صفحه 391:
55 در اتدا برای افزودن امنیت به ۲۲۳۲۶ ایجاد شد. با گذشت زمان, ا55 با پروتکل کارآمدتر و ايمن تر به ‎TLS pl‏ جایگزین شد. دست دادن 715 اساس نحوه ایجاد یک جلسه ارتباطی امن توسط ۱۱۳۲۴ است. یک دست دادن ‎om TIS‏ 99 موجودیت شرکت کننده - کلینت و سرور - رخ می دهد. این فرآیند در تصودار زیر تشان داده شده است: Client nee [— = - eae — <1 ۱ شکل 5-10: جلسه ایمن بين مشتری و سرور یک دست دادن ۲15 یک ارتباط امن بین گره های شرکت کننده برفرار می کند. مراحل زیر در این فرآیند دخیل است: 1. مشتری پیام سلام مشتری را به سرور ارسال می کند. این یام همچنین حاوی موارد زیر است: ‎TLS asad ©‏ که استفاده من شود ‏*_ لیست مجموعه های رمز پشتیبانی شده توسط مشتری ‏© یک الگوريتم فشرده سازی ‏* یک رشته بایت تصادفی که توسط ۵۵_66 شتاسایی می شود ‎ ‎

صفحه 392:
2. سرور یک پیام سلام سرور را به مشترى أرسال مى کند: این پیام همچتین حاوی موارد زیر است: ۰ مجموعه رمزی که توسط سرور از لبست ارائه شده توسط مشتری انتخاب شده است. + شناسه جلسه ‎Se *‏ رشته بابت تصادفی که توسط 5۵۳۷۵۲ ۵0۵ شناسایی می شود * يك كواهى ديجيتال سرور. شناسایی شده توسط 56۷6۲ ‎DS gle Cert‏ عمومی سرور اگر سرور به گواهی دیجیتال برای احراز هویت مشتری یا درخواست گواهی مشتری نباز دارد, درخواست سرور مشترى شامل موارد زیر نیز ی شود ۶ اسامی متمایز ۵های قابل قبول © انواع گواهی های پشتیبانی شده ‎cert server yatta .3‏ را تأبيد مى كند. 4 مشتری یک رشته بایت تصادفی تولید می کند که توسط ‎byte client?‏ شتاسایی می شود و آن را با کلید عمومی سور ارانه شده از طرینق ‎server‏ رمزگذاری می کند 5 مشتری یک رشته بایت تصادفی تولید می کند و رمزگذاری ها را با کلید خصوصی خود شناسایی می کند 6 سرور گواهی مشتری را تأیید می کند. 7. مشتری یک یام تمام شده را به سرور ارسال می کند که با یک کلید محفی رمزگذاری شده است. 8. بای تبید این موضوع از سمت سرور, سرور یک پیام تمام شده برای مشتری ارسال می کند که با یک کلید مخفی رمزگذاری ده است. 388

صفحه 393:
9. سرور و مشتری اکنون یک کانال امن ایجاد کرده ان. آها اکنون می توانتد پیام هایی را که به طور متفارن با کلید مخفی مشترک رمزكذارى شده انذ, مبادله كتند. کل معدووزیبهضوزت وی تسان داد مه اسح 0 carta reared) SSL Server <tr ie > | ‎reg‏ رات ‎‘onset oration‏ ‎(isenschentcarteate‏ ‏ون ‎ ‎$1810 tne $$) ‎bo cree mig > ‎eed thr et ‎ ‏شکل 6-10: جلسه آمن بین مشتری و سرور ‎ ‎SSL Client ‎[3] verty server carta, check riptographe ‎ ‏حال, بیایید در مورد اینکه چگونه می‌توانیم از رمزگذاری نامتقارن برای ایجاد زیرساخت کلید عمومی (۲) استفاده کنیم, که برای برآوردن یک با چند هدف امنیتی برای یک سازمان ایجاد می‌شود, بحث کنیم. ‏زیرساخت کلید عمومی ‎389 ‎ ‎ ‎ ‎

صفحه 394:
برای پیاده سازی: 8۷۱ از رمزگذاری تامتفارن استفاده می شود. ۴10 یکی از محبوب ترين و قابل اعتمادترین راه ها برای مدیریت کلیدهای رمزگذاری برای یک سازمان است. همه شرکت کنندگان په یک مرجع اعتماد مرکزی به نام ‎CA‏ اعتم اد دارند. ۵ هویت افراد و سازمان‌ها را تأیید می‌کند و سپس گواهی‌های دیجیتالی برای آن‌ها صادر می‌کند (یک گواهی دیجیتال خاوی یک کپی از کلید عمومی یک شخص با سازمان و هویت آن است). و تأیید می‌کند که کلید عمومی مرتبط با آن فرد با سازمان وافعاً متعلق به آن فرد با سازمان است. روش کار به اين صورت است که ‎CA‏ از کاربر می خواهد هویت خود را با استندردهای متفاوتی که یرای افراد و سازمان ها دنبال می شود. اثبات کند. اين امر می‌تواند شامل تأبید مالکیت نام دامنه باشد با می‌تواند شامل فرآینددقیق‌تری باشد که شامل اثبات فیزیکی هویت است, بسته به نوع كواهى ديجيتالى كه كاربر در تلاش براى درياقت آن است. اگر نک متقاعد شود که کاربر وفع همان چیزی است که لوعنا من كتندة کاریر سپس کلید رمزگذاری عمومی خود را از طريق یک کانال امن در اخنیار ‎CA‏ ‏فرار می دهد. ۲۸ از اين اطلاعات برای ایجاد یک گواهی دیجیتالی استفاده می کند که حاوی اطلاعاتی درباره هویت کاربر و کلید عمومی آنها است. اين گواهی به اضوزنت: دیچیتالن تونظ ۸ مسا ده آشت: سین کازیومن‌بواند گواهن ود رز به هر کسی که می‌خواهد هویت خود را تأبيد كند, يدون نياز به ارسال آن از طريق یک کانال امن نشان دهد, زبرا خود گواهی حاوی اطلاعات حساسی نیست. شخصى كه كواهى را دريافت مى كند مجبور نيست مستقيماً هويت كارير را تأييد کند. آن شخص به سادگی می تواند اعتبار گواهی را با تأیید امضای دیجیتال 6۸ دید گنج که یی نن کند که کلرد,عمومی موجود جر گوامی دز وفع متعلق:به فزد یا سازمانی است که در گواهی نامگذاری شده است. کلید خصوصی ۲۸ یک سازمان, ضعیف ترین حلقه در زنجیره اعتماد 8۴۹ است. برای مثال؛ اگر یک جعل هویت, کلید خصوصی مایکروسافت را در دست بگیرد؛ می‌تواند با جعل هویت ب‌روزرسانی ویندوز, نرمافزار مخرب را روی ملبون‌ها رايانه در سراسر جهان نصب ‎2S‏ 390

صفحه 395:
پلاک چین و رمزنگاری شکی نیست که در سال های اخیر هیجان زیادی در مورد بلاک چین و ارزهای ديجيتال وجود دارد. كفته مى شود كه بلاكى جين يكى از امن ترين فتاورى هایی است که تا به حال اختراع شده است. هیجان در موردبلاک جين با بيت كوين و ارزهای دیجیتال شروع شد. اگرچه ارزهای دیجیتال از سال 1980 توسعه یافتند. اما با بیت کوین, به جربان اصلی تبدیل شد. افزايش بيت كوين به دليل در دسترس بودن گسترده سیستم های توزیع شده بود. این دو ویژگی مهم است که ‎ol‏ را هیک تغیر دهنده بازی تدیل کرده است. طراحی آن غبرمتمرکز است. از شبکه ای از ماینرها و یک الگوریتم توزیع شده به نام بلاک چین استفاده می کنذ. ‎enw‏ کوین بر اسان انگیز های ذاتی بای ماینزها است تا با لاش پرای پاستخ ب» یک معمای محاسیاتی بسیارپیچیده, یرای افزودن یک بلاک به بلاک چین رقایت كسد ارين يندت واجد شرایط دریافت پیت کوین های مخطف به عنوان باداش برای تلاش خود است. اگرچه بلاک چین برای بیت کوین توسعه یافته است. اما کارپردها و استفاده های گسترده تری پیدا کرده است. بلاک چین بر اساس یک لگوریتم اجماع توزیع شده, با استفاده از فناوری دفتر کل توزبع شده (017) است. دارای ویژگی های زیر است: غير متمركز: مبننى بر معماری توزيع شده أست نه متمركز. هيج مرجه مرکزی وجود ندارد. هر كره در يك سيستم بلاك جين در حفظ یکبارچگی 01:7 نقش دارد. بين تمام كره هاى شركت كتنده يك توافق قابل اعتماد وجود دارد. در اين معمارى توزیع‌شده, تراکنش‌ها در گره‌های تشکیل‌دهنده ذخبره می‌شوند و یک شبکه ۶2۴ را تشکیل می‌دهند. تشکل‌های زنجیرهماندد همه تراکنش‌های بلاى جين در فهرست بلوک‌ها اتباشته می‌شوند. هنگامی که چندین پلوک اضافه می شود تشکیل زنجیره مانند ایجاد می کند و دلبل نامگذاری آن است. ‎Immutability‏ ‏داده ها امن, تگرار شده و در بلوک های تفییزتب ذیر ذغیره می شوند. قابلیت aa

صفحه 396:
اطمینان: یک اصل و نسب يا تاریخچه برای هر تراکنش حفظ می شود. هر تراکنش با استفاده از تکنیک‌های رمزنگاری تأیید و ثبت می‌شود. تحت پوشش, تراکنش‌های بلاک چین از هش‌های رمزنگاری هر یک از بلوک‌های قبلی در زتجیره استفاده می‌کنند. توایع هش برای ایجاد اثر انگشت یک طرفه از یک تکه دلخواه از داده استفاده می کند. درخت فرکل با درخت هش برای تأیید داده های ‎oon)‏ ‏شده, مدیریت و انتقال بین گره های مختلف شرکت کننده استفاده می شود. از 51۷۸-2 برای هش استفاده می کند. نمودار یک تراکنش خاض در زیر نشان ‎cals‏ Transactional Data ۱ 81 اس و Dae ‏پم‎ #ABCD ۰ ]361 rina Hash ts [#00] tunction ofall > [#> [7 ——— prior hashes and transactions شکل 7-10: درخت مرکل بلاک چین ود

صفحه 397:
شکل 7-10 عملکرد بلاک چین را خلاصه می کند. اين نشان می دهد که چگونه تراکنش ها به بلوك ها تبديل مى شوند كه به نوبه خود به زنجيره تبديل مى شوند. ترسمت جود جواز براك 6 8۰ تغو 9 سان حادم شده أضت: سين ريصن ۵ با اعمال تابع هش ايجاد مى شود. ريشه 16016 را مى توان به عنوان يك ساختار داده در تظر گرفت که بخشی از هدر بلوک را تشکیل می دهد. از آنجایی که تراکنش تغييرنايذير است, تراكنش هاى ثبت شده قبلى, قابل تغيير تيستن. وجه داشته باشید که مقدار هش هدر پلوک قبلی نیز به بخشی از پلوک تبدیل می‌شود,باراین سوایق تراکنش را در بر می‌گید این ساحتارهای پردازشی زنجیره ای ایجاد می کند و دلیل نامگ‌ذاری بلاک چین است. هر یک از کاربران بلاک چین با استفاده از رمزنگاری, احراز هویت و مجاز می شوند و نياز به احراز هويت و مجوز شخص ثالث را از بين مى يرند. از امضای ديجيتال براى ايمن سازى تراكتش ها نيز استفاده مى شود. كيرنده تراكنش داراى يك كليد عمومى است. فناورى بلاك جين دخالت اشخاص ثالث را براى اعتبارستجی تراکتش حذف می‌کند و برای آن به اثبات رمزنگاری متکی است. تراکتش ها با استفاده از امضای دیجیتال ایمن می شوند. هر کاربر یک کلید خصوصی متحصر به فرد دارد و هويت دیجیتال خود را در سیستم ابجاد می کند مثال - نگرانی های امنیتی هنگام استقرار یک مدل یادگیری ماشینی در فصل 6, الگوریتم‌های یادگیری ماشین بدون نظارت, به چرحه حبات ‎CRISP-‏ ‎OM‏ (فرایند استاندارد بين صنعتی برای داده کاوی) نگاه کردیم که مراحل مختلف آموزش و استقرار یک مدل یادگیزی ماشین را مشخص می‌کند: پس از آموزش و آرزیابی یک مدل, مرحله نهایی استقرار است. اگر اين یک مدل یادگیری ماشيني حبانی است, پس می‌خواهیم مطمئن شویم که تمام اهداف امنیتی آن برآورده شدهاتد. ببابيد جالشهاى رايجى را كه در استقرار مدل ماتند اين با آن مواجه هستیم و اینکه چگونه می‌توانیم با استفاده از مفاهیم مورد بحث در اين: چالش‌ها ود

صفحه 398:
را برظرف کنیم,تحلیل کنیم. فصل ما در مورد استراتژی هایی برای محافطت از مدل آموزش دیده خود در برایر سه چالش زیر بحث خواهیم کرد Man-in-the-Middle (MITM) was + * بالماسكه كردن * تعدیل داده ها بباييد يك به يك آنها را بررسى كنيم. حملات 801710 يكى از خملات اختمالى كه مى خواهيم از مدل خود در برابر آن محافظت كتيم: حملات ۱۸۲۲۲ است. یک حمله ۱4۲۲۷ زمانی رخ می‌دهد که یک نفوذگر سعی می‌کند از یک ارتباط ظاهراً خصوصی استراق سمع کند تا یک مدل بادگیری ماشینی آموزش‌دیده را مستقر کند. ببایید سعی کنیم حملات 1۸۲۸ را بطور متوالی با استفاده از یک ستاریوی منال درک کنیم. فرض کنیم باب و لیس می‌خواهند با استفاده از ۴۸ پیم‌ها را رد و بدل کنند 1. باب از (۴۵۵09 ‎yall 5 {PrB0b,‏ از (2>لن۴ ,۳:۸۵/66) استفاده می‌کند باب یک پیم, ‎Se yal 9 MBOD‏ پیام, ۱۵66 ایجاد کرده است. آنها می خواهند اين بيام ها را به روشى امن با يكديكو رد و بدل کند 2. در أبتدا بايد كليدهاى عمومی خود را مبادله كند نا ارتباط امنى با يكديكر يرفرار کنند. اي بدان معناست که یاب قبل از ارسال پیام به آلیس از ۴0۵/16۵ برای رمزگذاری ۱۸80 استفاده می کند 3. فرض می کنیم یک استراق سمع به نام داريم كه از ‎PUX}‏ ,۴۶6) استفاده می کند.مهاجم می تواند مبدلات کلید عمومی بین یاب و آلیس را رهگیری کرده و آنها را با گواهی عمومی خود جایگزین کند. 4 باب ‎MBOb‏ را بهآلیس می فرسند و آن را به جای ۶۵۵/6۵ با ۳ رمزگذاری می کند وبهاشتباه فکز نی کند که این گواهن عمومی آلیسن است. استراق نتم 20

صفحه 399:
ارتباط را قطع مى كند. بيام ‎MBOD‏ را رهگیری می کند و با استفاده از ۴:۵0 آن را رمزگشایی می کند این حمله ۱۸۲۲۱۸ در نمودار زیر نشان داده شده است: . pl 05200 مب مین لها مون I - dh موه شكل 8-10: اكنون بيابيد ببينيم جكوته مى توانيم از حملات ۸۸۱۲۸۷ جلوگیری کنیم. مه چگونه از حملات ۸۸۲7۲۷ جلوگیری کنیم بیایید بررسی کنیم که چگونه می توانیم با معرفی یک 6۵ به سازمان از حملات ‎MITM‏ جلوگیری کنیم. فرض کنید ‎CA, myTTUSECA oul pl‏ است. گواهی دیجیتال دارای کلید عمومی خود به نام ‎PUMYTIUSICA‏ است که در آن تعبیه شده است. ‎Joiae myTrustCA‏ امضای گواهبنامه ها برای همه افراد سازمان از جمله آلیس و باب است. این بدان معنی است که 809 و ۸6 هر دو گواهینامه خود را توسط ۳۷/۲15۱6۸ امضا کرده اند. هنگام امضای گواهینامه‌ه ای خود ‎myTrustCA‏ تییدمی‌کند که آنها وافعاً همان چپزی هستند که ادعا می‌کنند. اکتون, با اين ترتیب ‎aul eae‏ تعامل متوالی بین یاب و آلیس را دوباره برزسی كنيم: 295

صفحه 400:
‎{PrAlice, PuAlice} 4 yusll 5 {PrBob. PuBob} 41 OL .1‏ استفاده می‌کند. هر دو کلید عمومی آنها در گواهینام» های دیجیتال آنها که توسط ۳/۲51۸ امضا شده اند تعبيه شده است. باب یک ‎MAlice vba Su yall 9 MBOD spy‏ ایجاد کرده است. آنها مي خواهند اين پیام ها را به روشی امن با یکدیگر رد و بدل 5 2 نها گواهی های دیجیتال خود را که حاوی کلیدهای عمومی است, مبادله می كنند. آنها تنها در صورتى كليدهاى عمومى را مى بذيرند كه در كواهينامه هاى امضا ‎oad‏ توسط ۵ن) مورد اعتمادآنها تعبیه شده باشد. آنهابایذ کلیدهای عمومی غود را مبادله کنند تا ارتباط امنی با یکدیگر برقرار کنند. اين بدان معنی است که باب فبل از ارسال پیام ‎sly PUAlice 41 gull a‏ )150 5 ۲۸80 استفاده می کند. 3. فرض می کنیم یک استراق سمع به نام لا داريم كه از [لانا8 ,(۴۶) استفاده مى كند. مهاجم مى تواند مبادلات كليد عمومى بين باب و آلیس را رهگیری کند و آنها را با كواهى عمومى خود انا جايكزين كند. 4. باب تلاش ۱ را رد می کند, زیرا گواهی دیجیتال شخص بد توسط ۵ که باب به آن اعتمد دارد امضا تشده است. دست دادن این لفو می شود تلاش برای حمله با مهر زمانى و تمام جزئيات ثبت مى شود, و یک استا میتی مطرح ‎ge‏ شود هنكام استقرار يك مدل ياذكيرى ماشين آموزش ديده. به جاى #عالق. يى سرور. استقرار وجود دارد. 808 تنها يس از ايجاذ يك كانال امن, با استفاده از مراحل 383 شده ‎Jae ale‏ را مستفر می کند.اجازه ‎satin sia‏ چگونه می توانیم این مدل را در بايتون بياذه سازی كنيم. ‎lanl‏ اجازه دهید بسته های مور نباز را ورد كنيم. ‎from xmlrpe.client import SafeTransport, ServerProxy ‎import ssl ‎396 ‎ ‎

صفحه 401:
اكنون اجازه دهيد كلاسى ايجاد كنيم كه بتواند كواهينامه را تأبيد كند. class CertVerify(SafeTransport): def _ init (self, cafile, certfil keyfilesNone) SafeTransport. init__(self) self._ssl_context = ss1.SSLContext(ss1.PROTOCOL_TLSv1) self._ssl_context.load_verify locations (cafile) if cert self._ssl_context.load_cert_chain(certfile, keyfile) self._ssl_context.verify mode = ss1.CERT_ REQUIRED def make_connection(self, host): = super().make_connection( (host, {*context': self._ssl_context})) return s # Create the client proxy s = ServerProxy(‘https://cloudanum.com:15000', transport=VerifyCertSafeTransport('server_cert.pem اجازه دهید آسیب پذیری‌های دیگری را که مدل مستفر ما می‌تواند با آن‌ها مواجه شود؛ بررسی کنیم. برهيز از بالماسكه كردن مهاجم 6( وانمود می کند که یک کاربر مجازء باب است. و به داده های حساس, که مدل آموزش دیده در اين مورد است. دسترسی پیدا می کند. ما باید از مدل در 307

صفحه 402:
برابر هركونه تغيير غیرمجاز محافطت کنیم. یکی از راه‌های محافطت از مدل آموزش‌دیده‌مان در بریر نهان‌کاری, رمزگذاری مدل با كليد خصوصى کاربر مجاز است. پس از رمزگذاری, هر کسی می‌تواندمدل را با رمزگشایی از طریق کلید عمومى كارير مجاز. که در گواهی دیچیتال او یافت می‌شود. بخواند و از آن استفادهکند. هیچ ‎Qa‏ نمی تواند تیبرات غیرمجاز در مدل ایجاد کند. زمزگذازی ان ومين پس از استفرار مدل, داد‌های بدون برچسب بی‌درنگ که به عنوان ورودی به مدل ارائه می‌شوند نیز می‌تونند دستکاری شوند. مدل آموزش دیده براى استنتاج استفاده مت شود:ویک پزچسب بزای این داده:ها لاه مت دهد: يزلى ‏ مساقطت قن داده ها در برابر دستکاری بابد از داده ها در حالت استراحت و در ارتباط محافظت کنیم بنرای مح افظت از داده ها در حالت استراحت: می توان از رمزگذاری متفارن برای رمزگذاری آن استفاده کرد. برای انتفال داده‌هاء می‌توان کانال‌های امن مبتتی بر 551/۲15 ایجاد کرد تا یک تونل امن را فراهم کند. اين تونل امن را مى توان براى نقال کلیدمتفارن استفاده کرد و داد ها را می توان قبل از ارثه به مدل آموزش دیده روی سرور رمزگشایی کرد. این یکی از ره های کارآمدتر و بی خطا برای محافظت از داده ها در برابر دستکاری است. رمزگذاری متقارن همچنین می‌توادبرای رمزگذاری یک مدل زمانی که آموزش داده شده است. فیل از استقرار آن در سرور استفاده شود. اين کار از هرگونه دسترسی غيرمجاز به مدل قبل از استقرار آن جلوكيرى مى كند. بياييد بيينيم جكونه مى توانيم يك مدل آموزش ديده را با استفاده از رمزگذاری متفارن با کمک مراحل زیر در منيع رمزكذارى كنيم , وسيس آن را در مقصد قبل از استفاده از آن رمزگشایی کنیم 1 تا یک مدل ساده را با ستفاده از مجموعه داده 5| آموزش می دهیم: from sklearn.linear_model import LogisticRegression وود

صفحه 403:
from cryptography. fernet import Fernet from sklearn.model_selection import train test split from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris. target X train, X test, y train, y test = train test_split(x, y) model = LogisticRegression() nodel.fit(X train, y train) حالا ابید نام فایل هایی را که مدل را ذخبره می کنند تعریف کنیم: filename source = 'myModel_source.sav' filename destination = "myModel_destination.sav" filename_sec = “myModel_sec. sav" 1 توجه داشته باشید که 500768_ 6160۵9۵ فایلی است که مدل رمزگذاری نشده آموزش دیده را در منبع ذخيره مى کند. 11603706_305010۵1100] فایلی است که مدل رمزگذاری نشده آموزش دیده را در مقصد ذخیره می کند و ‎filename_sec‏ مدل آموزش داده شده رمزگذاری شده است. 2 ما از ۵6416 برای ذخیره مدل آموزش دیده در یک فایل استفاده می کنیم: ۱ ‎open(filename_source, ‘wb'))‏ وود

صفحه 404:
ابید تابعیبه نام () ۵ ۷۵ تعریف کنیم که یک کلید متقارن ایجاد می کند و آن را در فایلی به نام ۵,۷6۷ ذخیره می کند def write key(): key = Fernet.generate key() wb") as key fil with open( "key. key key file.write(key) حالا بباييد تابعى به نام() ۵ ۱020 تعریف کنیم كه بتواند كليد ذخيره شده را از ‎key.key Jule‏ بخوائد: def Load_key(): return open(*key.key", “rb").read() در مرحله بعد, ‎caps encrypt () gb Saas ojlel‏ كنيم كه مى تواتد مدل را رمزگذاری و آموزش دهد و آن را در فایلی ‎opus filename sec eb a:‏ کند def encrypt (filename, key): f = Fernet (key) with open(filename_source,"rb") as file: file_data = file.read() encrypted data = f.encrypt(file_data) with open(filename_sec,"wb") as file: file.write(encrypted data) 00

صفحه 405:
ما از این توایع برای تولید یک کلید متقارن و تخیره آن در یک فایل استفاده خواهیم کرد. سپس, اين كليد را مى خوانيم و از آن براى ذخيره مدل آموزش ديده خود در فایلی به نام 60۵196566 ستفاده می کنیم write_key() encrypt (filename source, load key()) اكنون مدل رمزگذاری شده است. به مقصدی که برای پیش بینی استفاده می شود منتقل می شود ‎decrypt) pli a comb lal‏ تعریف می کنیم که می توانیم با استفاده از کلید ‎0a oyu 553‏ در فایسل ۲۵/۵ مدل را از 1108/0656 به ‎filename_destination‏ رمزكشايى كنيم: ‎def decrypt( filename, key): f = Fernet (key) ‎with open(filename sec, "rb") as file: encrypted data = file.read() ‎decrypted data = f.decrypt(encrypted_data) with open( filename destination, “wb") as file: file.write(decrypted data) ‏حال بيابيد از اين تابع براى رمزكشايى مدل و ذخيره آن در فايلى يه تام ‎filename destination‏ استفاده کنیم ‎decrypt (filename_sec,load_key()) ‎ ‎

صفحه 406:
حالا يایید از اين فایل رمزگذاری نشده برای بارگذاری مدل و استفاده از آن برای پیش بینی استفاده كنيم: Tn [21]: Yoaded model = pickle. toad(open(filenane destination, ‘rb')) result = loades model score(x test, test) princ(resute) 0.9472004210526215 توجه داشته باشید که برای رمزگذاری مدل از رمزگذاری متفارن استفاده کرده ایم. در صورت نیاز مى نوان از همین نکتیک برای رمزگذاری داده ها نیز استفاده کرد wows در اين فصل با الكوريتم هاى رمزنگاری آشنا شدیم. ما با شناسایی اهداف امنیتی يك مسئله شروع کردیم. سپس تکنیک‌های مختلف رمزنگاری را مورد بحث فرار دادیم و همچنین جزئیات زیرساخت ۴6۱ را بررسی کرديم. در نهایت, راه‌های مختلف محافظت از یک مدل یادگیری ماشینی آموزش‌دیده در برابر حملات رای را بررسی کردیم. اکنون. شما اد بتونی اصول الگوریت‌های امتبتی مورد استفاد» برای حفاظت از زیرساخت‌های فناوری اطلاعات مدرن را درک کنید. در فصل بعدی, به طراحی الگوریتم‌های مقیاس بزرگ خواهیم برداخت. ما چالش ها و میادلات مربوط به طراحی و انتخاب الكوريتم هاي بزرك را مطالعه خواهیم کرد همچتین استفاده ‎GPU jf‏ و کلاسترهابرای حل مسائل پیچیده را بررسی خواهیم ‎ae‏ az

صفحه 407:
1 الكوريتم مقیاس بزرگ لگوریتم های مقباس بزرگ برای حل مسائل پیچیده غول پیکر طراحی شده اند. ویژگی مشخصه الگوریتمهای مقیاس بزرگ, نا نها به بیش از یک موتور اجرایی به دليل مقیاس داده‌ها و نیازهای پردازشی آنهاست. این فصل با بحث دربار ینک جه نوعالگوریتم هایی برای اجرای موازی مناسب هستند شروع می شود. سپس مسائل مربوط به الگوریم های موازی سازی را مورد بحث قرار می دهد. سپس معماری یکپارچه دستگاه محاسبه (609۸) را ارائه می‌کند و در مورد چگونگی استفاده از واحد پردازش گرافیکی (68۷0) با آریه‌ای از ل6۳ برای تسریم الگوريتم‌ها بحث می‌کند. همچنین در مورد تغیبراتی که باید در الگوریتم ایجاد شود تا به طور موتر از قدرت 60 استفادهنشود. بحت می شود. در تهایت. این فصل در مورد محاسیات خوشه ای بحث می کند و تحوه یجاد مجموعه داده هاى توزيع شده انعطاف پذیر (8005) را برایایجاد یک پیاده سازی موازی بسیار سریع از الگوریتم های استاندارد مورد بحث قرار می دهد. در بایان اين فصل, شما قادر خواهيد بود استرانژی های اساسی مربوط به طراحی الگوریتم های مفیاس بزرگ رادزک گند:,موسوعات ریز جر آین:فسل پورشت دادم شده آندته *_ مقدمه ای بر الگوزیتم های مقباس بزرگ 403

صفحه 408:
+ طراحی الگوریم های موازی * الكوريتم هابى براى استفاده از ‎GPU‏ *_ درک الگوریتم های استفاده از محاسبات خوشه ای © نحوه استفاده از لا68 برای اجرای الگوریتم های مقباس بزرگ * چگونه از فدرت خوشه ها برای اجرایالگوریتم های مقیاس بزرگ استفاده كنيم یایند با مقدمه شروع کنیم. مقدمه ای بر الگوریتم های مقیاس بزرگ انسان دوست دارد به چالش کشیده شود. يراى قرن هاء نوآورى هاى مختلف بشرى به ما اين امكان را داده است كه مسائل يسيار پیچیده را به روش های مختلف حل کنیم. از ييشبينى متطقه هدف يعدى حمله ملخ كرفته تا محاسيه بزركترين عدد اول. روشهاى ارائه باسخ براى مسائل بيجيده اطراف ما همجنان در حال تكامل بودند. با ظهور كاميبوتر ما یک راه قدرتمند جديد براى حل الكوريتم هاى بيجيده بيدا كرديم. تعريف بك الكوريتم خوب طراحی شده و مقیاس بزرگ الكوريتم مقياس بزرك كه به خوبی طراحی شده است دارای دو ویژگی زیر است: © طراحی شده است تا حجم عظیمی از داده ها و بازهای پردازش را با استفاده از مجموعه منایع موجود به طور بهیه مدیریت كند. © مقباش پدیر است. همانطور که.فسئه ببچیده تر می شود می توا بيجبدكى را به سادكى با تهبه منايع بيشتر كنترل كند. 404

صفحه 409:
یکی از کاربردی‌ترین راه‌های پیاده‌سازی الگوریتم‌های مقی اس بزرگ, استفاده از استرانژی تقسیم و حل است, بعنی تقسیم مسئله بزرگ‌تر به مسائل کوچک‌تر که مىتوانند مستقل از يكديكر حل شوند. اصطلاحات بییید به برخی از اصطلاحاتی که می توان براى محاسبه كيفيت الكوريتم هاى مقیاس بزرگ استفاده کرد نگاه کنیم. تاخير تأخير زمانى است كه براى انجام يك محاسبه صرف مى شود. اگر 60۳0۴۷۱۵۲1 یک محاسبه متفرد را نشان می‌دهد که از ۷1 شروع مىشود ودر 2] به بايان می‌رسد, می‌توانیم بگوبیم: تأخبر < ۱2-1 توان عملیانی در زمیته ریانش ایری موازی: توان عملاتیتعداد محاسیاتی است که می‌توانند به طور همزمان انجام شوند. براى مثال, اكر در 1؟: بتوانيم چهار محاسیات همزمان ‎C3‏ ,62 :۲3 و 64 را انجام دهيم: آنكاه توان عملياتيى جهار خواهد بود. اصل محلی بودن داده به طور سنتی, در پردازش موازی و توزیع شده, اصل محلی بودن داده ها در تصمیم گیری برای تخصیص بهینه منع بسیار مهم است. اساسا شان می دهد ک» حرکت داده ها بید در زیرساخت های توزیع شده متوقف شود. در صورت امکان, 405

صفحه 410:
به جای انتقال داده هاء باید به صورت محلی در گره ای که در آن فرار دارد بردازش شودء در غير اين صورت, مزاياى موازى سازى و مقياس بندى افقى را کاهش می دهد. در همین حال, پیشرفت در پهنای باند شبکه, اصل محلی بودن داده را کمتر مرتبط کرده است. بهنای باند شبکه را می توان با پهنای باند دویدسن شنک که ای بان ينزو هسنجت: متساوع ار یک سبکه آفتت ساره گیری کرد و هنگامی که در محاسیات توزيع شده با متايعى که به صورت فیزیکی توزیع شده ‎sail‏ اين قضية مهم است. اگر یک خط بین دو مجموغه از منایع دز یک شبكه توزیع شده رسم کنیم,بهنای باند دوبخشی نرخ ارتباطی است که در آن سرورها در یک طرف خط مى توانند يا سرورهاى طرف ديكر ارتباط برقرار كنند, همانطور كه در شكل 1-11 نشان :داده شده است. براى اينكه محاسبات توزييع شده به طور موثر کار کن, این مهمترین بارامتری است که باید در نطر گرفته شود. اگر پهتای باند دوبکشی شبکه به مقدار کافی نداشته باشیم: مزلیای به دست آمده از در دسترس بودن موتورهای اجراییمتعدد در محاسیات توزيع شده تحت الشعا لینک های ارتباطی کند فرار می گیرد. 406

صفحه 411:
شکل 1-11 پهتایباند دویخشی ‎Le Yb go al ig‏ را قادر می سازد تا داده ها را در جایی که هستند بدون کبی برداری پردازش کنیم. اين روزها رايانش ابرى بزرگ, بهنای باند دو بخش بزركى را به شيكه كوكل ارائه مى دهد. به عنوان مثال. در يك مركز داده كوكل, 1179894--1000101 است.پهنای باند دوبخشی سایر فروشندگان ابر عمده نيز در اين محدوده است. با پهنای بانددویخشی پتاییت. گزینهها و الگوهای طراحی جدید برای ذخیره و پردازش کارآمد داده‌های بزرگ پدیدارمی‌شوند. اتباطات به قدری سریع است که اصل محلی داده که همیشه در معماری‌های 0۵2 39 مبتتی بر ۱۷۵۵008 قدیمی‌تر رعایت می‌شد, دیگر مرتبط نیست. دیگر انتقال فایل ها و ذخیره آنها به صورت محلی منطفی نیست. در عوض, متطقی است که از داذ ها از جایی که ذخیره ‎cal aa‏ استفادهکنید. ‎7 ‎ ‎

صفحه 412:
مقياسى كردن مقياس افقى براى تقسيم يك مسئله بيجيده به مسائل كوجكتر استفاده مى شود که می توانندبه بیش از یک منبع محاسباتی اختصاص داده شوند.برای یک راه حل کارآمد. ما به دنبال پیاده سازی دو ویژگی زیر در زیرساخت خود هستیم: 1. قابليث ارتجاعی: توانایی زیرساخت برای تامین منانع کم و بیش با توجه به تازهای محاسباتی 2 تعادل بار: استفاده از تمام متایع موجود به روش بهینه برای بهیته سازی عملکرد. دسترسی پذیری و قابلیت اطمینان بگذارید یک به یک آنها را بررسی کنیم: فابلیت ارتجاعی توانایی زیرساخت برای افزودن یا حذف منایع با تفبیر نیازمندی هاء قابلیت ارتجاعی تامیده مى شود. مقیاس خودکار در رایانش ابری یکی از راه‌های دستیابی به قابلیت ارتجاعی است. مقیاس خودکار در شکل 2-11 نشان داده شده است. بر اساس نیز, گروه سرور می تواند تعداد كره هاى كروه سرور را تنظيم كند. 367۰ 0 مس شکل 2-11: مقیاس خودکار سرور او ۳2 408

صفحه 413:
سه غول رابانش ابری, گوگل, آمازون و مایکروسافت می توانند زیرساخت های بسیار اتعطاف پذیری را ارائه ذهند. با توجه به اندازه عظیم متاع مشترک آنهاء تعداد کمی از شرکت ها وجود دارند که پتانسیل مطابقت با قابلیت ارتجاعی زیرساخت اين سه شرکت را دارند. اگر زیرساخت قابلیت ارتجاعی داشته باشد, می تواند یک راه حل مقیاس پذیر برای مستلهایجادکند. تعادل بار 821206109 1۵۵0 مکانیزم توزیع کارآمد بار کاری بين منایع محاسباتی موجود است. مکانیسم های مختلفی وجود دارد که می توان از آنها بای توزیع بار استفاده کرد. ساده‌ترین الگوریتم 860۵18 80000 است که حجم کار به طور مساوی بین منایع محاسبانی موجود در یک مکانیسم چرخه‌ای توزیع می‌شود. اين کار در شکلِ 3-1 نشان داده شده است. دموا Node2 Node 3 Node 4 | 6 ۵ ۵ ۵ شکل 3-11: تعادل باز 409

صفحه 414:
دو راه وجود دارد که می‌توانیم تعادل بار را هوشمندتر کنیم. با افزودن قوانین توزیع بار:(به‌جای انجام آن به روش چرخه‌ای ساده) * با افزودن مقياس خودكار سرور: اين كار در شكل 4-21 نشان داده شده هه شكل 4-11: تعادل بار هوشمند با قواتين و مقياس خودكار سرور طراحی الگوریتم های موازی توجه به این نکته مهم است که الگوریتم های صوازی یک گلوله نفره ای نبستند حتی بهترین معماری های موازی طراحی شده ممکن است عملکردی را که ما انتظار داریم را اائه ندهند. یکی از قوانیتی که به طور گسترده برای طراح الگوریتم های موازی استفاده می شود فانون امدال است. (Amdahl) Jlaal ‏فانون‎ مه

صفحه 415:
ژن امدال یکی از اولینافرادی بود که در دهه 1960 پردازش موازی را مطالعه کرد. او فانون ۸:01 را پشنهادکرد. که هنوز هم فابل اضرا است و می تواند مبنایی برای درک مبادلات مختلف در هنگام طراحی یک راه حل محاسیاتی موازی باشد. قانون امدال را می توان به صورت زیر توضیح داد: ان فانون بر اساس این مفهوم است که در هر فرآیندمحاسیاتی, نمی توان همه فرآیندها را به صورت موازى اجرا كرد. يك بخش متوالی از فرآیند وجود خواهد داشت که نمی توان آن را موازی کرد. ‎Ss as aul‏ مثال خاص نگاه کنیم. فرض كنيد مى خواهيم تعداد زبادى فايل دخيره شده در کامپیوتر را بخوانیم و می خواهیم با استفاده از داده های موجود در اين فایل ها یک مدل بادگیری ماشیتی را آموزش دهیم. کل اين فرآند ۴ نامیده می شود.بدبهی است که ۶ را می توان ينه دو مورد زیر تفسیم کرد. فرآیندهای فرعی: 1 فایل های موجود در دایرکتوری را اسکن کنید. لیستی از نام فایل ها را ایجاد کنید که با فایل ورودی مطابقت دارد و آن را ارسال کنید. 2 فايل هارا يخوانيذء خط لوله پردازش داده را اجادکند.فایل ها را پردازش كنيد و مدل را آموزش دهید انجام تجزیه و تحلیل فرآیند متوالی زمان اجرای ۴ با (756908 نشان داده می شود. زمان اجرای ۶ و۴2 با ‎TSEQ(P2) » Tseq(P2)‏ نشان داده می شود. بدیهی است که هنگام اجرا بر رو یک گره. می توانیم دو چیز را مشاهده کنیم 2 نمی تواندفبل از تكميل 81 شروع به اجرا كند. اين با 82 < -- ۴1 تشان داده می شود Tseq(P) = Tseq(P1) + Tseq(P2)

صفحه 416:
بيابيد فرض كنيم كه 6 به طور كلى 10 دقيقه طول مى كشد تا روی یک گره اجرا شود. از این 10 دقیقه, 2 01 دقیقه طول می کشد و 8 ۴2دقیقه طول مى كشد تا روی یک گره اجرا شود. این قضبه در نمودار زیر نشان داده شده است: 52 شكل 5-11: زمان صرف شده براى اجراى 81 و 652 (به عنوان مثال. با خبال راحت تغيير ‎(aa‏ نون نکته مهمی که باید به آن توجه کرد این است که ۴1 ماهبت ترتییی دارد. ما نمىتوانيم آن را با موازى كردن سريعتر كنيم. از طرف ديكرء ۴2 را می توان به راحتى به وظايف فرعى موازي تقسيم كرد كه مى توانند به صورت موازى اجرا شوند. بنايراين» مىتوانيم با اجراى موازى آن را سريعتر كنيم. مزيت اصلى استفاده از رايانش ابرىء در دسترس بودن مجموعه يزركى از منابع است و بسيارى از آنها به صورت صوازی استفاده می‌شوند. طرح استفاده از اين منابع برای یک مسئله معین, برنامه اچرا نامیده می شود. فانون ۸۳0۵201 به طور جامع برای شناسایی تنگناها برای یک مسئله معین و مجموع ة ای از منایع استفاده می شود انجام تحلیل اجرای موازی اگر بخواهیم از بیش از یک گره برای افزايش سرعت ۶ استفاده کنیم. فقط با ضريب 5<1 روی 52 تأثير مى كذارد: az

صفحه 417:
1 Thar (P) = Tseq(P1) + 5 Poca (P2) _ Tseq(P) Tar (P)

صفحه 418:
برای منال, در سناريوى قبل, 0.8 > 8/10 > نا. ساده سازی این معادلات, فانون امدال را به ما می دهد: 1 S(P) = 2 1-0 + * در اينجا موارد زیر را دارم 8 فرآید کلی است. سب بخش موازی پذیر 8 است. شوج یه دیس أده مر يشان مرقرى يقر الست بياييد فرض كنيم كه قصد داريم فرآيند 7 را روى سه كره موازى اجرا كنيم: 1 بخش متوالی است و با استفاده از موازى تمى توان آن را کاهش داد و 2 ثانیه زمان می برد 2 اکنون به جای 9 ثانيه 3 ثانيه طول مى كشد. بنايراين: كل زمان صرف شده توسط فرآيند 8 به 5 ثانيه كاهش مى يابد. همانطور كه در تمودار یر نشان داده شده است: aus

صفحه 419:
P2.2 P2.3 شکل 6-11: کاهش بازه زمانی 8 (با خبال راحت تعیبر دهید) در مثال قبل مى توانيم موارد زیر را محاسبه كنيم: مه تعداد پردازنده ها - 3 ط > قسمت موازى > 9/11 - 781.81 افزايش سرعت - 3 ‎i>‏ بيابيد به يك تمودار معمولى نكاه كنيم كه قانون امدال را توضيح مى دهد: ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 420:
das Law cuss SSSR AR EEE and شکل 7-11: نموداری که فانون امدال را نشان می دهد در تمودار قبل؛ نمودار بين 5 و ۱۵ را برای مقادیر مختلف ‏ رسم مى كنيم. جریان هوا - یک ازيزه :عمق از جریان هوا بای نگارش گردش کار به عنوان گرافهای بدون دور جهت دار ( 6) وظایف استفاده کنید. زمان‌بندی جریان هوا. وظایف شما را در مجموعه‌ای از کارگران ذر حالی که وابستگی‌های مشخص شده را دنبال می‌کند. اجرا می‌کند. ابزارهای غنی خط فرمان, انجام جراحی های پیچیده روی 0۸6 ها را به یک قوریت تبديل مى كند. رابط کاربری غنی, تصویرسازی خطوط لوله در حال اجرا در تولد.نظارت بر پیشرفت, و عيب يابى مسائل را در صورت نياز آسان فى کند. 0۸6 ها پارامتری هستند. هميشه شامل بازه ای هستتد که رای آن "در حال اجرا هستن" (فاصله داده). امأ با سايز بارامترهاى اختیاری نیز کار می کنند. a6

صفحه 421:
وظایف دارای وایستگی هایی هستند که به یکدیگر اعلام شده اند. اين کار را در یک 086 با با استفاده از عملگرهای >> و << خواهید دید 7 task3 \ ‎EN‏ امه وم ‎nN task4 ‏م مامه‎ ‎task6 ‏شکل 8-11: تمایش یک 0۸6 درک جرئیات کار ‏وفتى یک الگوریتم را موازی می کنیم, یک کار بزركتر به جندين كار صوازى تقسيم من ننبو:یفدنفداد به وطایف موازی کیک کازبید یه نها نفنیم بسو همیشه ساده نیست. اگر وظایف موازی خیلی کم باشد. ما از محاسبات موازی سود زیادی تخواهیم برد. اگر وظایف بیش از حد وجود داشته باشد. سربار بیش از حد ايجاد مى كتد. اين یک جالش است كه به عنوان جزئيات كار نيز ناميده مى ‏شود ‏فعال کردن پردازش همرمان در پایتون ‏ساده‌ترین راه برایفعال کردن پردازش موازی در پیتون, یه سازی یک فرآیند فعلی است که یک فرآیند همزمان چدید به نام فرآیتد فرزند را آفاز می‌کند. ‎a7 ‎ ‎

صفحه 422:
برنامه‌تویسان پایتون. اگرچه زیست‌شناس تيستندء فرآيند شبيه سازى خود را ايجاد كردهاند. درست مانتد يك كوسفتد شبيه سازى شدهء كبى شبيه سازى شده از کپی دقیق فرآیند اصلی است. استراتژی پردازش چند منبعی در ابتداء الكوريتم هاى مقياس بزرك براى اجرا ير روى ماشين هاى عظيمى به نام ابررايانه ها استفاده مى شد. اين ابر رايانه ها فضاى حافظه يكسانى داشتند. ‎San ele‏ محلی بودند - از نظر فیزیکی در یک ماشین فرار می كرفتند. اين بدان معنی است که ارتباطات بین پردازنده های مختلف بسیار سریع بوده و آنها می توانند متفیرهای مشابهی را از طریق فضای حافظه مشترک به اشتراک بگذارند. با تکامل سیستم ها و افزایش نباز به اجرای الگوریتم های مقیاس بزرگ, ابررایانه ها به حافظه مشترک توزیع شده (0510) تبدیل شدند که در آن هر گره پردازشی دارای بخشی از حاقظه فیزیکی بود. در نهایت, خوشه‌هایی توسعه يافتند که به‌طور سست جفت شه‌اند ‏ بهارسال پم از میان گره‌های پردازشی منکی هستند. رای الگوریمهای مقیاس بزرگ بايد بيش از يك موتور اجرابى را بيدا کنیم که به صورت موازی کار می‌کنند تا یک مسئلهپیچیده را حل کنیم: ‎ ‎ae ‎ ‎

صفحه 423:
Memory Memory 3 Memory Memory cru tft ‘Network Single Node Shared Memory Multicore pistributed Memory شکل 9-11: استراتژی پردازش چند منیعی سه استراتژی برای داشتن بیش از یک موتور اجرایی وجود دارد © به درون نگاه کند: از منایع موجود در رایانه بهره برداری کنید. از صدها هسته پردازنده گرافیکی برای اجرای یک الگوریتم مقباس بزرگ استفاده كنيد. ۶ بهاییرون نگاخ کنیدة از ‎Uh axa Ry Gls‏ افون ‎pbs‏ فحاسمانن بيشترى استفاده كنيد كه مى توانند به طور جمعى براى حل مسئله مفیاس بزرك مورذ استفاده قرار كيرتد. © استرادوف تركس: لن محاسبات توزيع شده استفاده کنید و در هر یک از گره هاء از 6 یا آرابه ای از 6 برای تسریع در اجرای الگوریتم استفاده ‎aus‏ معرفی ۵۸ a9

صفحه 424:
پردازنده‌های گرافیکی در اصل برای پردازش گرافیکی طراحی شده‌اند. آها برای مطایفت با نازهای بهینه سازی در مورد داده های چند رسانه ای یک کامپبوتر معمولی طراحی شده اند. برای انجام اين کار, آنها ویژگی های خاصی را توسعه داده اند که آنها را از ۴8 ها متمایز می کند. به عنوان مثال, آنها در مقایسه با تعداد محدود هسته های ل), هزاران هسته دارند. سرعت کلاک آنها بسیار کمتر از یک لا است. یک ۵۸4 (61 محصوص به خود را دارد. به عنوان مثال, 0 816 انويديا داراى 8 كيكابايت رم است. توجه داشته باشید که لا68 ها دستگاه های پردازش تخصصی هستند و ویژگی های واحد پردازش عصومی, از جمله وقفه ها یا ابزارهای آدرس دهی دستگاه هاء به عنوان مثال, صفحه کلید و ماوس را ندارند. در اینجا معماری 6000 ها آمده است: سرس ‎mm 3‏ ‘eee cu Pu ‏شکل 10-11: معماری پردازنده های گرافیکی‎ به زودی پس از تبدیل شدن به پردازنده‌های گرافیکی رایج, دانشمندان دادم شروع به کاوش در پردازنده‌های گرافیکی برای پتانسیل آن‌ها برای انجام کارآمد عملیات موازی کردند. از آنجابى كه يك 680 معمولى هزاران لاله داردء اين يتانسيل را دارد که 1000 فرآیند همزمان ایجاد کند. اين کار باعث می شود که معماری گرافیکی برای محاسیات موازی دادهبهینه شده باشد. از این رو. الگوربتم هایی که می توانند محاسبات موازی را انجام دهند برای (68۱ ها مناسب هستند. 420

صفحه 425:
به عنوان مثال, جستجوی شى در يك ويديو حداقل 20 براسر سريعتر در بردازتدههاى كرافيكى ذر مقايسه با بردازندمهاى مركزى شناخته مىشود. ‎LS slain sl‏ كه در فصل ‎S‏ الكوربتمهاى كراف مورد بحث فرار گرفت, بر روى پردازنههای كرافيكى بسبار سريعتر از بردازندمها اجرا مى شوند. براى تحقق رویاهای داتشمندان داده برای استفاده کامل از لا6۳ برای الگوریتم‌ها. انویدیا در سال 2007 یک چارچوب متن باز به تام 10۸ ایجاد کرد. که مخفف عالام/0 ‎CUDA «cul Unified Device Architecture‏ کار ۴۳0 ‎GPU y‏ را به ترتيب به عنوان میزبان و دستگاه خلاصه می کند. میزبان بعنی (ا8) وظیفه فراخوانی دستگاه را بر عهده دارد که همان ت6۶ است. معماری ۲10۸ دارای له های مختلفی از انتزاعات است كه مى توان به صورت زير اراثه كرد: ‏ین ره ‎Taco‏ ات یی را ‏تا ممطغيرم ‎-Accelera ‏سم‎ ‎Cupp Recslerated | cupa-c/C+ Fortran B Libraries ‏ا ‎NVIDIA GPU ‎ ‎ ‎

صفحه 426:
شکل 11-11: معماری یک 6100۸ توجه داشته باشید که 6100۸ روی پردازنده‌های گرافیکی اتویدیا اجرا می‌شود. نیاز به پشتیبنی در هسته سیستم عامل دارد. 6110۸ در انتدا با پشتیانی از هسته لينوكس شروع به كار كرد. اخيرً. وبندوز به طور كامل يشتيبانى مى شود. سپس ‎CUDA Driver API‏ را داریم که به عنوان پلی بین ۸۱ زبان برنامه نویسی و درایور ‎CUDA‏ عمل مى كند. در لايه بالابى. ما از 6 ++ .© و 5/000 يشتيياتن فى كنيم طراحی الگوریتم های موازی بر روی 6۵۸ ابید نگاهی عمیق‌تر به چگونگی سرعت بخشیدن به عملیات پردازشی خاص توسط ‎GPU‏ داشته باشیم. همانطور که می دانی, ۲1 ها برای اجرای متوالی ‎sal‏ ها طراحی شده اند که منجر به زمان اجرای فابل توجهی برای کلاس های خاصی از بزنامه ها می شود.بباد به مثل پردازش تضویری در اندازه 1920 در 0 نگاه کنیم. می توان محاسبه کرد که 2204000 پیکسل برای پردازش وجود دازد.پردازش متوالی به این معنی امنت که پردازش آنها در یک ۲۳0 ستتی زمان زیادی طول خواهد کشید. پردازندههای گرافیکی مدرن مانند تسلای انویدا می‌توانشد اين مقدار باورنکردنی 2204000 رشته صوازی را سرای پبردازش پیکسل‌هاایجاد کنن.برایاکثربرتامه های چند رسانه ای, پیکسل ها می تواتند مستقل از یکدیگی پردازش شوند و به سرعت قابل توجهى دست پیداکند.اگر هر پیکسل را ایک نج نگاشت کنیم. همه آنها می توانند در زمان بت (41 0 پردازش شوند. اما بردازش تصوير ثنها برنامه اى نيست كه مى توانیم از موازی سازی دادم ها برای نترعت یعسیدن به فرآیند اشتفاده کنیم: موازی ضاري دلذة هارا مت توان در تهیه داده ها برای کتابخانه های بادگیری ماشین استفاده کرد. در وافع. ae

صفحه 427:
‎ve GPU‏ تواند زمان اجرای الگوریتم های موازی پذبر را به شدت کاهش دهد که شامل موارد زیر است: ‏* استخراج يول براى بيت كوين ‏* شبيه سازى در مقياس بزركق ‏۶ تجزیه و تحلیل 5۱۱۸ ‏* تجزيه وتحليل فبلم و عکس پردازنده‌های گرافیکی برای یک برنامه ی چند داده (5۴۸00) طراحی نشده‌اند. برای مثال, اگر بخواهیم هش یک بلوک داده را محاسبه کنیم, یک برتامه واحد است که نمی نواند به صورت موازی اجرا شود بردازنده‌های گرافیکی در چنین ستاریوهایی کندتر عمل می‌کنند. کدی که می‌خواهيم روی ‎GPU‏ اجرا كنيم با کلمات کلیدی ویژه 9۸[ به نام هسته مشخص می‌شود. اين فسته ها یرای علامت گذاری توابعی که فصد داریم روی 60 ها برای پردازش موازی اجرا كنيم استفاده می شود. بر اساس هسته هل كامواياز 6510 کد مورد نازبرای اجرا شدن روی ‎CPU » GPU‏ را از هم جدا مى كند. ‏استفاده از 68۱0 برای پردازش داده در پایتون ‏پردازنده‌های گرافیکی برای پردازش داده‌ها در یک ساختار داده چند بعدی عالی ‏این ساختارهای داده دا قابل موازی سازی هستند. بياييد ببينيم جكونه مى توانيم از "6 برای پردازش داده های چند بعدی در پایتون استفاده كنيم: ‏1. ادا اجازه دهید بسته های پایتون مورد نباز را وارد کنیم: ‎import numpy as np ‎423 ‎ ‎

صفحه 428:
import cupy as cp import time ما از یک آرایه چند بعدی در ۱۵۴۴ استفاده خواهیم کرد, که یک بسته سنتی پایتون است که از ۴ استفاده می کند. سپس, یک آرایه چند بعدی با استفاده از یک آرایه ۲۱0۴۷ ایجاد می کنیم که از 6۳ استفاده می کند. سپس, زمان بندی ها را با هم مقایسه می کتیم: ### Running at CPU using Numpy start_time = time.time() myvar_cpu = np.ones( (800,800,809) ) end_time = time. time() print (end time - start_time) ### Running at GPU using CuPy start_time = time.time() myvar_gpu = cp.ones( (800,800,809) ) cp. cuda.Stream.null.synchronize() end_time = time. time() print (end time - start_time) اكر ابن كد را اجرا کنیم. خروجی زیر را ابجادمی کند [> 1.130657434463501 8.012250661849975586 424

صفحه 429:
توجه داشته باشید که حدود 1.13 ثانیه برای ایجاد اين آرایه در /۱۱۵۳۸ و حدود 0.012 در لا طول كشيده است كه باعث مى شود مقداردهى اوليه اين آرايه 2 برابر سريعتر در لا68 باشد. محاسیات خوشه ای محاسیات خوشه‌ای یکی از روش‌های پیده‌سازی پ‌ردازش موازی بسرای الگوریتمهای مقیاس بزرگ است. در محاسیات خوشه ای, ما چندین گره را از طریق يك شبكه بسیار پرسرعت به هم متصل مى كنيم. الكوريتم هاى مقياس بزرك به عنوان کار ارسال مى شوند. هر كار به وظايف مختلفى تقسيم مى شود و هر کار بر روی یک كره جداكانه اجرا مى شود. آياجى اسبارك يكى از محبوب كزين مووي تطاى ‎seul st adhd colle aglacesty‏ 9 آپلچن اسپازک:داده ها به مجموعه داده هاى توزيع شده مقاوم در يرابر خطا تبديل مى شوند که به آن مجموعه داده هاى توزيع شده اتعطاف بذير (800) مى كويتد. 800 ها انتزاع هسته 31م5 ۸۵۵6۱6 هستند. آنها مجموعه ای تغییرناپذیر از عناصر هستند که می توانتد به صورت موازى كار كنند. آنها به بارتيشن ها تقسيم مى شوند و در سراسر گره ها توزیع می شوند. هماتطور که در اینجا تشان داده شده است: 425

صفحه 430:
۰ > tine sontatne|“spar شکل 12-11: مجاسیات خوشه ای از طریق اين ساخنار داد موازی, مى توانيم الكوريتم ها را به صورت موازى اجرا کنیم. پیاده سازی پردازش داده ها در آهاچن اسپارک بباييد ببينيم جكوته مى توانيم يك 800 در 361م5 ۸۵۵61۱6 ایجاد کنیم و پردازش توزيع شده را روی آن در سراسر خوشه اجراکنم 1 يراف لين كار. ادا بید یک جلسه 5۵۳1 جدید به شرح زیر ایجاد کنیم: from pyspark.sql import SparkSession spark = SparkSession.builder.appName(cloudanum') .getOrCreate() 426

صفحه 431:
هنگامی که یک جلسه 50۵۴۷ ایجاد کردیم. از یک فابل 5۷) برای منبع 1100 استفاده می کنیم. سیس, تیع زیر را اجرا می کنیم - یک ‎ROD‏ ایجاد می کند که به عنوان یک 0۵6۵۴۲۵8۵ به نام 4۴ انتزاع می شود. قابلیت انتزاع 100 به عنوان ۵ در 2.8 50۵۴۷ اضافه شده است و اين كار پردازش داده ها را آسان تر می کند df = spark. read. csv('taxi2. csv’ , inferSchema-True, header=True ) ابید به ستون های 0212۴۳08۵ نگاهکنیم: In ]3[: df.columns Out[3]: ['pickup datetime’, ‘dropoff datetime’, ‘pickup longitude’ , ‘pickup latitude’, ‘dropoff longitude’, ‘dropoff latitude’, "passenger _count', 'trip_distance', "payment_type', ‘fare _amount', "tip_amount', ‘tolls _amount', ‘total_amount']

صفحه 432:
در مرحله ‎oe‏ می توانیم یک جدول موقت از 0303۴۲۵86 ابجاد کنیم. به صورت. ‎df .createOrReplaceTempView ("main")‏ هنگامی که جدول موقت ايجاد شد, مى توانيم دستورات 501 را براى بردازش ‎Sol ls ool‏ 'Nqvtip Snoant) AS averogeFre from ‏ل لأ‎ By نكته مهمى كه بايد به آن توجه داشت اين است كه اكرجه مانند یک 0۵۱۵۴۲۵8۵ معمولى به نظر مى رسد. اما فقط يك ساختار داده سطح بالا است. در زير هود اين 800 است كه داده ها را در سراسر خوشه بخش مى كتد. به طور مشاية, وفتى توايع 50 را اجرا می کنیم. در زیر هود.به ترانسفورمانور و گاهنده صوازی تبديل مى شوند و به طور كامل از توان خوشه براى پردازش كد استفاده می 5 استراتزى تركيبى به طور فزاینده‌ای, محاسیات ابری برای اجرای الگوریتم‌های مقیاس بزرگ محبوبتر مىشود. اين كار فرصتى را براى ما فرأهم مى كند نا نكاه به بيرون و نگاه درون استراتژی ها را ترکیب کنیم. اين را می توان با تهیه یک با چند لا6۳ در چندین ماشین مجازی انجام داد. همانطور که در تصویر زیر تشان داده شده است: 42

صفحه 433:
Node 2 Node2 Node Memory Memory Memory ‏م‎ َك رمو 1 10 شکل 13-11: 681 در چندین ماشین مجازی استفاده بهینه از معماری ترکیبی یک کار بی اهمیت است. برای اين کار ابتدا داده ها به چند پارتبشن تقسیم می شوند. وظایف محاسیاتی که نباز به داده کمتری دارند در هر گره در 68 موازی می شوند. wows ‏در این فصل به طراحی الگوریتمهای صوازی و مسائل طراحی الگوریتم‌های‎ ‏مقیاس بزرگ پرداختیم. ما به دنبال استفاده از محاسبات موازی و پردازنده‌های‎ ‏گرافیکی برای پیاده‌سازی الگوریتم‌های مقیاس بزرگ بودیم. همچنین بررسی‎ ‏کردیم که چگونه می‌توانیم از خوشه‌های 50871 برای پاده‌سازی الگوریم‌های‎ ‏مقیاس بزرگ استفاده کنیم. در اين فصل, با مسائل مربوط به الگوریتمهای‎ ‏مقباس بزرگ آشنا شدیم. ما مسائل مربوط به الكوريتم هاى موازى سازی و‎ ‏تتكناهاى بالقوه ابجاد شده در اين فرآيند را بررسى كرديم. در فصل بعدى يه‎ برخى از جنبه هاى عملى بباده سازى الكوريتم ها خواهيم برداخت. 429

صفحه 434:
2 ملاحظات عملی مجموعه ای از الگوریتم های ارائه شده در اين کتاب وجود دارد که می توان از آنه يراى حل مسائل دنياى واقعى استفاده كرد. اين فصل در مورد برخی از ملاعطات عملى الكوريتم هاى ارائه شده در اين كتاب است. اين فصل به شرح زير تنظيم شده است. با یک مقدمه شروع مى كنيم. سبس, مسائلى را در مورد توضييذيرى یک الگوریتم ارائه می‌کنيم: که دزچه‌ای است که مکانیک داعلی یک الگگوزنتم را می‌توان با عبارات قابل فهم توضبح داد. سپس اخلاق استفاده از یک الگوریتم و امکان ایجاد سوگیری در هتگامپیده سازی آنها را ارائه خواهیم کرد. در ادامه: تکنیک‌های رسیدگی به مسائل ۱۱۴۰۱۵۳۵ مورد بحث قرار م ىكيرند. در نهايت, ما عواملى را كه بايد قبل از انتخاب يك الكوريتم در نظر كرفته شوند, بررسی 430

صفحه 435:
خواهیم کرد: در پایان این فصل: شما با ملاحظات عملی که هنگام استفاده از الگوریتم‌ها برای حل مسائل دنیای واقعی باید در نظر داشته باشید. آشتا خواهید شد.در اين فصل , به موضوعات زیر می پردازیم + معرفی ملاحطات عملی ‎٠‏ توضيح پذیری يك الكوريتم ‏* ذرك اخلاق و الكوريتم ها ‎٠‏ كاهش سوكيرى در مدل ها ‏© مقابله با مسائل ۸۱۳-۵۳۵ ‏زمان استفاده از الكوريتم ها ‏بيابيذ يا مقدمة شروع كنيم. ‏معرفی ملاحظات عملی علاوه بر طراحی, توسعه و آزمایش یک الگوریتم. در بسیاری از موارد؛ در نظر گرفتن جنبه های عملی خاصی از شروع تكيه بر يك ماشين براى حل يك مسئله دنياى واقعى. مهم است. براى الكوريتوهاى خاصى, ممكن است لازم باشد ازاففاش زا تراق تركيتة ‎tales‏ الطلاعات موم 'جدية در تلان بكيريم كه النظار مىرود حتى بس از استقرار الكوريتم خود همجنان در حال تغيير باشند. ما بايد به دقت در نظر بگیزیم که آبا تزکیب این اطلاعات جدید کیفیت الگوزیتم آرمایش شده مرا به هر تجوی تغییر می دهد؟ آگر چتین است, طراحی ما چگوته با آن برخورد می کند؟ ‏انتظار غبر منتظره ‏اكثر راوحل هاى مسائل دنياى واقعى که با استفاده از الگوریتم‌ها توسعه بافهاند. ‏پر اسان برخی مقروضات هستند. این مفروضات ممکن است به طوز غیرمتتظره ‎an‏ ‎ ‎

صفحه 436:
اى يس از استقرار مدل تغيير کنشد. برای برخی از الگوریتمها از مفروضانی استفاده می‌شود که ممکن است با تییر وضعیت ژئوپتیک جهانی تحت تأثیر ف راز گیرند. به عنوان مثال, یک مدل آموزش دیده را در نطر بگیرید که سود مالی یک شرکت بين المللى که دفاتری در سراسر جهان دارد را پیش بینی می کند. یک رویداد مخرب غیرمنتطره مانند جنگ با انتشار یک ویروس مرگبارناگهانی ممکن است منجر بهتغییر اساسی فرضیات این مدل در کیفیت پیش‌بنی‌ها شود. برای چنین مواردی, توصیه اين است که «منتظر موارد غیرمنتطره» باشید و برای غافلگیری استرانژی داشته باشيد. براى برخى از مدل‌های میتنی پر داده, ممکن است تعجب از تفییرات در سیاست‌های نظارتی پس از استقرار راه‌عل باشد. هنگامی که ما از الگوریتم‌ها برای حل یک مسئله دنبای واقعی استفاده می‌کنیم, به نوعی به ماشین‌ها برای حل مسئله تکیه مي‌کنيم. حتی پیچیده‌ترین الگوریتم‌ها نیز میتی بر ساده‌سازی و فرضیات هستن و نمی‌توانند غافلگیرکننده‌ها را مدیریت کنند. ما هنوز حتی بهانتفال کامل تصميم تكيرى هاى حباتى به الكوريتم هاى طراحی شده خود نزدیک نشده ایم. برای مثال, الكوريتم هاى موتور توصيه طراحى شده 600916 اخيراً به دليل نگرنی های مربوط به حفظ حریم خصوصی با محذودیت هاف فانونن اتحادیه اریا مواجه: هدة آند. ان الگوزیتم‌ها ممکن استت از پیشرفتهترین لگوریتم‌ها در زمینه خود باشند. اما در صورت ممنوعیت, این لگورینمها ممکن است بی‌فایدهباشند زرا نمی‌توان از آنهابرای حل مساتلی که قرار يود با آن‌هابرخورد می‌کرد استفاده کرد.امء حقبقت موضوع این است که متأسفانه, ملاحطات عملی یک الگورینم هنوز هم پس از تفکرانی هستند که معمولاً در مرحله طراحی اولیه مورد توجه قرار نمی گیرند. برای بسیاری از موارد استفاده, هنگامی که یک الگوریتم به کار گرفته می شود و هیجان کوتاه مدت اراته راه حل به پایان می رسد. چنبه های عملی و پیامدهای استفاده از یک الگوریتم به مرور زمان کشف مي شود و موفقیت یا شکست پروژه را مشخص مى كند. يياييد به یک مثال عملی که در آن توچه نکردن به ملاحظات عملی یک پروژه پرمعاطب a2

صفحه 437:
طراحی شده توسط یکی از بهترین شرکت های فناوری اطلاعات در جهان شکست خورد. نگاه کنیم. داستان عم انگیز یک ربات توییتر هوش مصنوعی اد نمونه کلاسیک ۲۵ را ارائه کنیم که به عنوان اولین ربات تویبتر هوش مصنوعی ایجاد شده توسط مایکروسافت در سال 2016 ارائه شد. ‎Li Tay‏ استفاده از یک الگوربتم هوش مصنوعی فرار بود از محبط بیاموزد و بهبهیود خود ادامه دهد متأسفانه, پس از چند روز زندگی در فضای مجازی, تای شروع به یادگیری از نزادپرستی و بی ادبی توییت های ادامه دار کرد. خبلی زود شروع به نوشتن توبیت های توهین آمیز خود کرد. اگرچه هوشمندی از خود نشان داد و به سرعت ياد كرفت كه جكونه توبيت هاى سفارشی شده را بر اساس رویدادهای زمان واقعی ایجاد کند. اما همانطور که ‎vols‏ ننده بود, در عین حال مردم را به شدت آزار می داد.مایکروسافت آن زا فلاین کرد و سعی کرد آن را دوبزه تبدیل به ابزار کند. اما کر نکرد. مایکروسافت مچبور شد در نهایت پروژه را نابود کند. این پانان عم انگیز یک پروژه بلتدپروازانه بود. توجه داشته باشید که اگرچه اطلاعات هوشمند ساخته شده توسط مایکروسافت قابل توجه بود. ما اين شركت پیامدهای عملی استقرار یک ریات ‎pias‏ خودآموز را نادیده گرفت. الگوریت‌های ۷8 و یادگیری ماشین ممکن است بهترین در گلاس باشند. اما به دلیل کاستی‌های آشکار, عملا پروژه‌ای بی‌فایده بود. امروزه, 7۵1 به دلبل نادیده گرفتن پیامدهای عملی اجازه دادن به الگوریتم ها برای یادگیری در حين اجراء به نمونه ای از شکست دز کتاب درسی تبدیل شده است. درس هایی که از شکست تای آموخته شد قطعاً بر پروژه های هوش مصنوعی سال های بعد تأثیر گذاشت. دانشمندان داده همچنین شروع به توچه بیشتر به شفافیت الگوریتم ها کردند. اين كار ما را به موضوع بعدی می‌برد. که نیاز و ره‌های شغاف‌سازی الگوریتم‌ها را پررسی می‌کند. ته

صفحه 438:
توضیح پذیری یک الگوریتم بتدا اجاژه دهید بین الگوربتم جعبه سیاه و جعبه سفید تفاوت فائل شویم. الگوریتم جعبه سیاه, الگوریتمی است که منطق آن به دلیل پیچیدگی و یا به دلیل اینکه منطق آن به ضورت پیچیده نمایش داده می شود. توسط انسان قابل تفسیر الگوریتم جعبه سفید الگوریتمی است که منطق آن برای انسان قابل مشاهده و قابل درک باشد. به عبارت دیگر, توضیح‌پذیری به مغز انسان کمک می‌کند تا بفهمد چرا یک الگوریتم نتايج خاصى می‌دهد. درجه توضیح پذیری معیاری است که یک الگوریتم خاص برای مغز انسان قابل درک است. بسیاری از کلاس‌های الگوریتم‌ها,ب‌ویژه آن‌هایی که مربوط به یادگیری ماشین هستند. به عتوان جعبه سياه طبقه‌بندی می‌شوند. اگر الگوریتم‌ها برای تصمیم‌گیری حیاتی استفاده شوند. ممکن است درک دلبل نتایج حاصل از الگوریتم مهم باشد. تبدیل الگوریم‌های جعبه سیاه به الگوریتم‌های جعب» سفيد نیز نش بهتری در مورد عملگرد داخلی مدل ارائهمی‌دهد. به عنوان مثال, یک الگوریتم قابل توضح پزشکان را راهتمایی می کند که در وافع از کدام ونژگی ها برای طبقه بندی بیماران به عنوان بیمار با غیربیمار استفاده شده است. اگر پزشک در مورد نتايج شک دارد, می‌تواندبه عقب برگردد و آن ویژگی‌های خاص را برای دقت بیشتر, بررسی کند الگوریتم های بادگیری ماشین و توضیح پذیری توصیح پذیری یک الگورتم اهمبت ویژه ای برای الگوریتم های یادگیری ماشین دارد. در بسیاری از کاربردهای یادگیری ماشینی, از کاربران خواسته می شود که به یک مدل اعتماد کنند تا بهآنها در تصمیم گیری کمک کند. توضیح‌پذیری شفافیت را در صورت تیاز در چنین موارد کاربردی فراهم مىكند. بيابيد به یک مثال خاص a4

صفحه 439:
عميقتر نكاه كنيم. بيابيد فرض كنيم كه می خواهیم از بدگیری ماشینی برای پیش بیش قیمت خانه ها در منطقه بوستون بر اساس ویژگی های آنها استفاده كنيم. ابید همچنین فرض کنیم که مفررات شهری محلی نتها در صورتی به ما اجازه می‌دهد که از الگوریتم‌های بادگیری ماشینی استفاده کتیم که بتوانیم اطلاعات دقيقى را برای توجیه هرگونه پیش‌بینی هر زمان که لازم باشد ارائه دهیم. این اطلاعات برای اهداف حسایرسی موردنیاز است تا اطمینان حاصل شود که بخش ‎la‏ خاصی از بازار مسکن به طور مصنوعی دستکاری نشده اند.توضیح بذیری مدل آموزش‌دیده ما اين اطلاعات اضافی را فراهم می‌کند. بيایید به گزینه‌های مختلفی که برای پیاده‌سازی توضیح بذیری مدل آموزش‌دیده‌مان در دسترس هستند, تگاه کنیم. اراثه راهبردهایی برای يوسي پذیری برای یادگیری ماشین, اساساً دو استراتژی برای ارائه توضیح پذیری به الگوریتم ها وجود دارد * استراتژی تسین پذیری جهاتى: براى ارائه جزئيات فرمول بندى يك مدل به عنوان یک کل است. * یک استرانژی توصح‌پذیری محلی: اي استرانزى براى ارائه منطق یک با جند پیش‌بیتی واحد است که تونظ مدل آموزش‌زیده ما چام شده است. برای توضیح جهانی, تکتیک‌هایی ماتتد تست با بردارهای فعال‌سازی مفه ومی ( ۷ داریم که برای ارائه توضیح پذیری برای مدل‌های طبقه‌بندی تصویر استفاده می‌شود. 76 به محاسبه مشتقات جهتی برای تعبین کمیت میزان رابطه ‎ow‏ ‏مفهوم تعریف شده توسط کاریر و طبقه بندی تصاویر بستگی دارد. به غنوان مثال, تعین میکند كه ييشبينى طبقهيندى یک فرد به عنوان مرد جقدر نسبت يه وجود موهای صورت در تصویر حساس است. استراتژی‌های توضیح پذیری جهاني دیگری. مانند نمودارهای وابستگی جزئی و محاسبه اهمیت جایگشت وجود دارد که می‌تواند به توصیح فرمول‌بندی‌ها در مدل آموزش‌دیده ما کمک کند. هر دو 435

صفحه 440:
استرانژی تبین پذیری جهانی و محلی می توانند مدل خاص يا مدل أكنوستيك باشند. استرانژی‌های مدل خاص برای انواع خاصی از مدل‌ها اعصال می‌شوند در حالی که استراتژی‌های مدل-آگنوستیک را می‌توان برای مدل‌های متتوعی به کار برد. نمودر یر استراتژی‌های مختلف موجود برای توضی‌پذیری بادگیری ماشین را خلاصه می‌کند: شکل 1-12: استراتژی های توضیح پذیری حال, بییید ببینیم چگونه می‌توانیم توضی‌پذیری را با استفاده از یکی از اين استراتژی‌ها پیاده‌سازی کنیم. پیاده سازی توضیح پذیری توضیحات مدل فابل تفسیر محلی (118ا) یک رویکرد مدل-اگنوستیک است که می تواند پیش بینی های واحد ساخته شده توسط یک مدل آموزش دیده را توضيخ دهد. از آنجایی كه مدل أكنوستيكى است, می‌تواند پیش‌ینی‌های بیشتر انوا مدل‌های یادگیری ماشین آموزش‌نیده را توضی ذهد. ۱1/۴ تصمیمات را با ایجاد تغييرات كوجك در ورودى برای هر نمونه توح می‌دهد. برای آن نمونه می‌تواند 436

صفحه 441:
اثرات را بر روی مرز تصمیم محلی جمعآوری کند. روی حلفه نگرار می شود تا جزئیات هر متفیر را ارائه دهد. با تگاهی به خروجی, می‌توانیم ببینیم که کدام متغیر پیشترین تأثر را وی آن نموه دارد. یدیم چگونه می‌توانيم از 24| رای توضيح دادن پیش‌بینی‌های واحد مدل قیمت خانه‌مان استفاده کنیم: 1. أكر قبلا از 116 استفاده تكرده ايدء بايد بسته رأ با استفاده از ۵3 تصب كتين ‎pip install Lime‏ سپس, بییید بسته های پابتون مورد نیاز خود را وارد کنیم import sklearn as sk import numpy as np from Lime.lime tabular import LimeTabularExplainer as ex ما مذلی را آموزش خواهیم داد که بتواند قیمت مسکن را در یک شهر خاص پیش بينى كند. براى اين كار ابتدا مجموعه داده ای را که در فایل ا05۵,۵1ا۱0] ذخبره شده است وارد می کنیم. سیس, ویژگی های آن را بررسی می کنیم: رم وتو ویو ما اه ها و 0 ۳ Out |2]) arayiCerine per capita’ “zoning prop’, Undustrtat_ prep", distance fran city carter", "nigh tay access omer Statue prop’, “median price In aea'l, types'ai2s") بر اساس این ویژگی ها بیدقیمت یک خانه را پیش بینی ‎iS‏

صفحه 442:
1. حالا بباييد مدل را آموزش دهيم. ما از يك ركرسيون جنكل تصادفى برای آموزش مدل استفاده خواهیم کرد. ابتدا داده ها را به پارتیشن های آزمون و آموزشی تفسیم می کنیم و سپس از آن برای آموزش مدل استفادهمی کنیم: from sklearn.ensenble import RandonForestRegressor X train, X test, y train, y test = sklearn.model_selection.train_test_split (housing.data, housing. target) regressor = RandonForestRegressor() regressor.fit(X train, y train) در مرحله بعد. اجازه دهید ستون های موضوعی را شناسایی کنیم: ‎cat_col = [i for i, col in enumerate(housing.data.T)‏ ‎if np.unique(col).size < 10]‏ اکنون. اجازه دهید توضیح دهنده ۱1۱/۴ را با پارامترهای پیکرنندی مورد نیاز نمونه سازی کنیم. توجه داشته باشید که ما مشخص می کنیم که برچسب ما "0۳16۵ است که نشان دهنده قیمت خانه ها در بوستون است: ‎myexplainer = ex(X_train,‏ ‎feature_name:‏ class_nanes=['price'], categorical_featuresecat_col, jousing. feature_names, mode=' regression’) ييابيد سعى كنيم جزئيات بيش بيني ها را بررسى كنيم. برای آن ‎Lpyplot lanl‏ 1< عنوان پلاتر از 0۵1۱۵8۵ وارد کنیم 438

صفحه 443:
exp = myexplainer.explain_instance(x_test [25], regressor.predict, num_features=10) exp.as_pyplot_figure( from matplotlib import pyplot as plt plt. tight layout() همانطور که توضیح دهنده ۱۱14 روی پیش بینی های واحد کار می کند؛ باید بیش ببتی هایی را که می خواهیم تجزیه و تحلیل کنیم انتخاب ‎sau‏ فا از توشیح دهنده برای توجیه پیش بینی های شاخص شده به صورت 1 و 35 درخواست کرده ایم: وده

صفحه 444:
for 1 in (1, 951 ‏و‎ mjexplainer.exptain instance(X test] exp.as_pyplot. figure) pltstight tayaut) شکل 2-12: استفاده از ۱۱۳۷۴ بيابيذ سعی کنیم توضیح قبلی را توسط 1۸| تجزیه و تحلیل کنیم, که به ما می گوید: 440

صفحه 445:
فهرست ویژگی‌های مورد استفاده در پیش‌یی‌های واحد: در تصویر قبلی روی 0 نشان داده شدواتة. آهمیت تسبی ویژگن ها در تعیین تصمیم: هر چه خط میله بزرگترباشد, اهمیت آن پیشتر است. مقدار عدذ ذر مجور ‏ است. تأثیرمثبت با منفی هر یک از ویژگی‌های ورودی بر روی برچسب: نوارهای فرمز تأثير متفى و توارهاى سبز تأثير مثبت یک ویژگی خاص را تشان می‌دهند درك اخلاق و الكوريتم ها فرمول بندى الكوها از طريق الكوريتم ها ممكن است به طور مستقيم يا غيرمستقيم منجر به تصميم كيرى غيراخلاقى شود. در حين طراحى الكوريتمها. بيش بينى دامته کامل پیامدهای اخلاقی بلقوه؛به‌وژه برای الگوریتم‌های مقباس بزرگ: که همکن است بیش از یک کاربر دز طراحی «خیل باشندء دشوار است. ابن امر تجزیه و تحلیل تأثیرات ذهنيت انسانى را دشوارتر می کند. شرکت های بیشتر و بیشتری تجزیه و تحلیل اخلافی یک الگوریتم را بخشی از طراحی آن می کنند. اما حقیقت اين است که تا زمانی که یک مورد استفاده مشکل‌ساز بیدا نکنیم. ‎Sao‏ است مشکلات آشکار نشوند مشکلات الگوریتم های یادگیر: الگوریتم هایی که فادر به تنظیم دقیق خود با توجه به الگوهای داده در حال تغییر هستند, الكوريتم بادكيرى ناميده مى شوند. آنها در حالت يادكيرى در زمان واقعن هستند, اما اين قابلیت یادگیری در زمان واقعی ممکن است پیامدهای اخلاقی داشته باشد. این امکان زا ایجاد می کند که یادگیری آنها می تواند متجر به تصمیماتی شود که ممکن است از نظر اخلافی مشکلاتی داشته باشد. از نجایی که آهابرای قرارگرفتن در یک فاز تکاملی پیوسته ساخته شده‌ند نجام یک aa

صفحه 446:
تحلیل اخلاقی مداوم از آنهاتقریا غبرممکن است. با افزايش بيجيدكى الكوريتمها. درک ‎Jal‏ پیامدهای پلندمدت آنها برای افراد و گروه‌های درون سازمانی در جامعه دشوارتر می‌شود. درک ملاحظات اخلافی راه حل های الگ وریتمی فرمول های ریاضی بدون قلب هستند. اين مستولیت افرادی است که مسئول توسعه الگوریتم‌ها هستند. اطمیتان حاصل کتند که آنها با جساسیت‌های اخلاقی در مورد مسئله ای که ما در تلاش بنرای حل آن هستیم مطابقت دارند. این ملاحظات اخلافی الگوریتم‌ها به توع الگوریتم بستگی دارد. ‎Jka she‏ اجازه دهيد الگورتمهای زیر و ملاحظات اخلافی آنها را بررسی کنیم. چند نمونه از الگوزیتم های فدرتمند که برای آنها ملاحظات اخلافی دفیق مورد تباز زد زیر ات الگوریتمهای طبقه‌ندی, زمانى كه در جامعه استفاده مىشوندء نحوه شك لكيرى و ‎g SH causa‏ كرؤداها زا مخاختش ‎dS a.‏ الكوريتمهاء زمانی که در مونورهای نوصیه استفاده می‌شوند. می‌تواند رزومه‌ها را با افراد جوباى كار, چه فردی و چه گروهی, مطابقت ‎ins‏ الگوریتم های داده کاوی برای استحراج اطلاعات از کاربران استفاده می شود و در اختیار تصمیم گیرندگان و دولت ها قرار می گیرد. استفاده از الگوریتم های یادگیری ماشین توسط دولت ها برای اعظا یا رد وبزا به متفاضیان آغاز شده است. از اين رو, ملاحظات اخلافی الگوریتم‌ها به مورد استفاده و نهادهایی که مستفیم یا غیرمستقیم بر آنهاتأثیر می‌گذارند بستگی دارد. تجزیه و تحلیل دقیق از تقطه نظر اخلاقي قبل از شروع به استفاده از یک الگوریتم برای تصمیم گیری حبانی مورد an

صفحه 447:
نیاز است. در بخش‌های آینده. فاکتورهایی را خواهیم دید که هنگام انجام تحلیل دفیق الگوریتم‌ها بید در نظر داشته باشیم. شواهد بی نتیجه داده هایی که برای آموزش الكوريتم يادكيرى ماشين استفاده مى شود ممكن است شواهد قطعی نداشته باشد. برای مثال, در کارآزمایی‌های بالیی: ممکن است اثربخشی یک دارو به دلیل شواهد محدود موجود. ثابت تشود. به طور مشابه, ممکن است شواهد غیرقطعی محدودی وجود داشته باشد که نشان می‌دهد کد پستی خاص در یک شهر خاص بیشتر درگیر کلاهبرداری است. زمانی که تصمیمگیری خود را بر اساس الگوهای ریاضی یافت شده از طریق الگوریتم‌ها با استفاده از این داده‌های محدود فضاوت می‌کنيم. باید مراقب باشیم. تصمیم‌هایی که بر اساس شواهد غبرقطعی هستند مستعد انجام افدامات غیرفابل توجیه قابلیت ردیابی قطع ارتباط بين مرخله آموزش و مرحله آزمون در لگوریتم ها یادگیری ماشینی به اين معنی است که اگر آسیبی توسط یک الگوریتم ایجاد شود. ردیابی و اشکال زدایی آن بسیار سخت است. همچنین, هنگامی که مشکلی در یک الگوریتم یافت می‌شود. تعبین افرادی که تحت تأثیر آن فرار گرفتهاند. دشوار است. شواهد نادرست الگوریتم ها فرمول های داده محور هستند. اصل ]لا6370۵96-0 ‎Garbage-in,‏ ‏(6160) به اين معنی است که نتايج الكوريتمها فقط مىتوانتد به اندازه ذادمهايي 43

صفحه 448:
که بر اساس آن‌ها هستند قابل اعتماد باشند. اگر سوگیری هایی در داده ها وجود داشته باشد. در الگوریتم ها نیز متعکس خواهند شد. تتایج ناعادلانه استفاده از الكوريتمها ممكن است منجر به آسيب رساندن به جوامع و گروه‌های آسیبپدیژی نشود 222000011 الكوريتمهابى که برای اعطای مهاجرت استفاده می‌شوند. گاهی اوفات به‌طور ناخواسته به سمت گرو‌های آسیب‌پذیر جمعیت سوگیری می‌کنن. عبرم استفاده از داده‌های با کیفیت بالا و فرمول‌های پیچیده ریاضی, اگر نتيجه یک نتیجه تاعادلانه باشد. کل تلاش ممکن امنت آسیب بیشتری تا نود بههمراه داشته باشد کاهش سوگیری در مدل ها در دنبای کنونی, سوگیری های کلی شناخته شده و کاماًمستند بر اساس چنسیت: نژاد و گرایش چنسی وجود دارد. به این معتی که نتظار می‌رود داه‌هایی که جمع‌آوری می‌کنيم این سوگیری‌ها را نشان دهند: مگر اينکه با محیطی سروکار داشته باشیم که قبل از جمع‌آوری داده‌هاءتلاشی پرای حذف این سوگیری‌هاانجام شذه باشد. همه نسوگیری‌ها در الگوریتم‌ه,به‌طور مستقیم با غیرمستفیم. ناشی از سوگیری انسانی است. سوگیری انسانی می تواند در داده های مورد استفاده الگوربتم با در فرمول بندی خود الگوریتم منعکس شود. برای یک پروژه بادگیری ماشین معمولی که از چرخه عمر 6815۴-0۸ (مخفف فرآیند استاندارد بن صنعتی) پیروی می کند, که در فصل 5. الگوریتم های گراف توضیح داده شد. سوگیری به شکل زیر است: aaa

صفحه 449:
Collecting 1 cae 3 00 ct Lc ۳1 2 شکل 3-12: سوگیری مشکل ترین بخش کاهش سوگیری اين است که ابتدا سوگیری ناخوداگاه را شناسایی و مکان یابی کنید. مقابله با مسائل ‎NP-hard‏ مسائل ۱۱۳-0۵70 به طور گسترده در فصل 4, طراحی الگوریتم ها مورد بحث قرار گرفت. برخی از مسائل ۱۱۴-1374 مهم هستند و ما باز به طراحی الگوریتم هایی برای حل آنها داریم. اگر یافتن راه حل برای یک مسئله ‎NPchard‏ به دلیل as

صفحه 450:
ييجبدكى آن يا محدوديت منابع موجود دور از دسترس به نظر می رسد. می توانیم یکی از اين رویکردها را در بيش بكيريم. © ساده کردن مستله *. سقارشی کردن یک راه حل شتاخته شده برای یک مسئله مشابه ۰ استفاده از روش احتمالی بباييد يك به يك آنها را بررسى كنيم. ساده کردن مسئله ما مي توانیم بر اساس فرضیات خاصی مسئله را ساده کنیم. مسئله حل شده ,اه حلی اراته می دهد که کامل تیست اما هنوز روشنگر و مقید است. برای اين كار, مفروضات انتخاب شده بايد تا حذ امكان غير محدود كتنده باشند. متال رایطه بین ویژگی ها و برچسب ها در مسائل رگرسیون به تدرت کاملاً خطی است. اما ممکن است در محدوده عملیاتی معمول ما خطی باشد. تقریب رابطه به صورت خطی, الگوریتم را بسیار ساده می کند و به طور گسترده مورد استفاده فرار مى كيرد. اما اين نيز يرخى از تقريب ها را معرفى مى كند كه بر دقت الگوزیتم تألیزتن گذارد: موازده بین تعزیت:ها و وقت باید.بنه؛دقت منورد عطالعه: قرار كيرد و توازن مناسب براق ذینفعان انتخاب شود سفارشی کردن یک راه حل شناخته شده برای یک مسئله مشایه اگر راه خلی برای یک مسئله مشاية شناخته شود. آن راه حل می تواند به عنوان نقطه شروع استفاده شود. می توان آن را برای حل مستله ای که به دنبال آن بودیم سفارشی کرد. مفهوم یادگیری انتقالی (۲1) در یادگیری ماشین بر اين اصل مه

صفحه 451:
استوار است. لیده این است که از استاج مدل های از فبل آموزش دیده به عتوان نقطه شروع برای آموزش الگوریتم ستفاده شود منال بياييد فرص کنیم که می‌خواهيم یک طبه‌بند دودویی آموزش دهیم که می‌تواند بین لپ‌تاپ‌های ال و ویندوز بر اساس فید ویدیوی بلادرنگ با استفاده از بینایی كامييوتر در طول آموزش شركتى ‏ تمايز فائل شود. از طريق فيد ویدئو, مرحله ‎olay Jan amas Jol‏ اشیاء مختلف و تشخیض اینکه کدام یک از اشیاء لبتاب هستند, خواهد بود. پس از اتمام. می‌توانیم به مرحله دوم فرمول‌بندی قوانينى يرويم که می‌وانندبين لب‌تاب‌های ابل و ویندوزتمیزقاثل شوند. اکنون» مدلهاى منيع باز آموزشديده و آزمایش‌شده‌ای وجود درد که می‌توانند با مرحله اول آموزش این مدل مقابله کند.چرا از نها بهعتوان تقطه شروع استفاده تمی کلم و ‎spp gb esa lata ph‏ مت سای بین لپ تاپهای:ویندور وال استفاده نمي کنیم؟ این به ما یک شروع پرش می دهد و راه حل کمتر مستعد فطا ‎wigs ay e138 Lg sar aul‏ آرمایتن ده آنتتتد استفاده از روش احتمالی ما از یک روبق اختمالی برای به دنست آوردن یک راه حل تسیتا خوب انستفاده من کنیم که قابل اجرا باشد, اما بهینه نیست. هنگامی که از الگوریتم‌های درخت تصمیم در فصل 7 الگوریت‌های یادگیری سنتی نطارت شده برای حل مسئله استفاده کردیم. رامحل بر اساس روش احتمالی بود. ما ثابت نکردیم که این یک راة حل بهینه است. اما ین یک راه حل مناسب بود تا بة ما پانسخ مفیدی به مستلة ای بدهد که در چارچوب محدودیت های تعریف شده در نبزمندیها سعی در حل آن داشتیم.

صفحه 452:
منال بسیاری از الگوریتمهای یدگیری ماشین از یک راه‌حل تصادفی شروع می‌شوند و به طز مکرر تخل زا َو تیان راخ تا ‎GS‏ استت کارلید باشد:آما تین توالیج کات کتنم که بهترینتراه حل است این :وشن دز مسال پیچیده براق حل آنا در یک بازه زمانی معقول استفاده می نود به همین لل اننت که پزای پسیاری از الگوزیتم‌های بان گیزی عاشین:: ها زاه یرای بنه "دنت آوردن نتايح قابل تكرار, استفاده از همان دنباله اعداد تصادفی با ستفاده از همان عدد شروع است. زمان استفاده از الگوریتم ها الگوریتم ها مانند ابزارهایی هستند که در جعبه ابزار یک پزشک فرار دارند. ابتدا بانط ‎pala‏ که زر سزایظ"خاض کذام ابزاز بهتزین تانت, گاهن اوهات: لازم ‎ial‏ ‏از خودبپرسیم كه آیا حتی برای مسئله ای که سعی در حل آن دازیم راه حلى داريم و زمان مناسب برای به کارگیری راه حل ما چه زمانى است. ما بايد تعيين کنیم که آیا استفاده از یک الگوریتم می تواند راه حلی برای یک مسئله واقعی که واقعا مفید است. به جای جایگزین ارائه دهد با خیر. ما بایذ تأثیر استفاده از الكوريتم را از سه جنبه تجزيه و تحليل كنيم' * هزينه: آيا استفاده ازآن مى تواتد هزينه مربوط به تلاش برای اجراى الكوريتم را توجيه كند؟ * زمان: آيا راه حل ما فرآيند كلى را كارآمدتر از جايكزين هاى ساذه تر من ‎sas‏ ‏*_ دقت: آیا راه حل ما نتایج دقیق تری نسبت به جایگزین های ساده تر ایجاد می کند؟ برای تخاب الگوریتم مناسب, بايد پاسخ سوالات زیر را بيدا كنيم: © آیامی توانیم با فرضیات, مسئله را ساده کنیم؟ 48

صفحه 453:
+ جكونه الكوريتم خود را ارزيابى خواهيم كرد؟ معبارهای کلیدی چیست؟ © چگونه استقرار و استفاذه خواهد شد؟ © ابا به توضح دارد؟ * آيا ما سه الزام مهم غيرتايعى - امنبت, عملکرد و دسترسی پذیری را درک فى كنيم؟ * آيا مهلت مورد اتتظارى وجود دارد؟ يك مثال عملى - رويدادهاى قو سياه لگوریتم ها داده ها را ورد می کند. آن ها را پردازش و فرموله می کنتد ویک مسئله را حل می کنند. اگر داده‌های جمع‌آوری‌شده درباره یک روی داد بسیار تأثیرگذار و بسبار نادر باشد, چه؟ چگونه می‌توانیم از الگوریتم‌هایی با داده‌های ولید هه توسط آن رویداد و زوندادهایی که"همکن اشت به آن جار يررك مجن شدم ‎Saif obit cial‏ ‎Gude oul yo aude‏ به این جنبه نگاه کتیم. چنین وف ایع بسیاز تادری با استعاره رویدادهای قو سیاه توسط تسیم طالب در کتاب خود فریب خورده تصادفی در سال 2001 نشان داده شد. قبل از اينكه قوهاى سياه يراى اولين بار در طبيعت كشف شوند, برای فرن ها آنها برای نشان دادن جيزى که نمی تواند اتفاق بیفتد استفاده می شد. پس از کشف آنهء این اصطلاح محبوب یاقی ماند. اما تفبیری در آنچه تشان می دهد وجود داشت. اکنون نشان دهنده چیزی بسیار تادر است که نمی توان آن را پیش بینی کرد. طالب ابن جهار معبار را براى طبفه بندی یک رويداد به عنوان رويداد قو سياه ارائه كرد. ‏چهار معیار برای طبقه بندی یک زویداد به عنوان رویداد قو سیاء تصمیم گیری در مورد اينکه آیا یک رویداد نادر باید به عنوان یک رویداد قو سیاه طبه بندی شود با خبر کمی دشوار است. به طور كلى براى اينكه در دسته فو سیاه قرار گیرد باید چهار معیار زیر را داشته باشد. ‎a9 ‎ ‎

صفحه 454:
‎yl oS Gethin Vol .1‏ رویداد اتفاق افتاده است, برای ناظران باید شگفت‌انگیز باشد. مثلا انداختن بمب اتم روى هيروشيما. ‏2. ابن روبداد بايد يك فيلم يرفروش باشد ‏ يك يرهم زتده ويك رويداد بزر مانتد شیوع آنفولانزای اسپانیایی. ‎ ‏3. هنگامی که رویداد رخ داد و گرد و غبار نشست, دانشمندان داده که بخشی از گروه ناظر بودند بابد متوجه شوند كه در واقع آنقدرها هم غافلكيركتنده تيود. ناظران هركز به يرخى سرنع هاى مهم توجه تكردند. اكر آنها طرفيت و ابتكار عمل داشتند, رويداد قو سياه قابل بيش بينى بود. به عنوان ‎Jka‏ شبوع آنفولائزاى اسياتيابى سرنخ هابى داشت كه قبل از بدیل شدن به یک شیوع جهانی شناخته شده بود که نادیده گرفته من شدند. همچنین, پروژه متهتن سال‌ها قبل از پرتاب شذن مب اتفی در هیزوشیما اجرا می‌شد. افراد دز گروه ناظر فقظ نمی توانند: نقاط را به هم وصل کنند. ‏4. وقتى اين اتفاق افتاد, در حالى كه ناظران رويداد قو سياه شكفتى عمر ود را دیدند:همکن آست افرادی"پاشند که اضلاً برای آنها غافلگیز کننده ببوده انتت: به: عنوان مثال, برای دانشمندانی که سال‌ها بر روی ساخت بمب ‎gail‏ کار می‌کردندء استفاده از تبروی اتمی هرگز غافلگیرکندهتبود. بلکه یک رویداد مورد انتظاربود. ‏استفاده از الگوریتم ها در رویدادهای قو سیاه ‎A‏ های ای زوندادهای فو شاخ وود دار که با ‎Si «ag iW Sakis SUN‏ الكوريتم هاي بيش بيني پیچیده ی زیادی وجود دارد. اما اگر امبدوار باشیم از تكنيكهاى بيشبينى استاندارد براى بيشبينى يك رويداد قو سياه به عنوان يك اقدام احتیاطی استفاده کنیم. کارساز تخواهد بود. استفاده از چنین الگوریتم های پیش بینی تها امتیت کلذب را ارئه می دهد. ‎ust‏ از وقوع زویداد قو سیه: پیش‌پین پیاندهای دقیی آن بر حوزه‌های وسیتر جامعه از جمله اقتصاد. جامعه و مسائل دولتی معمولاً امكانيذير نيست. او ‎ ‎

صفحه 455:
به‌عنوان یک رویداد نادر, ما داده‌های مناسبی برای تغذیه الگوریتم‌ها نداریم. و درک درستی از همیستگی و تعامل ‎ow‏ جوزه‌های وسی‌تری از جامعه نداریم که شاید هرگز آن را کف و درک نکرده باشیم. نکته مهمی که ‎al‏ یه آن توچه داشت این است که رویدادهای فو سیاه روی دادهای تصادفی تیستند. ما فقط این ظرفیت را نداشتیم که بهاتقافات پیچیده ای که در نهايت منجر به اين حوادث شد توجه كنيم. اين جوزه أى است كه الكوريتم ها من توانند نع مهمی در آنایفا کنند. ها پید مطمتن شویم که فر آنتدم ما یک استراتزى براى بيش بينى و شتاسابى اين رويدادهاى جزئى داريم كه در طول زمان ‎y's‏ زود و هخا منکن شبوع 201۱0۰19 در اوایل سال 2020 بهترین مثال از یک رویداد فو سیاه در زمان ما است. مثال قبلی نان می دهد که چقدر مهم اسست که ایتدا جزئیات مسئله اي را که می خواهیم حل کنیم در نظر بگیريم و درک کنیم و سپس به آن دست يابيم. مناطقى كه می‌توانیم با یاد‌سازی یک راهحل مبتنی بر الگوریتم یه یک راه‌حل کمک کنیم. بدون تجزیه و تحلیل جامع. همانطور که فبلً ارائه شد. استفاده از الگوریتم‌ها ممكن است تنها بخشی از یک مسئله پیچیده را حل کند که کمتر از انتظارات خلاسه در اين فصل با جنبه هاى كاربردى كه بايد در طراحی الگوریتم ها در نطر گرفته شوند آشنا شديم. ما مفهیوم توضیح‌پذیری الگوریتمی و راه‌های مختلفی را که می‌توانیم آن را در سطوح مختلف ارائهکنیم, برس کردیم. ما همچنین به مسائل اخلافی بالقوه در الگوریتم ها نگاه کردیم. در نهابت, ما توضیح دادیم که چه عواملی را در هنگام انتخاب یک الگوریتم در نظر بگیریم. الگوریتمهاموتورهایی در

صفحه 456:
دنیای خودکار جدید هستند که امروزه شاهد آن هستیم. بادگیری: آزمایش و درک مفاهیم استفاده از الگوریتم ها بسیار مهم است. درک تقاط قوت و محدودیت‌های آن‌ها و مفاهیم اخلاقی استفاده از الگوزیتم‌ها کمک زینادی بنه تبندیل این جهنان بنه مکانی بهتر برای زندگی می‌کند. و اين کتاب تلاشی براى دستيابى به اين هدف مهم در اين دنياى هميشه در حال تغيير و تحول است.

50 الگوریتمی که هر برنامه نویسی باید بداند 50الگوریتمی که هر برنامه نویسی باید بداند الگوریتم های پایتون برای تقویت مهارت های حل مسئله فهرست .1فصل :1مروری بر الگوریتم ها+..................................................................................... 2.......................... :2ساختارهای داده مورد استفاده در الگوریتم ها32+................................................................................. .3فصل :3الگوریتم های مرتب سازی و جستجو.............................................................................. 68... .4فصل :4طراحی الگوریتم ها+..................................................................................... 97.......................... .5فصل :5الگوریتم های گراف................................................................................ 138............................ .6فصل :6الگوریتم های یادگیری ماشین بدون نظارت179...................................................................... .7فصل :7الگوریتم های یادگیری سنتی با نظارت............................................................................ 235 .8فصل :8الگوریتم های شبکه عصبی............................................................................... 307................ .9فصل :9الگوریتم های داده+.................................................................................. 357........................... .10فصل :10 رمزنگاری........................................................................... 375+............................................... .11فصل :11الگوریتم های مقیاس بزرگ+................................................................................. 414+............. .12فصل :12مالحظات عملی................................................................................ 442+............................... بخش :1مبانی و الگوریتم های اصلی این بخش جنبه های اصلی الگوریتم ها را معرفی می کند .ما بررسی خ واهیم ک رد که یک الگوریتم چیست و چگونه آن را طراحی ک نیم .همچ نین ب ا س اختارهای داده مورد استفاده در الگوریتم ها آشنا خواهیم ش د .همچ نین در این قس مت الگ وریتم های مرتب سازی و جستجو به همراه الگوریتم ه ایی ب رای ح ل مس ائل گ رافیکی معرفی می شود. فصول موجود در این بخش عبارتند از: فصل ،1مروری بر الگوریتم ها فصل ،2ساختارهای داده مورد استفاده در الگوریتم ها فصل ،3الگوریتم های مرتب سازی و جستجو فصل ،4طراحی الگوریتم ها فصل ،5الگوریتم های گراف 1مروری بر الگوریتم ها یک الگوریتم باید دیده شود تا دونالد کنوت را باور کند. 1 این کت اب اطالع ات م ورد نی از ب رای درک ،طبق ه بن دی ،انتخ اب و پی اده س ازی الگ وریتم ه ای مهم را پوش ش می ده د .این کت اب عالوه ب ر توض یح منط ق آنه ا، ساختارهای داده ،محیط های توسعه و محیط های تولی دی را ک ه ب رای کالس ه ای مختلف الگوریتم ها مناسب هستند ،مورد بحث قرار می دهد .این نسخه چ اپ دوم این کتاب اس ت .در این نس خه ،م ا ب ه ط ور وی ژه ب ر روی الگ وریتم ه ای م درن یادگیری ماشین تمرکز کردیم که روز به روز اهمیت بیشتری پیدا می کنند .همراه با منطق ،مثال‌های عملی از استفاده از الگوریتم‌ها برای حل مس ائل واقعی روزم ره نیز ارائه می‌شود .این فصل بینشی در م ورد اص ول الگوریتم‌ه ا ارائ ه می‌ده د .ب ا بخشی در مورد مفاهیم اساسی مورد نیاز برای درک عملکرد الگوریتم های مختلف شروع می شود .برای ارائه یک دیدگاه تاریخی ،این بخش به طور خالص ه چگ ونگی استفاده از الگوریتم‌ها را برای فرمول‌بندی ریاضی دسته خاصی از مس ائل را بی ان می‌کند .همچنین محدودیت های الگوریتم های مختلف را ذکر می کن د .بخش بع دی راه های مختلف برای تعیین منطق یک الگوریتم را توض یح می ده د .از آنج ایی ک ه در این کتاب از پایتون برای نوشتن الگوریتم ها اس تفاده ش ده اس ت ،نح وه تنظیم محیط برای اجرای مثال ها توضیح داده شده اس ت .س پس ،راه ه ای مختلفی ک ه عملکرد یک الگوریتم را می توان محاسبه کرد و با سایر الگوریتم ها مقایس ه ک رد، مورد بحث قرار می گ یرد .در نه ایت ،این فص ل روش‌ه ای مختلفی را م ورد بحث قرار می‌دهد که پیاده‌سازی خاصی از یک الگوریتم را می‌توان تایی د ک رد .ب ه ط ور خالصه ،این فصل نکات اصلی زیر را پوشش می‌دهد: ‏ الگوریتم چیست؟ ‏ مراحل یک الگوریتم ‏ محیط توسعه ‏ تکنیک های طراحی الگوریتم ‏ تجزیه و تحلیل عملکرد ‏ اعتبار سنجی یک الگوریتم 2 الگوریتم چیست؟ به زبان ساده ،یک الگوریتم مجموعه ای از قوانین برای انجام محاسبات ،برای ح ل یک مسئله است .این مجموعه قوانین ،ط راحی ش ده اس ت ت ا نت ایج را ب رای ه ر ورودی معتبر ،طبق دس تورالعمل ه ای دقی ق تعری ف ش ده ارائ ه ده د .اگ ر کلم ه الگوریتم را در یک فرهنگ لغت (مانند )American Heritageجس تجو کنی د ،این مفهوم را به صورت زیر تعریف می کند: الگوریتم مجموعه‌ای محدود از دستورالعمل‌های بدون ابهام اس ت ک ه ب ا توج ه ب ه مجموعه‌ای از شرایط اولیه ،می‌توان در یک توالی مشخص ب رای دس تیابی ب ه ی ک قابل تشخیص ،باشد. ی هدف خاص و دارای مجموعه‌ای از شرای ِ ط پایان ِ ِ طراحی یک الگوریتم تالشی برای ایجاد یک دس تور العم ل ریاض ی ب ه کارآم دترین روش است که می تواند به طور موثر برای حل یک مس ئله دنی ای واقعی اس تفاده شود .این دستور العمل ممکن است به عن وان پای ه ای ب رای توس عه ی ک راه ح ل ریاضی قابل استفاده مجدد و عمومی تر استفاده شود که می تواند برای مجموع ه گسترده تری از مسائل مشابه اعمال شود. مراحل یک الگوریتم مراحل مختلف توسعه ،استقرار و در نهایت استفاده از یک الگوریتم در شکل 1.1 نشان داده شده است: همانطور که می بینیم ،این فرآین د ب ا درک نیازمن دیهای دس تور مس ئله ش روع می شود که جزئیات آنچه باید انجام ش ود را توض یح می ده د .هنگ امی ک ه مس ئله ب ه وضوح بیان شد ،ما را به مرحله توسعه هدایت می کن د .مرحل ه توس عه ش امل دو مرحله است: 3 شکل :1-1مراحل مختلف توسعه ،استقرار و استفاده از یک الگوریتم .1مرحله طراحی :در مرحله طراحی ،معماری ،منطق و جزئی ات پی اده س ازی الگوریتم پیش بینی و مستند می شود .هنگام طراحی یک الگوریتم ،دقت و عملکرد را در نظ ر داریم .در ح الی ک ه ب ه دنب ال به ترین راه ح ل ب رای ی ک مس ئله معین هستیم ،در بسیاری از موارد به بیش از یک الگوریتم کاندید خ واهیم رس ید .مرحل ه طراحی یک الگوریتم ،یک فرآیند تکراری اس ت ک ه ش امل مقایس ه الگ وریتم ه ای مختل ف کاندی د می ش ود .ب رخی از الگوریتم‌ه ا ممکن اس ت راه‌حل‌ه ای س اده و سریعی ارائه دهند ،ام ا ممکن اس ت دقت را ب ه خط ر بیندازن د .س ایر الگوریتم‌ه ا ممکن است بسیار دقیق باشند ،اما ممکن است به دلیل پیچیدگی‌شان زمان زی ادی ب رای اج را نی از داش ته باش ند .ب رخی از این الگ وریتم ه ای پیچی ده ممکن اس ت 4 کارآمدتر از بقیه باشند .قبل از انتخاب ،تمام معاوضه‌های ذاتی الگوریتم‌های کاندی د باید به دقت مورد مطالعه قرار گیرند .به خصوص برای یک مسئله پیچیده ،ط راحی یک الگوریتم کارآمد مهم است .یک الگوریتم درست طراحی شده ،منجر به یک راه حل کارآمد می شود که قادر به ارائه عملکرد رضایت بخش و دقت معقول به طور همزمان خواهد بود. .2مرحله کدگذاری :در مرحله کدگذاری ،الگوریتم طراحی شده ب ه ی ک برنام ه کامپیوتری تبدیل می شود .مهم است که برنامه کامپیوتری تمام منط ق و معم اری پیشنهادی در مرحله طراحی را اجرا کند. نیازمندیهای مسئله تج اری را می ت وان ب ه نیازمن دیهای ک ارکردی و غ یر ک ارکردی تقسیم کرد .نیازمن دیهایی ک ه مس تقیما ً وی ژگی ه ای م ورد انتظ ار راه ح ل ه ا را مشخص می کند ،نیازمندیهای کارکردی نامیده می شود. نیازمندیهای کارکردی ،رفتار مورد انتظار راه حل را شرح می دهد .از سوی دیگ ر، نیازمندیهای غیرکارکردی در مورد عملکرد ،مقیاس پذیری ،ق ابلیت اس تفاده و دقت الگوریتم است .نیازمندیهای غیرکارکردی همچنین انتظارات مربوط ب ه ام نیت داده ها را در بر می گیرد. برای مثال ،در نظر بگیریم که می خواهیم ط راحی الگ وریتمی ب رای ی ک ش رکت کارت اعتباری انجام دهیم که بتواند تراکنش‌های جعلی را شناسایی و عالمت‌گذاری کند. نیازمندیهای کارکردی در این مثال ،رفتار مورد انتظار یک راه حل معتبر را ب ا ارائ ه جزئی ات خ روجی م ورد انتظ ار ب ا توج ه ب ه مجموع ه خاص ی از داده ه ای ورودی مشخص می کند .در این مورد داده های ورودی ممکن است جزئیات تراکنش باشد و خروجی ممکن است یک عالمت دودویی باشد که یک تراکنش را به عن وان جعلی یا غیر جعلی برچسب گذاری می کند .در این مثال ،نیازمندیهای غیرکارکردی ممکن است زمان پاسخگویی هر یک از پیش‌بینی‌ها را مشخص کند. 5 نیازمن دیهای غیرک ارکردی ن یز آس تانه ه ای مج از را ب رای دقت تع یین می کن د. همانطور ک ه در این مث ال ب ا داده ه ای م الی س روکار داریم ،نیازمن دیهای امنی تی مربوط به احراز هویت کاربر ،مجوز و محرمانه بودن داده ها نیز انتظار می رود که بخش ی از نیازمن دیهای غیرک ارکردی باش د .توج ه داش ته باش ید ک ه نیازمن دیهای کارکردی و غیرکارکردی با هدف تعیین دقیق آنچه نیاز اس ت انج ام ش ود .ط راحی راه حل در مورد چگونگی انجام آن است .و پیاده س ازی ،ط راحی راه ح ل واقعی ی انتخ ابی شماس ت .ارائ ه ط رحی ک ه ب ه ط ور کام ل در زب ان برنام ه نویس ِ نیازمن دیهای ک ارکردی و غیرک ارکردی را ب رآورده می کن د ،ممکن اس ت زم ان و تالش زیادی را ببرد .انتخاب زب ان برنام ه نویس ی مناس ب و محی ط توس عه/تولی د ممکن است به نیازمندیهای مسئله بستگی داشته باشد .به عنوان مث ال ،از آنج ایی که ++C/Cیک زبان سطح پایین تر از پایتون اس ت ،ممکن اس ت ب رای الگ وریتم هایی که نیاز به کد کامپایل شده و بهینه سازی سطح پایین تر دارند ،انتخاب به تری باشد .پس از اتمام مرحل ه ط راحی و تکمی ل کدگ ذاری ،الگ وریتم آم اده اس تقرار است .استقرار یک الگوریتم شامل طراحی محیط تولید واقعی است ک ه در آن ک د اجرا می شود .محیط تولید باید با توجه ب ه داده ه ا و نیازه ای پردازش ی الگ وریتم طراحی شود .به عنوان مثال ،برای الگوریتم‌های موازی‌پ ذیر ،ی ک خوش ه ب ا تع داد مناسب گره‌های کامپیوتری برای اجرای کارآم د الگ وریتم م ورد نی از اس ت .ب رای الگوریتم های فشرده داده ،ممکن است نیاز به طراحی یک خط لوله ورودی داده و استراتژی کش کردن و ذخیره داده ها باشد .طراحی ی ک محی ط تولی د ب ا جزئی ات بیشتر در فصل 14الگوریتم های مقیاس بزرگ و فصل 15مالحظ ات عملی م ورد بحث ق رار گرفت ه اس ت .هنگ امی ک ه محی ط تولی د ط راحی و پی اده س ازی ش د، الگوریتم به کار گرفته می شود ک ه داده ه ای ورودی را می گ یرد ،آن را پ ردازش می کند و خروجی را مطابق با نیازمندیها تولید می کند. محیط توسعه 6 پس از طراحی ،الگوریتم ها باید طبق ط راحی در ی ک زب ان برنام ه نویس ی پی اده سازی شوند .برای این کتاب زبان برنامه نویسی پایتون را انتخاب کرده ایم .ما این زبان را انتخاب کردیم زیرا پایتون یک زبان برنامه نویسی منعطف و منبع باز است. پایتون همچنین یکی از زبان‌هایی است ک ه می‌توانی د در زیرس اخت‌های محاس بات ابری مختلف مانند خدمات وب آمازون ( ،)AWSمایکروسافت آزور و پلتف رم اب ری گوگ ل ( )GCPاز آن اس تفاده کنی د .ص فحه اص لی رس می پ ایتون در https://www.python.orgدر دس ترس اس ت .این س ایت همچ نین دارای دستورالعمل هایی برای نصب و راهنمای مبتدیان ،اس ت .ب رای درک به تر مف اهیم ارائه شده در این کتاب ،درک اولیه پایتون الزم است .برای این کتاب ،انتظار داریم از نسخه اخیر پایتون 3استفاده کنید .در زمان نگارش ،آخ رین نس خه 3.10اس ت که برای اجرای تمرینات این کتاب از آن استفاده خواهیم کرد. ما در سراسر این کتاب از پایتون استفاده خواهیم ک رد .م ا همچ نین از ن وت ب وک های Jupyterبرای اجرای کد استفاده خواهیم کرد .بقیه فصل‌های این کتاب فرض می‌کنند که پایتون نصب شده است و نوت‌بوک‌های Jupyterبه درستی پیکربندی و اجرا می‌شوند. بسته های پایتون پایتون یک زبان هم ه منظ وره اس ت .این زب ان از فلس فه "ش امل ب اتری" پ یروی می‌کند ،به این معنی که یک کتابخانه استاندارد در دسترس است ،بدون اینکه کاربر بسته‌های جداگانه را دانلود کند .با این حال ،م اژول ه ای اس تاندارد کتابخان ه فق ط حداقل عملکرد را ارائه می دهند. بر اساس مورد استفاده خاصی که روی آن کار می‌کنید ،ممکن است نیاز به نص ب بسته‌های اضافی داشته باشند .مخزن رسمی شخص ثالث برای بس ته ه ای پ ایتون ان بس ته ه ای PyPiنام دارد که مخف ف Python Package Indexاس ت .میزب ِ پایتون ،هم به عن وان توزی ع منب ع و هم ک د از پیش کامپای ل ش ده اس ت .در ح ال 7 حاضر ،بیش از 113000بسته پایتون در PyPiمیزبانی شده است .ساده ترین راه برای نصب بسته های اضافی از طریق سیستم مدیریت بس ته Pipاس ت Pip .ی ک مخفف بازگشتی عصبی است که در زبان پایتون ف راوان اس ت Pip .مخف ف "Pip "Installs Pythonاست .خبر خوب این است ک ه از نس خه 3.4پ ایتون pip ،ب ه طور پیش فرض نصب ش ده اس ت .ب رای بررس ی نس خه pipمی توانی د در خ ط فرمان تایپ کنید: ‏pip --version از این دستور pipمی توان برای نصب بسته های اضافی استفاده کرد: ‏pip install `PackageName بسته هایی که قبال ً نصب شده اند باید به طور دوره ای به روز شوند تا آخرین توابع را دریافت کنند .این کار با استفاده از پرچم upgradeبه دست می آید: ‏pip install `PackageName` –upgrade و برای نصب یک نسخه خاص از یک بسته پایتون: ‏pip install `PackageName==2.1 افزودن کتابخانه ها و نسخه های مناس ب ب ه بخش ی از راه ان دازی محی ط برنام ه نویسی پایتون تبدیل شده است .یکی از ویژگی هایی که به حف ظ این کتابخان ه ه ا کمک می کند ،توانایی ایجاد یک فایل نیازمندی است که تمام بسته ه ای م ورد نی از را فهرست می کند .فایل نیازمندی ها یک فای ل مت نی س اده اس ت ک ه ح اوی ن ام کتابخانه ها و نسخه های مرتبط با آنها است .نمونه فایل نیازمندی ها به صورت زیر است: ‏scikit-learn==0.24.1 ‏tensorflow==2.5.0 ‏tensorboard==2.5.0 طبق قرارداد requires.txtدر دایرکتوری سطح باالی پروژه قرار می گیرد. 8 پس از ایجاد ،فایل مورد نیاز را می توان برای راه اندازی محی ط توس عه ب ا نص ب تمام کتابخانه های پایتون و نسخه ه ای مرتب ط ب ا آنه ا ب ا اس تفاده از دس تور زی ر استفاده کرد. ‏pip install -r requires.txt حال اجازه دهید به بسته های اصلی که در این کتاب استفاده خواهیم کرد نگاهی بیاندازیم. اکوسیستم SciPy ) - Scientific Python (SciPyکه سای پای تلفظ می ش ود -گ روهی از بسته های پایتون است که ب رای جامع ه علمی ایج اد ش ده اس ت .این اکوسیس تم شامل بسیاری از توابع ،از جمله طیف گس ترده ای از مول د اع داد تص ادفی ،روال های جبر خطی ،و بهینه سازها است SciPy .یک بس ته ج امع اس ت ،و ب ا گذش ت زمان ،مردم برنامه های افزودنی زیادی برای سفارشی سازی و گسترش بسته ب ر اساس نیاز خود ایجاد ک رده ان د SciPy .عملک رد خ وبی دارد زی را ب ه عن وان ی ک پوش ش ن ازک در اط راف ک دهای بهینه‌س ازی ش ده نوش ته ش ده در ++C/Cی ا Fortranعمل می‌کند .بسته‌های اصلی زیر بخشی از این اکوسیستم هستند: :NumPyبرای الگوریتم ها ،توانایی ایجاد ساختارهای داده چند بعدی ،مانند آرایه ه ا و ماتریس ه ا ،واقع ا مهم اس ت NumPy .مجموع ه ای از ان واع داده ه ای آرای ه و ماتریس را ارائ ه می ده د ک ه ب رای آم ار و تجزی ه و تحلی ل داده ه ا مهم هس تند. جزئیات در مورد NumPyرا می توان در /http://www.numpy.orgیافت. :scikit-learnاین افزونه یادگیری ماشینی یکی از محبوب ت رین افزون ه ه ای SciPyاست Scikit-learn .طیف گسترده ای از الگوریتم ه ای مهم ی ادگیری ماش ین را ارائ ه می ده د ،از جمل ه طبق ه بن دی ،رگرس یون ،خوش ه بن دی ،و اعتبارس نجی م دل .می توانی د جزئی ات بیش تر در م ورد scikit-learnرا در /http://scikit-learn.orgبیابید. pandas: pandasشامل ساختار داده های مجموعه جدولی هستند که ب ه ط ور گس ترده ب رای ورودی ،خ روجی و پ ردازش داده ه ای ج دولی در الگ وریتم ه ای 9 مختلف استفاده می شود .کتابخانه pandasش امل بس یاری از عملکرده ای مفی د است و همچنین عملکرد بسیار بهینه ای را ارائه می دهد .جزئی ات بیش تر در م ورد pandasرا می توانید در /http://pandas.pydata.orgپیدا کنید. Matplotlib: Matplotlibابزاره ایی را ب رای ایج اد تص ویر ه ای قدرتمن د فراهم می کند .داده ها را می ت وان ب ه ص ورت نم ودار خطی ،نم ودار پراکن دگی، نمودار میله ای ،هیستوگرام ،نمودار دایره ای و غیره ارائه کرد .اطالعات بیش تر را می توانید در /https://matplotlib.orgبیابید. استفاده از نوت ب وک پ ایتون :م ا از Jupyter Notebookو Colabب ه عن وان IDEاستفاده خواهیم کرد. تکنیک های طراحی الگوریتم الگوریتم یک راه حل ریاضی برای یک مسئله دنیای واقعی است .هنگام طراحی یک الگوریتم ،سه نگرانی طراحی زی ر را در حین ک ار ب ر روی ط راحی و تنظیم دقی ق الگوریتم ها در نظر می گیریم: نگرانی :1آیا این الگوریتم نتیجه ای را که ما انتظار داشتیم تولید می کند؟ نگرانی :2آیا این بهینه ترین راه برای به دست آوردن این نتایج است؟ نگرانی :3الگوریتم چگونه روی مجموعه داده های بزرگتر عمل می کند؟ درک پیچیدگی خودِ مسئله قبل از طراحی راه حل برای آن ،مهم اس ت .ب ه عن وان مثال ،اگر مسئله را از نظر نیازها و پیچیدگی مشخص کنیم ،به ما کمک می کن د ت ا راه حل مناسبی را طراحی کنیم .به طور کلی ،الگوریتم ها را می توان ب ر اس اس ویژگی های مسئله به انواع زیر تقسیم کرد: الگوریتم های فشرده داده :الگوریتم ه ای فش رده داده ب رای مقابل ه ب ا حجم زیادی از داده ها طراحی شده اند .انتظار می رود آنها نیازهای پردازش نسبتا ً ساده ای داشته باشند .الگوریتم فشرده سازی اعمال شده بر روی یک فایل بزرگ نمونه 10 خوبی از الگوریتم های فشرده داده است .برای چنین الگوریتم‌هایی ،انتظار می‌رود اندازه داده‌ها بسیار بزرگ‌تر از حافظه موتور پردازش (یک گره ی ا خوش ه) باش د و ممکن است نیاز باشد که یک طراحی پردازش تکراری برای پردازش کارآمد داده‌ها مطابق با نیازمندیها ایجاد شود. الگوریتم های فشرده محاسباتی :الگوریتم ه ای فش رده محاس باتی نیازمن د پردازش قابل توجهی هستند اما شامل حجم زیادی از داده ها نمی شوند .یک مث ال ساده الگوریتم یافتن یک عدد اول بسیار بزرگ است .یافتن استراتژی برای تقس یم الگوریتم به فازهای مختلف ب ه ط وری ک ه ح داقل ب رخی از فازه ا م وازی ش وند، کلیدی برای به حداکثر رساندن عملکرد الگوریتم است. ترکیب الگ+وریتم ه+ای داده و الگ+وریتم ه+ای محاس+باتی :الگ وریتم ه ای خاصی وجود دارند که با حجم زیادی از داده ه ا س روکار دارن د و همچ نین نیازه ای محاسباتی قابل توجهی دارند .الگ وریتم ه ای م ورد اس تفاده ب رای انج ام تجزی ه و تحلیل احساسات در فایلهای ویدئویی زنده ،مثال خوبی از جایی است ک ه هم داده ها و هم نیازهای پ ردازش در انج ام ک ار بس یار زی اد هس تند .چ نین الگوریتم‌ه ایی پرمص رف‌ترین الگوریتم‌ه ا هس تند و نیازمن د ط راحی دقی ق الگ وریتم و تخص یص هوشمندانه منابع موجود هستند. برای توصیف مسئله از نظر پیچیدگی و نیاز ،اگر داده های آن و محاسبه ابعاد آن را با عمق بیشتری مطالعه کنیم ،می تواند مفید باشد که در قسمت بعدی آن را انجام خواهیم داد. بُعد داده برای دسته بندی بُعد داده مسئله ،به حجم ،سرعت و تنوع آن ( )Vs3نگاه می کنیم که به صورت زیر تعریف می شوند: حجم( :)Volumeحجم ،اندازه مورد انتظار داده هایی است ک ه الگ وریتم پ ردازش می کند. 11 سرعت( :)Velocityسرعت ،نرخ مورد انتظار تولید داده های جدید هنگام استفاده از الگوریتم است .می تواند صفر باشد. تنوع( :)Varietyتنوع ،کمیتی است که نشان می‌دهد الگوریتم طراحی‌ش ده ب ا چ ه تعداد از داده‌ها سروکار دارد. شکل Vs3 ،2-1داده ها را با جزئیات بیشتری نش ان می ده د .مرک ز این نم ودار ساده ترین داده های ممکن را با حجم کم و تنوع و سرعت کم نش ان می ده د .ب ا دور شدن از مرکز ،پیچیدگی داده ها افزایش می یابد .می تواند در یک ی ا چن د بُع د از سه بُعد افزایش یابد. به عنوان مثال ،در بعد سرعت ،فرآیندِ دسته ای را به عنوان ساده ت رین ،ب ه دنب ال آن فرآیندِ دوره ای و سپس فرآیندِ نزدیک ب ه زم ان واقعی را داریم .در نه ایت ،م ا فرآیندِ بالدرن گ را داریم ک ه پیچی ده‌ترین فرآین د در زمین ه س رعت داده اس ت .ب ه عنوان مثال ،مجموعه‌ای از فایلهای ویدئویی زنده که توسط گروهی از دوربین‌ه ای مانیتورینگ جمع‌آوری شده‌اند ،دارای حجم باال ،سرعت باال و تن وع ب االیی هس تند و ممکن است به طراحی مناسب نیاز داشته باشند تا توانایی ذخیره و پردازش م وثر داده‌ها را داشته باشند. 12 شکل :2-1شکل Vs 3 :1.5داده :حجم ،سرعت و تنوع بعد محاسباتی برای مشخص کردن بعد محاسباتی ،نیازهای پردازش ی مس ئله در دس ت را تحلی ل می‌کنیم .نیازهای پردازشی یک الگوریتم تعیین می کند که چه نوع طراحی برای آن کارآمدتر است .به عنوان مث ال ،الگ وریتم ه ای پیچی ده ،ب ه ط ور کلی ،ب ه ق درت پردازش زیادی نیاز دارند .برای چنین الگوریتم هایی ،ممکن است داش تن معم اری 13 موازی چند گ ره مهم باش د .الگوریتم‌ه ای عمی ق م درن ،معم وال ً ش امل پ ردازش عددی قابل توجهی هستند و ممکن است به قدرت GPUیا TUPنی از داش ته باش ند همانطور که در فصل ،15مالحظات عملی مورد بحث قرار خواهد گرفت. تجزیه و تحلیل عملکرد تجزی ه و تحلی ل عملک رد ی ک الگ وریتم بخش مهمی از ط راحی آن اس ت .یکی از راه‌های تخمین عملکرد ی ک الگ وریتم ،تجزی ه و تحلی ل پیچی دگی آن اس ت .نظری ه پیچیدگی ،مطالعه چگونگی پیچیده بودن الگوریتم‌ه ا اس ت .ب رای مفی د ب ودن ،ه ر الگوریتم باید سه ویژگی کلیدی داشته باشد: ‏ باید درست باشد :یک الگوریتم خوب باید نتیج ه درس ت را ایج اد کن د .ب رای تأیید اینکه یک الگوریتم به درستی کار می کند ،باید به طور گسترده آزمایش شود ،به ویژه موارد لبه آزمایش. ‏ بای د قاب ل درک باش د :ی ک الگ وریتم خ وب بای د قاب ل درک باش د .به ترین الگوریتم دنیا اگ ر خیلی پیچی ده باش د ک ه بت وانیم آن را روی ک امپیوتر پی اده سازی کنیم ،خیلی مفید نیست. ‏ باید کارآمد باشد :یک الگوریتم خوب باید کارآمد باشد .حتی اگر یک الگوریتم نتیجه درستی تولید کند ،اگر هزار سال طول بکشد ی ا ب ه 1میلی ارد تراب ایت حافظه نیاز داشته باشد ،کمک چندانی به ما نخواهد کرد. دو نوع تحلیل ممکن برای تعیین کمیت پیچیدگی یک الگوریتم وجود دارد: ‏ تجزیه و تحلیل پیچیدگی فضا :نیازهای حافظه مورد نیاز در زمان اج را ،ب رای اجرای الگوریتم را برآورد می کند. ‏ تحلیل پیچیدگی زمانی :زمان اجرای الگوریتم را تخمین می زند. بیایید یک به یک آنها را بررسی کنیم: تحلیل پیچیدگی فضا 14 تحلیل پیچیدگی فضا ،مقدار حافظه م ورد نی از الگ وریتم ب رای پ ردازش داده ه ای ورودی را تخمین می زن د .در حین پ ردازش داده ه ای ورودی ،الگ وریتم بای د ساختارهای داده موقتی گذرا را در حافظه ذخیره کند. نحوه طراحی الگوریتم بر تعداد ،نوع و اندازه این ساختارهای داده تأثیر می گ ذارد. در عصر محاسبات توزیع‌شده و با حجم فزاینده‌ای از داده‌هایی که نیاز ب ه پ ردازش دارند ،تحلیل پیچیدگی فضا اهمیت بیش تری پی دا می‌کن د .ان دازه ،ن وع و تع داد این س اختارهای داده ،نیازه ای حافظ ه را ب رای س خت اف زار اص لی دیکت ه می کن د. ساختارهای داده درون حافظه مدرن مورد استفاده در محاسبات توزی ع ش ده ،بای د مکانیس م ه ای تخص یص من ابع کارآم دی داش ته باش ند ک ه از نیازه ای حافظ ه در مراحل مختلف اجرای الگوریتم آگاه باشند .الگ وریتم ه ای پیچی ده م اهیت تک راری دارند .این الگوریتم‌ها به‌جای اینکه همه اطالعات را ب ه یکب اره در حافظ ه بیاورن د، ساختارهای داده‌ها را به طور مکرر پر می‌کنند .برای محاس به پیچی دگی فض ا ،مهم است که ابتدا نوع الگوریتم تکراری را که قصد استفاده از آن را داریم طبق ه بن دی کنیم .یک الگوریتم تکراری می تواند از یکی از سه نوع تکرار زیر استفاده کند. ‏ تکرارهای همگ را :هم انطور ک ه الگ وریتم از طری ق تکراره ا پیش می رود، مقدار داده هایی که در هر تکرار جداگانه پردازش می کند ،کاهش می یابد. به عبارت دیگر ،با ادامه الگوریتم از طریق تکراره ای خ ود ،پیچی دگی فض ا ک اهش می یاب د .چ الش اص لی مقابل ه ب ا پیچی دگی فض ایی تکراره ای اولی ه اس ت. زیرساخت‌های ابری مقیاس‌پذیر مدرن مانند AWSو Google Cloudبرای اجرای چنین الگوریتم‌هایی مناسب‌تر هستند. ‏ تکراره ای واگ را :هم انطور ک ه الگ وریتم از طری ق تکراره ا پیش می رود، مقدار داده ای که در هر تکرار جداگانه پردازش می کند افزایش می یابد .از آنج ایی ک ه پیچی دگی فض ا ب ا پیش رفت الگ وریتم از طری ق تک رار اف زایش می‌یابد ،تعیین محدودیت‌هایی برای جلوگ یری از ناپای دار ش دن سیس تم مهم 15 است .محدودیت ها را می توان با محدود کردن تعداد تکرارها و/ی ا ب ا تع یین محدودیت اندازه داده های اولیه تنظیم کرد. ‏ تکرارهای مسطح :هم انطور ک ه الگ وریتم از طری ق تکراره ا پیش می رود، مقدار داده ای که در هر تکرار جداگانه پ ردازش می کن د ث ابت می مان د .از آنجایی که پیچیدگی فضا تغییر نمی کند ،قابلیت ارتجاعی در زیرساخت م ورد نیاز نیست. برای محاسبه پیچیدگی فضا ،باید بر روی یکی از پیچیده ترین تکرارها ،تمرکز کنیم. به عنوان مثال ،برای الگوریتمی که از تبدیل تکرارها اس تفاده می کن د ،می ت وانیم یکی از تکرارهای اولیه را انتخاب ک نیم .پس از انتخ اب ،مق دار ک ل حافظ ه م ورد استفاده الگوریتم ،از جمله حافظ ه اس تفاده ش ده توس ط س اختارهای داده گ ذرا، اجرا و مقادیر ورودی آن را تخمین می زنیم. این کار به ما تخمین خوبی از پیچیدگی فضایی یک الگوریتم می دهد. دستورالعمل های زیر برای به حداقل رساندن پیچیدگی فضا وجود دارد: در صورت امکان ،سعی کنید یک الگوریتم را به صورت تکرار شونده طراحی کنید. هنگام طراحی یک الگ وریتم تک راری ،ه ر زم ان ک ه انتخ ابی وج ود داش ت ،تع داد تکرارهای بیشتر را به تعداد تکرارهای کمتر ترجیح می دهند. کوچک بیشتر ،پیچیدگی فضای کمتری داشته باشند. انتظار می رود تعداد تکرارهای ِ الگوریتم ها باید فقط اطالعات مورد نیاز برای پردازش فعلی را در حافظه بیاورند. هر چیزی که الزم نیست باید از حافظه پاک شود. تجزیه و تحلیل پیچیدگی فضا برای طراحی کارآمد الگوریتم ها ضروری اس ت .اگ ر هنگام طراحی یک الگوریتم خاص ،تجزیه و تحلی ل پیچی دگی فض ای مناس ب انج ام نشود ،در دسترس نبودن حافظه کافی ب رای س اختارهای داده م وقت گ ذرا ممکن است باعث سرریزهای غیر ض روری دیس ک ش ود ،ک ه ب ه ط ور ب القوه می توان د عملکرد و کارایی الگوریتم را تحت تاثیر قرار ده د .در این فص ل ،م ا ب ه پیچی دگی زمانی ،عمیق ت ر نگ اه خ واهیم ک رد .پیچی دگی فض ا در فص ل ،14الگ وریتم ه ای مقیاس بزرگ ،با جزئیات بیشتر م ورد بحث ق رار خواه د گ رفت ،ج ایی ک ه م ا ب ا 16 الگوریتم های توزیع شده در مقیاس بزرگ با نیازه ای حافظ ه زم ان اج را پیچی ده، سروکار خواهیم داشت. تحلیل پیچیدگی زمانی تجزیه و تحلیل پیچی دگی زم انی تخمین می زن د ک ه چق در ط ول می کش د ت ا ی ک الگوریتم ،کار تعیین شده خود را بر اساس ساختارش تکمیل کند .برخالف پیچیدگی فضا ،پیچیدگی زمانی به هیچ سخت اف زاری ک ه الگ وریتم روی آن اج را می ش ود، وابسته نیست .تحلیل پیچیدگی زمانی صرفا ً به ساختار خود الگ وریتم بس تگی دارد. هدف کلی تحلیل پیچیدگی زمانی تالش برای پاسخ به این دو سوال مهم اس ت :آی ا این الگوریتم مقیاس پذیر خواهد شد؟ یک الگوریتم خوب طراحی ش ده بای د ک امال ً قادر به استفاده از زیرساخت کشسان مدرن موج ود در محیط‌ه ای رای انش اب ری باشد .یک الگوریتم باید به گونه ای ط راحی ش ود ک ه بتوان د از در دس ترس ب ودن بیشتر ،CPUهسته های پردازشی GPU ،و حافظ ه اس تفاده کن د .ب ه عن وان مث ال، الگوریتمی که برای آموزش یک مدل در مسئله یادگیری ماشین اس تفاده می‌ش ود، باید بتواند از آموزش توزیع‌شده استفاده کند ،زیرا CPUبیشتری در دسترس است. چنین الگوریتمی باید از پردازنده‌های گرافیکی و حافظ ه اض افی ن یز بای د اس تفاده کند اگر در طول اجرای الگوریتم در دسترس باشند .این الگ وریتم چق در مجموع ه داده‌های بزرگ‌تر را مدیریت می‌کند؟ برای پاسخ به این س ؤاالت ،بای د ت أثیر آن ب ر عملکرد یک الگوریتم را به عنوان ان دازه تع یین ک نیم .داده ه ا اف زایش می یاب د و مطمئن شوید که الگوریتم به گونه ای طراحی شده است که نه تنها عملک رد آن را دقیق تر می کند ،بلکه به خوبی مقیاس بندی می کند .عملکرد ی ک الگ وریتم ب رای مجموع ه داده ه ای بزرگ تر در دنی ای ام روزی "کالن داده" روز ب ه روز اهمیت بیشتری پیدا می کند .در بسیاری از موارد ،ممکن اس ت بیش از ی ک رویک رد ب رای طراحی الگوریتم ،در دسترس داشته باشیم. هدف از انجام تجزیه و تحلیل پیچیدگی زمانی ،در این م ورد ،ب ه ش رح زی ر خواه د بود" :با توجه به یک مسئله معین و بیش از یک الگ وریتم ،ک دام ی ک از نظ ر ب ازده 17 زمانی کارآمدترین است؟" دو رویکرد اساسی برای محاس به پیچی دگی زم انی ی ک الگوریتم وجود دارد: ‏ یک رویکرد پروفایل پس از اجرا :در این رویکرد ،الگوریتم‌های نامزد مختل ف پیاده‌سازی شده و عملکرد آنها مقایسه می‌شود. ‏ یک رویکرد نظری پیش از پیاده سازی :در این رویکرد ،عملکرد هر الگ وریتم قبل از اجرای یک الگوریتم به صورت ریاضی تقریب زده می شود. مزیت رویکرد نظری این است که فقط به ساختار خود الگ وریتم بس تگی دارد .این رویکرد به سخت افزار واقعی که برای اجرای الگوریتم استفاده می ش ود ،انتخ اب پشته نرم افزار انتخاب شده در زمان اجرا یا زب ان برنام ه نویس ی م ورد اس تفاده برای اجرای الگوریتم بستگی ندارد. برآورد عملکرد عملکرد یک الگوریتم معمولی به نوع داده ای که ب ه عن وان ورودی ب ه آن داده می شود بستگی دارد .به عنوان مثال ،اگر داده ها از قبل ب ر اس اس زمین ه مس ئله ای که ما در تالش برای حل آن هستیم مرتب ش ده باش ند ،الگ وریتم ممکن اس ت ب ه ط رز چش مگیری س ریع عم ل کن د .اگ ر ورودی مرتب‌ش ده ب رای مح ک زدن این الگوریتم خاص استفاده شود ،آنگاه ی ک ع دد عملک رد غ یرواقعی خ وب ب ه دس ت می‌دهد که بازتاب واقعی عملکرد واقعی آن در اک ثر س ناریوها نخواه د ب ود .ب رای مدیریت این وابستگی الگوریتم‌ها به داده‌های ورودی ،ما انواع مختلفی از م وارد را در هنگام انجام تجزیه و تحلیل عملکرد در نظر داریم. بهترین مورد در بهترین حالت ،داده های داده شده به عنوان ورودی به گونه ای س ازماندهی می شوند که الگوریتم بهترین عملکرد خود را ارائه دهد .تجزیه و تحلیل به ترین ح الت، حد باالیی عملکرد را نشان می دهد. 18 بدترین حالت راه دوم برای تخمین عملکرد یک الگوریتم ،تالش برای ی افتن ح داکثر زم ان ممکن برای انجام کار تحت مجموعه ای از شرایط معین است .این تحلی ل ب دترین ح الت یک الگوریتم کامال ً مفید است زیرا ما تضمین می‌کنیم ک ه ص رف نظ ر از ش رایط، عملکرد الگوریتم همیشه بهتر از اعدادی است که از تجزی ه و تحلی ل م ا ب ه دس ت می‌آیند .تجزیه و تحلیل بدترین حالت به ویژه برای تخمین عملکرد هنگام برخورد ب ا مسائل پیچیده با مجموعه داده های بزرگتر مفید است. تحلیل بدترین حالت ،کران پایینی عملکرد الگوریتم را نشان می دهد. مورد متوسط این مورد با تقسیم ورودی ه ای مختل ف ممکن ب ه گ روه ه ای مختل ف ش روع می شود .سپس ،تجزیه و تحلی ل عملک رد را از یکی از ورودی ه ای نماین ده ه ر گ روه انجام می دهد .در نهایت ،میانگین عملکرد ه ر ی ک از گروه‌ه ا را محاس به می‌کن د. تجزیه و تحلیل میانگین موردی همیشه دقیق نیس ت ،زی را نی از ب ه در نظ ر گ رفتن تمام ترکیب‌های مختل ف و احتم االت ورودی ب ه الگ وریتم دارد ،ک ه انج ام این ک ار همیشه آسان نیست. انتخاب یک الگوریتم چگونه می دانید کدام راه حل بهتر است؟ چگونه می دانید کدام الگ وریتم س ریعتر اجرا می شود؟ تجزیه و تحلیل پیچیدگی زمانی یک الگ وریتم می توان د ب ه این ن وع سواالت پاسخ دهد .برای اینکه بفهمیم کجا می توان د مفی د باش د ،بیایی د ی ک مث ال ساده بیاوریم ک ه در آن ه دف م رتب ک ردن لیس تی از اع داد اس ت .دس ته ای از الگوریتم ها به راحتی در دسترس هستند که می توانند ک ار را انج ام دهن د .مس ئله این است که چگونه یک مورد مناسب را انتخ اب ک نیم .ابت دا ،مش اهده ای ک ه می توان انجام داد این است که اگر تعداد زی ادی در لیس ت وج ود نداش ته باش د ،مهم نیست که کدام الگوریتم را برای مرتب کردن لیست اعداد انتخ اب ک نیم .بن ابراین، 19 اگر فقط 10عدد در لیست وجود داش ته باش د ( ،)n=10پس ف رقی نمی کن د ک ه کدام الگوریتم را انتخاب کنیم ،زیرا احتماال ً حتی با یک الگوریتم بس یار س اده ،بیش از چند میکرو ثانیه طول نمی کش د .ام ا ب ا اف زایش ،nانتخ اب الگ وریتم مناس ب شروع به ایجاد تفاوت می کند .اجرای یک الگوریتم ضعیف ممکن است چند ساعت طول بکشد ،در حالی ک ه ی ک الگ وریتم خ وب ط راحی ش ده ممکن اس ت م رتب سازی لیست را در چند ثانیه تم ام کن د .بن ابراین ،ب رای مجموع ه داده‌ه ای ورودی بزرگ‌تر ،صرف زم ان و تالش ،انج ام تحلی ل عملک رد و انتخ اب الگ وریتم درس ت طراحی‌شده که کار مورد نیاز را به شیوه‌ای کارآمد انجام می‌دهد ،منطقی است. نماد Oبزرگ نماد Oبزرگ برای اولین بار توسط باخمن در سال 1894در ی ک مقال ه تحقیق اتی برای تقریب رشد الگوریتم معرفی شد .او نوشت ...« :ب ا نم اد م ا کمی تی را بیان می کنیم که مرتبه آن نسبت به nاز مرتبه nتجاوز نمی کند» (ب اخمن ،1894 ص .»)401برای توضیح نحوه استفاده از نماد Big-Oدو ت ابع را در نظ ر بگیری د، ) f(nو ) g(nتوابع هستند. و )= g(n به یک تابع خاص نگاه کنید= f(n) : .توجه داشته باشید که هر دو تابع با نزدیک شدن ب ه بی نه ایت ب ه بی نه ایت نزدی ک می ش وند. بیایید با اعمال تابع دریابیم که آیا ) f = O(gبرابر است یا خیر. ابتدا اجازه دهید 20 محاسبه شود که برابر خواهد بود واضح است که با نزدیک شدن nبه بی نهایت ،محدود اس ت و ب ه بی نه ایت نزدیک نمی ش ود .بن ابراین ) ( . ) (f(n) = O(g) = Oنش ان می ده د ک ه پیچیدگی این ت ابع ب ا مج ذور ورودی ه ای nاف زایش می یاب د .اگ ر تع داد عناص ر ورودی را دو برابر کنیم ،انتظار می رود پیچیدگی 4افزایش یابد .ب ه 5ق انون زی ر در هنگام کار با نماد Big-Oتوجه کنید. قانون :1اجازه دهی د ب ه پیچی دگی حلق ه ه ا در الگ وریتم ه ا نگ اه ک نیم .اگ ر ی ک الگوریتم دنبال ه خاص ی از مراح ل را nب ار انج ام ده د پس عملک رد آن می باشد. قانون :2اج ازه دهی د ب ه حلق ه ه ای تودرت وی الگ وریتم ه ا نگ اه ک نیم .اگ ر ی ک الگوریتم تابعی را انجام دهد که دارای یک حلقه از n1مرحله اس ت ،و ب رای حلق ه آن n2مرحله دیگر را انجام دهد ،عملکرد کل الگوریتم ) O(n1 × n2است .برای مثال اگر یک الگوریتم به عنوان حلقه های ب یرونی و داخلی دارای nمرحل ه باش د، پیچیدگی الگوریتم با ) (O(n*n) = Oبرابر است. قانون :3اگر یک الگ وریتم ت ابع ) f(nدر n1مرحل ه را انج ام ده د .و س پس ت ابع )g(nدیگری را در n2مرحل ه انج ام ده د ،عملک رد ک ل الگ وریتم ))O(f(n)+g(n است. 21 قانون :4اگر مرتبه یک الگوریتم )) O(g(n) + h(nباشد و تابع ( g )nبزرگتر از ( h )nبرای nهای بزرگ باشد ،عملک رد الگ وریتم را می ت وان ب ه ))O(g(nس اده کرد .به این معنی که )O(1+n) = O(nو ) = O ) (O( + 3 قانون :5هنگام محاسبه پیچیدگی یک الگوریتم ،مضرب ثابت را نادیده بگیری د .اگ ر kث ابت باش دO(kf(n)) ،هم ان ))O(f(nاس ت .همچ نین ))O(f(k × nهم ان ))O(f(nاست .بن ابراین ) (O(5 ) = Oو ) (O((3 )) = O.توج ه داش ته باشید که: پیچیدگی تعیین شده توسط نماد Oبزرگ فقط یک تخمین است. ب رای ان دازه کوچک تر داده ه ا ،م ا ب ه پیچی دگی زم انی اهمی تی نمی دهیم n0 .در گراف ،آستانه ای را که ما در باالی آن عالقه مند به یافتن پیچیدگی زم انی هس تیم، تعریف می کند .ناحیه سایه‌دار این ناحیه مورد عالق ه را توص یف می‌کن د ک ه در آن پیچیدگی زمانی را تحلیل خواهیم کرد. ی بیشتر از تابع اصلی است .ی ک انتخ اب خ وب از ) T(nس عی ) T(nپیچیدگی زمان ِ می کند یک کران باالیی محکم برای ) F(nایجاد کند. جدول زیر انواع مختلف نشانه گذاری Oبزرگ را که در این بخش مورد بحث قرار گرفته اند ،خالصه می کند: پیچیدگی مثال نام کالس اضافه کردن ،دریافت مورد ،تنظیم )O(1 ثابت )O(logn لگاریتمی )O(n خطی کپی ،درج ،حذف ،تکرار )O(nLogn خطی-لگاریتمی مرتب کردن لیست ،مرتب سازی مورد یافتن یک عنصر در یک آرایه مرتب شده ادغام 22 ) (O حلقه های تو در تو درجه دوم پیچیدگی زمان ثابت ().)O(1 اگر یک الگوریتم زم ان یکس انی ب رای اج را ،مس تقل از ان دازه داده ه ای ورودی، صرف کند گفته می شود که در زمان ثابت اجرا می شود و با )O(1نش ان داده می شود .اجازه دهید دسترسی به عنصر nام یک آرایه را مثال بزنیم. صرف نظر از اندازه آرایه ،دریافت نتایج به زمان ثابتی نیاز دارد .ب رای مث ال ،ت ابع زیر اولین عنصر آرایه را برمی گرداند و دارای پیچیدگی )O(1است: افزودن یک عنصر جدید به پشته با استفاده از pushیا حذف یک عنصر از پشته ب ا استفاده از .popصرف نظر از اندازه پشته ،اضافه کردن ی ا ح ذف ی ک عنص ر ب ه همان اندازه طول می کشد. دسترسی به عنصر ( hashtableهمانطور که در فص ل ،2س اختارهای داده م ورد استفاده در الگوریتم ها مورد بحث قرار می گیرد). مرتب سازی سطلی (همانطور که در فصل ،2ساختارهای داده م ورد اس تفاده در الگوریتم ها مورد بحث قرار می گیرد). 23 پیچیدگی زمان خطی ().)O(n گفته می شود که یک الگوریتم دارای پیچیدگی زمان خطی است که با ) O(nنش ان داده می شود ،اگر زمان اجرا مستقیما ً با اندازه ورودی متناس ب باش د .ی ک مث ال ساده اضافه کردن عناصر در یک ساختار داده تک بعدی است: به حلقه اصلی الگوریتم توجه کنید .تعداد تکرارها در حلقه اصلی با اف زایش مق دار nبه صورت خطی افزایش می‌یابد و پیچیدگی ) O(nرا در شکل زیر ایجاد می‌کند: 24 چند نمونه دیگر از عملیات آرایه به شرح زیر است: جستجوی یک عنصر یافتن حداقل مقدار در بین تمام عناصر یک آرایه پیچیدگی زمان درجه دوم (.)) (O به یک الگوریتم گفته می ش ود ک ه در زم ان درج ه دوم اج را می ش ود اگ ر زم ان اجرای یک الگوریتم با مجذور اندازه ورودی متناسب باشد .به عنوان مثال ،یک ت ابع ساده که عناصر یک آرایه دو بعدی را به صورت زیر جمع می کند: 25 به حلقه داخلی تو در تو در حلقه اصلی دیگر توجه کنید .این حلقه تو در تو پیچیدگی (O ) را به کد قبلی می دهد: مث ال دیگ ر الگ وریتم م رتب س ازی حب ابی اس ت (هم انطور ک ه در فص ل ،2 ساختارهای داده مورد استفاده در الگوریتم ها مورد بحث قرار خواهد گرفت). پیچیدگی زمان لگاریتمی ().)O(logn 26 به الگوریتمی گفته می شود که در زمان لگاریتمی اجرا می شود اگر زم ان اج رای الگوریتم متناسب با لگاریتم اندازه ورودی باشد .با هر تکرار ،ان دازه ورودی ب ا ی ک فاکتور چندگانه ث ابت ک اهش می یاب د .نمون ه ای از الگ وریتم لگ اریتمی جس تجوی دودویی اس ت .الگ وریتم جس تجوی دودویی ب رای ی افتن ی ک عنص ر خ اص در ی ک ساختار داده تک بعدی مانند لیست پایتون استفاده می شود .عناص ر درون س اختار داده باید به ترتیب نزولی مرتب شوند .الگوریتم جستجوی باینری در ت ابعی ب ه ن ام searchBinaryبه صورت زیر پیاده سازی می شود: حلقه اص لی از این واقعیت اس تفاده می کن د ک ه لیس ت م رتب ش ده اس ت .این لیست را با هر تکرار به نصف تقسیم می کند تا به نتیجه برسد :پس از تعریف تابع، برای جستجوی یک عنصر خاص در خط وط 11و 12آزم ایش می ش ود .الگ وریتم جستجوی دودویی در فصل ،3الگوریتم های مرتب س ازی و جس تجو بیش تر م ورد بحث قرار می گیرد .توجه داش ته باش ید ک ه از بین چه ار ن وع نم اد Oب زرگ ارائ ه 27 شده ) (O ،بدترین عملکرد و ) O(lognبهترین عملکرد را دارد .در واقع ،عملک رد ) O(lognرا می توان به عنوان استاندارد طالیی برای عملکرد هر الگوریتم در نظر گرفت (که البته همیشه به دست نمی آی د) .از ط رف دیگ ر) (O ،ب ه ب دی ) (O نیست ،اما با این وج ود ،الگ وریتم ه ایی ک ه در این کالس ق رار می گیرن د را نمی توان روی داده های بزرگ استفاده کرد زیرا پیچیدگی زمانی مح دودیت ه ایی را در مورد اینکه چه مقدار داده می توانند به طور واقعی پردازش کنن د ،ایج اد می کن د. یکی از راه‌های کاهش پیچیدگی یک الگ وریتم ،ب ه خط ر ان داختن دقت آن و تولی د نوعی الگوریتم به نام الگوریتم تقریبی است. اعتبار سنجی یک الگوریتم اعتبارسنجی یک الگوریتم تأیید می کند که در واقع یک راه حل ریاضی برای مس ئله ای که ما سعی در حل آن داریم ،ارائه می دهد .یک فرآیند اعتبار سنجی بای د نت ایج را برای هر چه بیشتر مقادیر ممکن و انواع مقادیر ورودی بررسی کند. الگوریتم های دقیق ،تقریبی و تصادفی اعتبار سنجی یک الگوریتم همچنین به نوع الگوریتم بس تگی دارد زی را تکنی ک ه ای آزمایش متفاوت است .بیایید ابتدا بین الگوریتم‌های قطعی و تصادفی تف اوت قائ ل شویم .برای الگوریتم‌های قطعی ،یک ورودی خاص همیشه دقیقا هم ان خ روجی را تولی د می‌کن د .ام ا ب رای کالس ه ای خاص ی از الگ وریتم ه ا ،دنبال ه ای از اع داد تصادفی نیز به عنوان ورودی در نظر گرفته می شود که هر بار ک ه الگ وریتم اج را می شود ،خروجی متفاوت می شود .الگوریتم خوشه‌بندی ،kmeansک ه در فص ل ،6الگوریتم‌های یادگیری ماشین بدون نظارت به تفصیل توض یح داده ش ده اس ت، نمونه‌ای از چنین الگوریتمی است: 28 شکل :2-1الگوریتم های قطعی و تصادفی همچنین الگوریتم‌ها را می‌توان بر اساس فرضیات یا تقریبی ک ه ب رای ساده‌س ازی منطق برای اجرای سریع‌تر آنها به کار می‌رود ،به دو نوع زیر تقسیم کرد: ‏ الگ وریتم دقی ق :انتظ ار می‌رود الگوریتم‌ه ای دقی ق ب دون ارائ ه هیچ گون ه فرضی یا تقریبی ،راه‌حل دقیقی را ارائه دهند. ‏ یک الگوریتم تقریبی :زمانی که پیچیدگی مسئله ب رای من ابع داده ش ده بیش از حد است ،م ا ب ا ایج اد ب رخی فرض یات مس ئله خ ود را س اده می ک نیم. الگوریتم‌های مبتنی بر این ساده‌س ازی‌ها ی ا فرض یات ،الگوریتم‌ه ای تقری بی نامیده می‌شوند ،که کامال ً راه‌حل دقیقی را به م ا نمی‌ده د .بیایی د ب ه مث الی نگاه کنیم تا تفاوت بین الگوریتم‌های دقی ق و تقری بی را درک ک نیم -مس ئله معروف فروشنده دوره گرد ،که در سال 1930ارائه شد .یک فروشنده دوره گرد شما را به چالش می کشد تا کوتاه ترین مسیر را برای فروشنده خاصی که از هر شهر بازدید می کند (از لیستی از شهرها) پیدا کنید و سپس به مبدأ باز می گردد ،به همین دلیل است که او را فروش نده دوره گ رد نامی ده ان د. اولین تالش برای ارائه راه حل ش امل تولی د هم ه جایگش ت ه ای ش هرها و انتخ اب ترکی بی از ش هرها اس ت ک ه ارزان ت رین باش د .ب دیهی اس ت ک ه پیچی دگی زم انی بیش از 30ش هر غیرقاب ل م دیریت می ش ود .اگ ر تع داد شهرها بیش از 30ش هر باش د ،یکی از راه ه ای ک اهش پیچی دگی ،مع رفی 29 ب رخی تق ریب ه ا و فرض یات اس ت .ب رای الگ وریتم ه ای تقری بی ،تع یین انتظ ارات ب رای آن مهم اس ت .دقت در هنگ ام جم ع آوری نیازمن دیهای اعتبارسنجی یک الگوریتم تقریبی ،در مورد تأیید این است که خطای نتایج در محدوده قابل قبولی است. توضیح پذیری هنگامی ک ه الگوریتم‌ه ا ب رای م وارد بح رانی اس تفاده می‌ش وند ،داش تن توان ایی توضیح دلیل پشت هر نتیجه در هر زمان که نیاز باشد ،مهم می‌شود .این امر ب رای اطمینان از اینکه تصمیمات مبت نی ب ر نت ایج الگوریتم‌ه ا ،س وگیری ایج اد نمی‌کنن د ض روری اس ت .توان ایی شناس ایی دقی ق ویژگی‌ه ایی ک ه به‌ط ور مس تقیم ی ا غیرمس تقیم ب رای ارائ ه ی ک تص میم خ اص اس تفاده می‌ش وند ،توض یح‌پذیری ی ک الگ وریتم نامی ده می‌ش ود .الگ وریتم ه ا ،زم انی ک ه ب رای م وارد اس تفاده حی اتی استفاده می شوند ،بای د از نظ ر س وگیری و پیش داوری ارزی ابی ش وند .تجزی ه و تحلی ل اخالقی الگوریتم‌ه ا ب ه بخش ی اس تاندارد از فرآین د اعتبارس نجی ب رای الگوریتم‌هایی تبدیل شده است که می‌توانند بر تصمیم‌گیری مرتبط با زندگی اف راد تأثیر بگذارند .برای الگوریتم‌هایی که با یادگیری عمیق سروکار دارن د ،دس تیابی ب ه توضیح‌پذیری دشوار است .به عنوان مثال ،اگ ر از الگ وریتمی ب رای رد درخواس ت وام مسکن یک شخص استفاده شود ،داشتن شفافیت و توانایی توض یح دلی ل ،مهم است .توضیح پذیری الگوریتمی ،یک حوزه فع ال تحقی ق اس ت .یکی از تکنیک‌ه ای مؤثری که اخیرا ً توسعه یافته است ،تبیین‌های مدل قابل تفسیر محلی-آگنوس تیک ( )LIMEاست ،همانطور که در مجموعه مقاالت بیس ت و دومین انجمن ماش ین‌های محاسباتی ( )ACMدر کنفرانس بین‌المللی گروه عالقه‌مند وی ژه در کش ف دانش و داده کاوی در سال )SIGKDD( 2016پیشنهاد شد LIME .مبتنی بر مفهومی است که در آن تغییرات کوچکی در ورودی برای هر نمونه ایجاد می شود و سپس تالشی برای ترسیم مرز تصمیم گیری محلی ب رای آن نمون ه انج ام می ش ود .س پس می تواند تأثیر هر متغیر را برای آن نمونه محاسبه کند. 30 خالصه این فصل در مورد یادگیری اصول الگوریتم ها بود .ابتدا ب ا مراح ل مختل ف توس عه یک الگوریتم آشنا شدیم .ما در مورد راه های مختلف تعیین منطق یک الگوریتم ک ه برای طراحی آن ضروری است بحث کردیم .سپس نحوه ط راحی ی ک الگ وریتم را بررسی کردیم .ما دو روش مختلف برای تجزیه و تحلیل عملکرد یک الگوریتم را یاد گرفتیم .در نهایت ،جنبه‌های مختلف اعتبارس نجی ی ک الگ وریتم را مطالع ه ک ردیم. پس از گذراندن این فصل ،باید بتوانیم شبه کد یک الگ وریتم را درک ک نیم .م ا بای د مراحل مختلف توسعه و استقرار یک الگوریتم را درک کنیم .ما همچنین یاد گرف تیم که چگونه از نماد Oبزرگ برای ارزیابی عملکرد یک الگوریتم استفاده ک نیم .فص ل بعدی در مورد ساختارهای داده مورد استفاده در الگوریتم ها است .ما با نگاهی ب ه ساختارهای داده موجود در پایتون شروع خواهیم کرد .سپس بررسی خ واهیم ک رد که چگونه می‌توانیم از این ساختارهای داده برای ایج اد س اختارهای داده پیچی ده‌تر مانند پشته‌ها ،صف‌ها و درختان استفاده کنیم که برای توسعه الگوریتم‌ه ای پیچی ده مورد نیاز هستند. 2ساختار داده های مورد استفاده در الگوریتم ها 31 الگوریتم‌ها به ساختارهای داده درون حافظه‌ای نیاز دارند که بتوانند داده‌های موقت را در حین اجرا نگه دارند .انتخاب ساختارهای داده مناسب برای اجرای کارآمد آنه ا ضروری است. کالس های خاصی از الگوریتم ها در منطق بازگشتی یا تک رار ش ونده هس تند و ب ه ساختارهای داده ای نیاز دارند که به طور ویژه برای آنها طراحی شده باش د .ب رای مثال ،اگر از ساختارهای داده تودرتو استفاده شود ،ی ک الگ وریتم بازگش تی ممکن است راحت‌تر پیاده‌سازی شود و عملکرد بهتری از خود نش ان ده د .در این فص ل، ساختار داده ها در زمینه الگوریتم ها مورد بحث قرار می گیرد .از آنجایی که م ا در این کتاب از Pythonاستفاده می کنیم ،این فصل بر روی ساختارهای داده پ ایتون تمرکز دارد ،اما مفاهیم ارائ ه ش ده در این فص ل را می ت وان در زب ان ه ای دیگ ر مانند Javaو C++استفاده کرد .در پایان این فصل ،شما باید بتوانید درک کنید ک ه چگونه پایتون ساختارهای داده پیچیده ای را مدیریت می کند و کدام یک بای د ب رای نوع خاصی از داده استفاده ش ود .از این رو ،در اینج ا نک ات اص لی م ورد بحث در این فصل آمده است: ‏ کاوش انواع داده های داخلی پایتون ‏ استفاده از سری و دیتا فریم ‏ بررسی ماتریس ها و عملیات ماتریس ‏ آشنایی با انواع داده های انتزاعی ()ADT کاوش انواع داده های داخلی پایتون در ه ر زب انی ،از س اختارهای داده ب رای ذخ یره و دس تکاری داده ه ای مجموع ه استفاده می شود .در پایتون ،س اختارهای داده محفظ ه ه ای ذخ یره س ازی ب رای مدیریت ،سازماندهی و جستجوی داده ها به روشی کارآمد هستند .آنها برای ذخیره گروهی از عناصر داده به نام مجموعه ها استفاده می شوند که باید با هم ذخ یره و پ ردازش ش وند .در پ ایتون ،س اختارهای داده مهمی ک ه می ت وان ب رای ذخ یره مجموعه ها استفاده کرد در جدول 2-1خالصه شده است: 32 ساختار داده لیستها تاپل مثال توضیح خالصه یک توالی منظم ،تو در تو و قابل ["John", 33,"Toronto", تغییر از عناصر. ]True یک توالی غیرقابل تغییر منظم از (' عناصر ‏Red','Green','Blue','Yel )'low دیکشنری مجموعه مجموعه ای نامرتب از جفت های {' food': 'spam', 'taste': کلید-مقدار }''yum مجموعه ای نامرتب از عناصر {'}'a', 'b', 'c جدول :1-2ساختارهای داده پایتون اجازه دهید در بخش‌های فرعی با جزئیات بیشتر به آنها نگاه کنیم. لیست ها در پایتون ،لیست ،نوع اص لی داده ای اس ت ک ه ب رای ذخ یره ی ک دنبال ه متغ یر از عناصر استفاده می شود .توالی عناصر ذخیره شده در لیست می تواند از یک ن وع نباشد .یک لیست را می توان با محصور کردن عناصر در [ ] تعریف کرد و آنها بای د با کاما از هم جدا شوند .به عنوان مثال ،کد زیر چهار عنصر داده را با هم ایجاد می کند که انواع مختلفی دارند: ]>>> list_a = ["John", 33,"Toronto", True )>>> print(list_a ]['John', 33, 'Toronto', True در پایتون ،لیست روشی مفید برای ایجاد ساختارهای داده قاب ل نوش تن ی ک بع دی است که به ویژه در مراحل مختلف داخلی الگوریتم ها مورد نیاز است. 33 استفاده از لیست ها توابع سودمند در ساختارهای داده ،آنها را بسیار مفید می کند زیرا می توان از آنه ا برای مدیریت داده ها در لیست ها استفاده کرد .بیایید ببی نیم چگون ه می ت وانیم از آنها استفاده کنیم: شاخص سازی لیست :از آنجایی ک ه م وقعیت ی ک عنص ر در ی ک لیس ت تع یین کنن ده اس ت ،از ش اخص می ت وان ب رای دری افت عنص ر در ی ک م وقعیت خ اص استفاده کرد .کد زیر مفهوم را نشان می دهد: ]'>>> bin_colors=['Red','Green','Blue','Yellow ]>>> bin_colors[1 ''Green لیست چهار عنصری ایجاد شده توسط این کد در شکل 1-2نشان داده شده است: شکل :1-2یک لیست چهار عنصری در پایتون 34 توجه داشته باشید که در پ ایتون ی ک زب ان ش اخص س ازی ص فر اس ت .این ب دان معناست که ش اخص اولی ه ه ر س اختار داده ،از جمل ه لیس ت‌ها 0 ،خواه د ب ود .و "سبز" که دومین عنصر است ،با شاخص ،1یعنی [ bin_color ]1بازیابی می‌شود. برش لیست :بازیابی زیرمجموعه‌ای از عناصر یک لیست با تعیین محدوده ای از شاخص ها را برش می گویند .کد زیر را می توان برای ایج اد ی ک ب رش از لیس ت استفاده کرد: ]'>>> bin_colors=['Red','Green','Blue','Yellow ]>>> bin_colors[0:2 ]'['Red', 'Green توجه داشته باشید که لیست ها یکی از محبوب ترین ساختارهای داده تک بع دی در پایتون هستند. هنگام برش یک لیس ت ،مح دوده ب ه ص ورت زی ر نش ان داده می ش ود :ع دد اول (شامل) و عدد دوم (غیرشامل) .به عنوان مثال bin_colors ]0:2[ ،شامل []0 bin_colorو [ bin_color ]1خواه د ب ود ام ا [ bin_color ]2نیس ت .در هنگام استفاده از لیست ها ،این را باید در نظر داشت زیرا برخی از ک اربران زب ان پایتون شکایت دارند که این کار خیلی شهودی نیست. بیایید به قطعه کد زیر نگاهی بیندازیم: ]'>>> bin_colors=['Red','Green','Blue','Yellow ]>>> bin_colors[2: ]'['Blue', 'Yellow ]>>> bin_colors[:2 ]'['Red', 'Green 35 اگر شاخص ش روع ،مش خص نش ده باش د ب ه معن ای ابت دای لیس ت اس ت و اگ ر شاخص پایانی ،مشخص نشده باشد به معنای انتهای لیست است ،هم انطور ک ه در کد قبلی نشان داده شده است. شاخص سازی منفی :در پایتون نیز منفی داریم .شاخص هایی که از انته ای لیس ت به حساب می آیند .این قضیه در کد زیر نشان داده شده است: ]'>>> bin_colors=['Red','Green','Blue','Yellow ]>>> bin_colors[:-1 ]'['Red', 'Green', 'Blue ]>>> bin_colors[:-2 ]'['Red', 'Green ]>>> bin_colors[-2:-1 ]'['Blue توجه داشته باشید که شاخص های منفی به ویژه زمانی مفید هستند که بخواهیم از آخرین عنصر به عنوان نقطه مرجع به جای اولین عنصر استفاده کنیم. تودرتو :یک عنصر از یک لیست می تواند از هر نوع داده ای باشد. این امر ،امکان تودرتو بودن در لیس ت ه ا را ف راهم می کن د .ب رای الگوریتم‌ه ای تکراری و بازگشتی ،این کار قابلیت‌های مهمی را ارائه می‌کند. ]>>> a = [1,2,[100,200,300],6 )]>>> max(a[2 300 ]>>> a[2][1 200 36 تکرار :پایتون با استفاده از حلقه forاجازه می دهد تا روی هر عنص ر در لیس ت حلقه ایجاد شود .این قضیه در مثال زیر نشان داده شده است: ]'>>> bin_colors=['Red','Green','Blue','Yellow >>> for this_color in bin_colors: )”print(f”{this_color} Square ‏Red Square ‏Green Square ‏Blue Square ‏Yellow Square توجه داشته باشید که کد قبلی در لیست تکرار می شود و هر عنصر را چاپ می کند. تابع range تابع rangeمی تواند برای تولید آسان لیست بزرگی از اعداد استفاده ش ود .ب رای پر کردن خودکار ت والی اع داد در ی ک لیس ت اس تفاده می ش ود .اس تفاده از ت ابع rangeساده است .ما می توانیم فقط با تعیین تعداد عناصر مورد نظر در لیس ت از آن اس تفاده ک نیم .ب ه ط ور پیش ف رض ،از ص فر ش روع می ش ود و یکی یکی افزایش می یابد: )>>> x = range(6 >>> x ][0,1,2,3,4,5 همچنین می توانیم شماره پایان و مقدار افزایش را مشخص کنیم: 37 )>>> odd_num = range(3,29,2 >>> odd_num ][3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27 تابع rangeقبلی اعداد فرد را از 3تا 29به ما می دهد. پیچیدگی زمانی لیست ها پیچیدگی زمانی توابع مختلف یک لیست را می توان با استفاده از نم اد Oب زرگ ب ه صورت زیر خالصه کرد: پیچیدگی زمانی متدهای مختلف ‏ درج یک عنصر )O(1 ‏ حذف یک عنصر )( O(nدر بدترین حالت ممکن است کل لیست تکرار شود) ‏ برش یک لیست )O(n ‏ بازیابی عنصر )O(n ‏ کپی )O(n لطفا ً توجه داشته باشید که زمان صرف شده برای اف زودن ی ک عنص ر مس تقل از اندازه لیست است .سایر عملیات ذک ر ش ده در ج دول ب ه ان دازه لیس ت بس تگی دارد .با بزرگتر شدن اندازه لیست ،تأثیر آن بر عملکرد بیشتر می شود. تاپل ها دومین ساختار داده ای که می توان برای ذخیره یک مجموعه استفاده کرد یک تاپل است .بر خالف لیست ها ،تاپل ها ساختارهای داده غیرقابل تغییر (فق ط خوان دنی) هستند .تاپل ها از چندین عنصر احاطه شده توسط ()تشکیل شده اند. مانند لیست ها ،عناصر داخل یک تاپل می توانند ان واع مختلفی داش ته باش ند .آنه ا همچنین انواع داده های مجموعه را ب رای عناص ر خ ود اج ازه می دهن د .بن ابراین، 38 می‌تواند یک تاپل در یک تاپل وجود داشته باش د ک ه راهی ب رای ایج اد ی ک س اختار داده تودرتو ف راهم می‌کن د .ق ابلیت ایج اد س اختارهای داده ت و در ت و ب ه وی ژه در الگوریتم های تکراری و بازگشتی مفید است .کد زیر نحوه ایجاد تاپ ل ه ا را نش ان می دهد: )'>>> bin_colors=('Red','Green','Blue','Yellow ]>>> bin_colors[1 ''Green ]>>> bin_colors[2: )'('Blue', 'Yellow ]>>> bin_colors[:-1 )'('Red', 'Green', 'Blue # Nested Tuple Data structure )>>> a = (1,2,(100,200,300),6 )]>>> max(a[2 300 ]>>> a[2][1 200 تا ج ایی ک ه ممکن اس ت ،س اختارهای داده تغییرناپ ذیر (مانن د تاپ ل ه ا) ب ه دلی ل عملکرد ،باید بر ساختارهای داده قابل تغییر (مانند لیست ها) ترجیح داده شوند .ب ه خصوص هنگامی که با داده ه ای ب زرگ س روکار داریم ،س اختارهای داده غیرقاب ل تغییر به طور قابل توجهی س ریعتر از س اختارهای قاب ل تغی یر ،هس تند .وق تی ی ک ساختار داده به یک تابع به عنوان تغییرناپذیر ارسال می شود ،نیازی ب ه ایج اد ک پی آن نیس ت زی را ت ابع نمی توان د آن را تغی یر ده د .بن ابراین ،خ روجی می توان د ب ه ساختار داده ورودی اشاره داش ته باش د .این قض یه ش فافیت ارج اعی نامی ده می 39 شود و عملکرد را بهبود می بخشد .ما برای توانایی تغییر عناصر داده در لیست ها، هزینه ای می پردازیم و باید به دقت تجزیه و تحلیل کنیم که واقعا ً مورد نی از اس ت تا بتوانیم کد را به صورت تاپ ل ه ای فق ط خوان دنی پی اده س ازی ک نیم ک ه بس یار سریعتر خواهد بود. توجه داشته باشید که از آنجایی که پایتون یک زبان مبتنی بر شاخص صفر اس ت[ ، a ]2به عنصر سوم که یک تاپل اس ت ( )100,200,300اش اره دارد و [ a ]1ب ه عنصر دوم در این تاپل اشاره دارد که 200است. پیچیدگی زمانی تاپل ها پیچیدگی زمانی توابع مختلف تاپل ها را می ت وان ب ه ص ورت زی ر خالص ه ک رد (ب ا استفاده از نماد Oبزرگ): پیچیدگی زمان تابع )O(1 ‏Append توجه داشته باشید که Appendتابعی است که یک عنصر را به انتهای تاپ ل موج ود اضافه می کند .پیچیدگی آن ) O(1است. دیکشنری ها و مجموعه ه ا در این بخش م ورد بررس ی ق رار خواهن د گ رفت ک ه برای ذخیره داده هایی استفاده می شود که ترتیب صریح یا ضمنی وجود ندارد .هم دیکشنری و هم مجموعه ها کامال شبیه هم هستند .تفاوت این اس ت ک ه دیکش نری دارای ی ک جفت کلی د و ی ک مق دار اس ت .مجموع ه را می ت وان مجموع ه ای از کلیدهای منحصر به فرد در نظر گرفت .اجازه دهید آنها را یکی یکی بررسی کنیم دیکشنری +ها نگهداری داده ها به عنوان جفت کلید-مقدار به ویژه در الگ وریتم ه ای توزی ع ش ده مهم اس ت .در پ ایتون مجموع ه ای از این جفت ه ای کلی د-مق دار ب ه عن وان ی ک ساختار داده به نام دیکشنری ذخیره می شود .برای ایجاد یک فرهن گ لغت ،کلی دی باید به عنوان ویژگی انتخاب شود که برای شناسایی داده ها در طول پردازش داده 40 ها مناسب باشد .محدودیت در مق دار کلی دها این اس ت ک ه بای د ان واع قاب ل هش باشند .قابل هش نوعی از اشیاء است که می‌ت وانیم ت ابع هش را اج را ک نیم و ک د هشی تولید می‌کند که در طول عمرش هرگز تغی یر نمی‌کن د .این ک ار تض مین می کند که کلیدها یکتا هستند و جستجوی کلید سریع است .انواع عددی و ان واع رش ته های غیرقابل تغییر مسطح همگی قابل هش هستند و انتخاب خوبی ب رای کلی دهای دیکشنری هستند .مقدار می تواند عنصری از هر ن وع باش د ،ب ه عن وان مث ال ،ی ک عدد یا رشته .پایتون همچنین همیشه از انواع داده های مجموعه مانند لیست ها ب ه عنوان مقادیر استفاده می کند .دیکشنری ه ای تودرت و را می ت وان ب ا اس تفاده از دیکشنری به عنوان نوع داده یک مقدار ،ایجاد کرد .برای ایجاد یک دیکش نری س اده که رنگ ها را به متغیرهای مختلف اختصاص می دهد ،جفت های کلید-مقدار باید در { } محصور شوند .به عنوان مثال ،کد زیر یک فرهنگ لغت س اده متش کل از س ه جفت کلید-مقدار ایجاد می کند: {= >>> bin_colors "manual_color": "Yellow", "approved_color": "Green", ""refused_color": "Red } )>>> print(bin_colors {'manual_color': 'Yellow', 'approved_color': 'Green', }''refused_color': 'Red سه جفت کلید-مقدار ایجاد شده توسط قطعه کد قبلی نیز در تصویر زیر نشان داده شده است: 41 شکل :2-2جفت های کلید-مقدار در یک دیکشنری ساده اکنون ،بیایید ببینیم که چگونه یک مقدار مرتبط با یک کلید را بازیابی و به روز کنیم: برای بازیابی یک مقدار مرتبط با یک کلید ،می توان از تابع getی ا کلی د ب ه عن وان شاخص استفاده کرد: )'>>> bin_colors.get('approved_color ''Green ]'>>> bin_colors['approved_color ''Green برای به روز رسانی یک مقدار مرتبط با یک کلید ،از کد زیر استفاده کنید: ">>> bin_colors['approved_color']="Purple )>>> print(bin_colors {'manual_color': 'Yellow', 'approved_color': 'Purple', }''refused_color': 'Red 42 توجه داشته باشید که کد قبلی نشان می‌دهد که چگونه می‌توانیم یک مقدار مربوط به یک کلید خاص را در دیکشنری به‌روزرسانی کنیم. مجموعه ها ارتباط نزدیک با دیکشنری ،مجموعه ای است که به عنوان مجموع ه ای ن امرتب از عناصر متمایز تعریف می شود که می توانن د ان واع مختلفی داش ته باش ند .یکی از راه های تعریف مجموعه ،محصور کردن مقادیر در {} است .ب ه عن وان مث ال ،ب ه بلوک کد زیر نگاه کنید: }'>>> green = {'grass', 'leaves )>>> print(green }'{'grass', 'leaves مشخصه تعیین کننده یک مجموعه این است که فق ط مق دار متم ایز ه ر عنص ر را ذخیره می کند .اگر بخواهیم عنصر اضافی دیگری اضافه کنیم ،همانطور که در زی ر نشان داده شده است ،آن را نادیده می‌گیرد: }'>>> green = {'grass', 'leaves','leaves )>>> print(green }'{'grass', 'leaves برای نشان دادن اینکه چه نوع عملی اتی را می ت وان روی مجموع ه ه ا انج ام داد، بیایید دو مجموعه را تعریف کنیم :مجموعه ای به نام زرد ،که دارای چیزهایی است که زرد هستند .مجموعه ای دیگر به نام قرمز ،که دارای چیزهایی هستند که قرم ز هستند توجه داشته باشید که برخی چیزها بین این دو مجموعه مش ترک اس ت .این دو مجموعه و رابطه آنها را می توان با کمک نمودار ون زیر نشان داد: 43 شکل :3-2نمودار ون که نشان می دهد چگونه عناصر در مجموعه ها ذخیره می شوند اگر بخواهیم این دو مجموعه را در پایتون پیاده سازی کنیم ،کد به شکل زیر خواهد بود: }'>>> yellow = {'dandelions', 'fire hydrant', 'leaves }'>>> red = {'fire hydrant', 'blood', 'rose', 'leaves حاال بیایید کد زیر را در نظر بگیریم که عملیات مجموعه را با استفاده از پایتون نشان می دهد: >>> yellow|red 44 {'dandelions', 'fire hydrant', 'blood', 'rose', }''leaves >>> yellow&red }’{'fire hydrant',’leaves همانطور که در قطعه کد قبلی نشان داده شده است ،مجموع ه ه ا در پ ایتون می توانند عملیاتی مانند اجتماع و اشتراک داش ته باش ند .هم انطور ک ه می دانیم ،ی ک عملیات اجتماع همه عناصر هر دو مجموعه را ت رکیب می کن د و عملی ات اش تراک مجموعه ای از عناصر مشترک بین دو مجموعه را به دست می آورد .به موارد زی ر توجه کنید :زرد|قرمز برای به دست آوردن اجتماع دو مجموع ه تعری ف ش ده قبلی استفاده می شود .زرد & قرمز برای اشتراک بین زرد و قرمز استفاده می شود. تجزیه و تحلیل پیچیدگی زمانی برای دیکشنری و مجموعه ها در زیر تجزیه و تحلیل پیچیدگی زمانی برای مجموعه ها آمده است: پیچیدگی مجموعه ها اضافه کردن یک عنصر )O(1 بازیابی یک عنصر )O(1 کپی )O(n نکته مهمی که در تحلیل پیچیدگی دیکشنری یا مجموعه ها باید به آن توجه ک رد این است که آنها از جداول هش برای دستیابی ب ه عملک رد ) O(1ب رای ه ر دو عنص ر اضافه و جستجو استفاده می کنند .بنابراین ،زم ان ص رف ش ده ب رای دری افت ی ا تنظیم یک کلید-مقدار کامال ً مستقل از اندازه دیکشنری یا مجموعه ها است. این به این دلیل است که در یک دیکشنری ،تابع هش کلیدها را به ی ک ع دد ص حیح نگاشت می کند که برای ذخیره جفت های کلید-مقدار استفاده می ش ود .کتابخان ه 45 pandasهوشمندانه از تابع هش برای تبدیل یک کلید دلخواه به شاخص ی ک دنبال ه استفاده می کند .این به این معنی است که زمان ص رف ش ده ب رای رس یدن ی ک جفت کلید-مقدار به یک دیکشنری با اندازه سه ،برابر ب ا زم ان الزم ب رای رس یدن یک جفت کلید-مقدار به یک دیکشنری ب ا ان دازه ی ک میلی ون اس ت .در مجموعه‌ه ا فقط کلیدها ،هش و ذخیره می‌شوند و در نتیجه پیچیدگی یکسانی ایجاد می‌شود. چه زمانی از دیکشنری و چه زمانی از مجموعه استفاده کنیم؟ اجازه دهید فرض کنیم که ما ب ه دنب ال ی ک س اختار داده ب رای دفترچ ه تلفن خ ود هستیم .ما می خواهیم شماره تلفن کارمندان یک شرکت را ذخیره کنیم .ب رای این منظور ،دیکشنری س اختار داده مناس بی اس ت .ن ام ه ر کارمن د کلی د و مق دار آن شماره تلفن خواهد بود { = phonebook "Ikrema Hamza": "555-555-5555", "Joyce Doston" : "212-555-5555", } اما اگر بخواهیم فقط مقدار منحصر به فرد کارکنان را ذخیره کنیم ،باید با استفاده از مجموعه ها انجام شود. { = employees "Ikrema Hamza", ""Joyce Doston } استفاده از سری و DataFramesProcessingداده ه ا ،یکی از کاره ای اص لی است که باید هنگام پیاده سازی اکثر الگوریتم ه ا انج ام ش ود .در پ ایتون پ ردازش 46 داده ها معموال ب ا اس تفاده از تواب ع مختل ف و س اختارهای داده کتابخان ه pandas انج ام می ش ود .در این بخش ،دو س اختار داده مهم زی ر را در کتابخان ه pandas بررسی خواهیم کرد که در ادامه این کتاب در پی اده س ازی الگ وریتم ه ای مختل ف مورد استفاده قرار خواهند گرفت .ابتدا به ساختار داده سری نگاهی می اندازیم. سری ها در کتابخانه pandas ، Seriesیک آرای ه ی ک بع دی از مق ادیر ب رای داده ه ای همگن است .ما می توانیم سری را به عنوان یک ستون در یک ص فحه گس ترده در نظر بگیریم .شما می توانید فک ر کنی د س ری دارای مق ادیر مختلفی از ی ک متغ یر خاص است .یک سری را می توان به صورت زیر تعریف کرد: توج ه داش ته باش ید ک ه در س اختارهای داده مبت نی ب ر س ری در ، pandasی ک اصطالح "محور" وجود دارد که ب رای نش ان دادن دنبال ه ای از مق ادیر در ی ک بع د خاص استفاده می شود .سری فق ط "مح ور "0دارد زی را فق ط ی ک بع د دارد .در بخش بعدی که یک ساختار داده دو بعدی است ،خواهیم دید ک ه چگون ه این مفه وم محور در DataFrameاعمال می شود. ‏DataFrame یک DataFrameب ر اس اس س اختار داده س ری س اخته ش ده اس ت و داده ه ای جدولی دو بعدی را ذخیره می کند. این س اختار یکی از مهم ت رین س اختارهای داده ب رای الگ وریتم ه ا اس ت و ب رای پردازش داده های ساخت یافته س نتی اس تفاده می ش ود .بیایی د ج دول زی ر را در نظر بگیریم: ‏id ‏Age ‏Name 47 ‏Decision 1 ‏Fares 32 ‏True 2 ‏Elena 23 ‏False 3 ‏Steven 40 ‏True اکن ون بیایی د این ج دول را ب ا اس تفاده از ی ک DataFrameنش ان دهیم .ی ک DataFrameساده را می توان با استفاده از کد زیر ایجاد کرد: >>> import pandas as pd [(>>> df = pd.DataFrame ... ['1', 'Fares', 32, True], ... ['2', 'Elena', 23, False], )]]... ['3', 'Steven', 40, True ]'>>> df.columns = ['id', 'name', 'age', 'decision >>> df ‏id name age decision 0 1 Fares 32 True 1 2 Elena 23 False 2 3 Steven 40 True توجه داشته باشید که در کد قبل df.column ،لیستی است ک ه ن ام س تون ه ا را مشخص می کند. در DataFrameبه یک ستون یا سطر ،یک محور می گویند. DataFrameهمچنین در سایر زبان ها و فریم ورک ه ای رایج ب رای پی اده س ازی ساختار داده ه ای ج دولی اس تفاده می ش ود .ب ه عن وان مث ال از Rو ف ریم ورک آپاچی اسپارک می توان نام برد. 48 ایجاد زیر مجموعه ای از DataFrame اساساً ،دو راه اصلی برای ایجاد زیرمجموعه DataFrameوجود دارد (مثال ً نام زیر مجموعه myDFاست): ‏ انتخاب ستون ‏ انتخاب سطر بیایید آنها را یکی یکی بررسی کنیم. انتخاب ستون در الگوریتم های یادگیری ماشین ،انتخاب مجموعه مناس ب از وی ژگی ه ا ی ک ک ار مهم است .از بین تمام ویژگی هایی ک ه ممکن اس ت داش ته باش یم ،ممکن اس ت همه آنها در مرحله خاصی از الگوریتم مورد نیاز نباشند .در پایتون ،انتخ اب وی ژگی با انتخاب ستون حاص ل می ش ود ک ه در این بخش توض یح داده ش ده اس ت .ی ک ستون ممکن است با نام بازیابی شود ،مانند شکل زیر: ]]'>>> df[['name','age ‏name age 0 Fares 32 1 Elena 23 2 Steven 40 موقعیت یک ستون در ی ک DataFrameقطعی اس ت .ی ک س تون را می ت وان ب ا موقعیت خود به صورت زیر بازیابی کرد: ]>>> df.iloc[:,3 0 True 1 False 2 True 49 توجه داشته باشید که در این کد ،تمام ردیف های DataFrameرا بازیابی می کنیم. انتخاب سطر هر سطر در یک DataFrameمربوط به یک نقطه داده در فضای مسئله ما اس ت. اگر بخواهیم زیرمجموعه ای از عناصر داده ای را که در فض ای مس ئله خ ود داریم ایجاد ک نیم ،بای د انتخ اب س طر را انج ام دهیم .این زی ر مجموع ه را می ت وان ب ا استفاده از یکی از دو روش زیر ایجاد کرد: ‏ با مشخص کردن جایگاه آنها ‏ با تعیین فیلتر زیر مجموعه ای از سطر ها را می توان با موقعیت آن به صورت زیر بازیابی کرد: >>> s ‏id name age decision 1 2 Elena 23 False 2 3 Steven 40 True توجه داشته باشید که کد قبلی سطر دوم و سوم به اضافه تمام ستون ها را ب رمی گرداند .از متد ilocمی توانیم استفاده کنیم که به ما امکان می دهد به عناصر ب ا شاخص عددی آنها دسترسی پیدا کنیم .برای ایجاد زیرمجموعه با تعیین فیل تر ،بای د از یک یا چند ستون برای تعریف شرط انتخاب استفاده کنیم .به عن وان مث ال ،زی ر مجموعه ای از عناصر داده را می توان با این متد انتخاب کرد ،به شرح زیر: ]>>> df[df.age>30 ‏id name age decision 0 1 Fares 32 True 2 3 Steven 40 True 50 ])>>> df[(df.age<35)&(df.decision==True ‏id name age decision 0 1 Fares 32 True توجه داشته باشید که این ک د زی ر مجموع ه ای از س طر ه ا را ایج اد می کن د ک ه شرایط تعیین شده در فیلتر را برآورده می کند. ماتریس ها ماتریس یک ساختار داده دو بعدی با تعداد ثابت ستون و سطر است .هر عنصر یک ماتریس را می توان با ستون و سطر آن ارجاع داد .در پایتون ،همانطور ک ه در ک د زیر نشان داده شده است ،می توان با اس تفاده از array numpyی ک م اتریس ایجاد کرد: >>> myMatrix = np.array([[11, 12, 13], [21, 22, 23], )]][31, 32, 33 )>>> print(myMatrix ][[11 12 13 ][21 22 23 ]][31 32 33 ))>>> print(type(myMatrix >’<class ‘numpy.ndarray توجه داشته باشید که کد قبلی ماتریسی ایجاد می کند که دارای سه ردیف و سه ستون است. عملیات ماتریسی 51 عملیات های زیادی ب رای دس تکاری داده ه ای ماتریس ی وج ود دارد .ب رای مث ال، بیایید سعی کنیم ماتریس قبلی را جابه‌جا کنیم .ما از تابع () transposeاس تفاده می کنیم که ستون ها را به سطر و سطر ها را به ستون تبدیل می کند: )(>>> myMatrix.transpose ‏array([[11, 21, 31], [12, 22, 32], )]][13, 23, 33 توجه داشته باشید که عملیات ماتریس در دستکاری داده های چندرسانه ای بس یار استفاده می شود .اکنون که در مورد س اختارهای داده در پ ایتون آموخ تیم ،اج ازه دهید در بخش بعدی به سراغ انواع داده های انتزاعی برویم. کاوش انواع داده های انتزاعی انواع داده های انتزاعی (، )ADTانتزاعات سطح باالیی هستند که رفتار آنه ا توس ط مجموعه ای از متغیرها و مجموعه ای از عملیات مرتبط تعریف می ش ود ADT .ه ا راهنمای پیاده سازی «آنچه» را که باید انتظار داش ت را تعری ف می کنن د ،ام ا ب ه برنامه نویس آزادی می دهند که «چگونه» دقیقا ً پیاده سازی شود .به عن وان مث ال از بردارها ،صف ها و پشته ها می توان نام برد .این ب دان معناس ت ک ه دو برنام ه نویس مختلف می توانند دو رویکرد متفاوت را برای پی اده س ازی ی ک پش ته مانن د ADTاتخاذ کنند .با پنه ان ک ردن جزئی ات س طح پی اده س ازی و دادن س اختار داده عمومی و مستقل از پیاده سازی ،استفاده از ADTها ،الگوریتم هایی ایجاد می کند که منجر به کد ساده تر و تمیزتر می شود. ADTها را می توان در هر زبان برنامه نویسی مانن د C++، Javaو Scalaپی اده سازی کرد .در این بخش ADT ،ها را با استفاده از پایتون پیاده سازی خواهیم ک رد. ابتدا با بردارها شروع می کنیم. 52 بردار بردار یک ساختار تک بعدی برای ذخ یره داده ه ا اس ت .آنه ا یکی از محب وب ت رین ساختارهای داده در پایتون هستند .دو راه برای ایجاد بردار در پایتون ب ه ش رح زی ر وجود دارد: ‏ استفاده از لیست پایتون :ساده ترین راه برای ایجاد بردار استفاده از لیست پایتون به شرح زیر است: ]>>> myVector = [22,33,44,55 )>>> print(myVector ][22 33 44 55 ))>>> print(type(myVector >'<class 'list توجه داشته باشید که این کد یک لیست با چهار عنصر ایجاد می کند. ‏ استفاده از یک آرایه :numpyیکی دیگر از روش های محبوب برای ایجاد یک بردار استفاده از آرایه های NumPyبه شرح زیر است: )]>>> myVector = np.array([22,33,44,55 )>>> print(myVector ][22 33 44 55 ))>>> print(type(myVector >'<class 'numpy.ndarray توجه داشته باشید که ما myVectorرا با استفاده از np.arrayدر این کد ایج اد کردیم. 53 در پایتون ،می‌توانیم اعداد صحیح را با استفاده از زیرخط برای جداس ازی قطع ات نمایش دهیم .آنها را خواناتر و کمتر مستعد خط ا می کن د .این ب ه وی ژه در هنگ ام برخورد با اعداد زیاد مفید است .بنابراین ،یک میلیارد را می توان به ص ورت _a=1 000_000_000نشان داد. پشته ها پشته یک ساختار داده خطی برای ذخیره یک لیست تک بعدی است .پشته می تواند موارد را به صورت ) Last-In، First-Out (LIFOی ا First-In، Last- )(FILO ‏Outذخیره کند .مشخصه تعیین کننده یک پشته ،نحوه افزودن و حذف عناصر از آن است .یک عنصر جدید در یک انتها اضافه می شود و یک عنص ر فق ط از انتها حذف می شود .عملیات مربوط به پشته ها در زیر آمده است: ‏ :isEmptyاگر پشته خالی باشد trueرا برمی گرداند ‏ :pushیک عنصر جدید اضافه می کند ‏ :popعنصر اضافه شده اخیر را برمی گرداند و آن را حذف می کند ش کل 4-2نش ان می ده د ک ه چگون ه می ت وان از عملی ات pushو popب رای افزودن و حذف داده ها از پشته استفاده کرد: 54 عکس :4-2عملیات Pushو pop قسمت باالی شکل 4-2استفاده از عملیات Pushبرای افزودن موارد به پش ته را نشان می دهد .در مراحل 1.2 ،1.1و ،1.3عملیات Pushسه ب ار ب رای اف زودن سه عنصر به پشته استفاده می ش ود .قس مت پ ایینی نم ودار قبلی ب رای بازی ابی مقادیر ذخ یره ش ده از پش ته اس تفاده می ش ود .در مراح ل 2.2و ،2.3عملی ات popبرای بازیابی دو عنصر از پشته در قالب LIFOاس تفاده می ش ود .بیایی د ی ک کالس به نام Stackدر پایتون ایجاد کنیم ،جایی که تمام عملیات مرب وط ب ه کالس پشته را تعریف می کنیم .کد این کالس به صورت زیر خواهد بود: ‏class Stack: ‏def __init__(self): ][ = self.items ‏def isEmpty(self): ][ == return self.items 55 def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def peek(self): return self.items[len(self.items)-1] def size(self): return len(self.items) : می توان از کد زیر استفاده کرد،برای اضافه کردن چهار عنصر به پشته 56 توجه داشته باشید که کد قبلی یک پشته با چهار عنصر داده ایجاد می کند. پیچیدگی زمانی پشته ها بیایید به پیچیدگی زمانی پشته ها (با استفاده از نماد Oبزرگ) نگاه کنیم: پیچیدگی زمانی عملیات ‏push )O(1 ‏pop )O(1 57 (sizeاندازه) )O(1 ‏peek )O(1 نکته مهمی ک ه بای د ب ه آن توج ه داش ت این اس ت ک ه عملک رد هیچ ی ک از چه ار عملیات ذکر شده در جدول قبل به اندازه پشته بستگی ندارد. مثال عملی پشته به عنوان ساختار داده در بسیاری از موارد استفاده می شود .به عنوان مثال، زمانی که کاربر می خواهد تاریخچه را در یک مرورگر وب مرور کند ،این یک الگوی دسترسی به داده های LIFOاست و می توان از ی ک پش ته ب رای ذخ یره تاریخچ ه استفاده کرد .مثال دیگر زمانی است که کاربر می خواهد عملیات Undoرا در نرم افزار wordانجام دهد. صف ها مانند پشته ها ،یک صف nعنصر را در یک ساختار تک بعدی ذخیره می کند .عناصر در قالب FIFOاضافه و حذف می شوند .یک سر صف را انتها و س ر دیگ ر را ابت دا می گویند .هنگامی ک ه عناص ر از ابت دا ح ذف می ش وند ،این عملی ات Dequeue نامیده می شود .هنگامی که عناصر در انتها اضافه می ش وند ،عملی ات enqueue نامیده می شود .در نمودار زیر ،قس مت ب االیی عملی ات ص ف را نش ان می ده د. مراحل 1.2 ،1.1و 1.3سه عنصر را به صف اض افه می کنن د و ص ف حاص ل در 1.4نشان داده شده است .توجه داشته باشید که رنگ زرد در انتها و قرمز در ابتدا است .قسمت پایین نمودار زیر یک عملیات Dequeueرا نشان می ده د .مراح ل ،2.3 ،2.2و 2.4عناصر را یکی یکی از ابتدای صف حذف می کند: 58 عملیات اضافه و حذف در صف:5-2 شکل صف نشان داده شده در نمودار قبل را می توان با استفاده از کد زیر پیاده سازی :کرد class Queue(object): def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def enqueue(self, item): self.items.insert(0,item) def dequeue(self): return self.items.pop() def size(self): return len(self.items) 59 بیایید با کمک تصویر زیر ،عناصر را همانطور ک ه در نم ودار قب ل نش ان داده ش ده است ،اضافه و حذف کنیم: 60 توجه داشته باشید که کد قبلی ابتدا یک صف ایجاد می کند و سپس چهار عنصر را به آن اضافه می کند. ایده اصلی برای استفاده از پشته ها و صف ها ی استفاده از پشته ها و صف ه ا ب ا اس تفاده از ی ک قی اس نگ اه بیایید به ایده اصل ِ ک نیم .بیایی د ف رض ک نیم ج دولی داریم ک ه در آن نام ه ه ای دری افتی خ ود را از سرویس پستی قرار می دهیم ،به عنوان مث ال ،پس ت کان ادا .آنه ا را روی هم می چینیم تا زمانی که باز کنیم و نامه ها را یکی یکی نگاه کنیم .دو راه برای انج ام این کار وجود دارد :ما نامه را در یک پشته قرار می دهیم و هر زمان که یک نامه جدی د دریافت می کنیم ،آن را در باالی پشته قرار می دهیم .وقتی می‌خ واهیم ن امه‌ای را بخوانیم ،با نامه ای که در باال است شروع می‌کنیم .این همان چیزی است که ما به آن پشته می گوییم .توجه داشته باشید که آخرین نامه ای که می رسد در باال ق رار می گیرد و ابتدا پردازش می شود .برداشتن یک نامه از باالی لیست ،عملی ات پ اپ نامیده می شود .هر وقت نامه جدی دی می رس د ،در ب اال ق رار می گ یرد و ب ه این عمل،عملیات pushمی گویند .اگر در نهایت یک پشته قابل توجه داش ته باش یم و نامه های زیادی به طور مداوم وارد شوند ،این احتمال وجود دارد که هرگز فرصتی برای رسیدن به یک نامه بسیار مهم در انتهای پشته نداشته باشیم .ام ا می‌خ واهیم ابتدا قدیمی‌ترین نامه را مدیریت کنیم :هر بار که می‌خواهیم به یک یا چند نامه نگاه کنیم ،ابتدا قدیمی‌ترین نامه را مدیریت می‌کنیم .این همان چیزی است که ما به آن صف می گوییم .افزودن یک نامه به صف عملیات enqueueنامیده می ش ود .ب ه حذف نامه از صف ،عملیات Dequeueگفته می شود. درخت در زمینه الگوریتم‌ها ،درخت به دلیل قابلیت ذخیره‌سازی سلسله مراتبی داده ،یکی از مفیدترین س اختارهای داده اس ت .در حین ط راحی الگوریتم‌ه ا ،از درخت‌ه ا در 61 هرجایی که نیاز داریم برای نشان دادن روابط سلس له مرات بی بین عناص ر داده‌ای که باید آن‌ها را ذخیره یا پردازش کنیم ،استفاده می‌کنیم .بیایید نگ اه عمیق‌ت ری ب ه این ساختار داده‌ای جالب و بسیار مهم داشته باشیم .یک عنصر داده شروع ب ه ن ام ریشه و مجموعه ای از گره ها که توسط پیوندهایی به نام شاخه به یک دیگر متص ل شده اند. واژه شناسی بیایید به برخی از اصطالحات مربوط به ساختار داده درخت نگاه کنیم: واژه گره ریشه توضیح گره بدون والد گره ریشه نامیده می شود .به عنوان مثال ،در نمودار زیر ،گره ریشه Aاست .در الگوریتم‌ها ،معموال ً گره ریشه مهم‌ترین مقدار را در ساختار درختی دارد. سطح یک گره فاصله از گره ریشه ،سطح یک گره است .به عنوان مثال ،در نمودار زیر ،سطح گره های D، Eو Fدو است. گره های برادر دو گره در یک درخت اگر در یک سطح باشند برادر نامیده می شوند .به عنوان مثال ،اگر نمودار زیر را بررسی کنیم ،گره های Bو Cبرادر هستند. گره فرزند و والد یک گره ،F ،فرزند گره Cاست ،اگر هر دو مستقیما ً به هم متصل باشند و سطح گره Cکمتر از گره Fباشد .برعکس، گره Cوالد گره Fاست. گره های Cو Fدر نمودار زیر ،رابطه والد-فرزند را نشان می دهند. درجه یک گره درجه یک گره برابر تعداد فرزندانی است که دارد .به عنوان مثال ،در نمودار زیر ،گره Bدارای درجه دو است. درجه یک درخت درجه یک درخت برابر است با حداکثر درجه ای که در میان گره های تشکیل دهنده یک درخت یافت می شود .به عنوان 62 مثال درخت ارائه شده در نمودار زیر دارای درجه دو است. زیردرخت زیردرخت یک درخت ،بخشی از درخت است که گره انتخاب شده به عنوان گره ریشه زیردرخت و همه فرزندان به عنوان گره های درخت است .به عنوان مثال ،یک زیردرخت در گره Eدرخت ارائه شده در نمودار زیر ،از گره Eبه عنوان گره ریشه و گره Gو Hبه عنوان دو فرزند تشکیل شده است. گره برگ گره ای در درختی که فرزندی ندارد ،گره برگ نامیده می شود .به عنوان مثال در شکل زیر D، G، H ،و Fچهار گره برگ هستند. گره داخلی هر گره ای که نه ریشه باشد و نه گره برگ ،یک گره داخلی است .یک گره داخلی حداقل یک گره والد و حداقل یک گره فرزند خواهد داشت. توجه داشته باشید که درختان نوعی شبکه یا گراف هستند که در فصل 6الگ وریتم های یادگیری ماشین بدون نظارت آن را بررس ی خ واهیم ک رد .ب رای گ راف ه ا و تجزیه و تحلیل شبکه ،به جای شاخه از اصطالحات پیوند یا ی ال اس تفاده می ک نیم. بیشتر اصطالحات دیگر بدون تغییر باقی می مانند. انواع درختان درختان انواع مختلفی دارند که به شرح زیر توضیح داده می شود: درخت دودویی :اگ ر درج ه ی ک درخت دو باش د آن درخت را درخت دودویی می نامند .به عنوان مث ال ،درخت نش ان داده ش ده در نم ودار زی ر ی ک درخت دودویی است زیرا دارای درجه دو است: 63 شکل :6-2درخت دودویی توجه داشته باشید که نمودار قبل درختی را نشان می دهد که دارای چهار سطح ب ا هشت گره است. درخت کامل :درخت کامل درختی است که در آن همه گره ها از ی ک درج ه باش ند که برابر با درجه درخت خواهد بود .نمودار زیر ان واع درخت ان م ورد بحث را نش ان می دهد: شکل :7-2انواع درختان 64 توجه داشته باشید که درخت دودویی سمت چپ یک درخت کامل نیست ،زیرا گ ره Cدارای درجه یک و تمام گره های دیگر دارای درجه دو هستند .درخت در وس ط و سمت چپ هر دو درخت کامل هستند. درخت کامل :درخت کامل ،نوع خاص ی از درخت پ ر اس ت ک ه در آن تم ام گ ره ه ای ب رگ در ی ک س طح هس تند .ب ه عن وان مث ال ،درخت دودویی س مت راس ت همانطور که در نمودار قبل نشان داده شده است یک درخت کامل و پر است زی را تمام گره های برگ در یک سطح هستند ،یعنی سطح .2 درخت م+رتب :اگ ر فرزن دان ی ک گ ره در ی ک س طح طب ق معیاره ای خ اص، سازماندهی شوند .درخت را درخت مرتب می نامند .برای مثال ،ی ک درخت را می توان از چپ به راست به ترتیب صعودی مرتب کرد که در آن گ ره ه ای هم س طح در حین پیمایش از چپ به راست ،مقدار خود را افزایش می دهند. مثال های کاربردی نوع داده انتزاعی درخت ،یکی از ساختارهای داده اصلی است که در توسعه درخت های تصمیم استفاده می شود ،هم انطور ک ه در فص ل ،7الگ وریتم ه ای ی ادگیری نظارت شده سنتی مورد بحث قرار خواهد گرفت .به دلیل ساختار سلسله مرات بی آن ،در الگوریتم های مربوط به تجزیه و تحلیل شبکه نیز محبوب است همانطور که در فصل ،6الگوریتم های یادگیری ماشین بدون نظارت ،به تفصیل مورد بحث قرار خواهد گرفت .درخت‌ه ا همچ نین در الگوریتم‌ه ای جس تجو و مرتب‌س ازی مختل ف استفاده می‌شوند که در آن استراتژی‌های تقسیم و غلبه باید پیاده‌سازی شوند. خالصه 65 در این فصل ،س اختارهای داده‌ای را ک ه می‌ت وان ب رای پیاده‌س ازی ان واع مختل ف الگوریتم‌ها م ورد اس تفاده ق رار داد ،م ورد بحث ق رار دادیم .پس از گذران دن این فصل ،باید بتوانید ساختار داده مناسب را برای ذخیره و پردازش داده ها توسط یک الگوریتم انتخ اب کنی د .همچ نین بای د بتوانی د پیام دهای انتخ اب م ا را ب ر عملک رد الگوریتم درک کنید .فصل بع دی در م ورد الگ وریتم ه ای م رتب س ازی و جس تجو است ،جایی که ما از برخی از ساختارهای داده ارائه شده در این فص ل در اج رای الگوریتم ها استفاده خواهیم کرد. 3الگوریتم های مرتب سازی و جستجو 66 در این فص ل ب ه الگ وریتم ه ایی می پ ردازیم ک ه ب رای م رتب س ازی و جس تجو استفاده می شوند .اینها دسته مهمی از الگوریتم ها هستند که می توانند به تنه ایی مورد استفاده قرار گیرند یا می توانند پایه و اساس الگوریتم های پیچیده تر ش وند. اینها شامل پردازش زبان طبیعی ( )NLPو الگوریتم‌های استخراج الگو هس تند .این فصل با ارائه انواع مختل ف الگ وریتم ه ای م رتب س ازی آغ از می ش ود .عملک رد روش های مختلف برای طراحی ی ک الگ وریتم م رتب س ازی را مقایس ه می کن د. سپس برخی از الگوریتم‌های جستجو به تفصیل ارائه می‌شوند .در نهایت ،یک نمونه عملی از الگوریتم‌ه ای مرتب‌س ازی و جس تجوی ارائه‌ش ده در این فص ل م ورد بررسی قرار گرفته است .در پایان این فصل ،باید بت وانیم الگوریتم‌ه ای مختلفی را که برای مرتب‌سازی و جستجو استفاده می‌شوند ،درک کرده و نقاط قوت و ضعف آن‌ها را بازگو کنیم .از آنجایی ک ه الگوریتم‌ه ای جس تجو و مرتب‌س ازی ،بلوک‌ه ای سازنده بسیاری از الگوریتم‌های پیچیده هستند ،درک دقیق آن‌ها به ما کمک می‌کن د تا الگوریتم‌های پیچیده مدرن را که در فصل‌های بعدی ارائه شده‌اند بهتر درک کنیم. مفاهیم اصلی زیر در این فصل مورد بحث قرار می‌گیرند: ‏ معرفی الگوریتم های مرتب سازی ‏ معرفی الگوریتم های جستجو ‏ تجزیه و تحلیل عملکرد الگوریتم های مرتب سازی و جستجو ‏ کاربردهای عملی مرتب سازی و جستجو در ابتدا به چند الگوریتم مرتب سازی نگاه می کنیم. معرفی الگوریتم های مرتب سازی توانایی مرتب‌سازی و جستجوی مؤثر آیتم‌ها در یک ساختار داده پیچیده ،مهم اس ت زیرا بسیاری از الگوریتم‌های مدرن به آن نیاز دارند .همانطور که در این فصل بحث خواهد شد ،استراتژی مناسب برای مرتب‌سازی و جستجوی داده‌ها به اندازه و نوع داده‌ها بستگی دارد .در حالی که نتیجه نهایی دقیقا ً یکسان اس ت ،الگ وریتم م رتب سازی و جستجوی مناسب برای یک راه حل کارآمد برای ی ک مس ئله دنی ای واقعی 67 مورد نیاز است .بنابراین ،تجزیه و تحلیل دقیق عملکرد این الگوریتم ها مهم اس ت. الگوریتم‌های مرتب‌س ازی به‌ط ور گس ترده در سیس تم‌های ذخیره‌س ازی داده‌ه ای توزیع‌ش ده مانن د پایگاه‌ه ای داده م درن NoSQLک ه معماری‌ه ای خوش ه‌ای و محاسبات ابری را فعال می‌کنند ،استفاده می‌شوند .در چنین سیس تم ه ای ذخ یره سازی داده ها ،عناصر داده باید مداوما مرتب شده و ذخیره شوند ت ا بت وان آنه ا را به طور مؤثر بازیابی کرد .الگوریتم های مرتب سازی زیر در این فصل ارائ ه ش ده است: ‏ مرتب سازی حبابی ‏ مرتب سازی ادغامی ‏ مرتب سازی درجی ‏ مرتب سازی پوسته ‏ مرتب سازی انتخابی اما قبل از ارائه این الگوریتم‌ها ،اجازه دهید ابتدا تکنیک تعویض متغ یر در پ ایتون را که در کد ارائه شده در این فصل استفاده خواهیم کرد ،مورد بحث قرار دهیم. تعویض متغیرها در پایتون هنگام پیاده سازی الگوریتم های مرتب سازی و جستجو ،باید مقادیر دو متغیر را ب ا هم عوض کنیم .در پایتون یک روش استاندارد برای تعویض دو متغیر وجود دارد ک ه به شرح زیر است: ‏var_1 = 1 ‏var_2 = 2 ‏var_1,var_2 = var_2,var_1 این روش ساده مبادله مقادیر در سراسر الگوریتم‌ه ای مرتب‌س ازی و جس تجو در این فص ل م ورد اس تفاده ق رار می‌گ یرد .اج ازه دهی د ب ا نگ اهی ب ه الگ وریتم مرتب‌سازی حبابی در بخش بعدی شروع کنیم. 68 مرتب سازی حبابی مرتب‌س ازی حب ابی یکی از س اده‌ترین و کن دترین الگوریتم‌ه ایی اس ت ک ه ب رای مرتب‌سازی استفاده می‌شود .این الگوریتم ب ه گون ه ای ط راحی ش ده اس ت ک ه باالترین مقدار در لیست داده ها ،زمانی که الگوریتم از طری ق تک رار حلق ه انج ام می شود ،به سمت باال حباب می شود .مرتب‌سازی حب ابی ب رای اج را ب ه حافظ ه کمی نیاز دارد زیرا تمام ترتیب‌بندی‌ها در س اختار داده اص لی انج ام می‌ش ود .هیچ ساختار داده جدیدی به عنوان بافر موقت مورد نیاز نیست .اما ب دترین عملک رد آن ) O(N2است که پیچیدگی زمانی درجه دوم است (که Nتعداد عناص ر م رتب ش ده است) .همانطور که در بخش زیر بحث خواه د ش د ،توص یه می ش ود فق ط ب رای مجموعه داده های کوچکتر استفاده ش ود .مح دودیت‌های واقعی توصیه‌ش ده ب رای اندازه داده‌ها برای اس تفاده از مرتب‌س ازی حب ابی ب ه حافظ ه و من ابع پردازش ی موجود بستگی دارد ،اما نگه داشتن تعداد عناصر ( )Nزیر 1000می‌تواند به عنوان یک توصیه کلی در نظر گرفته شود. درک منطق مرتب سازی حبابی مرتب‌سازی حبابی بر اساس تکرارهای مختلفی است که گ ذر‌ها نامی ده می‌ش وند. برای فهرستی با اندازه ،Nمرتب‌سازی حبابی دارای گذرهای N-1خواهد بود. برای درک عملکرد آن ،بیایید روی تکرار اول تمرکز کنیم: گذر یک .هدف گذر یک این است که باالترین مق دار را ب ه ب االترین ش اخص (ب االی لیست) برس انیم .ب ه عب ارت دیگ ر ،ب االترین مق دار لیس ت را خ واهیم دی د ک ه ب ا پیشرفت یک گذر به باالی آن حباب می‌زن د .منط ق مرتب‌س ازی حب ابی مبت نی ب ر مقایسه مقادیر همسایه مجاور است .اگ ر مق دار در ش اخص ب االتر از نظ ر ارزش بیشتر از مقدار شاخص پایین ت ر باش د ،مق ادیر را مبادل ه می ک نیم .این تک رار ت ا رسیدن به انتهای لیست ادامه می یابد .در شکل 1-3نشان داده شده است: 69 الگوریتم مرتب سازی حبابی:1-3 شکل حاال ببینیم چگونه می‌توان مرتب‌سازی حبابی را با استفاده از پایتون پیاده‌سازی .کرد last_element_index = len(list)-1 print(0,list) for idx in range(last_element_index): if list[idx]>list[idx+1]: list[idx],list[idx+1]=list[idx+1],list[idx] print(idx+1,list) 0 [25, 21, 22, 24, 23, 27, 26] 70 ]1 [21, 25, 22, 24, 23, 27, 26 ]2 [21, 22, 25, 24, 23, 27, 26 ]3 [21, 22, 24, 25, 23, 27, 26 ]4 [21, 22, 24, 23, 25, 27, 26 ]5 [21, 22, 24, 23, 25, 27, 26 ]6 [21, 22, 24, 23, 25, 26, 27 توجه داشته باشید که پس از اولین گذر :باالترین مقدار در باالی لیست ذخیره شده در idx+1است. در حین اجرای اولین گذر ،الگ وریتم بای د ه ر ی ک از عناص ر لیس ت را ب ه ص ورت جداگانه مقایسه کند تا حداکثر مقدار را به آن باال "حباب" کند. پس از اتمام گذر اول ،الگوریتم به گذر دوم می رود .هدف گ ذر دوم انتق ال دومین مقدار به دومین شاخص باالتر لیست است .برای انج ام این ک ار ،الگ وریتم دوب اره مقادیر همسایه مجاور را با هم مقایسه می‌کند و در صورت عدم مرتب ب ودن ،آنه ا را مبادله می‌کند .گذر دوم مقدار شاخص باالیی را که با گ ذر اول در ج ای مناس ب قرار داده شده است حذف می کند .بنابراین ،یک عنص ر داده کم تر ب رای مقایس ه خواهد داشت .پس از تکمیل گذر دوم ،الگوریتم به اجرای گذر سوم و بع دی ادام ه می دهد تا زمانی که تمام نقاط داده لیست به ترتیب صعودی شوند .الگوریتم برای م رتب ک ردن کام ل لیس تی ب ه ان دازه Nب ه N-1گ ذر نی از دارد .پیاده‌س ازی مرتب‌سازی حبابی در پایتون به شرح زیر است :اشاره کردیم ک ه عملک رد آن یکی از محدودیت‌های الگوریتم مرتب‌س ازی حب ابی اس ت .بیایی د عملک رد مرتب‌س ازی حبابی را از طریق تجزی ه و تحلی ل عملک رد الگ وریتم مرتب‌س ازی حب ابی حس اب کنیم: # Excahnge the elements to arrange in order ‏last_element_index = len(list)-1 71 for pass_no in range(last_element_index,0,-1): ‏for idx in range(pass_no): ‏if list[idx]>list[idx+1]: ]list[idx],list[idx+1]=list[idx+1],list[idx ‏return list بهینه‌سازی مرتب‌سازی حبابی اجرای فوق مرتب‌سازی حبابی نمی‌توان د از مزای ای لیس ت ک امال ً م رتب ش ده ی ا جزئی مرتب شده استفاده کند .برای مرتب کردن لیست داده شده ،باید حلقه های داخلی و خارجی کامل اجرا شود و پیچیدگی زمانی ) O(N2خواهد داشت ح تی اگ ر یک لیست کامال مرتب شده به عنوان ورودی داده شود .برای بهینه‌سازی الگ وریتم مرتب‌سازی حبابی ،می‌توانیم بررسی کنیم که آی ا عملی ات تع ویض در حین اج رای یک گذر خاص (حلقه داخلی) صورت می گیرد .اگ ر مب ادله‌ای از طری ق هیچ گ ذری صورت نگیرد ،به این معنی اس ت ک ه لیس ت داده‌ش ده اکن ون ک امال م رتب ش ده است ،و ما می‌توانیم خارج شویم .به این ترتیب ،م ا می‌ت وانیم تع داد گ ذر‌ها را ب ه حداقل برسانیم .در زیر پیاده‌سازی الگوریتم مرتب‌سازی حبابی بهینه‌س ازی ش ده ، نشان داده شده است: تجزیه و تحلیل عملکرد مرتب سازی حبابی به راحتی می توان فهمید که مرتب سازی حبابی شامل دو سطح حلقه است: حلقه بیرونی :به آن گذرها نیز می‌گویند .به عنوان مثال ،گذر یک اولین تکرار حلق ه بیرونی است. حلقه داخلی :این زمانی است که عناصر مرتب نش ده باقیمان ده در لیس ت م رتب می شوند ،تا زمانی که باالترین مقدار به سمت راست حرکت داده شود .گ ذر اول دارای N-1مقایسه ،گذر دوم دارای N-2مقایسه خواهد بود و هر گذر بعدی تعداد مقایسه ها را یک بار کاهش می دهد. 72 پیچیدگی زمانی الگوریتم مرتب سازی حبابی به شرح زیر است: بهترین حالت :اگر لیست از قبل مرتب شده اس ت (ی ا تقریب ا ً هم ه عناص ر م رتب شده باشند) پیچیدگی زمان اجرا ) O(1است. بدترین حالت :اگر هیچ یک یا تع داد بس یار کمی از عناص ر م رتب ش ده باش ند ،در بدترین حالت پیچیدگی زمان اجرا ) O(n2است زیرا الگوریتم باید به طور کام ل در هر دو حلقه داخلی و خارجی اجرا شود. حاال اجازه دهید الگوریتم مرتب سازی درجی را بررسی کنیم. مرتب سازی درجی ایده اصلی مرتب س ازی درجی این اس ت ک ه در ه ر تک رار ،ی ک نقط ه داده را از س اختار داده ای ک ه در اختی ار داریم ح ذف می ک نیم و س پس آن را در م وقعیت درست خود قرار می دهیم .به همین دلیل است که ما آن را الگوریتم مرتب سازی درجی می نامیم .در اولین تکرار دو نقطه داده را انتخاب کرده و م رتب می ک نیم. سپس ،انتخاب خود را گسترش می دهیم و نقطه داده سوم را انتخ اب می ک نیم و بر اساس مقدار آن ،موقعیت صحیح آن را پیدا می ک نیم .الگ وریتم ت ا زم انی پیش می رود که تمام نقاط داده به م وقعیت ص حیح خ ود منتق ل ش وند .این فرآین د در نمودار زیر نشان داده شده است: 73 الگوریتم مرتب سازی درجی:2-3 شکل :الگوریتم مرتب سازی درجی را می توان در پایتون به صورت زیر کدگذاری کرد def insertion_sort (elements): for i in range(1, len(elements)): j = i-1 next = elements[i] # Compare the current element with next one while (elements[j] > next) and (j >= 0): 74 ]elements[j+1] = elements[j ‏j=j-1 ‏elements[j+1] = next ‏return elements توجه داشته باشید که در حلقه اصلی ،تمام لیست را تکرار می کنیم .در هر تک رار، دو عنصر مجاور عبارتند از ]( list[jعنص ر فعلی) و ]( list[iعنص ر بع دی). در list[j] > element_nextو ،j >= 0عنصر فعلی را با عنص ر بع دی مقایسه می‌کنیم .بیایید به عملکرد الگوریتم مرتب سازی درجی نگاه کنیم. تجزیه و تحلیل عملکرد مرتب سازی درجی از توضیحات الگوریتم واض ح اس ت ک ه اگ ر س اختار داده قبال م رتب ش ده باش د، مرتب سازی درجی بسیار سریع انجام می شود .در واقع ،اگر س اختار داده م رتب شده باشد ،مرتب س ازی درجی زم ان اج رای خطی خواه د داش ت یع نی ).O(n بدترین حالت زمانی است که هر یک از حلقه های داخلی باید تم ام عناص ر موج ود در لیست را جابجا کند .اگر حلقه داخلی با iتعریف شود ،بدترین عملکرد الگوریتم مرتب‌سازی درج با موارد زیر ارائه می‌شود: 75 ب ه ط ور کلی می ت وان از درج در س اختارهای داده کوچ ک اس تفاده ک رد .ب رای ساختارهای داده بزرگتر ،مرتب سازی درجی به دلیل عملک رد متوس ط درج ه دوم، توصیه نمی شود. مرتب سازی ادغامی م ا ت اکنون دو الگ وریتم مرتب‌س ازی ارائ ه ک رده‌ایم :مرتب‌س ازی حب ابی و مرتب‌سازی درجی .اگر داده ها به طور جزئی مرتب شوند ،عملک رد ه ر دوی آنه ا بهتر خواهد بود .سومین الگوریتم ارائه شده در این فصل ،الگ وریتم م رتب س ازی ادغامی است که در سال 1940توسط ج ان ف ون نویم ان توس عه ی افت .وی ژگی تع یین کنن ده این الگ وریتم این اس ت ک ه عملک رد آن ب ه م رتب س ازی داده ه ای ورودی بستگی ندارد .برای مجموعه داده های بزرگ به خ وبی ک ار می کن د .مانن د سایر الگوریتم های کالن داده ،بر اساس استراتژی تقسیم و غلبه ک ار می کن د .در مرحله اول که تقسیم نامیده می شود ،الگوریتم به تقس یم داده ه ا ب ه دو قس مت بازگشتی ادامه می دهد تا زمانی که اندازه داده ها کمتر از یک آستانه تعریف ش ده باشد .در مرحله دوم که ادغام نامیده می شود ،الگوریتم به ادغام و پردازش ادام ه می دهد تا به نتیجه نهایی برسیم .منطق این الگ وریتم در نم ودار زی ر توض یح داده شده است: 76 شکل :3-3الگوریتم مرتب سازی ادغامی بیایید ابتدا به شبه کد الگوریتم مرتب سازی ادغام نگاه کنیم: 77 merge_sort (elements, start, end) if(start < end) midPoint = (end - start) / 2 + start merge_sort (elements, start, midPoint) merge_sort (elements, midPoint + 1, start) merge(elements, start, midPoint, end) :همانطور که می بینیم الگوریتم دارای سه مرحله زیر است midPoint لیست ورودی را به دو قسمت مساوی تقسیم می کند که در ح دود.1 تقسیم می شوند شود1 از بازگشت برای تقسیم استفاده می کند تا زمانی که طول هر لیست. 2 قسمت های مرتب شده را در یک لیست مرتب ش ده ادغ ام ک رده و آن، سپس.3 را برمی گرداند : در اینجا نشان داده شده استmerge_sort کد پیاده سازی def merge_sort(elements): if len(elements)>1: mid = len(elements)//2 #splits list in half left = elements[:mid] right = elements[mid:] merge_sort(left)#repeats until length of each list is 1 merge_sort(right) a = 0 b = 0 c = 0 78 while a < len(left) and b < len(right): ‏if left[a] < right[b]: ]elements[c]=left[a ‏a = a + 1 ‏else: ]elements[c]=right[b ‏b = b + 1 ‏c = c + 1 ‏while a < len(left): ]elements[c]=left[a ‏a = a + 1 ‏c = c + 1 ‏while b < len(right): ]elements[c]=right[b ‏b = b + 1 ‏c = c + 1 ‏return elements مرتب سازی پوسته الگوریتم مرتب‌سازی حب ابی همس ایه‌های مج اور را مقایس ه می‌کن د و در ص ورت نامرتب بودن آنها را تعویض می‌کند .از ط رف دیگ ر ،م رتب س ازی درجی ،لیس ت مرتب شده را با انتقال یک عنصر در هر زمان ایجاد می کند .اگ ر لیس تی ت ا ح دی مرتب‌شده داریم ،مرتب‌سازی درجی باید عملکرد معقولی ارائه دهد .اما ب رای ی ک لیست کامال مرتب‌نشده ،با اندازه ،Nمی‌توانید استدالل کنید که مرتب‌سازی حبابی باید به‌طور کامل از طریق گذر‌های N-1تکرار شود تا به طور کام ل م رتب ش ود. 79 دونال د ش ل م رتب س ازی ش ل (ب ه ن ام او) را پیش نهاد ک رد ک ه اهمیت انتخ اب همسایگان مجاور ب رای مقایس ه وتع ویض را زی ر س وال می ب رد .ح ال بیایی د این مفهوم را درک کنیم .در مرحله اول ،به جای انتخاب همسایگان مجاور ،از عناص ری استفاده می کنیم که در یک شکاف ثابت هستند .در نهایت لیست فرعی متشکل از یک جفت نقطه داده را مرتب می کند. این کار در نمودار زیر نشان داده شده است .در مرحل ه دوم ،لیس ت ه ای ف رعی حاوی چهار نقطه داده را مرتب می‌کند (نمودار زی ر را ببینی د) .در گ ذر‌های بع دی، تعداد نقاط داده در هر لیست ف رعی اف زایش می‌یاب د و تع داد لیس ت‌های ف رعی همچنان کاهش می‌یابد تا زمانی که به وضعیتی برسیم که فقط ی ک لیس ت ف رعی وجود داشته باشد که از تم ام نق اط داده تش کیل ش ده باش د .در این مرحل ه ،می توانیم فرض کنیم که لیست مرتب شده است: 80 شکل :4-3گذرها در الگوریتم مرتب سازی پوسته در پایتون کد پیاده سازی الگوریتم مرتب سازی پوسته به صورت زیر است: ‏def shell_sort(elements): ‏distance = len(elements) // 2 ‏while distance > 0: ‏for i in range(distance, len(elements)): ]temp = elements[i ‏j = i # Sort the sub list for this distance ‏while j >= distance and elements[j - distance] > temp: ]list[j] = elements[j - distance ‏j = j-distance ‏list[j] = temp # Reduce the distance for the next element ‏distance = distance//2 ‏return elements توجه داشته باشید که فراخوانی تابع ShellSortمنجر به مرتب سازی آرایه ورودی شده است. تجزیه و تحلیل عملکرد از مرتب سازی پوسته می توان مشاهده کرد که در بدترین حالت ،الگوریتم م رتب س ازی Shellبای د از طریق هر دو حلق ه اج را ش ود و ب ه آن پیچی دگی ) O(n2می ده د .م رتب س ازی پوسته برای کالن داده مناسب نیست و برای مجموعه داده ه ای متوس ط اس تفاده 81 می شود .به طور کلی ،عملک رد نس بتا ً خ وبی در لیس تی ب ا ح داکثر 6000عنص ر دارد .اگر داده ها تا حدی مرتب باشند ،عملکرد بهتر خواهد بود .در سناریوی بهترین حالت ،اگر لیستی از قبل مرتب شده باشد ،فقط به یک گذر از Nعنصر نیاز دارد تا ترتیب را تأیید کند و بهترین عملکرد ) O(Nرا ایجاد کند. مرتب سازی انتخابی هم انطور ک ه قبال ً در این فص ل دی دیم ،مرتب‌س ازی حب ابی یکی از س اده‌ترین الگوریتم‌های مرتب‌سازی است .مرتب‌سازی انتخابی بهبودی در مرتب‌سازی حبابی است که در آن سعی می‌کنیم تعداد ک ل تعویض‌ه ای م ورد نی از ب ا الگ وریتم را ب ه حداقل برسانیم. در مقایسه با N-1گذر در الگوریتم مرتب سازی حبابی ،این الگ وریتم ب ه گون ه ای طراحی شده است که برای هر گذر یک جابجایی انج ام ده د .ب ه ج ای جاب ه ج ایی بزرگترین مقدار به سمت باال در مراحل اولیه (همانطور که در مرتب سازی حب ابی انجام می شود ،که منجر به N-1تعویض می شود) ،ما به دنبال بزرگترین مقدار در هر گذر می گردیم و آن را به س مت ب اال ح رکت می دهیم .بن ابراین ،پس از اولین گذر ،بیشترین مقدار در باال خواه د ب ود .پس از گ ذر دوم ،دومین مق دار ب زرگ در کنار مقدار باال قرار خواهد گرفت .همانطور که الگوریتم پیشرفت می کند ،مق ادیر بعدی بر اساس مقادیر خود به مکان صحیح خ ود منتق ل می ش وند .آخ رین مق دار پس از گ ذر ( )N-1منتق ل می ش ود .بن ابراین ،مرتب‌س ازی انتخ ابی ب رای مرتب‌سازی Nعنصر N-1 ،گذر انجام می دهد: 82 الگوریتم مرتب سازی انتخابی:5-3 شکل :پیاده سازی مرتب سازی انتخابی در پایتون در اینجا نشان داده شده است def selection_sort(list): for fill_slot in range(len(list) - 1, 0, -1): max_index = 0 for location in range(1, fill_slot + 1): if list[location] > list[max_index]: max_index = location list[fill_slot],list[max_index] = list[max_index],list[fill_slot] 83 return list عملکرد الگوریتم مرتب سازی انتخابی بدترین عملکرد مرتب سازی انتخاب ) O(N2است .توجه داش ته باش ید ک ه ب دترین عملکرد آن مشابه مرتب‌سازی حبابی است و نباید برای مرتب‌س ازی مجموعه‌ه ای داده بزرگ‌ استفاده شود .با این حال ،مرتب‌سازی انتخابی ،الگوریتم طراحی بهتری نسبت به مرتب‌سازی حبابی اس ت و عملک رد متوس ط آن ب ه دلی ل ک اهش تع داد تعویضها ،بهتر از مرتب‌سازی حبابی است. انتخاب الگوریتم مرتب سازی انتخاب الگوریتم مرتب س ازی مناس ب هم ب ه ان دازه و هم ب ه وض عیت داده ه ای ورودی فعلی بستگی دارد .برای لیس ت ه ای ورودی کوچ ک ک ه م رتب ش ده ان د، استفاده از یک الگوریتم پیشرفته ،پیچیدگی های غ یر ض روری را ب ا بهب ود عملک رد ناچیز به کد وارد می کند .به عنوان مث ال ،م ا نی ازی ب ه اس تفاده از م رتب س ازی ادغامی برای مجموعه داده های کوچک نداریم .درک و پی اده س ازی م رتب س ازی حبابی بسیار ساده تر خواهد بود .اگر داده ها تا حدی مرتب شده باشند ،می توانیم ب ا اس تفاده از م رتب س ازی درجی از آن به ره ب بریم .ب رای مجموع ه داده ه ای بزرگتر ،الگوریتم مرتب سازی ادغامی بهترین الگوریتم برای استفاده است. مقدمه ای بر الگوریتم های جستجو جستجوی کارآمد داده ها در ساختارهای داده پیچی ده یکی از مهم ت رین ق ابلیت ه ا است .ساده ترین روش ،که چندان کارآمد نخواهد ب ود ،جس تجوی داده ه ای م ورد نیاز در هر نقطه داده است .اما ،با بزرگتر ش دن حجم داده ه ا ،ب ه الگ وریتم ه ای پیچیده تری برای جستجوی داده ها نیاز داریم .الگوریتم های جس تجوی زی ر در این بخش ارائه می شوند: 84  جستجوی خطی ‏ جستجوی باینری ‏ جستجوی درون یابی بیایید به هر یک از آنها با جزئیات بیشتری نگاه کنیم. جستجوی خطی یکی از ساده‌ترین استراتژی‌ها برای جستجوی داده‌ها این اس ت ک ه ب ه س ادگی از طریق هر عنصری که به دنبال هدف است ،حلقه را انجام دهیم. هر نقطه داده برای یک تطابق جستجو می شود و هنگامی ک ه مط ابقت پی دا ش د، نتایج برگردانده می شوند و الگوریتم از حلقه خارج می شود .در غ یر این ص ورت، الگ وریتم ب ه جس تجو ادام ه می ده د ت ا ب ه انته ای داده ه ا برس د .عیب آش کار جستجوی خطی این اس ت ک ه ب ه دلی ل جس تجوی ج امع ذاتی ،بس یار کن د اس ت. مزیت این است که داده ها نیازی به مرتب سازی ندارند ،همانطور ک ه ب رای س ایر الگوریتم های ارائه شده در این فصل مورد نیاز است .بیایید به کد جس تجوی خطی نگاه کنیم: ‏def linear_search(elements, item): ‏index = 0 ‏found = False # Match the value with each data element ‏while index < len(elements) and found is False: ‏if elements[index] == item: ‏found = True ‏else: ‏index = index + 1 ‏return found 85 حال به خروجی کد قبلی نگاه می کنیم: توجه داشته باشید که اجرای تابع LinearSearchدر صورتی که بتواند داده ها را با موفقیت پیدا کند ،مقدار Trueرا برمی گرداند. عملکرد جستجوی خطی همانطور که بحث شد ،جستجوی خطی یک الگوریتم ساده است که ی ک جس تجوی جامع را انجام می دهد .بدترین رفتار آن ) O(Nاست .اطالعات بیشتر را می‌توانی د در این صفحه پی دا کنی د ،ش اید بتوانی د خوانن ده را ب ه این ص فحه راهنم ایی کنی د: .https://wiki.python.org/moin/TimeComplexity جستجوی دودویی پیش نیاز الگوریتم جستجوی دودویی داده های مرتب شده است .الگوریتم به ط ور مکرر یک لیست را به دو قسمت تقسیم می کند و تا زمانی ک ه مق دار م ورد نظ ر خود را پیدا کند ،پایین ترین و باالترین شاخص ها را دنبال می کند: ‏def binary_search(elements, item): ‏first = 0 86 last = len(elements)-1 while first<=last and not found: midpoint = (first + last)//2 if list[midpoint] == item: return True else: if item < elements[midpoint]: last = midpoint-1 else: first = midpoint+1 return False :خروجی به صورت زیر است فراخ وانی ت ابع،توج ه داش ته باش ید ک ه اگ ر مق دار در لیس ت ورودی پی دا ش ود . برمی گرداندTrue مقدارBinarySearch 87 عملکرد جستجوی دودویی جستجوی دودویی به این دلیل نامگذاری شده است که در هر تکرار ،الگ وریتم داده ه ا را ب ه دو قس مت تقس یم می کن د .اگ ر داده دارای Nم ورد باش د ،ح داکثر ) O(logNمرحله برای تکرار نیاز دارد .این بدان معناست که الگوریتم دارای زمان اجرا ) O(logNاست. جستجوی درون یابی جستجوی دودویی بر اساس منطقی است که ب ر بخش می انی داده ه ا تمرک ز می کند .جستجوی درون یابی پیچیده تر اس ت .از مق دار ه دف ب رای تخمین م وقعیت عنصر در آرایه مرتب شده ،استفاده می کند .بیایید س عی ک نیم ب ا اس تفاده از ی ک مثال آن را درک کنیم .بیایید فرض کنیم می خواهیم کلمه ای را در یک فرهنگ لغت انگلیسی جستجو کنیم ،مانند کلمه .riverما از این اطالع ات ب رای درون ی ابی و جستجوی کلماتی که با rشروع می ش وند اس تفاده خ واهیم ک رد .ی ک جس تجوی درون یابی کلی تر را می توان به صورت زیر برنامه نویسی کرد: ‏def int_polsearch(list,x ): ‏idx0 = 0 )idxn = (len(list) - 1 =< while idx0 <= idxn and x >= list[idx0] and x ‏list[idxn]: # Find the mid point ]mid = idx0 +int(((float(idxn - idx0)/( list[idxn)))]list[idx0])) * ( x - list[idx0 # Compare the value at mid point with search value ‏if list[mid] == x: ‏return True 88 if list[mid] < x: ‏idx0 = mid + 1 ‏return False خروجی به صورت زیر است: توجه داش ته باش ید ک ه قب ل از اس تفاده از ،IntPolsearchآرای ه ابت دا بای د ب ا استفاده از یک الگوریتم مرتب سازی ،مرتب شود. عملکرد جستجوی درون یابی اگر داده ها به طور ن ابرابر توزی ع ش وند ،عملک رد الگ وریتم جس تجوی درون ی ابی ضعیف خواه د ب ود .ب دترین عملک رد این الگ وریتم ) O(Nاس ت و اگ ر داده ه ا ت ا حدودی یکنواخت باشند ،بهترین عملکرد )) O(log(log Nاست. کاربردهای عملی توانایی جستجوی موثر و دقیق داده ه ا در ی ک مخ زن داده معین ب رای بس یاری از برنامه های کاربردی واقعی ،حیاتی است .بسته به انتخاب الگوریتم جستجو ،ممکن است الزم باشد ابتدا داده ها را نیز مرتب کنید .انتخاب الگوریتم‌های مرتب‌سازی و جستجوی مناسب به نوع و اندازه داده‌ها و همچنین ماهیت مسئله‌ای که می‌خواهید حل کنید بس تگی دارد .بیایی د س عی ک نیم از الگوریتم‌ه ای ارائه‌ش ده در این فص ل 89 برای حل مسئله تطبیق متقاضی جدید در اداره مهاجرت یک کشور خاص با سوابق تاریخی او استفاده کنیم ..هنگامی که شخصی برای ورود به کشور درخواست وی زا می دهد ،سیستم سعی می کند متقاضی را با سوابق تاریخی موجود مطابقت دهد. اگر حداقل یک تطابق پیدا شود ،سیستم تعداد دفعاتی را که فرد در گذشته تایید ی ا رد شده است را محاسبه می کند .از طرف دیگر ،اگر مطابقت پیدا نشود ،سیستم متقاضی را به عنوان متقاضی جدید طبقه بن دی می کن د و ب رای آنه ا ی ک شناس ه جدید صادر می کند .توانایی جستجو ،مک ان ی ابی و شناس ایی ی ک ش خص در داده های تاریخی برای سیس تم ،بس یار مهم اس ت .این اطالع ات مهم اس ت زی را اگ ر شخصی در گذشته درخواست داده باشد و مشخص ش ود ک ه درخواس ت رد ش ده است ،ممکن است بر درخواست فعلی آن فرد تأثیر منفی بگذارد .به طور مش ابه، اگر مشخص شود که درخواس ت شخص ی در گذش ته تایی د ش ده اس ت ،این تایی د ممکن است شانس آن فرد را برای تایید درخواس ت فعلی خ ود اف زایش ده د .ب ه طور معمول ،پایگاه داده تاریخی میلیون‌ها سطر خواهد داشت ،و ما به یک راه‌ح ل خوب طراحی شده برای مطابقت ب ا متقاض یان جدی د در پایگ اه داده ت اریخی نی از داریم .فرض کنید جدول تاریخی در پایگاه داده به شکل زیر است: ‏Decisio ‏Decisio ‏DO ‏Surna ‏First ‏Applicatio ‏Personal ‏n ‏n ‏B ‏me ‏name ‏n ‏ID ‏ID ‏date 2018- ‏Approv 200 08-07 ‏ed 0- ‏Doe ‏John 677862 45583 0919 ‏Rejecte 2018- 197 ‏d 0- 06-07 ‏Xsir 0390 ‏Xman 877653 54543 10 ‏Rejecte 2018- 197 05-05 ‏d 3- 2018- ‏Approv 200 03-02 ‏ed 0- 2018- ‏Approv 197 04-15 ‏ed 5- ‏Waka ‏Agro 344565 34332 0215 ‏Doe ‏John 677864 45583 0919 ‏Sorts ‏Kal 344553 22331 0102 در این جدول ،ستون اول ،شناسه شخصی ،با ه ر ی ک از متقاض یان یکت ا در پایگ اه داده تاریخی مرتبط اس ت .اگ ر 30میلی ون متقاض ی یکت ا در پایگ اه داده ت اریخی وجود داشته باشد 30 ،میلیون شناسه شخصی یکتا وجود خواهد داشت .هر شناسه شخصی یک متقاضی را در سیستم پایگاه داده ت اریخی شناس ایی می کن د .س تون دوم ما ،شناسه درخواست است .هر شناسه درخواست ی ک درخواس ت یکت ا را در سیستم شناسایی می کند .ممکن است فردی در گذشته بیش از یک بار درخواست داده باشد .بنابراین ،این ب دان معناس ت ک ه در پایگ اه داده ت اریخی ،شناس ه ه ای درخواست یکتای بیشتری نسبت به شناسه های شخصی خواهیم داش ت .هم انطور که در جدول قبل نشان داده شده است John Doe ،فق ط ی ک شناس ه شخص ی دارد اما دو شناسه درخواست دارد .ج دول قبلی فق ط نمون ه ای از مجموع ه داده های تاریخی را نشان می دهد .بیایید فرض کنیم که نزدی ک ب ه 1میلی ون س طر در مجموعه داده ت اریخی خ ود داریم ک ه ش امل س وابق 10س ال گذش ته متقاض یان 91 است .متقاضیان جدید به طور مداوم با ن رخ متوس ط ح دود 2متقاض ی در دقیق ه وارد می شوند .برای هر متقاضی باید موارد زیر را انجام دهیم: ‏ یک شناسه درخواست جدید برای متقاضی صادر کنید. ‏ ببینید آیا مطابق با متقاضی در پایگاه داده تاریخی وجود دارد یا خیر. ‏ اگ ر مط ابقت ی افت ش د ،از شناس ه شخص ی آن متقاض ی اس تفاده کنی د، همانطور که در پایگاه داده تاریخی یافت می شود .همچنین بای د تع یین ک نیم که چند بار درخواست در پایگاه داده تاریخی تایید یا رد شده است. ‏ اگر مطابقت پیدا نشد ،باید یک شناس ه شخص ی جدی د ب رای آن ف رد ص ادر کنیم. فرض کنید یک فرد جدید با مدارک زیر وارد می شود: ‏First Name: John ‏Surname: Doe ‏DOB: 2000-09-19 ح ال چگون ه می‌ت وانیم برن امه‌ای ط راحی ک نیم ک ه بتوان د جس تجوی کارآم د و مقرون‌به‌صرفه انجام دهد؟ یک اس تراتژی ب رای جس تجوی برنام ه جدی د در پایگ اه داده می‌تواند به شرح زیر طراحی شود: پایگاه داده تاریخی را بر اساس DOBمرتب کنید. هر بار که فرد جدیدی وارد می شود ،یک شناسه درخواس ت جدی د ب رای متقاض ی صادر کنید. تمام رکوردهایی را که با ت اریخ تول د مط ابقت دارن د واکش ی کنی د .این جس تجوی اولیه خواهد بود. از می ان رکورده ایی ک ه ب ه عن وان منطب ق آم ده ان د ،ب ا اس تفاده از ن ام و ن ام خانوادگی ،جستجوی ثانویه را انجام دهید. 92 اگر مطابقت یافت شد ،از شناسه شخص ی ب رای مراجع ه ب ه متقاض یان اس تفاده کنید .تعداد تاییدیه ها و رد درخواستها را محاسبه کنید. اگر مطابقت پیدا نشد ،یک شناسه شخصی جدید برای متقاضی صادر کنید. بیایید سعی کنیم الگوریتم مناسب را برای مرتب سازی پایگاه داده تاریخی انتخ اب کنیم .با خیال راحت می توانیم مرتب سازی حبابی را رد کنیم زی را ان دازه داده ه ا بسیار زیاد است .مرتب‌س ازی پوس ته عملک رد به تری خواه د داش ت ،ام ا تنه ا در ص ورتی ک ه فهرس ت‌های مرتب‌س ازی ش ده ج زئی داش ته باش یم .بن ابراین، مرتب‌سازی ادغامی می‌تواند بهترین گزین ه ب رای مرتب‌س ازی پایگ اه داده ت اریخی باشد .وقتی فرد جدیدی وارد می‌شود ،باید آن شخص را در پایگاه داده تاریخی پی دا ک رده و جس تجو ک نیم .از آنج ایی ک ه داده ه ا قبال م رتب ش ده ان د ،می ت وان از جستجوی درون یابی یا جس تجوی دودویی اس تفاده ک رد .از آنج ایی ک ه متقاض یان احتماال ً به طور مساوی پراکنده می شوند ،طبق ،DOBمی توانیم با خی ال راحت از جستجوی دودویی استفاده کنیم .در ابتدا ،ما بر اساس DOBجستجو می ک نیم ،ک ه مجموعه ای از متقاضیان را با تاریخ تولد یکسان برمی گرداند .اکنون ،ما بای د ف رد مورد نیاز را در زیرمجموعه کوچک افرادی که تاریخ تولد یکسانی دارند ،پی دا ک نیم. از آنجایی که با موفقیت داده ها را به ی ک زیرمجموع ه کوچ ک ک اهش داده ایم ،از هر یک از الگ وریتم ه ای جس تجو ،از جمل ه م رتب س ازی حب ابی ،می ت وان ب رای جستجوی متقاضی استفاده کرد .توجه داشته باشید که مشکل جس تجوی ثانوی ه را در اینجا کمی ساده کرده ایم .ما همچنین باید تعداد ک ل تأیی دها و رده ا را ب ا جم ع آوری نتایج جستجو محاسبه کنیم ،در صورتی ک ه بیش از ی ک م ورد منطب ق ی افت شود .در یک سناریوی واقعی ،هر فرد باید در جستجوی ثانویه با اس تفاده از ب رخی الگوریتم های جستجوی ف ازی شناس ایی ش ود .ن ام و ن ام خ انوادگی ممکن اس ت کمی متفاوت نوشته شود .جستجو ممکن است نیاز به استفاده از ن وعی الگ وریتم فاصله برای اجرای جستجوی فازی داشته باشد ،جایی که نقاط داده ای که شباهت آنها باالتر از یک آستانه تعریف شده است یکسان در نظر گرفته می شوند. 93 خالصه در این فصل مجموعه ای از الگوریتم های مرتب سازی و جستجو را ارائ ه ک ردیم. همچنین نقاط قوت و ضعف الگوریتم های مختلف مرتب سازی و جس تجو را م ورد بحث قرار دادیم .ما عملکرد این الگوریتم‌ها را حساب کردیم و یاد گرف تیم ک ه چ ه زمانی از هر الگوریتم استفاده کنیم .در فصل بعدی ،الگوریتم‌ه ای پوی ا را مطالع ه خواهیم کرد .همچنین به یک مثال کاربردی از طراحی الگوریتم و جزئیات الگ وریتم رتبه بندی صفحات خواهیم پرداخت .در نهایت به بررسی الگ وریتم برنام ه نویس ی خطی می پردازیم. 94 4طراحی الگوریتم این فصل مفاهیم اصلی طراحی الگوریتم های مختلف را ارائه می دهد .نقاط قوت و ضعف تکنیک های مختلف برای طراحی الگوریتم ها را مورد بحث قرار می ده د. با درک این مفاهیم ،نحوه طراحی الگوریتم های کارآمد را ی اد خ واهیم گ رفت .این فصل با بحث در مورد گزینه های مختلف در دسترس ما هنگام طراحی الگوریتم ها شروع می شود .سپس ،اهمیت مشخص کردن مس ئله خاص ی را ک ه م ا س عی در حل آن داریم ،مورد بحث قرار می‌دهد .در مرحله بعد ،از مسئله معروف فروش نده دوره گ رد ( )TSPب ه عن وان ی ک م ورد اس تفاده می کن د و تکنی ک ه ای ط راحی مختلفی را که ارائه خواهیم کرد ،اعم ال می کن د .س پس برنام ه نویس ی خطی را معرفی کرده و کاربردهای آن را مورد بحث قرار می دهد .در نهایت ،نحوه استفاده از برنامه نویسی خطی برای ح ل ی ک مس ئله دنی ای واقعی را نش ان می ده د .در پایان این فصل ،شما باید بتوانید مفاهیم اساسی ط راحی ی ک الگ وریتم کارآم د را درک کنید .مفاهیم زیر در این فصل مورد بحث قرار می گیرند: ‏ رویکردهای مختلف برای طراحی یک الگوریتم ‏ درک موازنه مربوط به انتخاب طرح صحیح برای یک الگوریتم 95  بهترین شیوه های فرمول بندی یک مسئله دنیای واقعی ‏ حل یک مسئله بهینه سازی در دنیای واقعی بیایید ابتدا مفاهیم اساسی طراحی یک الگوریتم را بررسی کنیم. معرفی مفاهیم اولیه طراحی الگوریتم طبق فرهنگ لغت میراث آمریکایی ،یک الگوریتم ب ه این ص ورت تعری ف می‌ش ود: «مجموعه محدودی از دستورالعمل‌های بدون ابهام که مجموعه‌ای از شرایط اولی ه را می‌توان در یک توالی تجویز شده برای دستیابی به یک ه دف خ اص انج ام داد و دارای مجموعه‌ای از شرایط پایانی قابل تشخیص است" .طراحی ی ک الگ وریتم در م ورد دس تیابی ب ه این "مجموع ه متن اهی از دس تورالعمل ه ای ب دون ابه ام" ب ه کارآمدترین روش برای "دس تیابی ب ه ی ک ه دف خ اص" اس ت .ب رای ی ک مس ئله پیچی ده دنی ای واقعی ،ط راحی ی ک الگ وریتم ی ک ک ار خس ته کنن ده اس ت .ب رای دستیابی به یک طرح خوب ،ابتدا باید مسئله ای را که قصد حل ک ردن آن را داریم، کامال ً درک کنیم .قبل از بررسی نحوه انجام آن (یعنی طراحی الگوریتم) با مشخص کردن آنچه باید انجام شود (یعنی درک نیازمندیها) شروع می کنیم. درک مسئله شامل پرداختن به نیازمندیهای کارکردی و غیرکارکردی مسئله است. بیایید ببینیم اینها چیستند: نیازمندیهای کارکردی به طور رسمی رابط های ورودی و خروجی مسئله ای را ک ه می خواهیم حل کنیم و عملکردهای مرتبط با آنها را مشخص می کن د .نیازمن دیهای کارکردی به ما کمک می کند تا پردازش داده ها ،دستکاری داده ه ا و محاس باتی را که برای ایجاد نتیجه باید اجرا شوند ،درک کنیم. نیازمندیهای غیرکارکردی انتظارات را در مورد عملکرد و جنبه های امنیتی الگوریتم تنظیم می کند. توجه داشته باشید که ط راحی ی ک الگ وریتم مرب وط ب ه پ رداختن ب ه نیازمن دیهای کارکردی و غیرکارکردی به بهترین شکل ممکن تحت مجموعه شرایط داده ش ده و در نظر گرفتن مجموعه ای از منابع موج ود ب رای اج رای الگ وریتم ط راحی ش ده 96 است .برای دستیابی به یک پاسخ خوب که می توان د نیازمن دیهای ک ارکردی و غ یر کارکردی را برآورده کند ،طراحی ما باید به سه مورد زیر توجه کن د ،هم انطور ک ه در فصل ،1در بررسی اجمالی الگوریتم ها مورد بحث قرار گرفت: نگرانی :1درستی :آیا الگوریتم طراحی شده نتیج ه م ورد انتظ ار م ا را ایج اد می کند؟ نگرانی :2عملکرد :آیا این راه بهینه برای به دست آوردن این نتایج است؟ نگرانی :3مقیاس پذیری :الگوریتم چگون ه روی مجموع ه داده ه ای بزرگ تر عم ل می کند؟ در این بخش ،بیایید این نگرانی ها را یکی یکی بررسی کنیم. نگرانی - 1درستی :آیا الگوریتم طراحی شده نتیجه مورد انتظار ما را به دست می آورد؟ الگوریتم ،یک راه حل ریاضی برای یک مسئله دنیای واقعی است .برای مفید بودن، باید نتایج دقیقی به دست آورد .چگونگی تأیید ص حت ی ک الگ وریتم نبای د ی ک فک ر بعدی باش د .در ع وض ،بای د در ط راحی الگ وریتم پخت ه ش ود .قب ل از اس تراتژی بررسی چگونگی تأیید یک الگوریتم ،باید به دو جنبه زیر فکر کنیم: ‏ تعریف حقیقت :برای تأیید الگوریتم ،ما به برخی از نتایج صحیح شناخته شده برای یک مجموع ه معین از ورودی ه ا نی از داریم .این نت ایج ص حیح ش ناخته شده ،در زمینه مسئله ای که ما س عی در ح ل آن داریم ،حقیقت نامی ده می ش وند .حقیقت مهم اس ت زی را زم انی ک ه ب ه ط ور مک رر ب ر روی تکام ل الگوریتم خود به سمت یک راه حل بهتر ک ار می ک نیم ب ه عن وان ی ک مرج ع استفاده می شود. ‏ انتخاب معیارها :همچنین باید به این فکر کنیم که چگونه می‌خواهیم انح راف از حقیقت تعریف شده را حساب کنیم .انتخاب معیارهای صحیح به م ا کم ک می کند تا کیفیت الگوریتم خود را با دقت حساب کنیم. 97 به عنوان مثال ،برای الگوریتم های ی ادگیری ماش ینی نظ ارت ش ده ،می ت وانیم از داده های برچسب گذاری شده موجود به عنوان حقیقت استفاده کنیم .برای تع یین کمیت انحراف از حقیقت ،می توانیم یک یا چند معی ار مانن د دقت،ن رخ ی ادآوری ی ا صحت را انتخاب کنیم .توجه به این نکته مهم است ک ه در ب رخی م وارد اس تفاده، ی صحیح ،یک مقدار واحد نیست .در عوض ،خروجی صحیح به عنوان محدوده خروج ِ برای مجموعه معینی از ورودی ها تعریف می شود .همانطور که ما روی طراحی و توسعه الگوریتم خود کار می کنیم ،هدف بهبود مکرر الگوریتم تا زمانی است که در محدوده مشخص شده نیازمندیها قرار گیرد. در نظر گرفتن موارد لبه :یک مورد لبه زمانی اتفاق می افتد که الگ وریتم ط راحی شده ما در حداکثر پارامترهای عملیاتی ،عمل کند .یک مورد لب ه معم وال ً س ناریویی است که ن ادر اس ت ،ام ا بای د ب ه خ وبی آزم ایش ش ود زی را ممکن اس ت ب اعث شکست الگوریتم ما شود .موارد غیر لبه "مسیر ش اد" نامی ده می ش ود ک ه تم ام سناریوهایی را پوشش می دهد که معم وال ً زم انی اتف اق می افت د ک ه پارامتره ای عملیاتی در محدوده نرمال باشند .اکثر اوقات ،الگوریتم در "مسیر شاد" ب اقی می مان د .متأس فانه ،هیچ راهی ب رای دس تیابی ب ه تم ام م وارد لب ه ممکن ب رای ی ک الگوریتم مشخص وجود ندارد ،اما باید تا حد امکان موارد لبه را در نظر بگیریم .اما بدون در نظر گرفتن و فکر کردن در مورد موارد لبه ،ممکن است مش کالتی ایج اد شود. نگرانی - 2عملکرد :آیا این راه حل بهینه برای به دست آوردن این نتایج است؟ نگرانی دوم در مورد یافتن پاسخ سؤال زیر است :آیا این راه‌حل بهین ه اس ت و آی ا می‌توانیم تأیید کنیم که هیچ راه‌حل دیگری بهتر از راه‌حل ما برای این مسئله وج ود ندارد؟ در نگاه اول ،پاسخ به این سؤال بسیار ساده به نظر می‌رس د .ب ا این ح ال، برای دسته خاصی از الگوریتم‌ها ،محققان دهه‌ه ای ن اموفق را ص رف بررس ی این موضوع کرده‌اند که آیا راه‌حل خاصی که توسط یک الگوریتم تولید می‌شود به ترین است یا خیر و اینکه هیچ راه‌حل دیگری وجود ندارد که بتواند عملکرد بهتری داش ته 98 باشد .بنابراین ،مهم است ک ه ابت دا مس ئله ،نیازمن دیهای آن و من ابع موج ود ب رای اجرای الگوریتم را درک کنیم .برای ارائه بهترین راه ح ل ب رای ی ک مس ئله پیچی ده خاص ،باید به این سوال اساسی پاسخ دهیم که آی ا بای د ب ه دنب ال ی افتن راه ح ل بهینه برای این مسئله باشیم؟ اگ ر ی افتن و تأیی د راه‌ح ل بهین ه ی ک ک ار زم ان‌بر و پیچیده است ،در این صورت یک راه‌حل قابل اج را ممکن اس ت به ترین گزین ه م ا باشد .این راه حل های تقریبی قابل اجرا ،اکتشافی هستند .بنابراین ،درک مسئله و پیچیدگی های آن مهم است و به ما کمک می کند تا منابع مورد نیاز را برآورد کنیم. الگوریتم چند جمله ای :اگر یک الگوریتم دارای پیچیدگی زمانی ) O(nkباشد ،آن را الگوریتم چند جمله ای می نامیم که kیک ثابت است. گواهی :یک راه حل کاندید پیشنهادی که در پایان یک تکرار تولی د می ش ود گ واهی نامیده می شود .همانطور که به طور مکرر در حل یک مسئله خ اص پیش رفت می کنیم ،معموال ً یک سری گ واهی تولی د می ک نیم .اگ ر راه ح ل ب ه س مت همگ رایی حرکت کند ،هر گواهی تولید شده بهتر از گواهی قبلی خواهد بود .زمانی که گواهی ما شرایط را برآورده می کند ،آن گواهی را ب ه عن وان راه ح ل نه ایی انتخ اب می کنیم. در فصل 1مروری بر الگوریتم‌ها ،نماد Oبزرگ را معرفی کردیم که می‌ت وان از آن برای تحلیل پیچیدگی زمانی یک الگوریتم اس تفاده ک رد .در زمین ه تحلی ل پیچی دگی زمانی ،ما به فواصل زمانی مختلف زیر نگاه می کنیم: مدت زمانی که طول می کشد تا یک الگوریتم یک راه ح ل پیش نهادی را تولی د کن د که گواهی ( )trنامیده می شود. زمان الزم برای تأیید راه حل پیشنهادی (گواهی)ts ، مشخص کردن پیچیدگی مسئله در طول سالیان متمادی ،جامعه پژوهشی مسائل را ب ا توج ه ب ه پیچی دگی آنه ا ب ه دسته های مختلفی تقسیم کرده است .قبل از اینکه بخواهیم راه حل یک مس ئله را 99 طراحی کنیم ،منطقی است که ابتدا سعی کنیم آن را توصیف ک نیم .ب ه ط ور کلی سه نوع مسئله وجود دارد: نوع :1مسائلی که می توانیم برای آنها تضمین کنیم که یک الگوریتم چند جمل ه ای وجود دارد که می تواند برای حل آنها استفاده شود. نوع :2مسائلی که می توانیم ثابت کنیم ک ه ب ا الگ وریتم چن د جمل ه ای قاب ل ح ل نیستند نوع :3مسائلی که ما قادر به یافتن الگوریتم چند جمله ای برای ح ل آنه ا نیس تیم، اما همچنین نمی توانیم ثابت کنیم که حل چند جمله ای برای آن مسائل غ یر ممکن است. بیایید به کالس های مختلف مسائل نگاه کنیم: چند جمله ای غیر قطعی ( :)NPبرای اینکه یک مسئله NP ،باشد ،باید ش رایط زیر را داشته باشد: تضمین می شود که یک الگوریتم چند جمله ای وجود دارد که می توان د ب رای تأیی د بهینه بودن راه حل کاندید (گواهی) استفاده شود. چن++د جمل++ه ای ( :)Pاینه ا ان واعی از مس ائل هس تند ک ه می ت وان آنه ا را زی ر مجموع ه ای از NPدر نظ ر گ رفت .عالوه ب ر ب رآوردن ش رایط ی ک مس ئله ،NP مسائل Pباید شرایط دیگری را نیز داشته باشند: تضمین شده است که حداقل یک الگوریتم چند جمل ه ای وج ود دارد ک ه می توان د برای حل آنها استفاده شود .رابط ه بین مس ائل Pو NPدر ش کل 1-4نش ان داده شده است: 100 شکل :1-4رابطه بین مسائل Pو NP اگر مسئله ای NPاس ت ،آی ا Pن یز هس ت؟ این یکی از بزرگ ترین مس ائل در علم کامپیوتر است که حل نشده باقی مان ده اس ت .مس ائل ج ایزه ه زاره ک ه توس ط موسسه ریاضیات Clayانتخاب شده است ،ج ایزه 1میلی ون دالری را ب رای ح ل این مش کل اعالم ک رده اس ت ،زی را ت أثیر زی ادی در زمین ه ه ایی مانن د ه وش مصنوعی ،رمزنگاری و علوم نظری رایانه خواهد داشت: 101 شکل :2-4آیا P = NPاست؟ ما هنوز نمی دانیم بیایید لیست کالس های مختلف مسائل را ادامه دهیم: :NP-completeدسته NP-completeشامل سخت ت رین مس ائل در بین تم ام مسائل NPاست. یک مسئله NP-completeدارای دو شرط زیر است: 102 هیچ الگ وریتم چن د جمل ه ای ش ناخته ش ده ای ب رای تولی د گ واهی وج ود ن دارد. الگوریتم های چند جمله ای شناخته شده ای برای تأیید بهینه بودن گواهی پیشنهادی وجود دارد. :NP-hardدسته NP-hardشامل مسائلی است که حداقل به اندازه هر مس ئله در دسته NPسخت است ،اما نیازی نیست که در دسته NPقرار گیرند. حال ،بیایید سعی کنیم نموداری برای نشان دادن این دسته از مسائل ترسیم کنیم: شکل :3-4رابطه بین P، NP، NP-Completeو NP-Hard توجه داشته باشید که هنوز باید توسط جامعه تحقیقاتی ثابت شود که آیا P = NP است یا خیر .اگرچه این هنوز ثابت نشده است ،اما بسیار محتم ل اس ت ک ه ≠ P 103 NPباشد .در آن صورت ،هیچ راه حل چند جمله ای ب رای مس ائل NP-complete وجود ندارد .توجه داشته باشید که نمودار قبلی بر اساس این فرض است. تمایز بین -P، NP، NPکامل و NP-hard متأسفانه ،تمایز بین P، NP، NP-competeو NP-hardواضح نیست .اجازه دهید برای درک بهتر مف اهیم م ورد بحث در این بخش ،چن د مث ال را خالص ه و مطالع ه کنیم: :Pکالس مسائل قابل حل در زمان چند جمله ای است .مثال: جستجوی جدول هش الگوریتم های کوتاه ترین مسیر مانند الگوریتم های Djikstra الگوریتم های جستجوی خطی و دودویی مسئله :NPمسائل در زمان چند جمله ای قابل حل نیستند .ام ا ،ح ل آنه ا را می توان در زمان چند جمله ای تایید کرد .مثال: الگوریتم رمزگذاری RSA :NP-hardمسائل پیچیده ای هستند که هن وز هیچکس نمی توان د راه حلی ب رای آنها بیابد .اما اگر حل شود ،راه حل زمانی چند جمله ای خواهد داشت .مثال: خوشه بندی بهینه با استفاده از الگوریتم K-means :NP-completeمسائل « NP-completeس خت‌ترین» مس ائل در NPهس تند. آنها هم NP-hardو هم NPهستند .مثال: محاسبه راه حل بهینه مسئله فروشنده دوره گرد نکته :یافتن راه‌حل برای یکی از ه ر دو کالس ( NP-hardی ا )NP-completeب ه معنای راه‌حلی برای همه مسائل NP-hard/NP-completeاست. نگرانی - 3مقیاس پذیری :الگ وریتم چگون ه روی مجموع ه داده ه ای بزرگ تر عمل می کند؟ یک الگوریتم ،داده ها را به روشی تعریف شده پردازش می کند ت ا نتیج ه ای ایج اد کند .به طور کلی ،با افزایش اندازه داده ها ،پردازش داده ها و محاسبه نتایج م ورد 104 نیاز زمان بیشتری می برد .اصطالح کالن داده گاهی اوقات ب رای شناس ایی تقریب ا ً مجموعه داده هایی استفاده می ش ود ک ه انتظ ار می رود ک ار ب ا زیرس اخت ه ا و الگوریتم ها به دلیل حجم ،تنوع و سرعت چالش برانگیز باشد .یک الگ وریتم خ وب طراحی شده باید مقیاس پذیر باشد ،به این معنی که باید به گونه ای طراحی ش ود که تا جایی که امکان دارد ،بتواند به طور موثر اجرا شود ،از منابع موجود اس تفاده کند و نتایج صحیح را در یک بازه زمانی معقول ایجاد کند .ط راحی الگ وریتم هنگ ام برخورد با داده های بزرگ اهمیت بیشتری پیدا می کند .ب رای تع یین کمیت مقی اس پذیری یک الگوریتم ،باید دو جنبه زیر را در نظر داشته باشیم: ‏ افزایش نیاز به منابع با افزایش داده های ورودی :برآورد یک نیازمندی مانن د این را تحلیل پیچیدگی فضا می نامند. ‏ افزایش زمان صرف شده برای اجرا با افزایش داده های ورودی :تخمین آن را تحلیل پیچیدگی زمانی می نامند. توجه داشته باشید که ما در عصری زندگی می کنیم ک ه ب ا انفج ار داده ه ا تعری ف می ش ود .اص طالح کالن داده ب ه جری ان اص لی تب دیل ش ده اس ت زی را ان دازه و پیچیدگی داده‌هایی را که معموال ً باید توسط الگوریتم‌های م درن پ ردازش ش وند را در بر می‌گیرد .در حالی ک ه در مرحل ه توس عه و آزم ایش ،بس یاری از الگوریتم‌ه ا فقط از نمونه کوچکی از داده‌ها استفاده می‌کنند .هنگام طراحی یک الگوریتم ،مهم است که به جنبه مقیاس پذیری الگوریتم ها توج ه ش ود .ب ه ط ور خ اص ،تجزی ه و تحلیل دقیق (یعنی آزمایش یا پیش بینی) اثر عملکرد یک الگوریتم با افزایش اندازه مجموعه داده ها مهم است. کشش ابر و مقیاس پذیری الگوریتمی رایانش ابری گزینه های جدیدی را برای ک ار ب ا من ابع م ورد نی از ی ک الگ وریتم ،در دسترس قرار داده است .زیرس اخت‌های رای انش اب ری ب ا اف زایش نیازمن دی‌های پردازش ،می‌توانند من ابع بیش تری را ف راهم کنن د .ق ابلیت رای انش اب ری ،کش ش زیرساخت نامیده می شود و اکنون گزینه های بیشتری برای طراحی الگوریتم ارائه 105 کرده است .زمانی که یک الگوریتم در Cloudمس تقر می ش ود ،ممکن اس ت ب ر اساس اندازه داده هایی که باید پردازش شوند ،نیاز به CPUیا ماشین های مج ازی اضافی داشته باشد .الگوریتم یادگیری عمیق نمونه خوبی است .برای آم وزش ی ک مدل یادگیری عمیق خوب ،داده های برچسب گذاری شده زیادی مورد نی از اس ت. برای یک الگوریتم یادگیری عمیق خ وب ط راحی ش ده ،پ ردازش م ورد نی از ب رای آموزش یک مدل یادگیری عمیق مستقیما ً با تعداد نمونه ها متناسب است. هنگام آموزش یک مدل یادگیری عمیق در فضای ابری ،با اف زایش ان دازه داده ه ا، سعی می کنیم منابع بیشتری را برای حفظ زم ان آم وزش در مح دوده ه ای قاب ل مدیریت فراهم کنیم. آشنایی با استراتژی های الگوریتمی یک الگوریتم خوب طراحی شده ،سعی می کند تا با تقس یم مس ئله ب ه زیرمس ائل کوچکتر تا جایی که ممکن است ،استفاده از منابع موجود را به بهترین شکل ممکن بهینه کند .استراتژی های الگوریتمی متفاوتی برای طراحی الگوریتم ها وج ود دارد. یک استراتژی الگوریتمی با سه جنبه زیر از یک لیست الگ وریتمی ک ه ش امل جنب ه هایی از الگوریتم گم شده است سر و کار دارد .ما در این بخش سه استراتژی زیر را ارائه خواهیم کرد: ‏ استراتژی تقسیم و حل ‏ استراتژی برنامه نویسی پویا ‏ استراتژی الگوریتم حریصانه درک استراتژی تقسیم و حل یکی از راهبردها یافتن راهی برای تقسیم ی ک مس ئله بزرگ تر ب ه مس ائل کوچک تر است که بتوان آنها را مستقل از یکدیگر حل کرد .سپس حل‌های فرعی تولید ش ده توسط این مسائل فرعی برای ایجاد راه‌حل کلی مسئله ت رکیب می‌ش وند .از نظ ر ریاضی ،اگر ما در حال طراحی راه حلی برای یک مس ئله ( )Pب ا nورودی هس تیم 106 که نی از ب ه پ ردازش مجموع ه داده dدارد ،مس ئله را ب ه kزیرمس ئله P1 ،ت ا Pk تقس یم می ک نیم .ه ر ی ک از مس ائل ف رعی ی ک پارتیش ن از مجموع ه داده dرا پردازش می کند .به طور معمول ،پردازش P1به Pkاز d1به dkخواهیم داش ت. بیایید به یک مثال عملی نگاه کنیم. یک مثال عملی – تقسیم و حل که در آپاچی اسپارک اعمال شد آپاچی اسپارک ( )/https://spark.apache.orgیک چارچوب متن ب از اس ت که برای حل مس ائل پیچی ده توزی ع ش ده اس تفاده می ش ود .ب رای ح ل مس ائل ، پردازش ی ک مس ئله ،مس ئله را ب ه استراتژی تقسیم و حل را اجرا می کند .برای ِ زیرمسئله های مختلف تقس یم می کن د و آنه ا را مس تقل از یک دیگر پ ردازش می کند .این مسائل فرعی می توانند روی ماشین های جداگانه اجرا شوند ک ه مقی اس افقی را امک ان پ ذیر می کنن د .م ا این ک ار را ب ا اس تفاده از ی ک مث ال س اده از شمارش کلمات از یک لیست نشان خواهیم داد .فرض کنی د لیس ت کلم ات زی ر را داریم: ‏words_list = [“python”, “java”, “ottawa”, “news”, ]”“java”, “ottawa می خواهیم فراوانی هر کلمه را در این لیست محاسبه کنیم .برای این منظ ور ،م ا استراتژی تقسیم و حل را برای حل این مسئله ب ه روش ی کارآم د اعم ال خ واهیم کرد. 107 شکل :4-4تقسیم و حل نمودار قبلی مراحل زیر را نشان می دهد که یک مسئله به آنها تقسیم می شود: تقس++یم :داده ه ای ورودی ب ه پارتیش ن ه ایی تقس یم می ش وند ک ه می توانن د مستقل از یکدیگر پردازش شوند .به این عمل ،تقسیم می گوین د .در ش کل قب ل سه تقسیم داریم. نگاشت :هر عملیاتی که بتواند به طور مستقل روی یک تقسیم اجرا شود نگاش ت نامیده می شود .در نمودار قبلی ،عملی ات نگاش ت ،ه ر ی ک از کلم ات موج ود در پارتیشن را به جفت های کلید-مقدار پوشش می دهد. با توجه به سه تقسیم ،سه نگاشت وجود دارد که به صورت موازی اجرا می شوند. تصادفی سازی :تصادفی سازی ،فرآیندی است ک ه کلی دهای مش ابه را در کن ار هم قرار می دهد .هنگامی که کلیدهای مشابه کنار هم قرار می گیرند ،توابع تجمی ع می توانند بر روی مقادیر آنها اجرا شوند .توجه داشته باشید که تصادفی سازی ی ک عملیات فشرده کارایی است ،زیرا کلیدهای مشابه باید با هم جمع شوند ت ا بتوانن د در ابتدا در سراسر شبکه توزیع شوند. کاهش :اجرای یک تابع تجمیع بر روی مقادیر کلی دهای مش ابه ک اهش نامی ده می شود .در نمودار قبل باید تعداد کلمات را بشماریم. 108 بیایید ببینیم چگونه می‌توانیم کدی را برای پیاده‌سازی آن بنویسیم .برای نشان دادن استراتژی تقسیم و حل ،به یک چارچوب محاسباتی توزیع شده نیاز داریم .برای این کار پایتون را روی آپاچی اسپارک اجرا می کنیم: ابت دا ،ب رای اس تفاده از Spark ،Apacheی ک زمین ه زم ان اج را از Apache Sparkایجاد می کنیم: ‏import findspark )(findspark.init ‏from pyspark.sql import SparkSession = spark )(SparkSession.builder.master("local[*]").getOrCreate ‏sc = spark.sparkContext حاال بیایید یک لیست نمونه حاوی چند کلمه ایجاد کنیم .ما این لیست را ب ه س اختار داده های توزیع شده بومی ،Sparkبه نام مجموعه داده های توزیع ش ده انعط اف پذیر ( )RDDتبدیل می کنیم: ‏wordsList = ['python', 'java', 'ottawa', 'ottawa', ]''java','news )wordsRDD = sc.parallelize(wordsList, 4 # Print out the type of wordsRDD ))(print (wordsRDD.collect نتیجه زیر چاپ خواهد شد: ]'['python', 'java', 'ottawa', 'ottawa', 'java', 'news 109 حاال بیایید از یک تابع نگاشت برای تبدیل کلمات به یک جفت کلید-مقدار استفاده کنیم: ))wordPairs = wordsRDD.map(lambda w: (w, 1 ))(print (wordPairs.collect نتیجه زیر چاپ خواهد شد: [('python', 1), ('java', 1), ('ottawa', 1), ('ottawa', ])1), ('java', 1), ('news', 1 بیایید از تابع کاهش برای جمع آوری و به دست آوردن نتیجه استفاده کنیم: ‏wordCountsCollected = wordPairs.reduceByKey(lambda x,y: )x+y ))(print(wordCountsCollected.collect نتیجه زیر چاپ خواهد شد: [('python', 1), ('java', 2), ('ottawa', 2), ('news', ])1 این نشان می‌دهد که چگونه می‌توانیم از اس تراتژی تقس یم و ح ل ب رای ش مارش تعداد کلمات استفاده کنیم .توجه داشته باشید که تقسیم و حل زمانی مفید اس ت که یک مسئله را بت وان ب ه زیرمس ئله‌های ف رعی تقس یم ک رد و ه ر زیرمس ئله را می‌توان حداقل تا حدی مستقل از سایر مسائل فرعی حل کرد .این بهترین انتخاب ب رای الگوریتم‌ه ایی نیس ت ک ه ب ه پ ردازش تک راری فش رده مانن د الگوریتم‌ه ای 110 بهینه‌سازی نیاز دارند .برای چنین الگوریتم هایی ،برنامه نویسی پویا مناس ب اس ت که در قسمت بعدی ارائه می شود. زیرساخت‌های رایانش ابری مدرن ،مانند Microsoft Azure، Amazon Web Servicesو ،Google Cloudبا پیاده‌سازی استراتژی تقسیم و حل ،مس تقیم یا غیرمستقیم در پشت صحنه ،به مقیاس‌پذیری دست می‌یابند. درک استراتژی برنامه نویسی پویا در قسمت قبل به مطالعه تقسیم و حل پرداختیم که روشی از باال به پ ایین اس ت. در مقابل ،برنامه نویسی پویا یک استراتژی از پایین به باال است .م ا ب ا کوچک ترین مسئله فرعی شروع می کنیم و به ترکیب راه حل ها ادامه می دهیم .ما به ت رکیب ادامه می دهیم تا به راه حل نهایی برسیم .برنامه نویسی پویا مانند روش تقسیم و حل ،مسائل را با ترکیب راه حل های مسائل فرعی ح ل می کن د .برنام ه نویس ی پویا یک استراتژی است که در دهه 1950توسط ریچ ارد بلمن ب رای بهین ه س ازی کالس های خاصی از الگوریتم ها پیش نهاد ش د .توج ه داش ته باش ید ک ه در برنام ه نویسی پویا کلم ه " "Programmingب ه اس تفاده از روش ج دولی اش اره دارد و ربطی به نوشتن کد ندارد .برخالف استراتژی تقس یم و ح ل ،برنام ه نویس ی پوی ا زم انی قاب ل اج را اس ت ک ه زیرمس ائل مس تقل نباش ند .معم وال ً ب رای مس ائل بهینه‌س ازی ک ه در آن راه‌ح ل ه ر ی ک از مس ائل ف رعی دارای ی ک مق دار اس ت، استفاده می‌ش ود .ه دف م ا ی افتن راه حلی ب ا ارزش بهین ه اس ت .ی ک الگ وریتم برنامه‌نویسی پویا هر زیرمسئله را فقط یک بار حل می‌کند و سپس پاس خ آن را در یک جدول ذخیره می‌کند ،در نتیجه از کار محاسبه مجدد پاسخ ،هر بار که ب ا مس ئله فرعی مواجه می‌شود اجتناب می‌کند. شرایط استفاده از برنامه نویسی پویا مسئله ای که با برنامه نویسی پوی ا س عی در ح ل آن داریم بای د دو وی ژگی داش ته باشد. 111 .1ساختار بهینه :برنامه نویسی پویا زمانی مزایای عملکرد خوب را به ارمغ ان می آورد که مسئله ای ک ه م ا در تالش ب رای ح ل آن هس تیم را می ت وان ب ه مس ائل فرعی تقسیم کرد .برنامه نویسی پویا با ترکیب ح ل مس ائل ف رعی ک ار می کن د. اولین گام برای استفاده از برنامه نویسی پوی ا ب رای ح ل ی ک مس ئله خ اص Aاین است که بررسی کنیم که آیا مسئله Aچنین زیرساخت ه ایی را نش ان می ده د ی ا خیر. .2مسائل فرعی همپوشانی :مبتنی بر مکانیزم ذخ یره س ازی هوش مند اس ت ک ه سعی می کند از نتایج محاسبات سنگین ،مجددا استفاده کند .به این مکانیس م ِ کش هوشمند ،حافظه‌گذاری می‌گویند. مسائل فرعی تا حدی شامل محاسبه ای است که در آن مسائل ف رعی تک رار می شود .ایده این اس ت ک ه ی ک ب ار آن محاس به را انج ام دهیم (ک ه مرحل ه زم ان‌بر است) و سپس از آن برای سایر مس ائل ف رعی اس تفاده مج دد ک نیم .این ک ار ب ا استفاده از یادداشت به دست می آید ،ک ه ب ه وی ژه در ح ل مس ائل بازگش تی ک ه ممکن است ورودی های یکس ان را چن دین ب ار ارزی ابی کنن د ،مفی د اس ت .توج ه داشته باشید که یک تابع بازگشتی یک مسئله خاص را با فراخوانی یک ک پی از خ ود و حل مسائل فرعی کوچکتر از مسائل اصلی حل می کند. راه‌حل‌های محاسبه‌شده مسائل فرعی در یک جدول ذخیره می‌شوند ،به طوری که نیازی به محاسبه مجدد نباشد. از این رو ،این تکنیک در جایی که مسئله ف رعی همپوش انی وج ود دارد م ورد نی از است .مثال، .1جستجوی دودویی مسئله فرعی همپوشانی ندارد. .2در حالی که برنامه بازگشتی اع داد فیبون اچی دارای بس یاری از مس ائل ف رعی همپوشانی هستند. درک الگوریتم های حریصانه 112 همانطور که از نام آن مشخص است ،یک الگوریتم حریص انه نس بتا ً س ریع ی ک راه حل خوب تولید می کند ،اما نمی تواند راه ح ل بهین ه باش د .مانن د برنام ه نویس ی پویا ،الگوریتم های حریصانه عمدتا ً برای حل مسائل بهینه س ازی در ج ایی ک ه نمی ت وان از اس تراتژی تقس یم و ح ل اس تفاده ک رد ،اس تفاده می ش ود .در الگ وریتم حریصانه ،راه حل ب ا دنبال ه ای از مراح ل محاس به می ش ود .در ه ر مرحل ه ،ی ک انتخاب بهینه محلی انجام می شود. شرایط استفاده از برنامه نویسی حریصانه حریصانه یک استراتژی است که به خوبی روی مسائل با دو ویژگی زی ر ج واب می دهد: .1سراسری از محلی :با انتخاب یک بهینه محلی می توان به ی ک بهین ه سراس ری رسید. .2زیرساخت بهینه :یک راه حل بهینه برای مس ئله ،از راه ح ل ه ای بهین ه مس ائل فرعی ساخته می شود. برای درک الگوریتم حریصانه ،ابتدا دو اصطالح را تعریف می کنیم: سربار الگوریتمی :هر زمان که بخواهیم راه حل بهینه برای ی ک مس ئله خ اص پی دا کنیم ،مدتی طول می کشد .با پیچیده‌تر شدن مسائلی که سعی در بهینه‌سازی آنه ا داریم ،زمان الزم برای یافتن راه‌حل بهینه نیز افزایش می‌یابد .ما سربار الگوریتمی را با Ωiنشان می دهیم. دلتا از بهینه :برای یک مسئله بهینه سازی معین ،یک راه حل بهینه وجود دارد. به طور معمول ،ما به طور مکرر راه حل را ب ا اس تفاده از الگ وریتم انتخ ابی خ ود بهینه می کنیم .برای یک مسئله معین ،همیشه ی ک راه ح ل کام ل ب ه ن ام راه ح ل بهینه برای مسئله فعلی وجود دارد .همانطور ک ه بحث ش د ،ب ر اس اس طبقه‌بن دی مسئله‌ای که در تالش ب رای ح ل آن هس تیم ،ممکن اس ت راه‌ح ل بهین ه ناش ناخته باشد یا اینکه محاس به و تأیی د آن زم ان غ یرمنطقی ط ول بکش د .ب ا ف رض اینک ه 113 اوت از بهین ه ب رای راه ح ل فعلی در iامین تک رار، جواب بهینه مشخص است ،تف ِ دلتا از بهینه نامیده می شود و با Δiنشان داده می شود. برای مسائل پیچیده ،ما دو استراتژی ممکن داریم: استراتژی :1زمان بیشتری را صرف یافتن راه حلی نزدیک به بهینه کنی د ت ا Δiت ا حد امکان کوچک باشد. استراتژی :2به حداقل رساندن سربار الگوریتمی . Ωi ،از رویک رد س ریع و ک ثیف استفاده کنید و فقط از یک راه حل قابل اجرا استفاده کنید. الگوریتم‌های حریصانه مبتنی بر استراتژی ۲هستند ،جایی که ما تالشی برای ی افتن بهینه سراسری نمی‌کنیم و ب ه ج ای آن ،هزینه‌ه ای س ربار الگ وریتم را ب ه ح داقل می‌رسانیم .استفاده از الگوریتم حریصانه یک استراتژی سریع و ساده ب رای ی افتن مقدار بهینه سراسری برای مسائل چند مرحله‌ای اس ت .این اس تراتژی مبت نی ب ر انتخاب مقادیر بهینه محلی است بدون اینکه تالشی برای تأیید اینکه آیا مقادیر بهینه محلی در سطح سراسری نیز بهینه هستند یا خیر .ب ه ط ور کلی ،ت ا زم انی ک ه م ا خوش شانس نباشیم ،یک الگوریتم حریصانه به مقداری منجر نمی ش ود ک ه بت وان آن را در سطح سراسری بهینه در نظر گرفت .با این حال ،ی افتن ی ک مق دار بهین ه سراسری یک کار زمان بر است. از این رو ،الگوریتم حریصانه در مقایسه با الگوریتم‌های برنامه‌نویسی تقسیم و حل سریع است .به طور کلی ،یک الگوریتم حریصانه به صورت زیر تعریف می‌شود: ف رض کنی د ی ک مجموع ه داده Dداریم .در این مجموع ه داده ،ی ک عنص ر k ،را انتخاب کنید. فرض کنید راه‌حل یا گواهی کاندی د Sاس ت K .را در راه‌ح ل ، Sلح اظ کنی د .اگ ر بتوان آن را گنجاند ،پس راه‌حل ) Union(S, eاست. این فرآیند را تا زمانی که Sپر شود یا Dتمام شود تکرار کنید. مثال :الگوریتم طبقه‌بندی و درخت رگرسیون ( )CARTیک الگوریتم حریصانه است که به دنبال تقسیم بهینه در سطح باال است. 114 این فرآیند را در تمامی سطوح بعدی تکرار می کند .توجه داشته باشید که الگوریتم CARTمحاسبه و بررسی نمی کند که آیا تقسیم به پ ایین ت رین ناخالص ی ممکن در چندین سطح منجر می شود یا خیر CART .از الگوریتم حریص انه اس تفاده می کن د زیرا یافتن درخت بهینه به عنوان یک مسئله NP-Completeشناخته شده اس ت و دارای پیچیدگی الگوریتمی زمان )) O(exp(mاست. یک کاربرد عملی -حل مسئله فروشنده دوره گرد ()TSP بیایید ابتدا به بیان مسئله TSPنگاهی بیندازیم ،که یک مس ئله ش ناخته ش ده اس ت که در دهه 1930ب ه عن وان ی ک چ الش مط رح ش د TSP .ی ک مس ئله NP-hard است .برای شروع ،می‌توانیم به‌طور تصادفی توری ایجاد کنیم که شرایط بازدید از همه شهرها را بدون اهمیت دادن به راه‌حل بهینه برآورده کند .سپس ،ما می توانیم برای بهبود راه حل با هر تکرار کار کنیم .هر توری که در یک تکرار ایجاد می ش ود، راه حل کاندید نامیده می شود (همچنین گواهی نامیده می شود) .اثبات بهینه بودن ی ک گ واهی نیازمن د زم ان فزاین ده ای اس ت .درع وض ،راه‌حل‌ه ای مبت نی ب ر اکتشافات مختلف استفاده می‌شود که تورهایی را ایجاد می‌کند که نزدیک ب ه بهین ه هستند اما بهینه نیستند .یک فروش نده دوره گ رد بای د از لیس ت معی نی از ش هرها بازدید کند تا کار خود را انجام دهد: INPUTلیس تی از nش هر (ک ه ب ا Vمش خص می ش ود) و فواص ل بین ه ر جفت شهرd ij (1 ≤ i، j ≤ n) ، OUTPUTکوتاهترین توری که دقیقا ً یک بار از ه ر ش هر بازدی د می کن د و ب ه ش هر اولیه بازمی گردد به موارد زیر توجه کنید :فواصل بین شهرهای موجود در لیست مشخص است، هر شهر در لیست داده شده باید دقیقا یک بار بازدید شود. 115 آیا می توانیم برنامه سفر را برای فروشنده تهی ه ک نیم؟ راه ح ل بهین ه ای ک ه می تواند کل مسافت طی شده توسط فروشنده دوره گ رد را ب ه ح داقل برس اند چ ه خواهد بود؟ فواصل زیر بین پنج شهر کانادا است که می توانیم برای TSPاس تفاده کنیم: ‏Toronto ‏Kingston ‏Montreal ‏Ottawa ‏Sudbury 484 450 196 199 - ‏Ottawa 680 542 287 - 199 ‏Montreal 634 263 - 287 196 ‏Kingston 400 - 263 542 450 ‏Toronto - 400 634 680 484 ‏Sudbury توجه داشته باشید که هدف دریافت توری است که در شهر اولیه شروع و به پای ان می رسد .به عنوان مثال ،یک تور معمولی می توان د ات اوا – س ادبری – مون ترال – کینگستون – تورنتو – اتاوا با هزینه = 450 + 263 + 287 + 680 + 484 2164باشد .آیا این توری است که فروشنده باید حداقل مسافت را طی کن د؟ راه حل بهینه ای که بتواند ک ل مس افت طی ش ده توس ط فروش نده دوره گ رد را ب ه حداقل برساند ،چه خواهد بود؟ فکر کردن و محاسبه را به عهده شما می گذارم. استفاده از استراتژی brute-force اولین راه حلی که برای ح ل TSPب ه ذهن می رس د اس تفاده از brute force برای رسیدن به کوتاه ترین مسیر است ک ه در آن فروش نده دقیق ا ً ی ک ب ار از ه ر شهر بازدید می کند و به شهر اولیه باز می گردد. بنابراین ،استراتژی brute-forceبه صورت زیر عمل می کند: .1تمام تورهای ممکن را ارزیابی کنید. .2یکی را انتخاب کنید که کمترین فاصله را برای آن به دست آوریم. 116 مسئله این است که برای nشهر تع داد ! ( )n-1توره ای ممکن وج ود دارد یع نی پنج شهر 4 ! = 24تور تولید می کنند ،و ما یکی را انتخاب می کنیم که با کمترین فاصله مطابقت دارد .بدیهی است که این روش تنها زمانی جواب می دهد که تعداد شهرها زیاد نباشد .با افزایش تع داد ش هرها ،اس تراتژی brute-forceب ه دلی ل تعداد زیادی جایگشت ایجاد شده با استفاده از این رویکرد غیرقابل ح ل می ش ود. بیایید ببینیم چگونه می توانیم استراتژی brute-forceرا در پایتون پی اده س ازی کنیم. ابتدا ،توجه داشته باشید که یک تور ،}1،2،3{ ،یک گشت و گذار در شهر از شهر 1 به شهر 2و شهر 3را نشان می دهد. مسافت کل در یک تور ،کل مسافت طی شده در یک تور است .فرض می کنیم که فاصله بین شهرها کوتاهترین فاصله بین آنهاست (که فاصله اقلیدسی است) .ابت دا سه تابع مفید را تعریف می کنیم: : distance_pointsفاصله مطلق بین دو نقطه را محاسبه می کند : distance_tourکل مسافتی را که فروشنده باید در یک تور مشخص طی کند را محاسبه می کند :Generation_citiesبه ط ور تص ادفی مجموع ه ای از nش هر واق ع در ی ک مستطیل با عرض 500و ارتفاع 300را ایجاد می کند. بیایید به کد زیر نگاه کنیم: ‏import random ‏from itertools import permutations ‏alltours = permutations در کد قبلی ،همه تورها را از تابع جایگشت بسته itertoolsپیاده سازی ک ردیم. ما همچنین فاصله را با یک عدد مختل ط نش ان داده ایم .این ب ه معن ای م وارد زی ر است: 117 .) استa,b( به سادگی فاصلهb وa محاسبه فاصله بین دو شهر . ایجاد کنیمgener_cities(n) شهر را فقط با فراخوانیn ما می توانیم تعداد def distance_tour(aTour): return sum(distance_points(aTour[i - 1], aTour[i]) for i in range(len(aTour))) aCity = complex def distance_points(first, second): return abs(first second) def generate_cities (number_of_cities): seed=111;width=500;height=300 random.seed((number_of_cities, seed)) return frozenset(aCity(random.randint(1, width), random.randint(1, height)) for c in range(number_of_cities)) که تمام تورهای ممکن در شهرها، تعریف کنیمbrute_force ،حاال بیایید یک تابع یکی را ب ا کم ترین، هنگامی که تمام تورهای ممکن را ایج اد ک رد.را تولید می کند :مسافت انتخاب می کند def brute_force(cities): "Generate all possible tours of the cities and choose the shortest tour." 118 return shortest_tour(alltours(cities)) def shortest_tour(tours): return min(tours, key=distance_tour) حاال بیایید توابع کاربردی را تعریف کنیم که می توانند به ما در رس م ش هرها کم ک : توابع زیر را تعریف خواهیم کرد.کنند . تمام شهرها و پیوندها را در یک ت ور خ اص ترس یم می کن د:visualize_tour .همچنین شهری را که تور از آنجا شروع شد را برجسته می کند ب رای ترس یم ش هرها وvisualize_tour توس ط: visualize_segment .پیوندها در یک بخش استفاده می شود :به کد زیر نگاه کنید %matplotlib inline import matplotlib.pyplot as plt def visualize_tour(tour, style='bo-'): if len(tour) > 1000: plt.figure(figsize=(15, 10)) start = tour[0:1] visualize_segment(tour + start, style) visualize_segment(start, 'rD') def visualize_segment (segment, style='bo-'): plt.plot([X(c) for c in segment], [Y(c) for c in segment], style, clip_on=False) plt.axis('scaled') plt.axis('off') 119 def X(city): "X axis"; return city.real def Y(city): "Y axis"; return city.imag : را پیاده سازی کنیم که کارهای زیر را انجام می دهدtsp)( ،بیایید یک تابع تور را بر اساس الگوریتم و تعداد شهرهای درخواستی ایجاد می کند مدت زمان اجرای الگوریتم را محاسبه می کند یک طرح ایجاد می کند : می توانیم از آن برای ایجاد یک تور استفاده کنیم، تعریف شدtsp)( هنگامی که from time import clock from collections import Counter def tsp(algorithm,cities): t0 = clock() tour = algorithm(cities) t1 = clock() # Every city appears exactly once in tour assert Counter(tour) == Counter(cities) visalize_tour(tour) print("{}:{} cities => tour length {;.0f} (in {:.3f} sec".format( name(algorithm), len(tour), distance_tour(tour), t1t0)) def name(algorithm): return algorithm.__name__.replace('_tsp','') 120 توجه داشته باشید که ما از آن برای تولید تور برای 10شهر استفاده کرده ایم .ب ه عنوان n = 10، =! (1-10) 362880جایگشت ممکن ایجاد می کند .اگر n افزایش یابد ،تعداد جایگشت ها ب ه ش دت اف زایش می یاب د و نمی ت وان از روش brute-forceاستفاده کرد. استفاده از یک الگوریتم حریصانه اگر از یک الگوریتم حریصانه برای حل TSPاستفاده ک نیم ،در ه ر مرحل ه ب ه ج ای یافتن شهری برای بازدید که بهترین مس یر کلی را در پی داش ته باش د ،می‌ت وانیم شهری را انتخاب کنیم که معقول به نظر می‌رسد .بنابراین ،ه ر زم ان ک ه نی از ب ه انتخاب شهری داشته باشیم ،فقط نزدیک‌ترین شهر را انتخاب می‌کنیم ب دون اینک ه زحمتی برای بررسی اینکه آیا این انتخاب منجر به مسیر بهینه سراس ری می‌ش ود. رویکرد الگوریتم حریصانه ساده است: .1از هر شهری شروع کنید. 121 با حرکت ب ه ش هر بع دی ک ه نزدیک ترین ش هر قبال ً بازدی د نش ده، در هر مرحله.2 . به ساخت تور ادامه دهید،است . را تکرار کنید2 مرحله.3 تعری ف ک نیم ک ه بتوان د این منط ق راgreedy_algorithm بیایید تابعی به ن ام :پیاده سازی کند def greedy_algorithm(cities, start=None): city_ = start or first(cities) tour = [city_] unvisited = set(cities - {city_}) while unvisited: city_ = nearest_neighbor(city_, unvisited) tour.append(city_) unvisited.remove(city_) return tour def first(collection): return next(iter(collection)) def nearest_neighbor(city_a, cities): return min(cities, key=lambda city_: distance_points(city_, city_a)) شهر2000 برای ایجاد یک تور برایgreedy_algorithm بیایید از،حال :استفاده کنیم tsp(greedy_algorithm, generate_cities(2000)) 122 شکل :5-4شهرهای نمایش داده شده در نوت بوک Jupyter توجه داشته باشید که ساخت تور برای 2000شهر فقط 0.514ثانیه طول کش ید. اگر از روش bruteforceاستفاده کرده بودیم ! ( )2000-1جایگش ت تولی د می کرد ،که تقریبا بی نهایت است .توجه داشته باشید که الگوریتم حریص انه مبت نی ب ر اکتشاف است و هیچ مدرکی وجود ندارد ک ه راه ح ل بهین ه باش د .ح ال ،بیایی د ب ه طراحی الگوریتم PageRankنگاه کنیم. ارائه الگوریتم PageRank به عنوان یک مثال عملی ،بیایید به الگوریتم PageRankنگاهی بیندازیم که در ابتدا توسط گوگل برای رتبه بندی نتایج جستجوی یک پرس و ج وی ک اربر اس تفاده می شد .عددی تولید می کند که اهمیت نت ایج جس تجو را در زمین ه پ رس و ج ویی ک ه کاربر اجرا کرده است ،حساب می کند .این کار توسط دو دانش جوی ، Ph.Dل ری 123 پیج و س رگی ب رین ،در اواخ ر ده ه 1990در اس تنفورد ،ک ه همچ نین گوگ ل را راه‌اندازی کردند ،طراحی شده است. الگوریتم PageRankاز نام Larry PageLetنامگذاری شد که ب رای اولین ب ار به طور رسمی مسئله ای را که رتب ه ص فحه در ابت دا ب رای آن ط راحی ش ده ب ود تعریف کرد. تعریف مسئله ه ر زم ان ک ه ک اربر ،درخواس تی را در ی ک موت ور جس تجو در وب وارد می کن د، معموال ً تعداد زیادی نتیجه به دست می آید .برای اینکه نتایج برای کاربر نهایی مفی د باشد ،رتبه بندی صفحات وب با استفاده از برخی معیاره ا مهم اس ت .نت ایجی ک ه نمایش داده می‌شوند از این رتبه‌بندی برای خالصه کردن نتایج برای کاربر اس تفاده می‌کنند و به معیارهای تعریف‌شده توسط الگوریتم زیربنایی مورد استفاده وابس ته هستند. پیاده سازی الگوریتم PageRank ابتدا هنگام استفاده از الگوریتم PageRankاز نمایش زیر استفاده می شود: ‏ صفحات وب توسط گره ها در یک گراف جهت دار نمایش داده می شوند. ‏ یال های نمودار ،مربوط به لینک ها هستند. مهمترین بخش الگ وریتم PageRankاین اس ت ک ه به ترین راه را ب رای محاس به اهمیت هر صفحه ای که توسط نتایج پرس و ج و برگردان ده می ش ود ،ارائ ه ده د. رتبه یک صفحه وب خاص در شبکه به عن وان احتم ال اینک ه شخص ی ک ه ب ه ط ور تصادفی از لبه ها عبور می کند (یعنی کلیک روی پیوندها) و به آن ص فحه می رس د محاسبه می شود .همچنین این الگوریتم با ضریب میرایی آلفا که مقدار پیش‌ف رض آن 0.85است ،پارامترس ازی می‌ش ود .این ض ریب م یرایی احتم ال ادام ه کلی ک کاربر است .توجه داش ته باش ید ک ه ص فحه ب ا ب االترین PageRankج ذاب ت رین است :صرف نظ ر از اینک ه ش خص از کج ا ش روع می کن د ،این ص فحه بیش ترین احتمال را دارد که مقصد نهایی آن باشد .الگوریتم نیاز به تکراره ای زی ادی دارد ی ا 124 از مجموعه صفحات وب عبور می کند تا اهمیت (یا مقدار رتبه صفحه ) هر ص فحه وب را تعیین کند .برای محاسبه ع ددی از 0ت ا 1ک ه می توان د اهمیت ی ک ص فحه خاص را حساب کند ،الگوریتم اطالعاتی را از دو مولفه زیر به کار می گیرد: ‏ اطالعاتی که مختص پ رس و ج وی وارد ش ده توس ط ک اربر می باش د :این مؤلفه ،در زمینه درخواس ت وارد ش ده توس ط ک اربر ،م یزان مرتب ط ب ودن محتوای صفحه وب را تخمین می زند. محتوای صفحه مستقیما ً به نویسنده صفحه بستگی دارد. ‏ اطالعاتی که به درخواست وارد ش ده توس ط ک اربر مرتب ط نمی باش د :این مؤلفه سعی می کند اهمیت هر صفحه وب را در زمین ه پیون دها ،دی دگاهها و همسایگی آن حساب می کند .همسایگی یک صفحه وب ،گروهی از ص فحات وب هستند که مستقیما ً به یک صفحه خ اص متص ل می ش وند .محاس به این مولفه دشوار است زیرا صفحات وب ناهمگن هستند و ایج اد معیاره ایی ک ه می تواند در سراسر وب اعمال شود ،دشوار است. برای پیاده سازی الگوریتم PageRankدر پایتون ،ابت دا کتابخان ه ه ای الزم را وارد می کنیم: ‏import numpy as np ‏import networkx as nx ‏import matplotlib.pyplot as plt توجه داشته باشید که ش بکه از /https://networkx.orgاس ت .ب رای ه دف نمایش ،فرض می کنیم که ما فقط پنج صفحه وب را در شبکه تجزی ه و تحلی ل می کنیم .بیایید این مجموعه از صفحات را my_pagesبنامیم و با هم در ش بکه ای ب ه نام my_webقرار دارند: )(my_web = nx.DiGraph 125 my_pages = range(1,5) حاال بیایید آنها را به صورت تصادفی وصل کنیم تا یک شبکه واقعی شبیه سازی :شود connections = [(1,3),(2,1),(2,3),(3,1),(3,2),(3,4), (4,5),(5,1),(5,4)] my_web.add_nodes_from(my_pages) my_web.add_edges_from(connections) :حاال بیایید این گراف را رسم کنیم pos=nx.shell_layout(my_web) nx.draw(my_web, pos, arrows=True, with_labels=True) plt.show() :این کد نمایش تصویری شبکه ما را به شرح زیر ایجاد می کند 126 شکل :6-4نمایش تصویری شبکه در الگوریتم ،PageRankالگوه ای ی ک ص فحه وب در ماتریس ی ب ه ن ام م اتریس انتقال وجود دارد .الگوریتم هایی وجود دارند که به طور م داوم م اتریس انتق ال را به روز می کنند تا وضعیت دائم ا ً در ح ال تغی یر وب را ،ثبت کنن د .ان دازه م اتریس انتقال n x nاست که nتعداد گره ها است. اعداد موجود در ماتریس احتمال این است که یک بازدیدکننده بع دا ً ب ه دلی ل پیون د خروجی به آن پیوند برود .در مورد ما ،گراف قبلی ،وب ثابتی را نشان می دهد ک ه ما داریم .بیایید تابعی را تعریف کنیم ک ه بت وان از آن ب رای ایج اد م اتریس انتق ال استفاده کرد: ‏def create_page_rank(a_graph): )nodes_set = len(a_graph )M = nx.to numpy_matrix(a_graph 127 outwards = np.squeeze(np.asarray (np. sum (M, =)))axis=1 (prob outwards = np.array [1.0/count )]if count>0 else 0.0 for count in outwards ))G = np.asarray(np.multiply (M.T, prob_outwards )p = np.ones(nodes_set) / float (nodes_set ‏if np.min(np. sum(G, axis=0)) < 1.0: ‏print ('WARN: G is substochastic ‏return G, p توجه داشته باشید که این تابع Gرا برمی گرداند ،که نشان دهن ده م اتریس انتق ال برای گراف ما است .بیایید ماتریس انتقال را برای گراف خود ایجاد کنیم: )G,p = create_page_rank(my_web شکل :7-4ماتریس انتقال توجه داشته باشید که ماتریس انتقال برای گراف ما 5*5است .هر ستون مرب وط به هر گره در نمودار اس ت .ب ه عن وان مث ال ،س تون 2در م ورد گ ره دوم اس ت. 128 احتمال 0.5وجود دارد که بازدیدکننده از گره 2ب ه گ ره 1ی ا گ ره 3ح رکت کن د. توجه داشته باشید که قطر ماتریس انتقال 0است همانطور که در گراف ما وج ود دارد ،هیچ پیوند خروجی از یک گره ب ه خ ودش وج ود ن دارد .در ی ک ش بکه واقعی، ممکن است امکان پذیر باشد .توجه داشته باشید که ماتریس انتق ال ی ک م اتریس خلوت است .با افزایش تعداد گ ره ه ا ،بیش تر مق ادیر آن 0خواه د ب ود .بن ابراین، ساختار یک گراف به عنوان یک ماتریس انتقال استخراج می شود .در یک م اتریس انتقالی که گره ها را در ستون ها و سطر ها نشان می دهد: ستون ها :نشان دهنده گره ای است که یک وب گرد در آن قرار دارد سطر ها :احتمال اینکه جستجوکننده به دلیل پیوندهای خ روجی از گ ره ه ای دیگ ر بازدید کند را نشان می دهد در وب واقعی ،ماتریس انتقالی که الگوریتم PageRankرا تغذیه می کن د ،توس ط کاوش مداوم عنکبوت ها در پیوندها ساخته می شود. آشنایی با برنامه نویسی خطی بسیاری از مسائل دنیای واقعی در حال به حداکثر رساندن یا به حداقل رساندن یک هدف با برخی محدودیت‌ها هستند. یک رویکرد این است که هدف را به عن وان ت ابع خطی ب رخی از متغیره ا مش خص کنیم .ما همچنین محدودیت‌های منابع را به عنوان برابری یا نابرابری در آن متغیرها فرموله می‌کنیم .این رویکرد را مس ئله برنام ه نویس ی خطی می نامن د .الگ وریتم اصلی برنامه نویسی خطی توسط جورج دانتسیگ در دانش گاه کالیفرنی ا در ب رکلی در اوایل دهه 1940توسعه یافت Dantzig .از این مفهوم ب رای آزم ایش برنام ه ریزی تدارکات و ظرفیت لجستیکی برای سربازان در حین کار برای ن یروی ه وایی ایاالت متحده استفاده کرد .در پایان جنگ جهانی دوم ،دانتسیگ شروع به کار ب رای پنتاگون کرد و الگوریتم خود را به تک نیکی تب دیل ک رد ک ه ن ام آن را برنامه‌نویس ی خطی گذاشت .برای برنامه ریزی نبرد نظامی استفاده می شد .امروزه از آن برای حل مسائل مهم دنیای واقعی که مربوط به کمینه کردن یا بیشینه کردن ی ک متغ یر 129 بر اساس محدودیت‌های خاص است ،استفاده می‌شود .چند نمونه از این مسائل به شرح زیر است: ‏ به حداقل رساندن زمان تعمیر خودرو در مکانیکی بر اساس منابع ‏ تخصیص منابع توزیع شده موجود در یک محیط محاسباتی توزی ع ش ده ب رای به حداقل رساندن زمان پاسخ ‏ حداکثر ک ردن س ود ی ک ش رکت ب ر اس اس تخص یص بهین ه من ابع در داخ ل شرکت فرمول بندی یک مسئله برنامه نویسی خطی شرایط استفاده از برنامه نویسی خطی به شرح زیر است: ما باید بتوانیم مسئله را از طریق مجموعه ای از معادالت فرمول بندی کنیم. متغیرهای مورد استفاده در معادله باید خطی باشند. تعریف تابع هدف توجه داشته باشید که هدف هر یک از سه مثال قبل ،به حداقل رس اندن ی ا ح داکثر کردن یک متغیر است .این هدف از نظر ریاضی به صورت تابع خطی سایر متغیرها فرموله می شود و تابع هدف نامی ده می ش ود .ه دف ی ک مس ئله برنام ه نویس ی خطی این است که تابع هدف را کمینه یا بیشینه کند در حالی که در محدودیت های مشخص شده باقی بماند. تعیین محدودیت ها هنگام تالش برای به حداقل رساندن یا ب ه ح داکثر رس اندن چ یزی ،مح دودیت‌های خاصی در مسائل دنیای واقعی وجود دارد که باید رع ایت ش وند .ب ه عن وان مث ال، زمانی که سعی می کنیم زمان تعمیر خودرو را به حداقل برسانیم ،همچنین باید در نظر داشته باشیم که تعداد محدودی مکانیک در دسترس است .تعیین هر محدودیت 130 از طریق یک معادله خطی بخش مهمی از فرمول بندی یک مس ئله برنام ه نویس ی خطی است. یک برنامه کاربردی -برنامه ریزی ظرفیت با برنامه نویسی خطی بیایید به یک مورد کاربردی عملی نگاه ک نیم ک ه در آن می ت وان از برنام ه نویس ی خطی برای حل یک مسئله دنیای واقعی اس تفاده ک رد .بیایی د ف رض ک نیم ک ه می خواهیم سود یک کارخانه پیشرفته را ک ه دو ن وع مختل ف رب ات تولی د می کن د ،ب ه حداکثر برسانیم: مدل پیشرفته ( :)Aاین مدل ،عملکرد کامل را ف راهم می کن د .تولی د ه ر واح د از مدل پیشرفته منجر به سود 4200دالری می شود. مدل پایه ( :) Bاین فقط عملکرد اولیه را ارائه می دهد .تولید هر واحد از مدل پای ه منجر به سود 2800دالری می شود. برای ساخت ربات سه نوع مختلف از افراد مورد نیاز اس ت .تع داد دقی ق روزه ای مورد نیاز برای ساخت ربات از هر نوع به شرح زیر است: ‏Engineer ‏Technici AI ‏Specialist ‏an 4 days 4 days 3 days 3 days 3 days 2 days ‏Type of Robot ‏Robot A: ‏advanced model ‏Robot B: basic ‏model این کارخانه در چرخه های 30روزه کار می کند .یک متخصص هوش مص نوعی ب ه مدت 30روز در یک چرخه در دسترس است .هر یک از این دو مهندس در 30روز 8روز مرخصی خواهند گرفت .بن ابراین ،ی ک مهن دس فق ط ب رای 22روز در ی ک 131 چرخه در دسترس است .یک تکنسین ب ه م دت 20روز در ی ک چرخ ه 30روزه در دسترس است .جدول زیر تعداد افرادی را که در کارخانه داریم نشان می دهد: ‏Engineer ‏Technicia AI ‏Specialist ‏n 1 1 2 ‏Number of people تعداد کل روزها در یک چرخه x 20 = 20 days 1 x 30 = 30 days 2 x 22 1 = 44 days این کار را می توان به صورت زیر مدل کرد: حداکثر سود = 4200A + 2800B این موضوع مشروط به موارد زیر است: :A ≥ 0تعداد روبات های پیشرفته تولید شده می تواند 0یا بیشتر باشد. :B ≥ 0تعداد ربات های پایه تولید شده می تواند 0یا بیشتر باشد. :3A + 2B ≤ 20اینها محدودیت های در دسترس بودن تکنسین هستند. :4A+3B ≤ 30اینها محدودیت های در دسترس بودن متخصص هوش مصنوعی است. :4A+ 3B ≤ 44اینها محدودیت های در دسترس بودن مهندسان هستند. ابتدا بسته پایتون با نام pulpرا وارد می کنیم که برای پیاده سازی برنامه نویس ی خطی استفاده می شود: ‏import pulp 132 را در این بس ته ب رای نمون ه س ازی کالس مس ئلهLpProblem ت ابع،س پس نامگذاریinstance Profit maximising مثال مسئله را.فراخوانی می کنیم :می کنیم # Instantiate our problem class model = pulp.LpProblem("Profit_maximising_problem", pulp.LpMaximize) تعداد ربات های پیش رفتهA متغیر. را تعریف می کنیمB وA سپس دو متغیر خطی تعداد ربات ه ای پای ه تولی د ش ده را نش انB تولید شده را نشان می دهد و متغیر :می دهد A = pulp.LpVariable('A', lowBound=0, cat='Integer') B = pulp.LpVariable('B', lowBound=0, cat='Integer') :تابع هدف و محدودیت ها را به صورت زیر تعریف می کنیم # Objective function model += 5000 * A + 2500 * B, "Profit" # Constraints model += 3 * A + 2 * B <= 20 model += 4 * A + 3 * B <= 30 model += 4 * A + 3 * B <= 44 133 برای ایجاد یک راه حل از تابع حل استفاده می کنیم: # Solve our problem )(model.solve ]pulp.LpStatus[model.status سپس مقادیر Aو Bو مقدار تابع هدف را چاپ می کنیم: # Print our decision variable values )print (A.varValue )print (B.varValue خروجی این است: 6.0 1.0 # Print our objective function value ))print (pulp.value(model.objective ‏It prints: 32500.0 برنامه نویسی خطی ب ه ط ور گس ترده در ص نعت تولی د ب رای ی افتن تع داد بهین ه محص والتی ک ه بای د ب رای بهین ه س ازی اس تفاده از من ابع موج ود اس تفاده ش ود، استفاده می شود. و در اینجا به پایان این فصل می رسیم! بیایید آنچه را که آموخته ایم خالصه کنیم. 134 خالصه در این فصل ،رویکردهای مختلف برای طراحی یک الگوریتم را بررسی ک ردیم .م ا به موازنه مربوط به انتخاب طراحی صحیح یک الگوریتم نگاه کردیم .ما ب ه به ترین شیوه های فرمول بندی یک مسئله دنیای واقعی نگاه کردیم .ما همچنین یاد گرفتیم که چگونه یک مسئله بهینه سازی در دنیای واقعی را حل کنیم. درس های آموخته شده از این فص ل می توان د ب رای پی اده س ازی الگ وریتم ه ای خوب طراحی شده استفاده شود .در فصل بعدی ،ما بر روی الگوریتم ه ای مبت نی بر گراف تمرکز خواهیم کرد .ما با بررس ی روش ه ای مختل ف نم ایش گ راف ه ا 135 شروع خواهیم کرد .س پس ،تکنیک‌ه ایی را ب رای ایج اد ی ک همس ایگی در اط راف نقاط داده مختلف ب رای انج ام ی ک تحقی ق خ اص مطالع ه می‌ک نیم .در نه ایت ب ه بررسی روش های بهینه برای جستجوی اطالعات از گراف ها می پردازیم. 5الگوریتم گراف دسته ای از مسائل محاسباتی وجود دارد که می توان آن ها را به بهترین ش کل در ق الب گ راف نم ایش داد .چ نین مس ائلی را می ت وان ب ا اس تفاده از کالس ی از الگوریتم ها به نام الگوریتم های گراف حل کرد .برای مثال ،الگوریتم‌های گ راف را می‌توان برای جستجوی مؤثر یک مقدار در نمایش گرافیکی داده‌ه ا اس تفاده ک رد. برای انجام یک کار موثر ،این الگوریتم ها ابتدا بای د س اختار گ راف را کش ف کنن د. آنها همچنین باید استراتژی مناسبی برای دنبال کردن یال های گراف برای خوان دن داده های ذخیره شده در رئوس پیدا کنند .از آنجایی ک ه الگوریتم‌ه ای گ راف ب رای کار کردن به جستجوی مقادیر نیاز دارند ،استراتژی‌های جستجوی کارآم د در مرک ز گراف کارآم د ،ق رار دارن د .اس تفاده از الگوریتم‌ه ای گ راف طراحی الگوریتم‌های ِ 136 یکی از کارآمدترین روش‌های جستجوی اطالع ات در س اختارهای داده‌ای پیچی ده و بهم پیوسته است ک ه از طری ق رواب ط مع نی‌دار ب ه هم مرتب ط هس تند .در عص ر امروزی داده های بزرگ ،رسانه های اجتماعی و داده های توزیع شده ،چنین تکنی ک هایی به طور فزاینده ای مهم و مفید می شوند .در این فصل ،ما ب ا ارائ ه مف اهیم اساسی در مورد الگوریتم های گراف شروع می کنیم .سپس به ارائه مبانی تئ وری تحلیل شبکه می پردازیم .در ادامه ،به تکنیک‌های مختلفی که می‌توان برای پیمایش گراف ها استفاده کرد ،خواهیم پرداخت .در نهایت ،ما به یک مطالع ه م وردی نگ اه خواهیم کرد که نشان می‌ده د چگون ه الگوریتم‌ه ای گ راف می‌توانن د ب رای کش ف تقلب استفاده شوند .در این فصل ،مفاهیم زیر را مرور خواهیم کرد: ‏ روش های مختلف نمایش گراف ها ‏ معرفی تحلیل نظریه شبکه ‏ درک پیمایش گراف ‏ مطالعه موردی :تجزیه و تحلیل تقلب ‏ تکنیک هایی برای ایجاد همسایگی در فضای مسئله ما در پایان این فصل ،شما به خوبی متوجه خواهید شد که گراف ها چیس ت و چگون ه می توان با آنها کار کرد تا ساختارهای داده به هم پیوسته را نشان دهد و اطالع ات استخراج از موجودیت هایی ک ه ب ا رواب ط مس تقیم ی ا غیرمس تقیم ب ه هم مرتب ط هستند ،و همچنین چگونه از آنها برای حل برخی موارد مسائل پیچیده دنی ای واقعی استفاده می شود. نمایش گراف ها گراف ساختاری است که داده ها را بر حسب رئوس و یال ها نش ان می ده د .ی ک نمودار به صورت )𝓔 ، aGraph = (𝓥,نشان داده می شود ،که در آن 𝓥 مجموعه ای از رئوس و 𝓔 نشان دهنده مجموعه ای از یال ها است .توجه داش ته باش ید ک ه aGraphدارای |𝓥| رئوس و | | 𝓔 یال است .یک راس ،𝓋 ∈ 𝓥 ،ی ک ش یء دنی ای واقعی ،مانند یک شخص ،یک کامپیوتر ،یا یک فعالیت را نشان می دهد .ی ک ی الe ، 137 𝓔 ∈ ،دو راس را در یک شبکه به هم متصل می کندe(𝓋1, 𝓋2) | e ∈ 𝓔 & 𝓋i : ‏𝓥 ∈ .معادله قبل نشان می دهد که در ی ک گ راف ،تم ام ی ال ه ا متعل ق ب ه ی ک مجموعه 𝓔 هستند ،و همه رئوس متعلق به یک مجموعه 𝓥 هستند .یک یال دو راس را به هم متصل می کند و بنابراین نشان دهنده رابطه بین آنهاست .به عنوان مثال، می تواند روابط زیر را نشان دهد: ‏ دوستی بین مردم ‏ شخصی در لینکدین به دوستی متصل است ‏ اتصال فیزیکی دو گره در یک خوشه ‏ فردی که در یک کنفرانس تحقیقاتی شرکت می کند در این فص ل ،م ا از بس ته networkxپ ایتون ب رای نم ایش گ راف ه ا اس تفاده خواهیم کرد .بیایید سعی کنیم با استفاده از بسته networkxدر پایتون یک گ راف ساده ایجاد کنیم .برای شروع ،بیایید سعی کنیم یک گ راف خ الی ،aGraph ،ب دون راس یا گره ایجاد کنیم: ‏import networkx as nx )(G = nx.Graph بیایید یک راس منفرد اضافه کنیم: )"G.add_node("Mike ما همچنین می توانیم با استفاده از یک لیست ،یک دسته از رئوس اضافه کنیم: )]"G.add_nodes_from(["Amine", "Wassim", "Nick 138 ما همچنین می توانیم یک یال بین رئوس موجود اضافه کنیم ،همانطور که نشان داده شده است: )"G.add_edge("Mike", "Amine حاال یال ها و رئوس ها را چاپ می کنیم: لطفا ً توجه داشته باشید که اگر یک یال اض افه می‌ک نیم ،این ن یز منج ر ب ه اض افه کردن رئوس مرتبط ،در صورتی که از قبل وجود نداشته باشند،می‌ش ود .هم انطور که در اینجا نشان داده شده است: )"G.add_edge("Amine","Imran اگر لیست گره ها را چاپ کنیم ،خروجی زیر است که مشاهده می کنیم: 139 توجه داشته باشید که درخواست اضافه کردن یک راس که از قبل وجود دارد نادیده گرفته می‌شود .این درخواست ب ر اس اس ن وع گ رافی ک ه ایج اد ک رده‌ایم نادی ده گرفته می‌شود. شبکه های خود محور همسایگی مستقیم یک راس خاص ،m ،ممکن است اطالعات مهم کافی برای انجام یک تحلیل قطعی برای گره داشته باشد .خود محور یا egonetبر این ایده اس توار است .یک egonetاز یک راس خاص ،m ،از تمام رئوس متص ل مس تقیم ب ه mب ه عالوه خود گره mتشکیل شده است .گره ، mخود( )egoنامیده می شود و همسایه های تک پرش که به آنها متصل است جانش ین()altersنامی ده می ش وند .ش بکه خود محور یک گره خاص ،3 ،در نمودار زیر نشان داده شده است: 140 شکل :1-5شبکه خودمحور توجه داشته باشید که egonetنشان دهنده همسایگی یک درجه است .این مفهوم را می توان به همسایگی های nدرجه تعمیم داد ،که شامل تم ام رئ وس nپرش ی دور از راس مورد نظر است. تحلیل شبکه های اجتماعی تحلیل ش بکه ه ای اجتم اعی ( )SNAیکی از کاربرده ای مهم نظری ه گ راف اس ت. تجزیه و تحلیل گراف شبکه در صورتی که موارد زیر اعمال ش ود ،تجزی ه و تحلی ل شبکه اجتماعی محسوب می شود: ‏ رئوس گراف نشان دهنده افراد است. ‏ یال های بین آنها نشان دهنده روابط اجتماعی بین آنها است ،مانن د دوس تی، سرگرمی مشترک ،خویشاوندی ،رابطه جنسی ،دوست نداشتن و غیره. ‏ سوال تجاری که ما سعی داریم از طریق تجزیه و تحلیل گراف ب ه آن پاس خ دهیم و جنبه اجتماعی قوی دارد. رفتار انسان در SNAمنعکس می شود و باید همیشه در حین ک ار ب ر روی SNAدر نظر گرفته شود .با ترسیم روابط انسانی در یک گراف SNA ،بینش خوبی در مورد تعامالت انسانی ارائه می دهد ،که می تواند به ما در درک اقدامات آنها کم ک کن د. با ایجاد یک همسایگی در اطراف هر ف رد و تجزی ه و تحلی ل اق دامات ی ک ف رد ب ر اساس روابط اجتماعی آن ،می توانید بینش های جالب ،و گاهی اوق ات تعجب آور تولید کنید .رویکردهای جایگزین برای تجزی ه و تحلی ل اف راد ب ه ص ورت مج زا ،ب ر اساس کارکرده ای ش غلی ف ردی آنه ا ،تنه ا می توان د بینش مح دودی ارائ ه ده د. بنابراین SNA ،می تواند برای موارد زیر استفاده شود: ‏ درک اقدامات کاربران در پلتفرم های رسانه های اجتماعی مانند فیس ب وک، توییتر یا لینکدین ‏ درک تقلب 141  شناخت رفتار مجرمانه جامعه لینکدین کمک زیادی به تحقی ق و توس عه تکنی ک ه ای جدی د مرتب ط ب ا SNAک رده است .در واقع ،لینکدین را می توان به عنوان پیش گام بس یاری از الگ وریتم ه ا در این زمینه در نظر گرفت .بنابراین – SNA ،به دلی ل معم اری توزی ع ش ده و ب ه هم پیوس ته ذاتی ش بکه ه ای اجتم اعی – یکی از قدرتمن دترین م وارد اس تفاده ب رای نظریه گراف است. روش دیگر برای انتزاع گ راف ،در نظ ر گ رفتن آن ب ه عن وان ی ک ش بکه و اعم ال الگوریتم طراحی شده برای شبکه است .کل این حوزه ،نظریه تحلیل شبکه نامیده می شود که در ادامه به آن خواهیم پرداخت. معرفی نظریه تحلیل شبکه ما می دانیم که داده های به هم پیوسته را می توان به عن وان ی ک ش بکه ،نم ایش داد .در تئوری تحلیل شبکه ،ما جزئیات روش‌های توسعه‌یافته برای ک اوش و تجزی ه و تحلیل داده‌های ارائه‌شده به‌عنوان یک شبکه را مطالعه می‌کنیم .بیایید ب ه ب رخی از جنبه های مهم تئوری تحلیل ش بکه در این بخش نگ اه ک نیم .ابت دا ،توج ه داش ته باشید که یک راس در یک شبکه به عنوان واحد اصلی عمل می کند .شبکه ی ک وب ب ه هم پیوس ته از رئ وس اس ت ک ه در آن ه ر اتص ال نش ان دهن ده رابط ه بین موجودیت های مختلف تحت بررسی است .این مهم است ک ه س ودمندی و اهمیت یک راس در یک شبکه را در زمین ه مس ئله ای ک ه در تالش ب رای ح ل آن هس تیم، کمیت تعیین ک نیم .تکنی ک ه ای مختلفی وج ود دارد ک ه می توان د ب ه م ا در تع یین ِ اهمیت ،کمک کند .بیایید به برخی از مف اهیم مهم م ورد اس تفاده در تئ وری تحلی ل شبکه نگاهی بیندازیم. درک کوتاه ترین مسیر مسیر به دنباله ای از گره ها بین یک گره شروع و یک گره پای انی اس ت ک ه در آن هیچ گره ای دو بار در مسیر ظاهر نمی شود .یک مسیر نش ان دهن ده مس یری بین 142 راس شروع و پایان انتخابی است .مجموعه ای از رئوس p ،خواه د ب ود ک ه راس شروع را به راس انتهایی وصل می کند .هیچ راس ی در pتک رار نمی ش ود .ط ول مسیر با شمارش یال های تشکیل دهنده محاسبه می شود .از بین هم ه گزین ه ه ا، مسیری که کم ترین ط ول را دارد ،کوت اه ت رین مس یر نامی ده می ش ود .محاس به کوتاه‌ترین مسیر به‌طور گسترده در الگوریتم‌های نظریه گ راف اس تفاده می‌ش ود، اما محاسبه آن همیشه ساده نیست .الگوریتم های مختلفی وجود دارد که می توان از آنها برای یافتن کوتاه ترین مسیر بین گ ره ش روع و گ ره پای انی اس تفاده ک رد. یکی از محبوب‌ترین الگوریتم‌هایی که می‌توان از آن برای ی افتن کوت اه‌ترین فاص له بین گره شروع و پایان استفاده کرد ،الگوریتم Dijkstraاست که در اواخ ر ده ه 1950منتشر شد .کوتاه ترین مسیر یک گراف را محاسبه می کند .توسط دستگاه های سیستم موقعیت یاب جهانی ( )GPSبرای محاس به ح داقل فاص له بین منب ع و مقصد قابل استفاده است .الگوریتم Dijkstraدر الگوریتم‌های مسیریابی ش بکه ن یز اس تفاده می‌ش ود .ن بردی بین گوگ ل و اپ ل ب رای ط راحی به ترین الگ وریتم کوتاه‌ترین فاصله برای Google Mapsو Apple Mapsوجود دارد .چالشی ک ه آنها با آن روبرو هستند ،سرعت بخشیدن الگوریتم ب ه ان دازه ک افی ب رای محاس به کوتاه ترین مسیر در عرض چند ثانیه است .در ادامه این فصل ،الگوریتم جس تجوی پهن ای اول ( )BFSرا م ورد بحث ق رار خ واهیم داد ،ک ه می توان د ب رای تب دیل ب ه الگوریتم دایکسترا تغییر یابد. BFSهزینه یکسانی برای پیمودن هر مسیر در ی ک گ راف مش خص را در نظ ر می گیرد .برای الگوریتم ،Dijkstraهزینه پیمایش یک نمودار می‌تواند متفاوت باشد، و باید برای اصالح BFSدر الگوریتم Dijkstraگنجانده شود .همانطور که اش اره شد ،الگوریتم Dijkstraیک الگوریتم منبع منفرد اس ت ک ه کوت اه‌ترین مس یر را محاسبه می‌کن د .اگ ر بخ واهیم تم ام جفت‌ه ای کوت اه‌ترین مس یرها را ح ل ک نیم، می‌توان از الگوریتم فلوید-وارشال استفاده کرد. ایجاد همسایگی 143 یافتن استراتژی‌هایی برای ایج اد ی ک همس ایگی در اط راف گره‌ه ای م ورد عالق ه برای الگوریتم‌های گراف ،بسیار مهم است .روش‌های ایجاد همسایگی ها بر اساس انتخاب افراد مستقیم مرتبط با راس مورد عالقه است .یکی از راه‌های ایج اد ی ک همسایگی ،انتخاب یک استراتژی k-orderاست که راس‌هایی را انتخ اب می‌کن د که kیال از راس مورد نظر فاصله دارند .بیایید ب ه معیاره ای مختل ف ب رای ایج اد همسایگی‌ها نگاه کنیم. مثلثها در تئوری گراف ،یافتن رئوس هایی که به خ وبی ب ه یک دیگر متص ل هس تند ،ب رای ه دف تحلی ل مهم اس ت .ی ک تکنی ک این اس ت ک ه س عی ک نیم مثلث ه ا را ک ه زیرگرافی هستند که از سه گره تشکیل شده و مستقیما ً به یکدیگر متص ل ب وده را در شبکه شناسایی کنیم .بیایید به کاربرد کشف تقلب نگاهی بین دازیم ک ه در پای ان این فصل از آن به عنوان مطالعه موردی نیز استفاده ک رده ایم .اگ ر ش بکه خ ود- محوری از یک گره ،m ،از سه رأس ،از جمله راس mتشکیل شده باش د ،آنگ اه این ش بکه خ ود-مح ور ی ک مثلث اس ت .راس mخ ود و دو راس متص ل مثال راس Aو راس ، Bجایگزین ها هستند .اگر هر دو جایگزین به عنوان موارد متقلبان ه ش ناخته شده باشند ،می‌توانیم با خیال راحت راس mرا نیز متقلب اعالم ک نیم .اگ ر یکی از جایگزین ها در کالهبرداری دخیل باش د ،نمی ت وانیم ب ه ش واهد قطعی دس ت پی دا کنیم ،اما باید تحقیقات بیشتری در مورد شواهد تقلب انجام دهیم. تراکم ابتدا یک شبکه تمام متصل را تعری ف می ک نیم .م ا گ رافی را ک ه در آن ه ر رأس مستقیما ً به هر رأس دیگری متصل است ،ش بکه تم ام متص ل می‌گ وییم .اگ ر ی ک شبکه تمام متصل N ،گره داشته باشیم ،تعداد یال‌های شبکه را می‌توان به ص ورت زیر نشان داد: 144 اکنون ،اینجاست که تراکم وارد عمل می شود .تراکم تعداد یال های مشاهده ش ده را تا حداکثر تعداد یال ها اندازه گیری می کند ،اگ ر EdgesObservedتع داد ی ال هایی است که می خواهیم مشاهده کنیم .می توان آن را به صورت زیر نشان داد: توجه داشته باشید که برای ی ک مثلث ،چگ الی ش بکه 1اس ت و این نش ان دهن ده باالترین شبکه متصل ممکن است. درک معیارهای مرکزیت معیارهای مختلفی برای درک مرکزیت یک راس خ اص در ی ک گ راف ی ا زیرگ راف وج ود دارد .ب ه عن وان مث ال ،آنه ا می توانن د اهمیت ی ک ش خص را در ی ک ش بکه اجتماعی یا اهمیت یک ساختمان در یک ش هر را حس اب کنن د .معیاره ای مرک زیت زیر به طور گسترده در تجزیه و تحلیل گراف استفاده می شود: ‏ درجه ‏ بینیت ‏ نزدیکی ‏ بردار ویژه 145 بیایید با جزئیات در مورد آنها بحث کنیم. درجه تعداد یال های متص ل ب ه ی ک راس خ اص را درج ه آن می گوین د.درج ه می توان د نشان دهد که یک راس خاص چقدر ب ه خ وبی متص ل اس ت و توان ایی آن در پخش سریع یک پیام در یک شبکه را دارد .بیایید )𝓔 ،aGraph = (𝓥,را در نظر بگیریم، که در آن 𝓥 مجموعه ای از راس ها و 𝓔 نشان دهنده مجموعه ای از یال ه ا اس ت. به یاد بیاورید که aGraphدارای |𝓥| راس و |𝓔| یال است .اگر درجه یک گره را بر (| )𝓥| -1تقسیم کنیم ،به آن درجه مرکزیت می گویند: حاال بیایید به یک مثال خاص نگاه کنیم .گراف زیر را در نظر بگیرید: 146 شکل :2-5مثالی از درجه و مرکزیت گراف حال ،در گراف قبل ،راس Cدارای درجه 4است .مرکزیت درجه آن را می توان به صورت زیر محاسبه کرد: بینیت بینیت معیار سنجش مرکزیت در یک گراف است .در زمینه رس انه ه ای اجتم اعی، احتمال اینکه یک فرد بخشی از ارتباطات در یک زیر گروه باشد را حساب می کند. 147 برای یک شبکه کامپیوتری ،بینیت اثر منفی بر ارتباط ات بین گره‌ه ای گ راف را در صورت خرابی راس تعیین می‌کند .برای محاسبه بینیت راس aدر aGraph = (𝓥, )𝓔 ،این مراحل را دنبال کنید: .1کوتاه ترین مسیرها را بین هر جفت رئوس در aGraphمحاسبه کنید .بیایید این را با نشان دهیم. .2از ,تعداد کوتاهترین مسیرهایی را که از راس aعبور می کنند بشمارید .بیایید این را با نشان دهیم. 148 .3بینیت را با فرمول زیر حساب می کنیم انصاف و نزدیکی بیایید یک گراف g ،را در نظر بگیرید .انصاف راس aدر نمودار gبه عنوان مجموع فاصله راس aاز رئوس دیگر تعریف می شود .توجه داشته باشید که مرکزیت ی ک راس خاص فاصله کلی آن را از همه رئ وس دیگ ر حس اب می کن د .نقط ه مقاب ل انصاف ،نزدیکی است. مرکزیت بردار ویژه مرکزیت بردار ویژه به تمام رئوس یک گراف امتیاز می ده د ک ه اهمیت آنه ا را در شبکه می سنجد .امتیاز نشانگر اتصال یک گره خاص به سایر گره های مهم در کل شبکه خواهد بود. زم انی ک ه گوگ ل الگ وریتم PageRankرا ایج اد ک رد ک ه ب ه ه ر ص فحه وب در اینترنت امتیازی اختصاص می‌دهد (ب ه منظ ور بی ان اهمیت آن) ،این ای ده از معی ار مرکزیت بردار ویژه مشتق شد. محاسبه معیارهای مرکزیت با استفاده از پایتون بیایید یک شبکه ایجاد کنیم و سپس سعی ک نیم معیاره ای مرک زیت آن را محاس به کنیم .بلوک کد زیر این را نشان می دهد: 149 import networkx as nx import matplotlib.pyplot as plt vertices = range(1,10) edges = [(7,2), (2,3), (7,4), (4,5), (7,3), (7,5), (1,6),(1,7),(2,8),(2,9)] G = nx.Graph() G.add_nodes_from(vertices) G.add_edges_from(edges) nx.draw(G, with_labels=True,node_color='y',node_size=800) :گراف تولید شده توسط این کد به شرح زیر است 150 شکل :3-5مثالی از معیارهای مرکزیت تاکنون ،معیارهای مختلفی از مرکزیت را مطالعه کرده‌ایم .بیایید آنها را برای مثال قبل محاسبه کنیم: 151 152 توجه داشته باشید که از معیارهای مرکزیت انتظار می رود که معی ار مرک زیت ی ک راس خاص را در یک گراف یا زیرگراف نشان دهد .با نگاهی به گراف ،به نظ ر می رسد راس با برچسب 7مرکزی ترین مکان را دارد .راس 7دارای باالترین مق ادیر در هر چهار معیار مرکزیت است ،بن ابراین اهمیت آن را در این زمین ه منعکس می کند .حال بیایی د ببی نیم چگون ه می ت وانیم اطالع ات را از گ راف ه ا بازی ابی ک نیم. گراف ها ساختارهای داده پیچیده ای هستند که اطالع ات زی ادی هم در راس و هم در یال ها ذخیره می ش ود .بیایی د ب ه ب رخی از اس تراتژی‌هایی ک ه می‌ت وان ب رای پیمایش مؤثر در گ راف ه ا ب ه منظ ور جمع‌آوری اطالع ات از آنه ا ب رای پاس خ ب ه سؤاالت استفاده کرد ،نگاهی بیندازیم. درک پیمایش گراف برای استفاده از گرافها ،اطالعات بای د از آنه ا اس تخراج ش ود .پیم ایش گ راف ب ه عنوان استراتژی مورد استفاده برای اطمینان از اینکه هر رأس و یال ب ه ش یوه ای منظم بازدید می شود ،تعریف می شود .تالش می شود تا اطمینان حاصل شود که هر رأس و یال دقیقا ً یک بار بازدید شود ،نه بیش تر و ن ه کم تر .ب ه ط ور کلی ،می توان دو روش مختلف برای پیمایش یک گراف برای جستجوی داده ه ای موج ود در آن وجود دارد .گام برداشتن بر اساس سطح را جستجوی اول سطح ( )BFSو گ ام برداشتن بر اساس عمق را جستجوی اول عمق ( )DFSمی گویند .بیایید یک به ی ک آنها را بررسی کنیم. جستجوی اول سطح BFSزم انی به ترین ک ار را انج ام می ده د ک ه مفه ومی از الی ه ه ا ی ا س طوح همسایگی در aGraphکه با آن سروکار داریم ،وجود داشته باشد. به عنوان مثال ،هنگامی که اتصاالت یک شخص در لینکدین به ص ورت گ راف بی ان می شود ،اتصاالت سطح اول و سپس اتصاالت سطح دوم وجود دارد که مس تقیما ً به الیه ها ترجمه می شوند .الگ وریتم BFSاز ی ک راس ریش ه ش روع می ش ود و رئوس در رئوس همسایگی را بررسی می کند .سپس ب ه س طح همس ایگی بع دی 153 می رود و فرآیند را تکرار می کند .بیایی د ب ه ی ک الگ وریتم BFSنگ اهی بیان دازیم. برای آن ،ابتدا گراف بدون جهت زیر را در نظر می گیریم: شکل :4-5مثالی از BFS 154 بیایید با محاسبه همسایگی فوری هر رأس ش روع ک نیم و آن را در لیس تی ب ه ن ام فهرست مجاورت ذخیره کنیم .در پایتون ،می توانیم از ساختار داده دیکشنری برای ذخیره آن استفاده کنیم: ‏graph={ 'Amin' : {'Wasim', 'Nick', 'Mike'}, 'Wasim' : {'Imran', 'Amin'}, 'Imran' : {'Wasim','Faras'}, 'Faras' : {'Imran'}, 'Mike' : {'Amin'}, }}''Nick' : {'Amin برای پیاده سازی آن در پایتون به صورت زیر عمل می کنیم .ابتدا مقداردهی اولی ه و سپس حلقه اصلی را توضیح می دهیم. مقداردهی اولیه ما از دو ساختار داده استفاده خواهیم کرد: :visitedاین شامل تمام رئوس بازدید شده است .در ابتدا خالی خواهد بود. : queueشامل تمام رئوس هایی است که می خواهیم در تکرارهای بع دی از آنه ا بازدید کنیم. حلقه اصلی 155 در مرحله بعد حلقه اصلی را پیاده سازی می کنیم .تا زمانی که حتی ی ک عنص ر در صف وجود نداشته باشد به حلقه ادامه خواهد داد. برای هر گره در صف ،اگر قبال ً بازدید شده باشد ،از همسایه خ ود بازدی د می کن د. ما می توانیم این حلقه اصلی را در پایتون به صورت زیر پیاده سازی کنیم: . 1ابتدا اولین گره را از صف خارج می کنیم و آن را به عنوان گره فعلی این تکرار انتخاب می کنیم. )node = queue.pop(0 .1سپس ،بررسی می ک نیم ک ه گ ره در لیس ت بازدی د ش ده نباش د .اگ ر اینط ور نیست ،آن را به لیست گره‌های بازدید شده اض افه می‌ک نیم و از همس ایگان ب رای نشان دادن گره‌های متصل مستقیم آن استفاده می‌کنیم )visited.append(node ]neighbours = graph[node .1اکنون همسایگان گره ها را به صف اضافه می کنیم: ‏for neighbour in neighbours: )queue.append(neighbour .1هنگامی که حلقه اصلی کامل شد ،ساختار داده بازدید شده برگردانده می ش ود که شامل تمام گره های پیمایش شده است. . 2کد کامل ،هم با مقداردهی اولیه و هم با حلقه اصلی ،به صورت زیر خواهد بود: 156 بیایید به الگوی پیمایش جستجوی جامع برای گرافی که با اس تفاده از BFSتعری ف کردیم نگاه کنیم .برای بازدید از تمامی گره ها ،الگوی پیمایش در شکل زی ر نش ان داده شده است .می توان مشاهده کرد که در هنگام اجرا ،همیشه دو س اختار داده را حفظ می کند: :Visitedشامل تمام گره هایی است که بازدید شده اند :Queueحاوی گره هایی است که هنوز بازدید نشده اند در اینجا نحوه کار الگوریتم آمده است: .1از اولین گره شروع می شود که تنها گره Aminدر سطح یک است. .2سپس به سطح دو می رود و هر سه گ ره Wasim، Nickو Mikeرا یکی یکی بازدید می کند. . 3پس از آن به سطح سه و سطح چهار می رود که هر کدام فقط یک گ ره دارن د یعنی Imranو .Faras 157 هنگامی که تمام گره ها بازدید شدند ،به ساختار داده Visitedاض افه می ش وند و تکرارها متوقف می شوند: 158 159 شکل :5-5مثالی از BFSو مراحل آن حاال بیایید سعی کنیم ب ا اس تفاده از BFSی ک ش خص خ اص را از این گ راف پی دا کنیم .بیایید داده های مورد جستجو را مشخص کنیم و نتایج را مشاهده کنیم: حاال بیایید به الگوریتم جستجوی اول عمق نگاه کنیم. جستجوی اول عمق DFSجایگزینی برای BFSاست که برای جستجوی داده ها از ی ک گ راف اس تفاده می شود .عاملی که DFSرا از BFSمتمایز می کند این است که پس از ش روع از راس ریشه ،الگوریتم تا آنجا که ممکن است در هر یک از مسیرهای منحصر به فرد ،یک به یک پایین می رود .برای هر مسیر ،هنگامی که ب ا م وفقیت ب ه عم ق نه ایی رسید ،تمام رئوس مرتبط با آن مسیر را به عنوان بازدی د ش ده عالمت گ ذاری می کند .پس از تکمیل مسیر ،الگوریتم به عقب برمی گردد .اگر بتواند مسیر دیگری را از گره ریشه پیدا کند که هنوز بازدید نشده است ،الگوریتم روند قبلی را تک رار می کند .الگوریتم تا زمانی که همه ش اخه ه ا بازدی د نش ده باش ند در ش اخه جدی د ب ه حرکت خود ادامه می دهد .توجه داش ته باش ید ک ه ی ک گ راف ممکن اس ت روش چرخه ای داشته باشد .هم انطور ک ه گفت ه ش د ،م ا از ی ک پ رچم Booleanب رای پیگیری رئوس پردازش ش ده ب رای جلوگ یری از تک رار در چرخ ه ه ا اس تفاده می کنیم .برای پیاده سازی ،DFSما از یک ساختار داده پشته استفاده می کنیم ،که در فصل ،2ساختارهای داده مورد استفاده در الگوریتم ها به تفصیل مورد بحث ق رار گرفت . .به یاد داشته باشید که پشته بر اساس اصل )Last In, First Out (LIFO است .این در تضاد با یک صف است که برای BFSاستفاده می‌شود ،که بر اس اس ) First In, First Out (FIFOکار می‌کند .کد زیر برای DFSاستفاده می‌شود: 160 def dfs(graph, start, visited=None): if visited is None: visited = set() visited.add(start) print(start) for next in graph[start] - visited: dfs(graph, next, visited) return visited : تعریف شده قبلی استفاده کنیمdfs بیایید دوباره از کد زیر برای آزمایش تابع graph={ 'Amin' : {'Wasim', 'Nick', 'Mike'}, 'Wasim' : {'Imran', 'Amin'}, 'Imran' : {'Wasim','Faras'}, 'Faras' : {'Imran'}, 'Mike' :{'Amin'}, 'Nick' :{'Amin'}} : خروجی به شکل زیر خواهد بود،اگر این الگوریتم را اجرا کنیم : نگاه کنیمDFS بیایید به الگوی پیمایش جامع این نمودار با استفاده از روش 161 .1تکرار از گره باال Amin ،شروع می شود. .2سپس به سطح دو یعنی Wasimحرکت می کند .از آنجا به سمت سطوح پایین حرکت می کند تا به انتهای آن که گره Imranو Faresاست برسد. .3پس از تکمیل اولین شاخه کامل ،عقب می رود و سپس به س طح دو می رود تا Nickو Mikeرا مالقات کند. الگوی پیمایش در شکل زیر نشان داده شده است: 162 163 شکل :5-5مثالی از DFSو مراحل آن توجه داشته باشید که DFSرا می توان در درختان نیز استفاده کرد .بیایید اکنون به یک مطالعه موردی نگاه کنیم ،که توضیح می ده د چگون ه مف اهیمی ک ه ت اکنون در این فصل مورد بحث قرار گرفته اند ،می توانند برای حل ی ک مس ئله دنی ای واقعی استفاده شوند. مطالعه موردی -تجزیه و تحلیل تقلب بیایید ببینیم چگونه می توانیم از SNAبرای کشف تقلب اس تفاده ک نیم .از آنج ایی که انسان ها حیوان ات اجتم اعی هس تند ،گفت ه می ش ود رفت ار انس ان تحت ت أثیر افرادی قرار می گیرد که توسط آنها احاطه شده اند .کلم ه هم وفیلی ب رای نش ان دادن تأثیری که شبکه اجتماعی روی یک فرد می گذارد ابداع شده اس ت .ب ا بس ط این مفهوم ،شبکه هوموفیلی ،گ روهی از اف راد اس ت ک ه احتم اال ً ب ه دلی ل ب رخی عوامل مشترک با یکدیگر مرتبط هستند .به عنوان مثال ،داشتن منشا یا س رگرمی های یکسان ،عضویت در یک گروه یا یک دانشگاه ،یا ترکی بی از عوام ل دیگ ر .اگ ر بخواهیم تقلب را در یک شبکه هوموفیلی تجزیه و تحلیل کنیم ،می توانیم از رواب ط بین فرد تحت بررسی و سایر افراد در شبکه که خطر دخالت آنه ا در تقلب قبال ً ب ه دقت محاس به ش ده اس ت ،اس تفاده ک نیم .عالمت گ ذاری ی ک ش خص ب ه دلی ل شرکتش ،گاهی اوقات گناه توسط انجمن نیز نامیده می‌ش ود .در تالش ب رای درک این فرآیند ،ابتدا به یک مورد ساده نگاه می‌کنیم .برای آن ،از شبکه ای ب ا ن ه رأس و هشت یال استفاده می کنیم .در این ش بکه ،چه ار م ورد از رئ وس ،م وارد تقلب شناخته شده هستند و به عنوان تقلب ( )Fطبقه بندی می ش وند .پنج نف ر از اف راد باقیمانده هیچ سابقه مرتبط با تقلب ندارند و به عنوان غیرتقلب ( )NFطبق ه بن دی می شوند .برای تولید این نمودار کدی با مراحل زیر می نویسیم: 164 : بیایید بسته های مورد نیاز خود را وارد کنیم.1 import networkx as nx import matplotlib.pyplot as plt : ساختار داده رئوس و یال ها را تعریف کنید.2 vertices = range(1,10) edges= [(7,2), (2,3), (7,4), (4,5), (7,3), (7,5), (1,6),(1,7),(2,8),(2,9)] : بیایید ابتدا گراف را تعریف کنیم.3 G = nx.Graph() : حاال بیایید گراف را رسم کنیم.4 G.add_nodes_from(vertices) G.add_edges_from(edges) pos=nx.spring_layout(G) : را تعریف کنیمNF بیایید گره های.5 nx.draw_networkx_nodes( G,pos, nodelist=[1,4,3,8,9], with_labels=True, node_color='g', 165 node_size=1300) : بیایید گره هایی را ایجاد کنیم که در تقلب شناخته شده اند، حال.6 nx.draw_networkx_nodes(G,pos, nodelist=[2,5,6,7], with_labels=True, node_color='r', node_size=1300) : بیایید برچسب هایی برای گره ها ایجاد کنیم.7 nx.draw_networkx_edges(G,pos,edges,width=3,alpha=0.5,ed ge_color='b') labels={} labels[1]=r'1 NF' nx.draw_networkx_labels(G,pos,labels,font_size=16) : گرافی مانند شکل زیر را به ما نشان می دهد،هنگامی که کد قبلی اجرا شد 166 شکل :6-5مثالی از گراف جهت کشف تقلب توجه داشته باشید که ما قبال ً تجزیه و تحلیل دقیقی انجام داده ایم تا هر گ ره را ب ه عنوان یک گراف یا غیرگراف طبقه بندی کنیم .فرض کنید مانند شکل زیر یک راس دیگر به نام qبه شبکه اضافه می کنیم .ما هیچ اطالعات قبلی در مورد این شخص و اینکه آیا این فرد در تقلب دست دارد یا خیر نداریم .ما می خواهیم این شخص را بر اساس پیوندهایش به اعضای موجود شبکه اجتم اعی ب ه عن وان NFی ا Fطبق ه بندی کنیم: 167 شکل :7-5مثالی از گراف جهت کشف تقلب()2 ما دو راه برای طبقه بندی این شخص جدید ،که با گره qنش ان داده ش ده اس ت، به عنوان Fیا NFابداع کرده ایم: ‏ استفاده از یک روش ساده که از معیارهای مرک زیت و اطالع ات اض افی در مورد نوع تقلب استفاده نمی کند ‏ استفاده از روش برج مراقبت ،که یک تکنیک پیشرفته است که از معیاره ای مرکزیت گره های موج ود و همچ نین اطالع ات اض افی در م ورد ن وع تقلب استفاده می کند. در مورد هر روش به تفصیل بحث خواهیم کرد. انجام تجزیه و تحلیل ساده تقلب 168 تکنیک ساده تجزیه و تحلیل تقلب بر این فرض استوار است که در یک شبکه ،رفتار یک فرد تحت تأثیر افرادی است که ب ا آنه ا مرتب ط هس تند .در ی ک ش بکه ،اگ ر دو راس با یکدیگر مرتبط باشند ،احتمال بیشتری وجود دارد که رفتار مش ابهی داش ته باشند .بر اس اس این ف رض ،م ا ی ک تکنی ک س اده اب داع می ک نیم .اگ ر بخ واهیم احتمال تعلق یک گره خاص یعنی qبه Fرا پیدا کنیم ،این احتمال با ) P(F/qنشان داده می شود و به صورت زیر محاسبه می شود: بیایی د این فرم ول را ب ه ش کل قب ل اعم ال ک نیم ،ج ایی ک ه Neighborhoodn همسایگی راس nرا نشان می دهد و ( w )n، njوزن ارتباط بین nو njرا نشان می دهد .همچنین degreeqدرجه گ ره qاس ت .س پس احتم ال ب ه ص ورت زی ر محاسبه می شود: بر اساس این تحلیل ،احتم ال کاله برداری این ف رد 67درص د اس ت .م ا بای د ی ک آستانه تعیین کنیم .اگر آستانه ٪30باشد ،این شخص باالتر از مقدار آس تانه اس ت، و ما می توانیم با خیال راحت آنها را به عنوان Fعالمت گذاری کنیم .توج ه داش ته باشید که این فرآیند باید برای هر یک از گره های جدید در شبکه تکرار شود .ح ال، بیایید به یک روش انجام تجزیه و تحلیل تقلب پیشرفته نگاه کنیم. ارائه روش تجزیه و تحلیل تقلب برج مراقبت 169 تکنیک ساده تحلیل تقلب قبلی دارای دو محدودیت زیر است: اهمیت هر رأس را در شبکه اجتماعی ارزی ابی نمی کن د .ارتب اط ب ا ی ک مرک ز ک ه درگیر تقلب اس ت ممکن اس ت پیام دهای متف اوتی نس بت ب ه رابط ه ب ا ی ک ف رد دورافتاده و منزوی داشته باشد. وقتی کسی را به عنوان یک مورد شناخته شده تقلب در یک شبکه موجود برچس ب می زنیم ،ما شدت جرم را در نظر نمی گیریم. تقلب برج مراقبت به این دو محدودیت می پردازد .ابتدا اجازه روش تجزیه و تحلیل ِ دهید به چند مفهوم نگاه کنیم. امتیاز دادن به نتایج منفی اگر فردی در تقلب شناخته شود ،می گوییم که نتیج ه منفی در ارتب اط ب ا این ف رد وجود دارد .هر پیامد منفی با شدت یا جدیت یکس ان نیس ت .ف ردی ک ه ب ه عن وان جعل هویت شخص دیگری شناخته می شود ،در مقایسه با فردی ک ه س عی دارد از یک کارت هدیه 20دالری منقضی شده استفاده کند تا آن را معتبر کن د ،ن وع ج دی تری از پیام دهای منفی در ارتب اط ب ا او خواه د داش ت .از امتی از .1ت ا ،10نت ایج منفی مختلف را به صورت زیر رتبه بندی می کنیم: ‏Negative outcome score ‏Negative outcome 10 ‏Impersonation ‏Involvement in credit card theft 8 7 ‏Fake check submission 6 ‏Criminal record 0 ‏No record 170 توجه داشته باشید که این امتیازات بر اساس تجزی ه و تحلی ل م ا از م وارد تقلب و تأثیر آنها از داده های تاریخی است. درجه سوء ظن درجه سوء ظن ( )DOSمیزان سوء ظن ما را مبنی ب ر دس ت داش تن ی ک ف رد در تقلب تعیین می کند .مقدار DOS 0به این معنی است ک ه این ی ک ف رد کم خط ر است و مقدار DOS 9به این معنی است که این یک فرد پرخط ر اس ت .تجزی ه و تحلیل داده های تاریخی نش ان می ده د ک ه کاله برداران حرف ه ای م وقعیت ه ای مهمی در شبکه های اجتماعی خود دارند .برای گنجاندن این ،ابتدا تمام چهار معی ار مرکزیت هر رأس در شبکه خود را محاسبه می کنیم .سپس میانگین این رئ وس را می گیریم .این به اهمیت آن شخص خ اص در ش بکه ترجم ه می‌ش ود .اگ ر ف ردی مرتبط با راس درگیر تقلب باشد ،این نتیجه منفی را ب ا امتی از دادن ب ه ش خص ب ا استفاده از مقادیر از پیش تعیین‌شده نشان‌داده‌شده در جدول قبل نشان می‌دهیم. این کار به گون ه ای انج ام می ش ود ک ه ش دت ج رم در ارزش ه ر DOSمنعکس شود .در نهایت ،میانگین معیارهای مرکزیت و امتیاز نتیجه منفی را ضرب می ک نیم تا ارزش DOSرا بدست آوریم .ما DOSرا با تقسیم آن بر حداکثر مقدار DOSدر ش بکه نرم ال می ک نیم .بیایی د DOSرا ب رای ه ر ی ک از 9گ ره در ش بکه قبلی محاسبه کنیم: گره گره 2گره 3گره 4گره 1 درجه 5 0.5 0.25 گره گره 7گره 6 گره9 8 0.63 0.13 0.25 0.25 0.25 0.13 0.13 مرکزیت بینیت 0 0.47 0.25 0 0 0 0.71 0.72 0.34 0.47 0.47 0.53 0.61 نزدیکی 0.5 بردار ویژه 0.59 0.08 0.32 0.32 0.36 0.45 0.24 171 0 0 0.4 0.4 0.16 0.16 معیارهای 0.66 0.14 0.26 0.26 0.29 0.51 0.31 0.17 0.17 میانگین مرکزیت نمره نتیجه 0 6 0 7 0 8 10 0 0 منفی 0 ‏DOS 3 6.62 0 0 1.1 1.82 0 0.47 0 1 0.17 0.27 0 0 5 0 Normaliz 0 0 ‏ed ‏DOS هر یک از گره ها و DOSنرمال شده آنها در شکل زیر نشان داده شده است: شکل :8-5مثالی از گراف جهت کشف تقلب()3 172 برای محاسبه DOSگره جدیدی که اضافه شده است از فرمول زیر استفاده می کنیم: با استفاده از مقادیر مربوطه DOS ،را به صورت زیر محاسبه می کنیم: این نشان دهنده خطر تقلب مرتبط با این گره جدید اضافه شده به سیستم اس ت. یعنی در مقی اس 0ت ا ، 1این ش خص دارای مق دار DOS 0.42اس ت .می‌ت وانیم مخزن‌های ریسک مختلفی برای DOSبه شرح زیر ایجاد کنیم: ‏Risk classification ‏Value of the DOS ‏No risk ‏DOS=0 ‏Low risk 0<DOS<=0.10 ‏Medium risk 0.10<DOS<=0.3 ‏High risk ‏DOS>0.3 بر اساس این معیارها ،می توان دریافت که فرد جدید ف ردی پرخط ر اس ت و بای د عالمت گذاری شود .معموال ً در انجام چنین تحلیلی ،بعد زمانی درگیر نیست .ام ا در حال حاضر ،برخی از تکنیک ه ای پیش رفته وج ود دارد ک ه ب ه رش د ی ک گ راف ب ا پیشرفت زمان نگاه می کند .این کار به محققان اج ازه می ده د ت ا ب ه رابط ه بین 173 رئوس با تکامل شبکه نگاه کنند .اگرچه چنین تجزیه و تحلیل س ری زم انی ب ر روی گراف ها پیچیدگی مسئله را چندین برابر افزایش می دهد ،می تواند بینش بیشتری در مورد شواهد تقلب ارائه دهد که در غیر این صورت ممکن نبود. خالصه در این فصل با الگوریتم های مبتنی بر گراف آشنا شدیم .این فصل از تکنی ک ه ای مختلف نمایش ،جستجو و پردازش داده ه ایی ک ه ب ه ص ورت گ راف نم ایش داده شده اند استفاده می کن د .م ا همچ نین مه ارت ه ایی را توس عه دادیم ک ه بت وانیم کوتاه ترین فاصله بین دو راس را محاسبه کنیم و در فضای مسئله خود ،همسایگی ایجاد کردیم .این دانش باید به ما کمک کند ت ا از تئ وری گ راف ب رای رس یدگی ب ه مسائلی مانند کشف تقلب استفاده کنیم .در فصل بعدی ،ما بر روی الگوریتم ه ای مختلف یادگیری ماشین بدون نظ ارت تمرک ز خ واهیم ک رد .بس یاری از تکنیک‌ه ای مورد اس تفاده ک ه در این فص ل م ورد بحث ق رار گرفته‌ان د ،مکم ل الگوریتم‌ه ای یادگیری بدون نظارت هستند که در فصل بعدی به تفصیل مورد بحث ق رار خواهن د گرفت .یافتن شواهد تقلب در یک مجموعه داده نمونه ای از چ نین م وارد اس تفاده است. 174 بخش :2الگوریتم های یادگیری ماشین این بخش انواع مختلف الگوریتم‌های یادگیری ماشین ،مانن د الگوریتم‌ه ای ی ادگیری ماشین بدون نظارت و الگوریتم‌های یادگیری با نظ ارت س نتی را ب ه ط ور مفص ل توضیح می‌ده د و همچ نین الگوریتم‌ه ایی را ب رای پ ردازش زب ان ط بیعی مع رفی می‌کند .این بخش با معرفی موتورهای توصیه به پایان می رسد .فصول موج ود در این بخش عبارتند از: ‏ فصل ،6الگوریتم های یادگیری ماشین بدون نظارت ‏ فصل ،7الگوریتم های یادگیری سنتی با نظارت ‏ فصل ،8الگوریتم های شبکه عصبی ‏ فصل ،9الگوریتم های پردازش زبان طبیعی ‏ فصل ،10موتورهای پیشنهادی 175 6الگوریتم یادگیری ماشین بدون نظارت این فصل در مورد الگوریتم ه ای ی ادگیری ماش ین ب دون نظ ارت اس ت .فص ل ب ا مقدمه ای ب ر تکنی ک ه ای ی ادگیری ب دون نظ ارت ش روع می ش ود .س پس ب ا دو الگ وریتم خوش ه‌بندی آش نا می‌ش ویم k-means :خوش ه‌بندی سلس له مرات بی و الگوریتم‌های .DBSCANبخش بعدی به الگ وریتم ک اهش ابع اد نگ اه می کن د ،ک ه ممکن است زمانی موثر باشد که تعداد زی ادی متغ یر ورودی داش ته باش یم .بخش زیر نشان می دهد که چگون ه می ت وان از ی ادگیری ب دون نظ ارت ب رای تش خیص ناهنجاری استفاده کرد .در نهایت ،ما به یکی از قوی‌ترین تکنیک‌های ی ادگیری ب دون نظارت ،یعنی کاوش قواعد وابستگی نگاه خواهیم کرد .این بخش همچ نین توض یح می‌دهد که چگونه الگوهای کشف‌شده از کاوش قواعد وابستگی ،روابط ج البی را بین عناصر مختلف داده در سراسر تراکنش‌ها نشان می‌دهند که می‌تواند ب ه م ا در تصمیم‌گیری مبتنی بر داده کمک کند .در پایان این فصل ،خوانن ده بای د بتوان د درک کند که چگونه یادگیری ب دون نظ ارت می توان د ب رای ح ل ب رخی از مسائل دنی ای واقعی استفاده شود .خواننده ،الگوریتم‌ها و روش‌های اساسی را که در حال حاضر برای یادگیری بدون نظارت اس تفاده می‌ش وند را درک خواه د ک رد .در این فص ل، موضوعات زیر را پوشش خواهیم داد: ‏ یادگیری بدون نظارت ‏ الگوریتم های خوشه بندی ‏ کاهش ابعاد ‏ الگوریتم های تشخیص ناهنجاری ‏ کاوش قواعد وابستگی 176 معرفی یادگیری بدون نظارت ساده ترین تعریف یادگیری بدون نظارت این است که فرآین د ارائ ه ن وعی س اختار برای داده های بدون ساختار با کشف و اس تفاده از الگوه ای ذاتی داده ه ا اس ت. اگر داده‌ها توسط برخی فرآین دهای تص ادفی تولی د نش وند ،الگوه ایی بین عناص ر داده‌ای در فضای مسئله چند بعدی خود خواهند داشت. الگوریتم های یادگیری بدون نظارت ب ا کش ف این الگوه ا و اس تفاده از آنه ا ب رای ارائه ساختاری به مجموعه داده کار می کنند .این مفهوم در نمودار زیر نش ان داده شده است: شکل :1-6ساختار کلی یادگیری بدون نظارت توجه داشته باشید که یادگیری بدون نظارت با کشف ویژگی های جدید از الگوه ای موجود ،ساختار را اضافه می کند. یادگیری بدون نظارت در چرخه زندگی داده کاوی برای درک نقش یادگیری بدون نظارت ،مهم اس ت ک ه ابت دا ب ه چرخ ه حی ات کلی فرآیند داده‌کاوی نگاه ک نیم .مت دولوژی ه ای مختلفی وج ود دارد ک ه چرخ ه حی ات فرآیند داده کاوی را به مراحل مختلف مستقلی که ف از نامی ده می ش وند ،تقس یم می کنند .در حال حاضر ،دو روش رایج برای نمایش چرخه زندگی داده کاوی وج ود دارد: ‏ چرخه حیات ( CRISP-DMفرایند استاندارد بین صنعتی برای داده کاوی). ‏ فرآیند داده کاوی ( SEMMAنمونه ،کاوش ،اصالح ،مدل ،دسترسی). 177 CRISP-DMتوسط کنسرسیومی از استخراج کنندگان داده ک ه متعل ق ب ه ش رکت ه ای مختلفی از جمل ه کرایس لر و ( SPSSبس ته آم اری عل وم اجتم اعی) بودن د، توسعه یافت SEMMA .توسط ( SASسیستم تحلیل آماری) پیشنهاد شد .بیایی د ب ه یکی از این دو نمایش از چرخه زندگی داده کاوی CRISP-DM ،نگ اه ک نیم و س عی کنیم جایگاه یادگیری بدون نظارت را در چرخه زندگی داده کاوی درک ک نیم .توج ه داشته باشید که SEMMAدر چرخه عمر خود تا حدودی مراحل مش ابهی دارد .اگ ر به چرخه حیات CRISP-DMنگاه ک نیم ،می بی نیم ک ه از ش ش ف از مج زا تش کیل شده است که در شکل زیر نشان داده شده است: شکل :2-6چرخه حیات CRISP-DM بیایید هر مرحله را یک به یک درک کنیم: فاز :1درک تجاری :این فاز در مورد جمع آوری نیازمندیها است و ش امل تالش ب رای درک کام ل مس ئله از نقط ه نظ ر تج اری اس ت .تعری ف دامن ه مس ئله و بازنویسی مجدد آن با توج ه ب ه ی ادگیری ماش ین ( )MLبخش مهمی از این مرحل ه 178 است -به عنوان مثال ،برای ی ک مس ئله طبق ه بن دی دودویی ،گ اهی اوق ات بی ان نیازمندیها در قالب ی ک فرض یه اثب ات ش ده ی ا رد ش ده ،مفی د اس ت .این مرحل ه همچنین در مورد مستندسازی انتظارات برای مدل ی ادگیری ماش ینی اس ت ک ه در مرحله 4در پایین دست آموزش داده می‌شود -به عنوان مث ال ،ب رای ی ک مس ئله طبقه‌بندی ،ما باید حداقل دقت قابل قبول م دلی را ک ه می‌توان د در تولی د ب ه ک ار گرفته شود ،مستند کنیم. توجه ب ه این نکت ه مهم اس ت ک ه ف از 1چرخ ه حی ات CRISP-DMدر م ورد درک تجاری است .این فاز بر روی کاری که باید انج ام ش ود تمرک ز می کن د ،ن ه اینک ه چگونه انجام می شود. فاز :2درک داده ها :این فاز در مورد درک داده هایی است که برای داده کاوی در دسترس است .در این مرحل ه متوج ه خ واهیم ش د ک ه آی ا مجموع ه داده ه ای مناسب برای مسئله ای که در تالشیم حلش کنیم در دسترس است یا خ یر .پس از شناسایی مجموعه داده ها ،باید کیفیت داده ها و ساختار آن را درک ک نیم .م ا بای د دریابیم که چه الگوهایی را می توان از داده ها استخراج کرد که به طور بالقوه می تواند ما را به سمت بینش های مهم ه دایت کن د .م ا همچ نین س عی خ واهیم ک رد ویژگی مناسبی را پیدا کنیم که بتوان از آن به عنوان برچسب (ی ا متغ یر ه دف) ب ا توجه به نیازمندیهای جمع آوری شده در فاز 1استفاده کرد .الگوریتم های ی ادگیری بدون نظارت می توانند نقش قدرتمندی در دستیابی به اهداف فاز 2داشته باش ند. الگوریتم های بدون نظارت می توانند برای اهداف زیر استفاده شود: ‏ برای کشف الگوها در مجموعه داده ‏ برای درک ساختار مجموعه داده با تجزیه و تحلیل الگوهای کشف شده ‏ برای شناسایی یا استخراج متغیر هدف فاز :3آماده سازی داده ها :این فاز در مورد آماده سازی داده ه ا ب رای م دل MLاست که در فاز 4آموزش خواهیم داد. داده های برچسب گذاری شده موجود به دو بخش نابرابر تقسیم می ش وند .بخش بزرگتر داده های آموزشی نامیده می شود و برای آموزش مدل پایین دست در ف از 179 4استفاده می شود .بخش کوچکتر داده های آزم ون نامی ده می ش ود و در ف از 5 برای ارزیابی مدل استفاده می شود .در این مرحله ،الگوریتم‌های ی ادگیری ماش ین بدون نظارت می‌توانند به‌عنوان ابزاری برای آماده‌سازی داده‌ها مورد استفاده قرار گیرند -برای مثال ،می‌توان از آنها برای تبدیل داده‌های بدون س اختار ب ه داده‌ه ای ساخت‌یافته استفاده کرد و ابعاد اضافی را ارائه کرد که می‌تواند در آم وزش م دل مفید باشد. فاز :4مدل سازی :این مرحله ای است که در آن از یادگیری نظارت شده برای فرمول بندی الگوهایی که کشف کرده ایم استفاده می کنیم .از ما انتظ ار می رود که با موفقیت داده ها را مطابق با نیازمندیهای الگوریتم یادگیری با نظارت انتخ ابی خود آماده کنیم .همچنین این مرحله ای است که در آن ویژگی خاصی که به عن وان برچسب استفاده می شود شناسایی می شود .در ف از ،3داده ه ا را ب ه مجموع ه های آزمون و آموزشی تقسیم کردیم .در این مرحله ،فرمول‌ه ای ریاض ی را ب رای نشان دادن روابط در الگوهای مورد عالقه خود تشکیل می‌دهیم .این کار با آموزش م دل ب ا اس تفاده از داده ه ای آموزش ی ایج اد ش ده در ف از 3انج ام می ش ود. همانطور که قبال ذکر شد ،فرمول ریاضی حاص ل ب ه انتخ اب الگ وریتم م ا بس تگی دارد. فاز :5ارزیابی :این مرحله در مورد آزمایش مدل تازه آموزش دیده ب ا اس تفاده از داده های آزمایشی از فاز 3است .اگر ارزیابی با انتظارات تعیین شده در فاز 1 مطابقت داشته باشد ،باید تمام مراحل قبلی را با تکرار دوباره از مرحل ه 1ش روع کنیم .در تصویر قبل نشان داده شده است. فاز :6استقرار :اگر ارزیابی انتظارات توصیف شده در فاز 5را برآورده کند ی ا از آن فراتر رود ،آنگاه مدل آموزش دی ده در تولی د مس تقر می ش ود و ش روع ب ه ایجاد راه حلی برای مسئله ای که در فاز 1تعریف کردیم ،می کند. 180 ف از ( 2درک داده ه ا) و ف از ( 3آم اده س ازی داده ه ا) در چرخ ه حی ات CRISP- ، DMهمه در مورد درک داده ها و آماده سازی آنها برای آم وزش م دل اس ت .این مراحل شامل پردازش داده ها می شود .برخی از سازمان ها متخصص ان را ب رای این مرحله مهندسی داده استخدام می کنند .ب دیهی اس ت ک ه فرآین د پیش نهاد راه حل برای یک مس ئله ک امال ً مبت نی ب ر داده اس ت .ترکی بی از ی ادگیری ماش ینی ب ا نظارت و بدون نظارت برای تدوین یک راه حل قابل اج را ،اس تفاده می ش ود .این فصل بر بخش یادگیری بدون نظارت راه حل متمرکز است .مهندس ی داده ش امل فاز 2و فاز 3است و زمانبرترین بخش یادگیری ماشین اس ت .این ک ار می توان د 70درصد از زمان و منابع یک پروژه معمولی MLرا بگیرد .الگوریتم ه ای ی ادگیری بدون نظارت می توانن د نقش مهمی در مهندس ی داده ایف ا کنن د .بخش ه ای زی ر جزئیات بیشتری در مورد الگوریتم های بدون نظارت ارائه می دهد. روندهای تحقیق فعلی در یادگیری بدون نظارت برای سال‌ها ،تحقیق در مورد الگوریتم‌ه ای ی ادگیری ماش ین بیش تر ب ر تکنیک‌ه ای یادگیری با نظارت متمرکز بود .از آنجایی ک ه تکنی ک ه ای ی ادگیری ب ا نظ ارت می توانند مستقیما ً برای استنتاج مورد استفاده قرار گیرند ،مزایای آنه ا از نظ ر زم ان، هزینه و دقت نسبتا ً به راحتی قابل اندازه گیری است .قدرت الگوریتم های یادگیری ماشینی بدون نظارت اخیرا ً شناخته شده است .از آنجایی که یادگیری بدون نظارت هدایت نمی شود ،کمتر به فرضیات وابسته اس ت و ب ه ط ور ب القوه می توان د راه حل را در هر بُعد همگرا کند .اگرچه کنترل دامنه و نیازمن دیهای پ ردازش الگ وریتم های یادگیری بدون نظارت دشوارتر است ،اما آنه ا پتانس یل بیش تری ب رای کش ف الگوهای پنه ان دارن د .محقق ان همچ نین در تالش هس تند ت ا تکنی ک ه ای ی ادگیری ماشین بدون نظارت را با تکنیک های یادگیری با نظ ارت ت رکیب کنن د ت ا الگ وریتم های قدرتمند جدیدی طراحی کنند. مثال های کاربردی 181 در حال حاضر ،یادگیری بدون نظ ارت ب رای دری افت درک به تر از داده ه ا و ارائ ه ساختار بیشتر ،م ورد اس تفاده ق رار می گ یرد -ب ه عن وان مث ال ،در بخش بن دی بازاریابی ،کشف تقلب و تجزیه و تحلیل س بد ب ازار (ک ه در ادام ه این فص ل م ورد بحث قرار می گیرد) استفاده می شود .بیایید به چند نمونه نگاه کنیم. دسته بندی صدا یادگیری بدون نظارت می تواند برای طبقه بندی صداهای فردی در یک فایل صوتی استفاده شود .از این واقعیت استفاده می کند که صدای هر فرد دارای ویژگی های متمایز است و الگوهای صوتی بالقوه قابل تفکیک ایجاد می کند .سپس می‌ت وان از این الگوها برای تشخیص صدا استفاده کرد -برای مثال Google ،از این تکنی ک در دستگاه‌های Google Homeخود استفاده می‌کند ت ا آنه ا را آم وزش ده د ت ا بین صدای افراد مختلف تفاوت قائل شوند .پس از آموزش Google Home ،می‌تواند پاسخ هر کاربر را به صورت جداگانه شخصی‌سازی کند .برای مثال ،فرض کنید ی ک مکالمه ضبط شده از س ه نف ر داریم ک ه ب ه م دت نیم س اعت ب ا یک دیگر ص حبت می‌کنند .با استفاده از الگوریتم‌های یادگیری بدون نظارت ،می‌ت وانیم ص دای اف راد متمایز را در این مجموعه داده شناس ایی ک نیم .توج ه داش ته باش ید ک ه از طری ق ی ادگیری ب دون نظ ارت ،س اختار را ب ه مجموع ه داده‌ه ای ب دون س اختار اض افه می‌کنیم .این ساختار ابعاد مفید دیگری را در فضای مسئله ب ه م ا می ده د ک ه می تواند برای به دست آوردن بینش و آم اده س ازی داده ه ا ب رای الگ وریتم ی ادگیری ماشین انتخابی ما استفاده شود .نمودار زیر نشان می دهد ک ه چگون ه از ی ادگیری بدون نظارت برای تشخیص صدا استفاده می شود: 182 شکل :3-6استفاده از یادگیری بدون نظارت در تشخیص صدا توجه داشته باشید که در این مورد ،یادگیری بدون نظارت پیشنهاد می کن د ک ه ی ک ویژگی جدید با سه سطح مجزا اضافه کنیم. دسته بندی اسناد الگوریتم‌های یادگیری ماشین بدون نظارت نیز می‌توانن د در مخ زن داده‌ه ای مت نی بدون ساختار اعمال شوند -برای مثال ،اگر مجموعه داده‌ای از اس ناد PDFداش ته باشیم ،می‌توان از یادگیری بدون نظارت برای انجام کارهای زیر استفاده کرد: ‏ موضوعات مختلف را در مجموعه داده کشف کنید ‏ هر سند PDFرا به یکی از موضوعات کشف شده مرتبط کنید این استفاده از یادگیری بدون نظارت برای طبقه بندی اس ناد در ش کل زی ر نش ان داده شده است .این مثال دیگری است که در آن ساختار بیش تری را ب ه داده ه ای بدون ساختار اضافه می کنیم: شکل :4-6استفاده از یادگیری بدون نظارت برای طبقه بندی اسناد 183 توجه داشته باشید که در این مورد ،یادگیری بدون نظارت پیشنهاد می کن د ک ه ی ک ویژگی جدید با پنج سطح مجزا اضافه کنیم. آشنایی با الگوریتم های خوشه بندی یکی از ساده‌ترین و قوی‌ترین تکنیک‌های مورد استفاده در ی ادگیری ب دون نظ ارت، بر اساس گروه‌بندی الگوهای مشابه با یکدیگر از طری ق الگوریتم‌ه ای خوش ه‌بندی است .برای درک جنبه خاصی از داده ها استفاده می شود که به مسئله ای ک ه م ا سعی در حل آن داریم مربوط می شود .الگوریتم های خوشه بندی به دنب ال گ روه بندی ط بیعی در اقالم داده هس تند .از آنج ایی ک ه گ روه ب ر اس اس هیچ ه دف ی ا فرضی نیست ،به عنوان یک تکنیک ی ادگیری ب دون نظ ارت طبق ه بن دی می ش ود. به ترین راه ب رای تع یین ش باهت بین نق اط داده از مس ئله ای ب ه مس ئله دیگ ر متفاوت است و به ماهیت مسئله ای که با آن سر و کار داریم بستگی دارد .بیایید به روش های مختلفی که می توان برای محاس به ش باهت بین نق اط داده مختل ف استفاده کرد ،نگاهی بیندازیم. محاسبه شباهت ها قابلیت اطمینان گروه‌بندی ایجاد شده توسط الگوریتم‌های خوشه‌بندی بر این فرض استوار است که می‌توانیم شباهت‌ها ی ا ن زدیکی بین نق اط داده مختل ف در فض ای مسئله را به دقت حساب ک نیم .این ک ار ب ا اس تفاده از معیاره ای مختل ف فاص له انجام می شود .در زیر سه مورد از محبوب‌ترین روش‌هایی ک ه ب رای تع یین کمیت شباهت‌ها استفاده می‌شود ،ذکر شده است: ‏ اندازه گیری فاصله اقلیدسی ‏ اندازه گیری فاصله منهتن ‏ اندازه گیری فاصله کسینوسی بیایید به این اندازه گیری های فاصله با جزئیات بیشتری نگاه کنیم. 184 فاصله اقلیدسی فاصله بین نقاط مختلف می تواند ش باهت بین دو نقط ه داده را حس اب کن د و ب ه طور گس ترده در تکنی ک ه ای ی ادگیری ماش ین ب دون نظ ارت مانن د خوش ه بن دی استفاده می شود .فاصله اقلیدسی رایج ت رین و س اده ت رین ان دازه گ یری فاص له است .با اندازه گیری کوت اه ت رین فاص له بین دو نقط ه داده در فض ای چن د بع دی محاسبه می شود .برای مثال ،بیایید دو نقطه ( A )1،1و ( B )4،4را در یک فضای دو بعدی در نظر بگیریم ،همانطور که در نمودار زیر نشان داده شده است: شکل :5-6فاصله اقلیدسی بین نقاط AوB برای محاسبه فاصله بین Aو - Bیعنی ) d(A,Bمی توانیم از فرمول فیثاغورث زیر استفاده کنیم: 185 توجه داشته باشید که این محاسبه برای یک فضای مسئله دو بعدی است .برای ی ک فضای مسئله nبع دی ،می ت وانیم فاص له بین دو نقط ه Aو Bرا ب ه ص ورت زی ر محاسبه کنیم: فاصله منهتن در بسیاری از موقعیت‌ها ،اندازه‌گیری کوتاه‌ترین فاصله بین دو نقطه با استفاده از اندازه‌گیری فاصله اقلیدسی ،تشابه یا نزدیکی بین دو نقطه را واقعا ً نشان نمی‌ده د برای مثال ،اگر دو نقط ه داده مکان‌ه ایی را ب ر روی نقش ه نش ان دهن د ،س پسفاصله واقعی از نقطه Aتا نقطه Bبا استفاده از حمل و نقل زمینی ،مانند ماش ین یا تاکسی ،بیشتر از مسافت محاسبه ش ده توس ط فاص له اقلیدس ی خواه د ب ود . برای موقعیت‌هایی از این قبیل ،از مسافت منهتن استفاده می‌کنیم که طوالنی‌ترین مس یر را بین دو نقط ه مش خص می‌کن د و بازت اب به تری از ن زدیکی دو نقط ه در زمینه نقاط مبدا و مقصد است که می‌توان در ی ک ش هر ش لوغ ب ه آن س فر ک رد. مقایسه بین معیارهای فاص له منهتن و اقلیدس ی در نم ودار زی ر نش ان داده ش ده است: 186 شکل :6-6فاصله اقلیدسی و منهتن بین نقاط AوB توجه داشته باشید که فاص له منهتن همیش ه براب ر ی ا بزرگ تر از فاص له اقلیدس ی مربوطه خواهد بود. فاصله کسینوسی اندازه گیری های فاصله اقلیدس ی و منهتن در فض ای ب ا ابع اد ب اال عملک رد خ وبی ندارند .در یک فضای مسئله با ابعاد باال ،فاصله کسینوسی با دقت بیشتری ،نزدیکی بین دو نقطه داده در یک فضای مسئله چند بعدی را منعکس می کند .اندازه گ یری فاصله کسینوسی با اندازه گیری زاویه کسینوس ایجاد شده توسط دو نقطه متصل به یک نقطه مرجع محاسبه می شود .اگر نقاط داده نزدیک باشند ،ب دون توج ه ب ه 187 ابعاد آنها ،زاویه باریک خواهد بود .از طرف دیگر ،اگر آنها دور باش ند ،زاوی ه ب زرگ خواهد بود: شکل :7-6فاصله کسینوسی بین نقاط AوB داده های متنی را تقریبا ً می توان فضایی با ابعاد باال در نظر گرفت .از آنج ایی ک ه اندازه گیری فاصله کسینوسی ب ا فض اهای hبُع دی بس یار خ وب ک ار می کن د ،در هنگام برخورد با داده های متنی ،انتخاب خ وبی اس ت .توج ه داش ته باش ید ک ه در شکل قبل ،کسینوس زاویه بین ( A )2،5و ( ، B )4.4فاصله کسینوس است .مرجع بین این نقاط مبدأ یعنی ( X )0,0است .ام ا در واقعیت ،ه ر نقط ه ای در فض ای مسئله می تواند به عنوان نقطه داده مرجع عمل کند و لزومی ندارد که مبدأ باشد. الگوریتم خوشه بندی K-means 188 نام الگوریتم خوشه‌بندی k-meansاز این واقعیت ناشی می‌شود که سعی می‌کن د تعدادی خوشه ، kایج اد کن د ،ک ه می انگین را ب رای ی افتن ن زدیکی بین نق اط داده محاسبه می‌کند .از یک روش خوشه بندی نسبتا ساده استفاده می کند ،اما به دلیل مقی اس پ ذیری و س رعت آن همچن ان محب وب اس ت .از لح اظ الگ وریتمی، خوشه‌بندی k-meansاز یک منطق تکراری استفاده می‌کند که مراکز خوش ه‌ها را تا زمانی که نماینده‌ نقطه داده های گروهی که به آن تعل ق دارن د را منعکس کنن د، حرکت می‌دهد .توجه به این نکته مهم است که الگوریتم‌های k-meansفاق د یکی از عملکردهای اساسی مورد نیاز هستند .برای خوش ه بن دی ،عملک رد گمش ده این است ک ه ب رای ی ک مجموع ه داده معین ،الگ وریتم k-meansنمی توان د مناس ب ترین تعداد خوشه ها را تعیین کند .مناسب ترین تعداد خوشه ها ،k ،به تع داد گ روه بندی های طبیعی در یک مجموعه داده خاص بستگی دارد .فلسفه پشت این ح ذف این است که الگوریتم را تا حد امکان ساده نگه داریم و عملک رد آن را ب ه ح داکثر برس انیم .این ط راحی ن اب و متوس ط k-means ،را ب رای مجموع ه داده ه ای بزرگتر مناسب می کند .فرض بر این است که یک مکانیسم خارجی ب رای محاس به kاستفاده خواهد شد .بهترین راه برای تعیین kبستگی ب ه مس ئله ای دارد ک ه م ا س عی در ح ل آن داریم .در ب رخی م وارد k ،مس تقیما ً توس ط زمین ه مس ئله خوشه‌بندی مشخص می‌شود -ب رای مث ال ،اگ ر بخ واهیم کالس ی از دانش‌آم وزان علوم داده را به دو خوشه تقسیم کنیم ،یکی ش امل دانش‌آم وزانی ب ا مه ارت علم داده و دیگری با مهارت‌های برنامه‌نویسی ،سپس kدو خواهد شد. در برخی مسائل دیگر ،مقدار kممکن است آشکار نباش د .در چ نین م واردی ،ی ک روش تکراری آزمون و خطا یا یک الگ وریتم مبت نی ب ر اکتش اف بای د ب رای تخمین مناسب‌ترین تعداد خوشه‌ها برای یک مجموعه داده معین استفاده شود. منطق خوشه بندی k-means این بخش منطق الگوریتم خوشه بندی k-meansرا شرح می ده د .بیایی د ی ک ب ه یک آنها را بررسی کنیم. 189 مقداردهی اولیه به منظور گروه بندی آنها ،الگوریتم k-meansاز اندازه گیری فاص له ب رای ی افتن شباهت یا نزدیکی بین نقاط داده استفاده می کند .قبل از اس تفاده از الگ وریتم k- ،meansباید مناسب ترین اندازه گیری فاصله انتخاب شود .به ط ور پیش ف رض، اندازه گیری فاص له اقلیدس ی اس تفاده خواه د ش د .همچ نین ،اگ ر مجموع ه داده دارای مقادیر پرت باشد ،باید مکانیزمی ب رای تع یین معیاره ایی جهت شناس ایی و حذف نقاط پرت مجموعه داده ،ابداع شود. مراحل الگوریتم k-means مراحل درگیر در الگوریتم خوشه بندی k-meansبه شرح زیر است: مرحله 1تعداد خوشه ها k ،را انتخاب می کنیم. مرحله 2از میان نقاط داده ،به طور تصادفی kنقطه را ب ه عن وان مراک ز خوش ه انتخاب می کنیم. مرحله 3بر اساس اندازه گیری فاص له انتخ اب ش ده ،ب ه ط ور مک رر فاص له ه ر نقطه در فضای مسئله را تا هر یک از مراکز kخوشه محاسبه می کنیم .بر اس اس اندازه مجموعه داده ،این کار ممکن است یک مرحله زمان بر باش د -ب رای مث ال، اگر 10000نقطه در خوشه وجود داش ته باش د و k = 3باش د ،این ب دان مع نی است که 30000فاصله باید محاسبه شود. مرحله 4ما هر نقطه داده در فضای مسئله را به نزدیکترین مرکز خوشه اختصاص می دهیم. مرحله 5اکنون هر نقطه داده در فضای مسئله ما یک مرکز خوش ه اختص اص داده شده دارد .اما کار ما تمام نشده است ،زیرا انتخاب مراکز خوشه اولیه ب ر اس اس انتخاب تصادفی ب وده اس ت .م ا بای د تأیی د ک نیم ک ه مراک ز خوش ه‌ای ک ه به‌ط ور تصادفی انتخاب شده‌اند در واقع مرکز ثقل هر خوشه هستند .ما مراکز خوشه را با محاسبه میانگین نقاط داده تشکیل دهنده هر ی ک از kخوش ه ه ا دوب اره محاس به 190 می کنیم .این مرحله توضیح می دهد ک ه چ را این الگ وریتم k-meansنامی ده می شود. مرحله 6اگر مراکز خوشه در مرحله 5جابجا شده باشند ،به این مع نی اس ت ک ه باید تخصیص خوشه را برای هر نقطه داده دوباره محاسبه کنیم .برای این ک ار ،ب ه مرحله 3برمی گردیم تا آن مرحله محاسباتی فش رده را تک رار ک نیم .اگ ر مراک ز خوشه جابجا نشده باشند یا اگر ش رط توق ف از پیش تع یین ش ده م ا (مثال ً تع داد حداکثر تکرارها) برآورده شده باشد ،کار ما تمام شده است. شکل زیر نتیجه اجرای الگوریتم k-meansرا در فضای مسئله دو بعدی نش ان می دهد: شکل ( :8-6الف) نقاط داده قبل از خوشه بندی؛ (ب) خوشه های حاصل پس از اجرای الگوریتم خوشه بندی k-means توجه داشته باشید که دو خوشه ایجاد شده پس از اجرای ، k-meansبه خ وبی در این مورد متمایز هستند. 191 شرط توقف برای الگوریتم ،k-meansشرط توقف پیش فرض ،زمانی است که دیگر جابج ایی مراکز خوشه در مرحله 5وجود نداشته باشد. اما مانند بسیاری از الگوریتم‌های دیگر ،الگوریتم‌های k-meansممکن است زم ان زیادی را به خص وص در هنگ ام پ ردازش مجموع ه داده‌ه ای ب زرگ در ی ک فض ای مسئله با ابعاد باال ،برای همگرایی نیاز داشته باشند .به ج ای اینک ه منتظ ر همگ را شدن الگوریتم باشیم ،می‌توانیم ب ه ط ور ص ریح ش رط توق ف را ب ه ص ورت زی ر تعریف کنیم: ‏ با تعیین حداکثر زمان اجرا: ش رط توق ف t>tmax :ک ه tزم ان اج رای فعلی و tmaxح داکثر زم ان اج رای الگوریتم است. ‏ با تعیین حداکثر تکرار: شرط توقف :اگر m>mmax، mتکرار فعلی و mmaxحداکثر تعداد تکراره ایی است که برای الگوریتم تنظیم کرده ایم. کدگذاری الگوریتم k-means بیایید ببینیم چگونه می توانیم الگوریتم k-meansرا در پایتون کدنویسی کنیم: .1ابتدا ،بیایید بسته هایی را وارد کنیم که باید برای الگوریتم k-meansکدنویس ی کنیم .توجه داشته باشید که ما بسته sklearnرا برای خوشه بندی k-meansوارد می کنیم: ‏from sklearn import cluster ‏import pandas as pd ‏import numpy as np 192 ب رای اس تفاده از خوش ه بن دی ،k-meansاج ازه دهی د 20نقط ه داده را در ی ک فضای مسئله دو بعدی ایجاد کنیم که برای خوشه بندی k-meansاستفاده خواهیم کرد: {(dataset = pd.DataFrame 'x': [11, 21, 28, 17, 29, 33, 24, 45, 45, 52, 51, 52, 55, 53, 55, 61, 62, 70, 72, 10], 'y': [39, 36, 30, 52, 53, 46, 55, 59, 63, 70, 66, 63, ]58, 23, 14, 8, 18, 7, 24, 10 )} .1بیایید دو خوشه ( )k = 2داشته باشیم و سپس با فراخوانی توابع ،fitخوشه را ایجاد کنیم: )myKmeans = cluster.KMeans(n_clusters=2 )myKmeans.fit(dataset بیایید یک متغیر به ن ام centroidایج اد ک نیم ک ه آرای ه ای اس ت ک ه مح ل مرک ز خوشه های تشکیل شده را نگه می دارد .در مورد مسئله م ا،k = 2 ،پس آرای ه دارای اندازه 2خواهد بود .بیایید متغیر دیگری به نام labelایجاد کنیم ک ه نش ان دهنده انتساب هر نقطه داده به یکی از دو خوش ه اس ت .از آنج ایی ک ه 20نقط ه داده وجود دارد ،اندازه این آرایه 20خواهد بود: _centroids = myKmeans.cluster_centers _labels = myKmeans.labels 193 حاال بیایید این دو آرایه centroid ،و labelرا چاپ کنیم: توجه داشته باشید که آرایه اول تخصیص خوشه را با هر نقطه داده و آرای ه دوم دو مرکز خوشه را نشان می دهد. .1بیایید با استفاده از matplotlibخوشه ها را رسم کنیم و به آنها نگاه کنیم: 194 توجه داشته باشید که نقاط بزرگتر در نمودار ،مرکزها هستند ک ه توس ط الگ وریتم k-meansتعیین می شوند. محدودیت خوشه بندی k-means الگوریتم k-meansطوری طراحی ش ده اس ت ک ه ی ک الگ وریتم س اده و س ریع باشد .به دلیل سادگی عمدی در طراحی آن ،با محدودیت های زیر همراه است: ‏ بزرگترین محدودیت خوشه‌بندی k-meansاین است که تعداد اولیه خوشه‌ها باید از پیش تعیین شود. 195  تخصیص اولیه مراکز خوشه ای تصادفی است .این بدان معنی است ک ه ه ر بار که الگوریتم اجرا می شود ،ممکن است خوشه ه ای کمی متف اوت ارائ ه دهد. ‏ هر نقطه داده فقط به یک خوشه اختصاص داده می شود. ‏ خوشه بندی k-meansبه نقاط پرت حساس است. خوشه بندی سلسله مراتبی خوشه بندی k-meansاز رویکرد باال به پایین استفاده می کند زیرا الگ وریتم را از مهمترین نقاط داده که مراکز خوشه هستند ،شروع می کنیم .یک رویکرد ج ایگزین برای خوشه بندی وجود دارد که در آن ،به جای شروع از ب اال ،الگ وریتم را از پ ایین شروع می کنیم .پایین در این زمینه هر یک از نق اط داده منف رد در فض ای مس ئله است .راه حل این است ک ه همچن ان ک ه ب ه س مت مراک ز خوش ه پیش می رود، نقاط داده مشابه را با هم گروه بندی کنی د .این رویک رد ج ایگزین از پ ایین ب ه ب اال توسط الگوریتم های خوشه بندی سلسله مراتبی استفاده می ش ود و در این بخش مورد بحث قرار می گیرد. مراحل خوشه بندی سلسله مراتبی مراحل زیر در خوشه بندی سلسله مراتبی دخیل است: .1ما یک خوشه مجزا برای هر نقطه داده در فضای مس ئله خ ود ایج اد می ک نیم. اگر فضای مسئله ما از 100نقطه داده تشکیل شده باش د ،آنگ اه ب ا 100خوش ه شروع می شود. .2فقط نقاطی را گروه بندی می کنیم که به هم نزدیکترند. .3وضعیت توقف را بررسی می کنیم .اگر شرط توقف هنوز برآورده نشده اس ت، مرحله 2را تکرار می کنیم. 196 ساختار خوشه ای به دس ت آم ده را دن دروگرام می نامن د .در دن دروگرام ،ارتف اع خطوط عمودی تعیین می کن د ک ه آیتم ه ا چق در نزدی ک هس تند ،هم انطور ک ه در نمودار زیر نشان داده شده است: شکل :9-6نمودار دندروگرام توجه داشته باشید که وضعیت توقف به صورت یک خ ط نقط ه چین در ش کل قب ل نشان داده شده است. کدنویسی یک الگوریتم خوشه بندی سلسله مراتبی بیایید یاد بگیریم که چگون ه می ت وانیم ی ک الگ وریتم سلس له مرات بی را در پ ایتون کدنویسی کنیم: .1ابتدا AgglomerativeClusteringرا از کتابخانه sklearn.clusterبه هم راه pandasو بسته های numpyوارد می کنیم: 197 from sklearn.cluster import AgglomerativeClustering import pandas as pd import numpy as np : نقطه داده را در یک فضای مسئله دو بعدی ایجاد خواهیم کرد20 سپس dataset = pd.DataFrame({ 'x': [11, 21, 28, 17, 29, 33, 24, 45, 45, 52, 51, 52, 55, 53, 55, 61, 62, 70, 72, 10], 'y': [39, 36, 30, 52, 53, 46, 55, 59, 63, 70, 66, 63, 58, 23, 14, 8, 18, 7, 24, 10] }) م ا از ت ابع. خوشه سلسله مراتبی را ایجاد می ک نیم،سپس با تعیین هایپرپارامترها : برای پردازش الگوریتم استفاده می کنیمfit_predict cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward') cluster.fit_predict(dataset) :حاال بیایید به ارتباط هر نقطه داده با دو خوشه ایجاد شده نگاه کنیم 198 می بینید که انتساب خوشه برای هر دو الگوریتم سلسله مراتبی و k-means بسیار شبیه هستند. ارزیابی خوشه ها هدف از خوشه بندی با کیفیت خوب این است که نقاط داده ای که به خوش ه ه ای جداگانه تعلق دارند باید قابل تمایز باشند .این کار داللت بر موارد زیر دارد: ‏ نقاط داده ای که به یک خوشه تعلق دارند باید تا حد امکان مشابه باشند. ‏ نقاط داده ای که به خوشه های جداگانه تعلق دارند باید تا حد امکان متفاوت باشند. شهود انسان می تواند برای ارزیابی نتایج خوش ه بن دی ب ا تصویرس ازی خوش ه ه ا استفاده شود ،اما روش های ریاضی وجود دارد ک ه می توان د کیفیت خوش ه ه ا را حساب کند .تحلیل سیلوئت یکی از این تکنیک‌ها است که فش ردگی و ج دایی را در خوشه‌های ایجاد ش ده توس ط الگ وریتم k-meansمقایس ه می‌کن د .نم وداری را ترسیم می کند که نزدیکی هر نقطه در یک خوشه خاص را نسبت به سایر نقاط در خوشه های همسایه نشان می دهد .با هر خوشه عددی در محدوده [ ]0 ،1مرتب ط می کند .جدول زیر نشان می دهد که ارقام در این محدوده نشان دهنده چیست: محدوده معنی توضیح 1.0–0.71 عالی این به این معنی است که خوشه بندی k-meansبه –0.51 معقول گروه هایی منجر شد که کامال ً از یکدیگر متمایز هستند. این بدان معنی است که خوشه بندی k-meansبه 199 گروه هایی منجر شد که تا حدودی از یکدیگر متمایز 0.70 هستند. –0.26 ضعیف 0.50 این به این معنی است که خوشه بندی k-means منجر به گروه بندی می شود ،اما نباید به کیفیت گروه بندی تکیه کرد. <0.25 هیچ خوشه با استفاده از پارامترهای انتخاب شده و داده های بندی پیدا مورد استفاده ،امکان گروه بندی با استفاده از خوشه نشده است بندی k-meansوجود نداشت. توجه داشته باشید که هر خوشه در فضای مسئله ی ک امتی از جداگان ه دری افت می کند. ‏DBSCAN ( DBSCANخوش ه‌بندی فض ایی مبت نی ب ر چگ الی برنامه‌ه ا ب ا ن ویز) ی ک تکنی ک ی ادگیری ب دون نظ ارت اس ت ک ه خوش ه‌بندی را ب ر اس اس چگ الی نق اط انج ام می‌دهد .ایده اصلی ب ر این ف رض اس توار اس ت ک ه اگ ر نق اط داده را در فض ای شلوغ یا با چگالی باال با هم گروه بندی ک نیم ،می ت وانیم ب ه خوش ه بن دی معن ادار دست یابیم .این رویکرد به خوشه بندی ،دو مفهوم مهم دارد: ‏ با استفاده از این ایده ،الگوریتم احتماال ً نقاطی را که در کنار هم وجود دارند، بدون در نظر گرفتن شکل آنها ،با هم دسته بندی می کند .این روش به ایجاد خوشه ای از اشکال دلخواه کمک می کند. ‏ برخالف الگوریتم ،k-meansما نیازی ب ه تع یین تع داد خوش ه ه ا ن داریم و الگوریتم می تواند تعداد مناسب گروه بندی را در داده ها تشخیص دهد. مراحل زیر شامل الگوریتم DBSCANاست: 200 این الگوریتم یک همسایگی در اط راف ه ر نقط ه داده ایج اد می کن د .این ک ار ب ا شمارش تعداد نقاط داده در فاصله ای که معموال ً با یک متغیر epsنش ان داده می شود ،انجام می شود .فاصله به طور پیش فرض با ان دازه گ یری فاص له اقلیدس ی تعیین می شود. سپس ،الگوریتم ت راکم ه ر نقط ه داده را حس اب می کن د .از متغیره ایی ب ه ن ام min_samplesاس تفاده می کن د .اگ ر ی ک نقط ه داده بیش از min_samples داشته باشد ،به عنوان یک نمونه اصلی شناسایی می شود .بدیهی است که منطق ه شلوغ تر یا متراکم تر ،نمونه های اصلی بیشتری خواهد داشت. هر یک از مکان های شناسایی شده یک خوشه را مشخص می کند .همس ایگی ی ک نمونه اصلی ممکن است حاوی نمونه های اصلی دیگری باشد. هر نقطه داده ای که یک نمونه اصلی نباشد یا در همسایگی یک نمونه اص لی ق رار نگیرد ،به عنوان نقطه پرت در نظر گرفته می شود. اج ازه دهی د ببی نیم چگون ه می‌ت وانیم خوش ه‌هایی را ب ا اس تفاده از DBSCANدر Pythonایجاد کنیم .ابتدا توابع الزم را از کتابخانه sklearnوارد می‌کنیم. بیایید DBSCANرا با مسئله خوشه‌بندی نسبتا ً دشوار به ن ام half-moonsامتح ان کنیم .مجموعه داده را می توان با استفاده از یک تابع داخلی ایجاد کرد .این مسئله ی آزمون برای الگوریتم هایی مناسب اس ت ک ه ق ادر ب ه ی ادگیری مرزه ای کالس غیرخطی هستند .برای آن تابع () make_moonsزیر ،یک الگ وی چرخش ی ی ا دو ماه تولید می کند .ما می توانیم میزان نویزی بودن اشکال ماه و تعداد نمون ه ه ای تولید شده را کنترل کنیم .مجموعه داده به شکل زیر است: 201 شکل :10-6مثالی از DBSCAN برای استفاده از ،DBSCANباید پارامترهای epsو min_samplesرا ارائه کنیم و در مورد آن بحث کنیم: کاربرد خوشه بندی خوشه بندی هر جا که نیاز به کشف الگوهای اساس ی در مجموع ه داده ه ا داش ته باشیم استفاده می شود .در موارد استفاده دولتی ،خوشه بن دی را می ت وان ب رای موارد زیر استفاده کرد: 202  تجزیه و تحلیل کانون جرم و جنایت ‏ تحلیل اجتماعی جمعیت شناختی در تحقیقات بازار می توان از خوشه بندی برای موارد زیر استفاده کرد: ‏ تقسیم بندی بازار ‏ تبلیغات هدفمند ‏ دسته بندی مشتریان تجزیه و تحلیل مؤلفه اصلی ( )PCAهمچنین برای کاوش کلی داده ها و حذف ن ویز از داده های بیدرنگ ،مانند معامالت در بازار سهام ،استفاده می شود. کاهش ابعاد هر ویژگی در داده های ما مربوط به یک بعد در فضای مسئله ما است .ب ه ح داقل رساندن تعداد ویژگی ها برای ساده تر کردن فضای مسئله ،کاهش ابعاد نامیده می شود و به یکی از دو روش زیر قابل انجام است: ‏ انتخاب ویژگی :انتخاب مجموعه‌ای از ویژگی‌هایی که در زمینه مسئله ای ک ه سعی در حل آن داریم مهم هستند. ‏ تجمیع ویژگی :ترکیب دو یا چند ویژگی برای کاهش ابعاد ب ا اس تفاده از یکی از الگوریتم‌های زیر: ‏ :PCAیک الگوریتم MLبدون نظارت خطی ‏ تجزیه و تحلیل تشخیص خطی ( :)LDAیک الگوریتم MLنظارت شده خطی ‏ تجزیه و تحلیل مؤلفه اصلی هسته :یک الگوریتم غیر خطی بیایید به یکی از الگوریتم های کاهش ابعاد محبوب ،یع نی ،PCAب ا جزئی ات بیش تر نگاه کنیم. 203 تجزیه و تحلیل مؤلفه های اصلی PCAیک تکنیک یادگیری ماشینی بدون نظارت است که می تواند برای کاهش ابعاد با استفاده از تبدیل خطی استفاده شود .در شکل زیر دو ج زء اص لی PC1و PC2 را می بینیم که شکل گسترش نق اط داده را نش ان می دهن د PC1 .و PC2را می توان برای خالصه کردن نقاط داده با ضرایب مناسب استفاده کرد: شکل :11-6مثالی از کاهش ابعاد بیایید کد زیر را در نظر بگیریم: ‏from sklearn.decomposition import PCA 204 iris = pd.read_csv('iris.csv') X = iris.drop('Species', axis=1) pca = PCA(n_components=4) pca.fit(X) : خود را چاپ کنیمPCA حاال بیایید ضرایب مدل Sepal.Length، اص لی دارای چه ار وی ژگیDataFrame توجه داشته باشید ک ه قبلیDataFrame .ت اسPetal.Width وSepal.Width، Petal.Length را مش خص می کند—ب هPC4 وPC1، PC2، PC3 ض رایب چه ار مؤلف ه اص لی را مش خص می کن د ک ه می توان د ج ایگزینPC1 ردیف اول ضرایب،عنوان مثال را برایPCA می توانیم مولفه های، بر اساس این ضرایب.چهار متغیر اصلی شود : ورودی محاسبه کنیمDataFrame X pca_df=(pd.DataFrame(pca.components_,columns=X.columns) ) # Let us calculate PC1 using coefficients that are generated X['PC1'] = X['Sepal.Length']* pca_df['Sepal.Length'][0] + X['Sepal.Width']* pca_df['Sepal.Width'] # Let us calculate PC2 205 X['PC2'] = X['Sepal.Length']* pca_df['Sepal.Length'][1] + X['Sepal.Width']* pca_df['Sepal.Width'] #Let us calculate PC3 X['PC3'] = X['Sepal.Length']* pca_df['Sepal.Length'][2] + X['Sepal.Width']* pca_df['Sepal.Width'] # Let us calculate PC4 X['PC4'] = X['Sepal.Length']* pca_df['Sepal.Length'][3] + X['Sepal.Width']* pca_df['Sepal.Width'] : چاپ کنیمPCA را بعد از محاسبه موبفه هایX حاال بیایید راPCA حاال بیایید نسبت واریانس را چاپ کنیم و سعی کنیم مفاهیم استفاده از :درک کنیم 206 نسبت واریانس موارد زیر را نشان می دهد: اگر بخواهیم چهار ویژگی اصلی را ب ا PC1ج ایگزین ک نیم ،می‌ت وانیم ح دود 92.3 درصد از واریانس متغیرهای اصلی را ثبت کنیم .ما برخی از تق ریب ه ا را ب ا ع دم دریافت ٪100واریانس چهار ویژگی اصلی معرفی می کنیم. اگر ما انتخاب کنیم که چهار وی ژگی اص لی را ب ا PC1و PC2ج ایگزین ک نیم5.3 ، درصد از واریانس متغیرهای اصلی را دریافت خواهیم کرد. اگر بخواهیم چهار وی ژگی اص لی را ب ا PC1، PC2و PC3ج ایگزین ک نیم ،اکن ون ٪0.017از واریانس متغیرهای اصلی را دریافت خواهیم کرد. اگر چهار ویژگی اصلی را با چهار مؤلفه اص لی ج ایگزین ک نیم ٪100 ،از واری انس متغیرهای اصلی را دریافت خواهیم کرد (،)0.005 + 0.017 + 0.053 + 92.4 اما جایگزینی چهار ویژگی اصلی با چهار مؤلفه اصلی بی معنی است .ب ه هیچ وج ه از ابعاد کم نمی کند و چیزی به دست نمی آورد. محدودیت های PCA محدودیت های PCAبه شرح زیر است: PCAفقط برای متغیرهای پیوسته قابل استفاده است و برای متغیرهای موض وعی نمی باشد. 207 در حین تجمیع PCA ،متغیرهای مؤلفه را تقریب می زند .مسئله ابعاد را به قیمت از دست دادن دقت ،ساده می کند .این موازنه باید قب ل از اس تفاده از PCAب ه دقت مورد مطالعه قرار گیرد. کاوش قواعد وابستگی الگوها در یک مجموعه داده خاص گنجین ه ای هس تند ک ه بای د ب رای اطالع اتی ک ه دارند کشف ،درک و استخراج شود .مجموع ه مهمی از الگوریتم‌ه ا وج ود دارد ک ه س عی می‌کنن د ب ر تحلی ل الگ و در ی ک مجموع ه داده معین تمرک ز کنن د .یکی از محبوب‌ترین الگوریتم‌های این دسته ،الگوریتم کاوش قواعد وابستگی نام دارد ک ه قابلیت‌های زیر را در اختیار ما قرار می‌دهد: ‏ توانایی اندازه گیری فرکانس یک الگو ‏ توانایی ایجاد رابطه علت و معلولی بین الگوها. ‏ توانایی محاسبه سودمندی الگوها با مقایسه دقت آنها با حدس زدن تصادفی نمونه هایی از کاربردها کاوش قواعد وابس تگی زم انی اس تفاده می ش ود ک ه م ا در تالش ب رای بررس ی روابط علت و معل ولی بین متغیره ای مختل ف ی ک مجموع ه داده هس تیم .در زی ر نمونه سواالتی است که می تواند به آنها کمک کند: ‏ کدام مقادیرِ رطوبت ،پوشش ابری و دما می توان د منج ر ب ه بارن دگی ف ردا شود؟ ‏ چه نوع ادعایی از بیمه می تواند نشان دهنده تقلب باشد؟ ‏ چه ترکیبی از داروها ممکن است منجر به عوارض برای بیماران شود؟ تحلیل سبد بازار 208 در این کتاب ،موتورهای توصیه در فصل ،8الگوریتم‌های شبکه عصبی ،م ورد بحث قرار گرفته‌اند .تجزیه و تحلیل سبد یک راه ساده تر برای یادگیری توصیه ها اس ت. در تجزیه و تحلیل سبد ،داده‌های ما فقط حاوی اطالعات مربوط به م واردی اس ت که با هم خریداری شده‌اند .هیچ اطالعاتی در مورد کاربر یا اینکه آیا کاربر از م واردِ واحد ،لذت برده است یا خیر ندارد .توجه داشته باشید که دریافت این داده‌ها بسیار آسان‌تر از دریافت داده‌های رتبه‌بندی است .برای مثال ،این نوع داده‌ها هنگام خرید از Walmartتولید می‌شوند و برای دریافت داده‌ها به تکنی ک خاص ی نی از نیس ت. این داده ها وقتی در یک دوره زمانی جم ع آوری ش وند ،داده ه ای ف راملی نامی ده می شوند .هنگامی که تجزیه و تحلیل قواعد وابستگی که برای مجموع ه داده ه ای فراملی از سبدهای خرید استفاده می شود ،در فروشگاه های رفاه ،س وپرمارکت ها و زنجیره های فس ت ف ود اس تفاده ش ود ،ب ه آن تحلی ل س بد ب ازار می گوین د. ط خرید مجموعه ای از اقالم را ب ا هم ان دازه گ یری می کن د ک ه ب ه احتمال مشرو ِ ِ پاسخ به سؤاالت زیر کمک می کند: جای بهینه اقالم در قفسه چیست؟ اقالم چگونه باید در کاتالوگ بازاریابی ظاهر شوند؟ بر اساس الگوهای خرید کاربر ،چه چیزی باید توصیه شود؟ از آنجایی که تجزیه و تحلیل سبد بازار می تواند چگونگی ارتباط اقالم با یک دیگر را تخمین بزند ،اغلب برای خرده فروشی های انبوه مانند سوپرمارکت ه ا ،فروش گاه های رفاه ،داروخانه ها و زنجیره های فست فود استفاده می شود .مزیت تجزی ه و تحلیل سبد بازار این است که نتایج تقریبا ً توضیحی هستند ،به این معنی که آنه ا ب ه راحتی توسط کاربران تجاری قابل درک هستند .بیایید به یک ابرفروش گاه معم ولی نگ اه ک نیم.تم ام اقالم منحص ر ب ه ف رد موج ود در فروش گاه را می ت وان ب ا ی ک مجموعه نشان داد، ‏π= {item 1 , item 2 , . . . , item m }. 209 بنابراین ،اگر آن فروشگاه 500کاالی متمایز را بفروش د π ،مجم وعه‌ای ب ا ان دازه 500خواهد بود .اف راد اقالمی را از این فروش گاه خری داری می‌کنن د .ه ر ب ار ک ه شخصی کاالیی را می‌خرد و در باجه پرداخت می‌کند ،به مجموعه‌ای از اقالم در یک تراکنش خاص اضافه می‌شود که به آن مجموعه اقالم می‌گویند .در یک بازه زمانی معین ،تراکنش‌ها در مجموعه‌ای با هم به نام ∆گروه‌بندی می‌ش وند ک ه ب ه ص ورت زیر می باشد: ∆= {t 1 ,t 2 , . . . ,t n }. بیایید به داده های تراکنش ساده زیر که فقط از چهار تراکنش تشکیل ش ده اس ت نگاه کنیم .این تراکنش ها در جدول زیر خالصه شده است: t1ویکت ،پد t2عصا ،ویکت ،پد ،کاله ایمنی t3کاله ایمنی ،توپ t4عصا ،پد ،کاله ایمنی بیایید به این مثال با جزئیات بیشتری نگاه کنیم: ‏π = {bat , wickets, pads, helmet, ball }, که همه موارد منحصر به فرد موجود در فروشگاه را نشان می ده د .بیایی د یکی از تراکنش های t3از ∆را در نظر بگیریم. توجه داش ته باش ید ک ه اقالم خری داری ش ده در t3را می ت وان در =itemsett3 } {helmet,ballنشان داد که نشان می ده د مش تری دو ک اال را خری داری ک رده اس ت .از آنج ایی ک ه دو آیتم در این مجموع ه وج ود دارد ،ان دازه مجموع ه اقالم ، t3دو می باشد. 210 قواعد وابستگی یک قاعده وابستگی به صورت ریاضی اقالم رابطه درگیر در تراکنش ه ای مختل ف را توصیف می کند .این کار را با بررسی رابط ه بین دو مجموع ه آیتم ب ه ش کل X ،=> Yکه در آن ⊂ π Xو ⊂ π Yانجام می دهد .عالوه بر این X ،و Yمجموعه آیتم‌هایی هستند که همپوشانی ندارند .که به این معنی است که یک قاعده وابستگی را می توان به شکل زیر توصیف کرد: }{helmet,balls}=> {bike در اینجا { }helmet,ballبرابر Xو { }ballبرابر Yاست. انواع قواعد اجرای الگوریتم‌های تحلیل وابستگی معموال ً منجر ب ه تولی د تع داد زی ادی قاع ده از مجموع ه داده‌ه ای ت راکنش می‌ش ود .اک ثر آنه ا بی فای ده هس تند .ب رای انتخ اب قواعدی که می توانند به اطالعات مفیدی منجر شوند ،می توانیم آنها را ب ه عن وان یکی از سه نوع زیر طبقه بندی کنیم: ‏ بی اهمیت ‏ غیر قابل توضیح ‏ قابل اقدام 211 بیایید هر یک از این انواع را با جزئیات بیشتری بررسی کنیم. قواعد بی اهمیت در میان تعداد زیادی از قواعد تولید شده ،بسیاری از قواع دی ک ه مش تق ش ده‌اند بی‌فایده خواهند بود زی را دانش رایج در م ورد تج ارت را خالص ه می‌کنن د .ب ه آنه ا قواعد بی اهمیت می گویند .حتی اگر اعتماد به قواعد بی اهمیت باال باشد ،آنه ا بی فایده باقی می مانند و نمی توان از آنه ا ب رای تص میم گ یری ه ای مبت نی ب ر داده استفاده کرد .ما می توانیم با خیال راحت همه قواعد بی اهمیت را نادی ده بگ یریم. موارد زیر نمونه هایی از قواعد بی اهمیت هستند: ‏ هرکسی که از یک ساختمان بلند بپرد احتماال می میرد. ‏ تالش بیشتر منجر به کسب نمرات بهتر در امتحانات می شود. ‏ با کاهش دما ،فروش بخاری افزایش می یابد ‏ رانندگی با خودرو با سرعت غیرمجاز در بزرگراه منج ر ب ه اف زایش احتم ال تصادف می شود. قواعد غیر قابل توضیح در می ان قواع دی ک ه پس از اج رای الگ وریتم قواع د وابس تگی ایج اد می‌ش وند، مواردی هستند که توضیح واضحی ندارند و جز پیچیده‌ترین آنها هستند .توجه داش ته باشید که یک قاعده تنها زمانی می‌تواند مفید باشد که بتواند به ما در کشف و درک الگوی جدیدی کمک کند که انتظار می‌رود در نهایت به یک مسیر عم ل معین منج ر شود .اگر اینطور نیست ،و ما نمی توانیم توضیح دهیم که چ را روی داد Xمنج ر ب ه رویداد Yشده است ،پس این یک قاعده غیرقابل توضیح است ،زیرا این فق ط ی ک فرم ول ریاض ی اس ت ک ه در نه ایت ب ه بررس ی رابط ه بی مع نی بین دو روی داد 212 غیرمرتبط و مستقل می شود .نمونه هایی از قواعد غیرقابل توضیح به صورت زی ر هستند: ‏ افرادی که پیراهن قرمز می پوشند در امتحانات نمره بهتری می گیرند. ‏ دوچرخه های سبز رنگ بیشتر به سرقت می روند. ‏ افرادی که ترشی می خرند در نهایت پوشک هم می خرند. قواعد قابل اجرا قواعد قابل اجرا قواعد طالیی هستند که ما به دنبال آن هستیم .آنها توسط تج ارت درک می شوند و منجر به بینش می شوند. آن‌ها می‌توانند به ما در زمان ارائه علل احتمالی یک روی دادی ک ه کش ف ش ده ب ه مخاطبانی آشنا با حوزه کس ب‌وکار ،کم ک کنن د -ب رای مث ال ،قواع د قاب ل اج را ممکن است بهترین مکان را در یک فروشگاه برای یک محص ول خ اص ب ر اس اس الگوهای خرید فعلی پیشنهاد کنند .آنها همچنین ممکن است پیشنهاد دهند ک ه ک دام اقالم را در کنار هم قرار دهند تا ش انس ف روش آنه ا را ب ه ح داکثر برس انند زی را کاربران تمایل دارند آنها را با هم بخرند .موارد زیر نمونه هایی از قواعد قابل اج را و اقدامات مربوط به آنها هستند: قاعده :1نمایش تبلیغات در حس اب ه ای رس انه ه ای اجتم اعی ک اربران احتم ال فروش را بیشتر می کند. آیتم قابل اجرا :راه های جایگزین برای تبلیغ یک محصول را پیشنهاد می کند قاعده :2ایجاد نقاط قیمت بیشتر ،احتمال فروش را افزایش می دهد. آیتم قابل اجرا :ممکن است یک کاال در یک فروش تبلیغ ش ود ،در ح الی ک ه قیمت کاالی دیگر افزایش یابد. قواعد رتبه بندی 213 قواعد وابستگی به سه روش اندازه گیری می شوند: ‏ پشتیبانی (فرکانس) موارد ‏ اطمینان ‏ ترفیع بیایید با جزئیات بیشتری به آنها نگاه کنیم. پشتیبانی اندازه‌گیری پشتیبانی ،عددی است که میزان تکرار الگوی مورد نظر ما در مجموعه داده را محاسبه می‌کند .با ش مارش تع داد رخ دادهای الگ وی عالق ه م ا و س پس تقسیم آن بر تعداد کل همه تراکنش ها ،محاسبه می ش ود .بیایی د ب ه فرم ول زی ر برای یک آیتم خاص نگاه کنیم: = numItemsetaتعداد تراکنش‌هایی که حاوی itemsetanumtotalهستند / تعداد کل تراکنش‌ها تنها با نگاه کردن به پشتیبانی ،می‌توانیم تصور کنیم که وقوع ی ک الگ و چق در ن ادر است .پشتیبانی کم به این معنی است که ما به دنبال یک رویداد نادر هستیم .ب رای مثال ،اگر } itemseta = {helmet, ballدر دو تراکنش از شش تراکنش ظاهر می‌شود ،پشتیبانی برابر است با.support(itemseta ) = 2/6 = 0.33 : 214 اطمینان اطمینان عددی است که با محاسبه احتمال شرطی نش ان می ده د ک ه چق در می توانیم سمت چپ ( )Xرا با سمت راست ( )Yمرتبط کنیم .این احتم ال را محاس به می کند که رویداد Xبه رویداد Yمنجر ش ود ،ب ا توج ه ب ه اینک ه روی داد Xرخ داده است .از نظر ریاضی ،قانون X => Yرا در نظر بگیرید .اطمین ان این قاع ده ب ه صورت ( confidence ) X => Yنشان داده می شود و به ص ورت زی ر ان دازه گیری می شود: بیایید به یک مثال نگاه کنیم .قاعده زیر را در نظر بگیرید: }{helmet, ball} => {wickets اطمینان این قاعده با فرمول زیر محاسبه می شود: این به این مع نی اس ت ک ه اگ ر شخص ی {کاله ،ت وپ} را در س بد داش ته باش د، احتمال 0.5یا 50درصد وجود دارد که ویکت هایی نیز برای همراهی ب ا آن داش ته باشد. ترفیع 215 روش دیگر برای تخمین کیفیت یک قاعده ،محاس به ترفی ع اس ت .ترفی ع ع ددی را برمی‌گرداند که نشان می‌دهد چقدر پیشرفت ب ا ی ک قاع ده در پیش‌بی نی نتیج ه در مقایسه با فرض ک ردن نتیج ه در س مت راس ت معادل ه حاص ل ش ده اس ت .اگ ر مجموعه آیتم های Xو Yمستقل باشند ،آنگاه ترفی ع ب ه ص ورت زی ر محاس به می شود: الگوریتم های تجزیه و تحلیل وابستگی در این بخش ،دو الگوریتم زیر را بررسی خواهیم کرد ک ه می‌توانن د ب رای تجزی ه و تحلیل وابستگی مورد استفاده قرار گیرند: ‏ الگوریتم :Aprioriپیشنهاد شده توس ط .Agrawal، Rو Srikantدر س ال .1994 ‏ الگوریتم :FP-growthبهبود پیشنهاد شده توسط هان و همک اران .در س ال 2001 بیایید به هر یک از این الگوریتم ها نگاه کنیم. الگوریتم Apriori الگوریتم aprioriیک الگوریتم تکراری و چن د ف ازی اس ت ک ه ب رای تولی د قواع د وابستگی استفاده می شود .این الگوریتم مبتنی بر رویکرد تولید و آزم ایش اس ت. قبل از اجرای الگوریتم ، aprioriباید دو متغیر را تعریف کنیم: آستانه حمایت و آستانه اطمینان .الگوریتم از دو مرحله زیر تشکیل شده است: 216 مرحل ه تولی د کاندی د :مجموع ه آیتم‌ه ای کاندی د را تولی د می‌کن د ک ه ش امل مجموعه‌هایی از همه مجموعه‌های آیتم باالتر از آستانه حمایت است. مرحله فیلتر :تمام قواعد پایین تر از آستانه اطمینان مورد انتظار را فیلتر می کند. پس از فیلتر کردن ،قواعد حاصل پاسخگو هستند. محدودیت های الگوریتم apriori گلوگاه اصلی در الگ وریتم ، aprioriتولی د قواع د کاندی د در ف از 1اس ت -ب رای مثال، } π = {item 1 , item 2 , . . . , item m می تواند m2مجموعه آیتم ممکن را تولید کند .به دلیل طراحی چند فازی خود ،ابتدا این مجموعه آیتم ها را تولید می کند و سپس به س مت ی افتن مجموع ه آیتم ه ای تکرار شونده کار می کند .این محدودیت یک تنگنای عملکرد بزرگ است و الگوریتم پیشینی را برای موارد بزرگتر نامناسب می کند. الگوریتم رشد FP الگ وریتم رش د الگ وی تکرارش ونده ( )FP-growthبهب ودی در الگ وریتم apriori است .با نشان دادن تراکنش تکرارش ونده ، FP-treeک ه ی ک درخت م رتب ش ده است ،شروع می شود .از دو مرحله تشکیل شده است: ‏ پر کردن درخت FP ‏ استخراج الگوهای تکرارشونده بیایید این مراحل را یکی یکی بررسی کنیم. 217 پر کردن درخت FP بیایید داده های تراکنش نشان داده ش ده در ج دول زی ر را در نظ ر بگ یریم .بیایی د ابتدا آن را به عنوان یک ماتریس پراکنده نشان دهیم: ‏Ball ‏Helmet ‏Pads ‏Wickets ‏Bat ‏ID 0 0 1 1 0 1 0 1 1 1 1 2 1 1 0 0 0 3 0 1 1 0 1 4 بیایید فرکانس هر مورد را محاسبه کرده و آنها را به ترتیب نزولی فرکانس مرتب کنیم: ‏Frequency ‏Item 3 ‏pads 3 ‏helmet 2 ‏bat 2 ‏wicket 1 ‏ball حاال بیایید داده های مبتنی بر تراکنش را بر اساس فراوانی مرتب کنیم: ‏Reordered Items ‏Original Items ‏ID ‏Pads, wickets ‏Wickets, pads ‏t1 ‏Helmet, pads, ‏Bat, wickets, pads, ‏t2 ‏wickets, bat ‏helmet ‏Helmet, ball ‏Helmet, ball ‏t3 ‏Helmet, pads, bat ‏Bat, pads, helmet ‏t4 218 برای ساخت ،FP-treeاجازه دهی د ب ا اولین ش اخه از FP-treeش روع ک نیمFP- . treeبا یک Nullبه عنوان ریشه شروع می شود .برای س اخت درخت ،می ت وانیم هر مورد را با یک گره نشان دهیم ،هم انطور ک ه در نم ودار زی ر نش ان داده ش ده است (نمایش درخت t1در اینجا نشان داده شده اس ت) .توج ه داش ته باش ید ک ه برچسب هر گره نام مورد است و فرکانس آن بع د از کول ون اض افه ش ده اس ت. همچنین توجه داشته باشید که آیتم padsدارای فرکانس 1است: شکل :12-6مثالی از روش پر کردن FP با اس تفاده از الگ وی یکس ان ،ه ر چه ار ت راکنش را ترس یم می ک نیم و در نتیج ه درخت FPکام ل می ش ود FP-tree .دارای چه ار گ ره ب رگ اس ت ک ه ه ر ک دام مجموعه اقالم مرتبط با چهار تراکنش را نشان می دهد .توجه داشته باشید ک ه م ا باید فرکانس های هر آیتم را بشماریم و در صورت اس تفاده چن دین ب ار بای د آن را افزایش دهیم – به عنوان مثال ،هنگام اضافه ک ردن t2ب ه ،Fptreeفرک انس کاله 219 ایمنی به دو افزایش یافت .ب ه همین ت رتیب ،ب ا اض افه ک ردن ،t4دوب اره ب ه س ه افزایش یافت .درخت حاصل در نمودار زیر نشان داده شده است: شکل :13-6مثالی از FP-tree توجه داشته باشید که FP-treeتولید شده در نمودار قبلی یک درخت مرتب شده است. کاوش الگوهای تکرارشونده درخت رشدِ FPشامل کاوش الگوهای تکرارشونده از درخت FPاست. مرحله دوم ِ با ایجاد یک درخت مرتب شده ،هدف ایجاد ی ک س اختار داده کارآم د اس ت ک ه ب ه راحتی بتوان برای جستجوی الگوهای تکرارشونده پیمایش کرد .ما از یک گره ب رگ (یعنی گره انتهایی) شروع می کنیم و به س مت ب اال ح رکت می ک نیم -ب ه عن وان مثال ،اج ازه دهی د از یکی از اقالم گ ره ب رگ bat ،ش روع ک نیم .س پس بای د پای ه الگوی شرطی batرا محاسبه کنیم .پایه الگ وی ش رطی ب ا مش خص ک ردن تم ام 220 مسیرها از گره آیتم برگ ب ه ب اال محاس به می ش ود .پای ه الگ وی ش رطی batب ه صورت زیر خواهد بود: ‏Wicket: 1 Pads: 1 Helmet: 1 ‏Pad: 1 Helmet: 1 الگوی تکرارشونده batبه شرح زیر خواهد بود: {wicket, pads, helmet} : bat{pad,helmet} : bat د برنامه برای استفاده از FP-growth ک ِ بیایید ببینیم چگونه می‌توانیم قواعد وابستگی را با استفاده از الگوریتم رش د FPدر پایتون ایجاد کنیم .برای این کار از بسته pyfpgrowthاستفاده خواهیم کرد .ابت دا، اگر قبال ً از pyfpgrowthاستفاده نکرده‌ایم ،ابتدا آن را نصب می‌کنیم: !pip install pyfpgrowth سپس ،بیایید بسته هایی را که باید برای پیاده سازی این الگوریتم استفاده کنیم، وارد کنیم: ‏import pandas as pd ‏import numpy as np ‏import pyfpgrowth as fp اکنون داده های ورودی را در قالب TransactionSetایجاد می کنیم: { = dict1 'id':[0,1,2,3], 'items':[["wickets","pads"], ["bat","wickets","pads","helmet"], 221 ["helmet","pad"], ]]"["bat","pads","helmet } )transactionSet = pd.DataFrame(dict1 هنگامی که داده‌های ورودی تولید شدند ،الگوهایی را تولید می‌ک نیم ک ه ب ر اس اس پارامتره ایی اس ت ک ه ب ه () find_frequent_patternsارس ال ک رده‌ایم .توج ه داشته باشید که پارامتر دوم ارسال شده به این تابع ،حداقل پشتیبانی است ک ه در این مورد 1است: = patterns )fp.find_frequent_patterns(transactionSet['items'],1 الگوها ایجاد شده است .حاال بیایید الگوها را چاپ کنیم .الگوها ،ترکی بی از اقالم را با پشتیبانی آنها فهرست می کنند: 222 حاال بیایید قواعد را ایجاد کنیم: 223 هر قاعده دارای یک سمت چپ و یک سمت راست است که ب ا دو نقط ه ( ):از هم جدا ش ده ان د .همچ نین از ه ر ی ک از قواع د موج ود در مجموع ه داده ورودی م ا پشتیبانی می کند. کاربرد عملی -خوشه بندی توییت های مشابه با هم الگوریتم‌های یادگیری ماشینی بدون نظارت ن یز می‌توانن د در زم ان بالدرن گ ب رای خوشه‌بندی توییت‌های مشابه با هم استفاده شوند .آنها کارهای زیر را انجام خواهند داد: مرحله -1مدل سازی موضوع :موضوعات مختلف را از مجموع ه ای از ت وییت ه ا کشف می کند مرحله -2خوشه بندی :هر یک از ت وییت ه ا را ب ا یکی از موض وعات کش ف ش ده مرتبط می کند این استفاده از یادگیری بدون نظارت در نمودار زیر نشان داده شده است: 224 شکل :14-6خوشه بندی توئیت ها توجه داشته باشید ک ه این مث ال ب ه پ ردازش بالدرن گ داده ه ای ورودی نی از دارد. بیایید این مراحل را یکی یکی بررسی کنیم. مدل سازی موضوع مدل‌سازی موضوع ،فرآیند کشف مفاهیم در مجموعه‌ای از اسناد است که می‌توان از آنها برای متمایز ساختن آنها استفاده کرد .در زمین ه ت وئیت ه ا ،در م ورد ی افتن مناسب ترین موضوعاتی است ک ه مجموع ه ای از ت وییت ه ا را می ت وان در آنه ا تقسیم کرد .تخصیص Latent Dirichletیک الگوریتم محبوب است که برای مدل سازی موضوع استفاده می شود .از آنجایی که هر یک از توییت‌ها س ند کوت اه 144 کاراکتری هستند که معموال ً در مورد یک موضوع خاص هستند ،می‌ت وانیم الگ وریتم ساده‌تری برای اهداف مدل‌سازی موضوع بنویسیم .الگوریتم به شرح زیر است: .1توییت ها را توکن سازی کنید. .2داده ها را از قبل پردازش کنی د .کلی د واژه ه ا ،اع داد ،نماده ا را ح ذف کنی د و ریشه یابی کنید. .3یک ) Term-Document-Matrix (TDMبرای توییت ها ایجاد کنید 200 .کلم ه برتر را که بیشتر در توییت های منحصر به فرد ظاهر می شوند ،انتخاب کنید. 225 10 .4کلمه برتر را انتخاب کنید که به طور مستقیم یا غیرمستقیم ی ک مفه وم ی ا یک موضوع را نشان می دهد .به عنوان مثال مد ،نیویورک ،برنامه نویسی ،تصادف. این 10کلمه اکنون موضوعاتی هس تند ک ه م ا ب ا م وفقیت کش ف ک رده ایم و ب ه مراکز خوشه ای برای توییت ها تبدیل می شوند. بیایید به مرحله بعدی که خوشه بندی است برویم. خوشه بندی هنگامی که موضوعات را کشف کردیم ،آنها را به عنوان مرک ز خوش ه انتخ اب می کنیم .سپس می‌توانیم الگوریتم خوشه‌بندی k-meansرا اجرا کنیم ک ه ه ر ی ک از توییت‌ها را به یکی از مراک ز خوش ه‌ها اختص اص می‌ده د .بن ابراین ،این ی ک مث ال کاربردی است که چگونه مجموعه‌ای از توییت‌ها را می‌ت وان در موض وعات کش ف کرد. الگوریتم های تشخیص ناهنجاری تعریف فرهنگ لغت از ناهنجاری چیزی است که متفاوت ،غیرعادی ،عجیب و غریب باشد یا به راحتی طبقه بندی نمی شود. انحراف از قاعده رایج است .در زمینه علم داده ،ناهنجاری نقطه داده ای است ک ه بسیار از الگوی مورد انتظار منحرف می شود .تکنیک‌های یافتن چنین نق اط داده‌ای را تکنیک‌های تشخیص ناهنج اری می‌نامن د .ح ال اج ازه دهی د ب رخی از کاربرده ای الگوریتم‌های تشخیص ناهنجاری را ببینیم: ‏ کالهبرداری در کارت اعتباری ‏ یافتن تومور بدخیم در اسکن رزونانس مغناطیسی (.)MRI ‏ پیشگیری از خطا در خوشه ها ‏ جعل هویت در امتحانات ‏ تصادفات در بزرگراه در بخش های آینده ،تکنیک های مختلف تشخیص ناهنجاری را مشاهده خواهیم کرد. 226 استفاده از خوشه بندی الگوریتم های خوشه بندی مانند k-meansرا می توان برای گروه بندی نقاط داده مشابه با هم استفاده کرد .یک آستانه را می توان تعریف کرد و هر نقط ه فرات ر از آن آستانه را می توان به عنوان یک ناهنجاری طبقه بندی کرد .مش کل این رویک رد این است که گروه‌بندی ایجاد شده توسط خوشه‌بندی k-meansممکن است خ ود ب ه دلی ل وج ود نق اط داده غیرع ادی ،س وگیری داش ته باش د و ممکن اس ت ب ر سودمندی و دقت رویکرد تأثیر بگذارد. استفاده از تشخیص ناهنجاری مبتنی بر تراکم یک رویکرد مبتنی بر تراکم سعی می‌کند همسایگیهای متراکم را پیدا کند .ب رای این منظور می توان از الگوریتم kنزدیکترین همسایه ( )KNNاستفاده ک رد .ناهنج اری ه ایی ک ه از همس ایگیهای م تراکم کش ف ش ده دور هس تند ب ه عن وان ناهنج اری عالمتگذاری می شوند. استفاده از ماشین های بردار پشتیبان الگوریتم ماشین بردار پشتیبان ( )SVMمی تواند برای یادگیری مرزهای نق اط داده استفاده شود .ه ر نقط ه ای فرات ر از مرزه ای کش ف ش ده ب ه عن وان ناهنج اری شناسایی می شود. خالصه در این فصل ،ما به تکنیک های مختلف یادگیری ماشین بدون نظ ارت نگ اه ک ردیم. ما به شرایطی نگاه کردیم که در آن ایده خوبی است که سعی ک نیم ابع اد مس ئله ای را که می خواهیم حل کنیم و روش های مختلف انجام این ک ار را ک اهش دهیم. ما همچنین نمونه‌های عملی را مطالعه کردیم که در آن تکنیک‌های یادگیری ماشینی بدون نظارت می‌توانند بسیار مفی د باش ند ،از جمل ه تجزی ه و تحلی ل س بد ب ازار و 227 تشخیص ناهنجاری‌ها .در فصل بعدی ،به تکنیک‌های مختلف یادگیری با نظارت نگ اه خواهیم کرد .ما با رگرسیون خطی شروع می‌کنیم و سپس به تکنیک‌ه ای پیچی ده‌تر یادگیری ماشین ب ا نظ ارت ،مانن د الگوریتم‌ه ای مبت نی ب ر درخت تص میم SVM ،و XGBoostخواهیم پرداخت .ما همچنین الگوریتم بیز ساده را مطالعه خواهیم ک رد که برای داده های متنی بدون ساختار مناسب است. 7الگوریتم سنتی یادگیری با نظارت برق جدید است~ ".اندرو نگ. "هوش مصنوعی، ِ در این فصل بر روی الگوریتم های یادگیری ماشینی با نظارت تمرک ز خ واهیم ک رد که یکی از مهم ترین انواع الگوریتم های مدرن هستند .ویژگی متمایز یک الگ وریتم یادگیری ماش ینی ب ا نظ ارت ،اس تفاده از داده ه ای برچس ب گ ذاری ش ده ب رای 228 آموزش یک مدل است .در این فص ل ،م ا تم ام الگوریتم‌ه ای ی ادگیری ماش ینی ب ا نظارت ،به استثنای شبکه‌های عصبی را ارائه می‌ک نیم .س ه فص ل بع دی هم ه در مورد پیاده سازی الگوریتم های یادگیری ماشین با نظارت با استفاده از شبکه ه ای عصبی است .حقیقت این است که با پیشرفت بسیار زیاد در این زمینه ،ش بکه‌های عصبی موضوعی جامع هستند که به بیش از یک فصل برای بحث کامل نی از دارن د. در این فصل ابتدا مفاهیم اساسی یادگیری ماشین با نظارت را معرفی می‌کنیم .در مرحله بعد ،ما دو نوع مدل ماشین با نظارت را ارائه خواهیم کرد -طبقه بن د ه ا و رگرسیونها .به منظور نشان دادن توانایی های طبقه بند ها ،ابتدا یک مس ئله دنی ای واقعی را به عنوان یک چالش ارائه می کنیم .س پس ،ش ش الگ وریتم طبق ه بن دی مختلف را ارائه خواهیم کرد که برای حل یک مسئله استفاده می شوند .در مرحل ه بعد ،ابتدا بر روی الگوریتم های رگرسیون تمرکز می ک نیم و در ابت دا ب ا ارائ ه ی ک مسئله مشابه که برای رگرسیون ها حل می شود ،ادام ه خ واهیم داد .س پس س ه الگوریتم رگرسیون را ارائه می کنیم و از آنها برای حل همان مس ئله اس تفاده می کنیم .در نهایت ،ما نتایج را با هم مقایسه خواهیم کرد ت ا ب ه م ا کم ک کن د مف اهیم ارائه شده در این فصل را خالصه ک نیم .ه دف کلی این فص ل این اس ت ک ه ش ما انواع مختلف تکنیک های یادگیری ماشینی با نظارت را درک کنید و بدانید که بهترین تکنیک های یادگیری ماشینی با نظارت برای کالس های خاص ک دام اس ت .مف اهیم زیر در این فصل مورد بحث قرار می گیرد: ‏ درک یادگیری ماشین با نظارت ‏ آشنایی با الگوریتم های طبقه بندی ‏ روش های ارزیابی عملکرد طبقه بند ها ‏ آشنایی با الگوریتم های رگرسیون ‏ روش های ارزیابی عملکرد الگوریتم های رگرسیون بیایید با نگاهی به مفاهیم اساسی یادگیری ماشین با نظارت شروع کنیم. درک یادگیری ماشین با نظارت 229 یادگیری ماش ین ب ر اس تفاده از رویکرده ای داده مح ور ب رای ایج اد سیس تم‌های مستقلی متمرکز است که می‌تواند به ما در تصمیم‌گیری با یا بدون نظ ارت انس ان کم ک کن د .ب رای ایج اد این سیس تم‌های مس تقل ،ی ادگیری ماش ین از گ روهی از الگوریتم‌ها و متدولوژی‌ها برای کشف و فرمول‌بندی الگوهای تکرارپ ذیر در داده‌ه ا استفاده می‌کند .یکی از محبوب ترین و قدرتمندترین متدولوژی های مورد استفاده در یادگیری ماشینی ،رویکرد یادگیری ماشین با نظارت است .در یادگیری ماشین با نظارت ،به یک الگوریتم ،مجموعه‌ای از ورودی‌ها داده می‌شود که ویژگی‌ها نامیده می‌شوند و خروجی‌های مربوط به آن‌ها ب ه ن ام برچس ب‌ها ن یز داده می ش ود .ب ا استفاده از ی ک مجموع ه داده ی داده ش ده ،از ی ک الگ وریتم ی ادگیری ماش ین ب ا نظارت برای آم وزش م دلی اس تفاده می‌ش ود ک ه رابط ه پیچی ده بین ویژگی‌ه ا و برچسب‌های نشان‌داده‌شده توسط یک فرمول ریاضی را نش ان می‌ده د .این م دل آموزش دیده ،وسیله اولی ه ای اس ت ک ه ب رای پیش بی نی ه ا اس تفاده می ش ود. توانایی ی ادگیری از داده ه ای موج ود در ی ادگیری ب ا نظ ارت مش ابه توان ایی مغ ز انسان برای یادگیری از تجربه است .این توانایی یادگیری در یادگیری ب ا نظ ارت از یکی از ویژگی های مغز انسان استفاده می کن د و راهی اساس ی ب رای ب از ک ردن دروازه ها برای آوردن قدرت تصمیم گیری و هوش به ماشین ها است .بیایید مثالی را در نظر بگیریم که در آن می خواهیم از تکنیک های یادگیری ماش ینی ب ا نظ ارت برای آموزش استفاده ک نیم .م دلی ک ه می توان د مجموع ه ای از ایمی ل ه ا را ب ه ایمیل های مجاز (به نام قانونی) و ناخواس ته (ب ه ن ام هرزنام ه) دس ته بن دی کن د. ابتدا ،برای شروع ،به نمونه‌هایی از گذشته نیاز داریم تا دس تگاه ی اد بگ یرد ک ه چ ه ن وع محت وایی از ایمیل‌ه ا بای د ب ه عن وان هرزنام ه طبقه‌بن دی ش ود .این وظیف ه یادگیری مبتنی بر محتوا برای داده‌های متنی ی ک فرآین د پیچی ده اس ت و از طری ق یکی از الگوریتم‌ه ای ی ادگیری ماش ینی ب ا نظ ارت ب ه دس ت می‌آی د .ب رخی از نمونه‌هایی از الگوریتم‌های یادگیری ماشین با نظ ارت ک ه می‌توانن د ب رای آم وزش مدل در این مثال اس تفاده ش وند ،ش امل درخت‌ه ای تص میم‌گیری و طبقه‌بن د‌های ساده بیز هستند که بعدا ً در این فصل به آن‌ها خواهیم پرداخت. 230 فرمول بندی مسائل یادگیری ماشین با نظارت قبل از اینکه به جزئیات الگوریتم‌های یادگیری ماشین با نظارت ،به صورت عمیق‌تر بپردازیم ،اجازه دهی د ب رخی از اص طالحات اص لی ی ادگیری ماش ین ب ا نظ ارت را تعریف کنیم: اصطالحات برچسب توضیح برچسب متغیری است که می خواهیم مدل ما ،آن را پیش بینی کند .در مدل یادگیری ماشینی با نظارت فقط یک برچسب می تواند وجود داشته باشد. ویژگی ها مجموعه ای از متغیرهای ورودی که برای پیش بینی برچسب استفاده می شود ،ویژگی نامیده می شود. مهندسی ویژگی تبدیل ویژگی ها برای آماده سازی آنها برای الگوریتم یادگیری نظارت انتخاب شده ،مهندسی ویژگی نامیده می ماشینی با ِ شود. بردار ویژگی قبل از ارائه ورودی به الگوریتم یادگیری ماشینی با نظارت، همه ویژگی ها در یک ساختار داده به نام بردار ویژگی ترکیب می شوند. داده های تاریخی داده‌های گذشته که برای فرمول‌بندی رابطه بین برچسب و ویژگی‌ها استفاده می‌شوند ،داده‌های تاریخی نامیده می‌شوند. داده های تاریخی با مثال هایی همراه است. داده های داده‌های تاریخی همراه با نمونه‌ها به دو بخش تقسیم آموزش/آزمون می‌شوند -یک مجموعه داده بزرگ‌تر به نام داده‌های آموزشی و یک مجموعه داده کوچک‌تر به نام داده‌های آزمون. مدل یک فرمول ریاضی از الگوهایی که به بهترین شکل رابطه بین برچسب و ویژگی ها را نشان می دهد. آموزش ایجاد مدل با استفاده از داده های آموزشی 231 آزمون ارزیابی کیفیت مدل آموزش دیده با استفاده از داده های آزمون. پیش بینی استفاده از مدل آموزش دیده برای پیش بینی برچسب ارت آموزش‌دی ده می‌توان د ب ا تخمین برچس ب ب ر یک مدل یادگیری ماشین ب ا نظ ِ اساس ویژگی‌ها پیش‌بینی کند .بیایید نمادی را که در این فصل برای بحث در م ورد تکنیک‌های یادگیری ماشین استفاده خواهیم کرد ،معرفی کنیم: معنی متغیر ‏y برچسب واقعی ‏ý برچسب پیش بینی شده ‏d تعداد کل نمونه ها ‏b تعداد نمونه های آموزشی ‏c تعداد نمونه های آزمون حال ،بیایید ببینیم که چگونه برخی از این اصطالحات به ص ورت عملی فرمول ه می شوند .همانطور که در مورد آن بحث کردیم ،بردار وی ژگی ب ه عن وان س اختار داده ای تعریف می شود ک ه تم ام وی ژگی ه ای ذخ یره ش ده در آن را دارد .اگ ر تع داد ویژگی ها nو تعداد مثال های آموزشی bباشد X_train ،بردار ویژگی آموزشی را نشان می دهد .برای مجموعه داده آموزشی ،بردار ویژگی ب ا X_trainنش ان داده می شود .اگر نمونه های bدر مجموعه داده آموزشی وجود داشته باش دX_train ، ردیف های bرا خواهد داشت. اگر nمتغیر وجود داشته باشد ،سپس مجموع ه داده آموزش ی دارای بع د n x b است .ما برای نشان دادن شماره ردیف یک مثال آموزش ی از س رنویس اس تفاده می ک نیم .این ،ی ک مث ال خ اص در مجموع ه داده برچس ب‌گذاری ش ده م ا ب ا ( ) )X(1), y(1)( = )Features(1),label(1نشان داده می‌شود. 232 بن ابراین ،مجموع ه داده برچس ب گ ذاری ش ده م ا ب ا D = {X(1),y(1)), })) (X(2),y(2)), ….. ,(X(d),y(dنشان داده میشود. م ا آن را ب ه دو قس مت تقس یم می ک نیم Dtrain -و .Dtestبن ابراین ،مجموع ه آموزشی ما را می توان با = Dtrain { )) }X(1),y(1)), (X(2),y(2)), ..... , (X(b),y(bنشان داد .هدف از آموزش یک مدل این است ک ه ب رای ه ر مث ال iدر مجموع ه آموزش ی ،مق دار پیش‌بینی‌ش ده مقدار هدف باید تا حد امکان به مقدار واقعی در نمونه‌ها نزدی ک باش د .ب ه عب ارت دیگر، بن ابراین ،مجموع ه آزم ون م ا را می ت وان ب ا {X(1),y(1)), = ‏Dtest }))(X(2),y(2)), ..... , (X(c),y(cنشان داد .مقادیر برچسب با یک ب ردار نش ان داده می شوندY:Y ={ y(1), y(2), ....., y(m)} ، درک شرایط توانمندساز یادگیری ماشینی با نظارت بر اساس توانایی یک الگوریتم برای آموزش یک مدل ب ا استفاده از مثال ها است .یک الگوریتم یادگیری ماشینی ب ا نظ ارت ب رای اج را ب ه شرایط توانمندسازی خاصی نیاز دارد .این شرایط توانمندساز به شرح زیر است: مثال‌های کافی :الگوریتم‌های ی ادگیری ماش ینی ب ا نظ ارت ب ه مثال‌ه ای ک افی برای آموزش یک مدل نیاز دارند. الگوها در داده‌های تاریخی :نمونه‌ه ایی ک ه ب رای آم وزش ی ک م دل اس تفاده می‌شوند باید دارای الگوهایی در آن باشند .احتمال وقوع رویداد مورد عالقه ما باید به ترکیبی از الگوها ،روندها و رویدادها بستگی داشته باشد. بدون اینها ،ما با داده های تصادفی روبرو هستیم که نمی توان از آنها برای آموزش یک مدل استفاده کرد. 233 مفروضات معتبر :وقتی یک مدل ی ادگیری ماش ین ب ا نظ ارت را ب ا اس تفاده از مثال ها آموزش می دهیم ،انتظار داریم که مفروضاتی که در مورد نمونه ها اعمال می شود در آینده نیز معتبر باشند .بیایید به یک مثال واقعی نگاه کنیم .اگر بخواهیم یک مدل یادگیری ماشینی برای دولت آموزش دهیم که بتواند احتم ال اعط ای وی زا به دانشجو را پیش‌بینی کند ،درک مسئله این است که وقتی از مدل برای پیش‌بینی استفاده می‌شود ،قوانین و سیاست‌ها تغییر نخواهند کرد .اگر سیاست‌ها ی ا ق وانین جدید پس از آموزش مدل اجرا شود ،ممکن است مدل برای گنجاندن این اطالعات جدید نیاز به آموزش مجدد داشته باشد. تفاوت بین طبقه بند ها و رگرسیون ها در یک مدل یادگیری ماشینی ،برچسب می تواند ی ک متغ یر گسس ته ی ا ی ک متغ یر پیوسته باشد .نوع برچسب تعیین می کند که ما چه نوع م دل ی ادگیری ماش ینی ب ا نظارت را داریم .اساساً ،ما دو نوع مدل یادگیری ماشینی با نظارت داریم: طبقه‌بندها :اگر برچسب یک متغیر گسسته باشد ،مدل ی ادگیری ماش ینی ،طبقه‌بن د نامیده می‌ش ود .طبقه‌بن دها می‌توانن د ب رای پاس خ ب ه ان واع س ؤاالت تج اری زی ر استفاده شوند: ‏ آیا این رشد غیرطبیعی بافت یک تومور بدخیم است؟ ‏ با توجه به شرایط جوی فعلی فردا باران می بارد؟ ‏ بر اساس مشخصات یک متقاضی خاص ،آیا باید درخواس ت وام مس کن آنه ا تایید شود؟ رگرسیون ه ا :اگ ر برچس ب ی ک متغ یر پیوس ته باش د ،ی ک رگرس یون را آم وزش می‌دهیم .از رگرسیون ها می توان برای پاسخ به انواع سؤاالت تجاری زیر استفاده کرد: ‏ بر اساس وضعیت فعلی آب و هوا ،فردا چقدر باران خواهد بارید؟ ‏ قیمت یک خانه خاص با ویژگی های داده شده چقدر خواهد بود؟ 234 بیایید هر دو طبقه بند و رگرسیون را با جزئیات بیشتری بررسی کنیم. آشنایی با الگوریتم های طبقه بندی در یادگیری ماشین با نظارت ،اگر برچسب یک متغیر گسسته باشد ،مدل به عن وان یک طبقه‌بندی شناخته می‌شود: داده های تاریخی را داده های برچسب دار می نامند. داده ه ای تولی دی ک ه برچس ب بای د ب رای آنه ا پیش بی نی ش ود ،داده ه ای ب دون برچسب نامیده می شوند. توان ایی برچس ب‌گذاری دقی ق داده‌ه ای ب دون برچس ب ب ا اس تفاده از ی ک م دل آموزش‌دیده ،قدرت واقعی الگوریتم‌های طبقه‌بندی است. طبقه‌بند‌ها برچسب‌هایی را برای داده‌های بدون برچسب پیش‌بینی می‌کنند تا به یک سؤال تجاری خاص پاسخ دهند .قبل از ارائه جزئیات الگوریتم‌های طبقه‌بندی ،اجازه دهید ابتدا یک مسئله تجاری ارائه کنیم که از آن به عنوان چالشی ب رای طبقه‌بن دها استفاده خواهیم کرد .ما سپس از شش الگوریتم مختلف برای پاسخ به ی ک چ الش استفاده خواهیم کرد که به م ا در مقایس ه روش شناس ی ،رویک رد و عملک رد آنه ا کمک می کند. ارائه چالش طبقه بند ها ابتدا یک مسئله رایج را ارائه خواهیم کرد که از آن به عنوان چالشی برای آزم ایش شش الگوریتم طبقه بندی مختلف استفاده خواهیم کرد .از این مس ئله رایج در این فصل به عنوان چالش طبقه بند یاد می شود .استفاده از تمام شش طبقه‌بند ب رای حل یک مسئله به دو روش به ما کمک می‌کند: تمام متغیرهای ورودی باید به عنوان یک ساختار داده پیچیده پ ردازش و جم ع آوری شوند که بردار ویژگی نامیده می شود .استفاده از بردار ویژگی یکسان به ما کمک می کند از تکرار آماده سازی داده برای هر شش الگوریتم جلوگیری کنیم. 235 ما می‌توانیم عملکرد الگوریتم‌های مختلف را ب ا دقت مقایس ه ک نیم زی را از هم ان بردار ویژگی برای ورودی استفاده می‌کنیم. چالش طبقه بندها در مورد پیش بینی احتمال خرید شخصی است .در صنعت خرده فروشی ،یکی از مواردی که می تواند به حداکثر فروش کمک کند ،درک بهتر رفت ار مشتریان است .این کار را می توان با تجزیه و تحلیل الگوهای موجود در داده ه ای تاریخی انجام داد .بیایید ابتدا مسئله را بیان کنیم. بیان مسئله با توجه به داده‌های تاریخی ،آی ا می‌ت وانیم ی ک طبقه‌بن د دودویی آم وزش دهیم ک ه بتواند پیش‌بینی کند که آیا یک کاربر خاص در نهایت محصولی را بر اساس پروفای ل خود خریداری می‌کند؟ ابتدا ،بیایید مجموعه داده‌های برچس ب‌گذاری ش ده ت اریخی موجود برای حل این مسئله را بررسی کنیمx € Rb، y € { 0,1}:برای مث الی خاص ،وقتی ،y = 1آن را کالس مثبت می نامیم و زمانی که ،y = 0آن را کالس منفی می نامیم .اگرچه سطح کالس مثبت و منفی را می توان خودس رانه انتخ اب کرد ،اما خوب است تمرین کنی د ت ا کالس مثبت را ب ه عن وان روی داد م ورد عالق ه تعریف کنید .اگر می‌خواهیم تراکنش متقلبانه را برای یک بانک عالمت‌گ ذاری ک نیم، کالس مثبت (یعنی )y = 1باید تراکنش متقلبانه باشد ،نه برعکس .حال بیایید ب ه موارد زیر نگاه کنیم: برچسب واقعی که با yمشخص شده است برچسب پیش بینی شده با `yنشان داده شده است توجه داشته باشید که برای چالش طبقه‌بند م ا ،مق دار واقعی برچس ب موج ود در مثال‌ها با yنمایش داده می‌شود .اگر در مثال ما شخصی کاالیی را خریداری ک رده باشد ،می گوییم .y =1مقادیر پیش بینی شده با `yنشان داده می ش وند .ب ردار ویژگی ورودی ،x ،دارای ابعاد 4است .می‌خواهیم تعیین کنیم ک ه ب ا توج ه ب ه ی ک ورودی خاص ،احتمال خرید کاربر چقدر است .بنابراین ،می‌خواهیم احتمال y = 1 236 را با توجه به مقدار خاص ب ردار وی ژگی xبی ابیم .از نظ ر ریاض ی ،می ت وانیم این مورد را به صورت زیر نشان دهیم: حال ،بیایید ببینیم چگونه می‌توانیم متغیرهای ورودی مختلف را در بردار ویژگی ، x پردازش و جمع آوری کنیم .روش جمع آوری قطعات مختلف xب ا اس تفاده از خ ط لوله پردازش با جزئیات بیشتر در بخش زیر مورد بحث قرار گرفته است. مهندسی ویژگی با استفاده از خط لوله پردازش داده آماده سازی داده ها برای الگوریتم یادگیری ماشین انتخاب شده ،مهندس ی وی ژگی نامیده می شود و بخش مهمی از چرخه زندگی ی ادگیری ماش ین اس ت .مهندس ی ویژگی در مراحل یا فازهای مختلفی انجام می شود .ک د پ ردازش چن د مرحل ه ای مورد استفاده برای پردازش داده ها در مجموع ب ه عن وان خ ط لول ه داده ش ناخته می شود .ایجاد خط لوله داده با استفاده از مراحل پردازش اس تاندارد ،در ص ورت امکان ،آن را قابل استفاده مج دد می کن د و تالش الزم ب رای آم وزش م دل ه ا را کاهش می دهد .با استفاده از ماژول‌های نرم‌افزاری بیش تر آزم ایش ش ده ،کیفیت پردازش قابل استفاده مج دد را کد نیز افزایش می‌یابد .بیایید طراحی یک خط لوله ِ برای چالش طبقه‌بند ببینیم .همانطور که گفت ه ش د ،ی ک ب ار داده ه ا را آم اده می کنیم و سپس از آن برای همه طبقه بند ها استفاده می کنیم. وارد کردن داده ها داده های تاریخی برای این مسئله حاوی نمونه ها در فایلی به نام مجموع ه داده ب ا ف رمت .csvذخ یره می ش ود .م ا از ت ابع pd.read_csvاز pandasب رای وارد کردن داده ها به عنوان یک دیتافریم استفاده خواهیم کرد: )'dataset = pd.read_csv('Social_Network_Ads.csv 237 انتخاب ویژگی فرآیند انتخاب ویژگی هایی که با زمینه مسئله ای که می خواهیم حل ک نیم مرتب ط هستند ،انتخاب ویژگی نامیده می شود .این یک بخش ضروری از مهندس ی وی ژگی است .پس از وارد کردن فایل ،ستون User IDرا که برای شناسایی ی ک ش خص استفاده می‌شود و باید هنگام آموزش یک مدل حذف شود را حذف می‌کنیم: )]'dataset = dataset.drop(columns=['User ID حال بیایید پیش نمایش مجموعه داده را مشاهده کنیم: )dataset.head(5 مجموعه داده به شکل زیر است: حال ،بیایید ببینیم چگونه می‌توانیم مجموعه داده ورودی را پردازش کنیم. رمزگذاری One-hot بسیاری از الگوریتم‌های یادگیری ماشین نی از دارن د ک ه هم ه ویژگی‌ه ا ،متغیره ای پیوسته باشند .به این معنی که اگر برخی از ویژگی ها متغیرهای موضوعی هس تند، 238 باید استراتژی ای برای تبدیل آنها به متغیرهای پیوسته پیدا ک نیم .رمزگ ذاری One- hotیکی از موثرترین روش های انجام این تبدیل اس ت .ب رای این مس ئله خ اص، تنها متغیر موضوعی که داریم جنسیت است .بیایید آن را با اس تفاده از رمزگ ذاری One-hotبه یک متغیر پیوسته تبدیل کنیم: )(enc = sklearn.preprocessing.OneHotEncoder )]]enc.fit(dataset.iloc[:,[0 ‏onehotlabels = enc.transform(dataset.iloc[:, )([0]]).toarray ‏genders = pd.DataFrame({'Female': onehotlabels[:, 0], )}]'Male': onehotlabels[:, 1 ‏result = pd.concat([genders,dataset.iloc[:,1:]], )axis=1, sort=False )result.head(5 پس از تبدیل ،بیایید دوباره به مجموعه داده نگاه کنیم: 239 توجه داشته باشید که برای تبدیل یک متغیر از ی ک متغ یر موض وعی ب ه ی ک متغ یر پیوسته ،رمزگذاری One-hotجنس یت را ب ه دو س تون مج زا تب دیل ک رده اس ت - Maleو . Female مشخص کردن ویژگی ها و برچسب بیایید ویژگی ها و برچسب ها را مشخص ک نیم .م ا از yدر این کت اب ب رای نش ان دادن برچسب و Xبرای نمایش مجموعه ویژگی استفاده خواهیم کرد: ]'y=result['Purchased )]'X=result.drop(columns=['Purchased Xنشان دهنده بردار ویژگی است و شامل تم ام متغیره ای ورودی اس ت ک ه بای د برای آموزش مدل استفاده کنیم. تقسیم مجموعه داده به بخش های آزمون و آموزشی اکن ون ،بیایی د مجموع ه داده آموزش ی را ب ا اس تفاده از sklearn.model_selection import train_test_splitب ه %25آزم ون و %75قسمت آموزشی تقسیم کنیم: #from sklearn.cross_validation ‏import train_test_split ‏X_train, X_test, y_train, y_test = train_test_split(X, )y, test_size = 0.25, random_state = 0 این چهار ساختار داده زیر را ایجاد کرده است: : X_trainساختار داده ای حاوی ویژگی های داده های آموزشی : X_testساختار داده ای حاوی ویژگی های آزمون : y_trainبردار حاوی مقادیر برچسب در مجموعه داده آموزشی 240 : y_testبردار حاوی مقادیر برچسب در مجموعه داده آزمون مقیاس بندی ویژگی ها برای بسیاری از الگوریتم های ی ادگیری ماش ین ،مقی اس بن دی متغیره ا از 0ت ا 1 تمرین خوبی است .به این حالت نرمال سازی ویژگی نیز می گویند .ب رای رس یدن به این هدف ،تبدیل مقیاس بندی را اعمال می کنیم: ‏from sklearn.preprocessing import StandardScaler )(sc = StandardScaler )X_train = sc.fit_transform(X_train )X_test = sc.transform(X_test پس از اینکه داده ها را مقیاس بندی کردیم ،آماده استفاده به عن وان ورودی ب رای طبقه بند های مختلف است که در بخش های بعدی ارائه خواهیم کرد. ارزیابی طبقه بند ها هنگامی که مدل آموزش داده شد ،باید عملکرد آن را ارزیابی ک نیم .ب رای این ک ار از فرآیند زیر استفاده می کنیم: .1مجموع ه داده برچس ب‌گذاری را ب ه دو بخش تقس یم می‌ک نیم -ی ک پارتیش ن آموزشی و یک پارتیشن آزمون .ما از پارتیشن آزمون ب رای ارزی ابی م دل آم وزش دیده استفاده خواهیم کرد. .2ما از ویژگی های پارتیش ن آزم ون خ ود ب رای تولی د برچس ب ب رای ه ر ردی ف استفاده خواهیم کرد .این مجموعه ای از برچسب های پیش بینی شده ما است. . 3ما مجموعه ای از برچسب های پیش بینی شده را با برچسب های واقعی ب رای ارزیابی مدل مقایسه می کنیم. 241 هنگام ارزیابی مدل ،برخی طبقه بندی های اشتباه وجود خواهد داشت ،مگ ر اینک ه بخواهیم چیزی کامال ً بی اهمیت را حل کنیم .اینکه چگونه این طبقه‌بندی‌های اش تباه را برای تعیین کیفیت مدل تفسیر ک نیم ،بس تگی ب ه معیاره ای عملک ردی دارد ک ه انتخ اب می‌ک نیم .وق تی هم مجموع ه برچس ب‌های واقعی و هم برچس ب‌های پیش‌بینی‌ش ده را داش ته باش یم ،می‌ت وان از دس ته‌ای از معیاره ای عملک رد ب رای ارزیابی مدل‌ها استفاده کرد .بهترین معیار برای تعیین کمیت م دل ب ه نیازمن دیهای مسئله تجاری که می‌خواهیم حل کنیم و همچنین ویژگی‌های مجموعه داده آموزشی بستگی دارد. ماتریس سردرگمی ماتریس سردرگمی برای خالصه کردن نتایج ارزیابی یک طبقه‌بند استفاده می‌شود. ماتریس سردرگمی برای یک طبقه بند دودویی به صورت زیر است: 242 شکل :1-7ماتریس سردرگمی اگر برچسب طبقه‌بندی‌ که آموزش می‌دهیم دارای دو کالس باشد ،ب ه آن طبقه‌بن د دودویی می‌گویند .اولین مورد استفاده حیاتی از ی ادگیری ماش ینی ب ا نظ ارت -ب ه طور خاص ،طبقه بند دودویی -در طول جنگ جهانی اول برای تمایز بین هواپیم ا و پرندگان در حال پرواز بود .این طبقه بندی را می توان به چه ار دس ته زی ر تقس یم کرد: موارد مثبت واقعی ( :)TPطبقه بندی های مثبتی که به درس تی طبق ه بن دی ش ده اند منفی های واقعی ( :)TNطبقه بندی های منفی که به درستی طبقه بندی شده اند موارد مثبت کاذب ( :)FPطبقه بندی های مثبتی که در واقع منفی بودند منفی های کاذب ( :)FNطبقه بندی های منفی که در واقع مثبت بودند 243 بیایی د ببی نیم چگون ه می‌ت وانیم از این چه ار دس ته ب رای ایج اد معیاره ای مختل ف عملک رد اس تفاده ک نیم .ی ک م اتریس س ردرگمی تع داد طبقه‌بن دی‌های ص حیح و طبقه‌بندی‌های اشتباه را از طریق شمارش TP، TN، FPو FNبه شما می‌ده د. دقت مدل به عنوان نسبت طبقه‌بن دی‌های ص حیح در بین هم ه پیش‌بینی‌ه ا تعری ف می‌شود و می‌تواند به راحتی از ماتریس سردرگمی به شرح زی ر نتیج ه ش ود :اگ ر داده‌های ما کالس‌های متعادلی داشته باشند (یعنی تعداد کل مثال‌های مثبت تقریب ا ً برابر با تعداد مثال‌های منفی باشد) پس صحت ،بینش خوبی نسبت به کیفیت م دل آموزش دیده به ما خواهد داد. صحت ،نسبت طبقه بندی های صحیح در بین همه پیش بینی ها است. درک نرخ یادآوری و دقت در حین محاسبه صحت ،بین TPو TNتفاوت قائل نمی شویم .ارزیابی یک مدل از طریق صحت ساده است ،اما زمانی که داده‌ها دارای کالس‌ه ای ن امتوازن هس تند، کیفیت مدل آموزش‌دیده را به‌طور دقیق تعیین نمی‌کند .هنگامی ک ه داده ه ا دارای کالس های نامتوازن هس تند ،دو معی ار اض افی ن رخ ی ادآوری و دقت ،کیفیت م دل آموزش دیده را بهتر تعیین می کند .ب رای توض یح مف اهیم این دو معی ار اض افی از نمونه ای از فرآیند استخراج الماس محبوب استفاده خواهیم ک رد .ب رای ق رن ه ا، الماس آبرفتی ،یکی از محبوب ترین روش های استخراج الم اس از ش ن استخراج ِ های بستر رودخانه ها در سراسر جهان است .هزاران سال فرسایش برای شس تن الماس ها از رسوبات اولیه آنها به بستر رودخانه ها در نقاط مختلف جهان ش ناخته شده است .برای استخراج الماس ،مردم شن های ساحل رودخانه را در یک گودال روباز بزرگ جمع آوری ک رده ان د .پس از شستش وی زی اد ،تع داد زی ادی س نگ در گودال باقی می‌ماند .اکثریت قریب به اتفاق این سنگ های شسته شده فقط سنگ 244 های معمولی هستند .شناسایی یکی از سنگ ها به عنوان الماس ،اتف اقی ن ادر ام ا بسیار مهم است .صاحبان معدن در ح ال آزم ایش ب ا اس تفاده از بین ایی ک امپیوتر هستند تا تش خیص دهن د ک دام ی ک از س نگ ه ای شس ته ش ده فق ط س نگ ه ای معمولی و کدام یک از سنگ های شسته شده الماس هستند .آنها از ش کل ،رن گ و انعکاس برای طبقه بندی سنگ های شس ته ش ده ب ا اس تفاده از بین ایی ک امپیوتر، استفاده می کنند .در زمینه این مثال: ‏ TPیک سنگ شسته شده به درستی به عنوان الماس شناسایی شده است ‏ TNسنگ شسته شده به درستی به عنوان سنگ شناسایی شده است ‏ FPسنگی که به اشتباه به عنوان الماس شناسایی شده است ‏ FNالماسی که به اشتباه به عنوان سنگ شناسایی شده است اجازه دهید نرخ یادآوری و صحت را در حین حف ظ این فرآین د اس تخراج الم اس از معدن توضیح دهیم. نرخ یادآوری :این پارامتر نرخ ض ربه را محاس به می کن د ک ه نس بت روی دادهای مورد عالقه شناسایی شده در یک مخزن عظیم روی دادها اس ت .ب ه عب ارت دیگ ر، این معیار توانایی ما را برای یافتن یا "ضربه زدن" بیشتر رویدادهای م ورد عالق ه و ناشناخته ماندن حداقل ممکن را ارزیابی می کند .در زمینه شناسایی گودال الماس از تعداد زیادی سنگ شسته شده ،نرخ یادآوری در م ورد محاس به م وفقیت "ش کار گنج" است .برای یک گودال مشخص که از سنگ های شسته شده پر ش ده اس ت، نرخ یادآوری نسبت تعداد الماس ه ای شناس ایی ش ده ،از تع داد ک ل الم اس ه ای موجود در گودال خواهد بود. 245 ف رض کنی د 10الم اس در گ ودال وج ود داش ت ک ه ه ر ک دام 1000دالر ارزش داشت .الگ وریتم ی ادگیری ماش ین م ا توانس ت 9م ورد از آنه ا را شناس ایی کن د. بنابراین ،نرخ یادآوری 10/9=0.9خواهد بود بنابراین ،ما قادریم 90درصد از گنج خود را بازیابی کنیم .از نظر هزین ه دالری ،م ا توانستیم 9000دالر گنج از مجموع ارزش 10000دالر را شناسایی کنیم. دقت :در دقت ،ما فقط بر روی نقاط داده‌ای که توسط م دل آموزش‌دی ده ش ده به‌عن وان مثبت عالمت گ ذاری ش ده‌اند تمرک ز می‌ک نیم و بقی ه م وارد را کن ار می‌گذاریم .اگر فقط رویدادهایی را که توسط مدل آموزش‌دیده‌مان به‌عن وان مثبت عالمت گذاری شده‌اند (یعنی TPو )FPفیلتر کنیم ،و صحت را محاسبه کنیم به آن دقت می‌گویند. حال اجازه دهید دقت را در زمینه مثال استخراج الماس بررسی کنیم .اج ازه دهی د سناریویی را در نظر بگیریم که در آن می‌خواهیم از بینایی کامپیوتر برای شناس ایی الماس در می ان گ ودالی از س نگ‌های شس ته ش ده اس تفاده ک نیم و آنه ا را ب رای مشتریان ارسال کنیم. قرار است این فرآیند ب ه ص ورت خودک ار انج ام ش ود .روی داد ن امطلوب مطل ق، الگوریتم طبقه بندی اشتباه سنگ به عنوان الماس است که در نتیجه مشتری نهایی آن را در پست خود دری افت می کن د و هزین ه آن را دری افت می کن د .پس ب دیهی است که برای عملی شدن این فرآیند ،دقت بای د ب اال باش د .ب رای مث ال اس تخراج الماس: 246 درک موازنه نرخ یادآوری و دقت برای درک موازنه ذاتی مربوط به دقت و ن رخ ی ادآوری ،مهم اس ت ک ه ابت دا درک کنیم که چگونه یک طبقه‌بند تصمیم می‌گیرد .تصمیم گ یری ب رای ه ر ی ک از نق اط داده ،به منظور برچسب گ ذاری آن ب ا یکی از دو کالس ،ی ک فرآین د دو مرحل ه ای است: مرحله :1طبقه بند یک امتیاز تصمیم گیری ایجاد می کند که عددی از 0تا 1است. مرحله :2از مقدار پارامتری به نام آستانه تصمیم برای تخص یص یکی از دو کالس به نقطه داده فعلی استفاده می کند .هر آس تانه تص میم (امتی از > تص میم) مثبت پیش‌بینی می‌شود و هر نقطه داده‌ای که آس تانه تص میم (امتی از <تص میم) داش ته باشد منفی است .برای توض یح موازن ه بین دقت و ن رخ ی ادآوری ،مث ال اس تخراج الماس را دوباره بررسی می‌کنیم .شکل 2-7چند س نگ را نش ان می ده د ک ه ب ه ی امتیازِ تصمیم گ یری از مرحل ه 1الگ وریتم ،س ازماندهی ش ده ان د. ترتیب صعود ِ توجه داشته باش ید ک ه س نگ ه ای س مت چپ کم ترین امتی از را دارن د و کم ترین احتمال را دارند که الماس باشند .س نگ ه ای س مت راس ت ب االترین امتی از را در سمت راست دارند و به احتمال زیاد الم اس هس تند .ب رای ی ک طبقه‌بن دی کام ل، سنگ‌های سمت راست آستانه ی تصمیم ،همگی الماس هستند و س نگ‌های س مت چپ همگی س نگ هس تند .ح ال ،ابت دا ش کل )a( 2-7را در نظ ر بگیری د .آس تانه تصمیم گیری در مرکز قرار دارد .با نگاهی به سمت راس ت م رز تص میم (در ک ادر سایه دار) 3طبقه بندی صحیح و یک طبقه بندی اشتباه پی دا خواهی د ک رد .یع نی 3 TPو FP 1پیدا خواهید کرد .در سمت چپ آستانه تصمیم 2 ،طبقه بندی صحیح و 2طبقه بندی اشتباه را خواهی د دی د .آنه ا 2TNو 2FNهس تند .اج ازه دهی د ن رخ یادآوری و صحت را برای شکل )a( 2-7محاسبه کنیم. 247 از شکل )b( 2-7مشخص است که با افزایش آس تانه تص میم ب ه ،0.8معیاره ای طبقه بندی به عنوان سنگ را بس یار س خت می ک نیم .مفه وم این اس ت ک ه دقت افزایش یافته اما نرخ یادآوری کاهش یافته است .در شکل ،)c( 2-7آستانه تصمیم را کاهش داده ایم .به عبارت دیگر ،معیارهای خ ود را ب رای طبق ه بن دی س نگ ب ه عنوان الماس کاهش داده ایم .بنابراین( FN ،گنج از دست رفت ه) ک اهش می یاب د اما ( FPس یگنال نادرس ت) ن یز اف زایش می یاب د .بن ابراین ،ب ازی ب ا ارزش م رز تصمیم در مورد مدیریت موازنه بین نرخ یادآوری و دقت است .م ا م رز تص میم را افزایش می دهیم تا دقت بهتری داش ته باش یم و می ت وانیم انتظ ار ن رخ ی ادآوری بیشتری داشته باشیم .و ما مرز تصمیم را کاهش می دهیم تا ن رخ ی ادآوری به تری داشته باشیم و می توانیم انتظار دقت کمتری داشته باشیم. 248 شکل :2-7موازنه دقت /نرخ یادآوری :سنگ ها بر اساس امتیاز طبقه بند شان رتبه بندی می شوند .آنهایی که باالتر از آستانه تصمیم گیری هستند الماس محسوب می شوند .توجه داشته باشید که هر چه آستانه باالتر باشد ،دقت باالتر است اما نرخ یادآوری کمتر است. اجازه دهید نمودار بین دقت ونرخ یادآوری را برای درک بهتر موازنه ترسیم کنیم. 249 شکل :3-7دقت در مقابل نرخ یادآوری انتخاب مناسب برای نرخ یادآوری و دقت چیست؟ افزایش نرخ ی ادآوری ب ا ک اهش معیارهایی که برای شناسایی ی ک نقط ه داده ب ه عن وان مثبت اس تفاده می ک نیم، انجام می شود .انتظار می رود دقت ک اهش یاب د ،ام ا در ش کل ب اال ب ه ش دت در حدود 0.8ک اهش می یاب د .این نقط ه ای اس ت ک ه می ت وانیم ب ه عن وان مق دار مناسب نرخ یادآوری و دقت انتخاب کنیم .در نمودار باال ،اگر 0.8را به عن وان ن رخ یادآوری انتخاب کنیم ،دقت 0.75اس ت .م ا می ت وانیم آن را ب ه گون ه ای تفس یر کنیم که توانستیم ٪80از تمام نقاط داده مورد عالقه را عالمت گذاری ک نیم .دقت %75برای عالمت گذاری این نقاط داده مورد عالقه است .اگر نیاز تجاری خاص ی وجود نداشته باشد ،برای یک مورد استفاده عم ومی ،این ممکن اس ت ی ک موازن ه معقول باشد .راه دیگری برای نش ان دادن موازن ه ذاتی بین دقت و ن رخ ی ادآوری، استفاده از دریافت منحنی عملیاتی ( )ROCاست .برای این قض یه اج ازه دهی د دو اصطالح را تعریف کنیم: 250 نرخ مثبت واقعی ( )TPRو ) .FPR (FPRاجازه دهید با استفاده از ش کل 3-7ب ه منحنی ROCنگاه کنیم .برای محاسبه TPRو ،FPRباید الماس را در گودال قرار دهیم. توجه داشته باشید که: TPR .1برابر است با نرخ یادآوری یا نرخ ضربه. TNR .2را می توان به نرخ یادآوری یا نرخ ضربه رویداد منفی تصور ک رد .تع یین کننده موفقیت ما در شناسایی صحیح رویداد منفی اس ت .ب ه آن Specificityن یز می گویند. ‏FPR = 1 – TNR = 1 - Specificity .3 بدیهی است که TPRو FPRبرای این ارقام به صورت زیر قابل محاسبه است: ‏Figure Number TPR FPR ‏Xx (a) 3/5=0.6 1/3=0.33 ‏Xxx(b) 2/5=0.4 0/3 = 0 ‏Xxx(c) 5/5 = 1 1/3 = 0.33 توجه داشته باشید که TPRیا نرخ یادآوری با کاهش آستانه تصمیم ما اف زایش می یابد .در تالش برای به دست آوردن بیشتر الم اس ه ا از مع دن ،معیاره ای خ ود را 251 برای طبقه بندی سنگ های شسته شده به عنوان الماس ،ک اهش می دهیم .نتیج ه این است که سنگ‌های بیشتری به اشتباه به‌عنوان الماس طبقه‌بن دی می‌ش وند ک ه FPRرا افزایش می‌دهد .توجه داشته باشید که یک الگ وریتم طبقه‌بن دی ب ا کیفیت خوب باید بتواند امتیاز تصمیم‌گیری را برای هر سنگ در گودال ارائه دهد که تقریب ا ً با احتمال الماس بودن سنگ مطابقت دارد .خروجی چنین الگوریتمی در شکل 2-7 نشان داده شده است .الماس ها در سمت راست و سنگ ه ا در س مت چپ ق رار دارند .در شکل ،همانطور که آستانه تصمیم را از 0.8به 0.2کاهش دادیم ،انتظ ار می رود افزایش بسیار بیشتری در TPRنس بت ب ه FPRداش ته باش یم .در واق ع، افزایش شدید TPRبا افزایش ج زئی در FPRیکی از به ترین نش انه ه ای کیفیت یک طبقه بن د دودویی اس ت .از آنج ایی ک ه الگ وریتم طبق ه بن دی ق ادر ب ه ایج اد امتیازهای تصمیم گیری است ،که مستقیما ً با احتمال الماس بودن یک سنگ ارتب اط دارد .اگر الماس ها و سنگ ها به طور تصادفی در محور امتیاز تصمیم قرار گیرن د، به همان اندازه احتمال دارد که کاهش آستانه تصمیم گیری ،سنگ ها ی ا الم اس ه ا را عالمت گ ذاری کن د .این ب دترین طبق ه بن د دودویی ممکن اس ت ک ه ب ه عن وان تصادفی ساز نیز نامیده می شود. 252 شکل :4-7منحنی ROC درک بیش برازش اگر یک مدل یادگیری ماشینی در یک محیط توسعه عالی عمل کند اما در یک محیط تولید به طور قابل توجهی تنزل پیدا کند ،می گوییم مدل بیش برازش ش ده اس ت. این به این معنی است ک ه م دل آم وزش دی ده از مجموع ه داده آموزش ی ،دقیق ا پیروی می کند. این نشان می دهد که جزئیات زیادی در قوانین ایجاد شده توسط مدل وج ود دارد. موازنه بین واریانس مدل و بایاس بهترین ایده را نشان می دهد .بیایید این مف اهیم را یکی یکی بررسی کنیم. بایاس 253 هر مدل یادگیری ماشینی بر اساس مفروضات خاصی ،آم وزش داده می ش ود .ب ه طور کلی ،این مفروض ات تق ریب ه ای س اده ب رخی از پدی ده ه ای دنی ای واقعی هستند .این مفروضات روابط واقعی بین ویژگی ها و مشخص ات آنه ا را س اده می کند و آموزش یک مدل را آسان تر می کن د .فرض یات بیش تر ب ه معن ای س وگیری بیشتر است. بن ابراین ،در حین آم وزش ی ک م دل ،مفروض ات س اده‌تر = س وگیری زی اد ،و مفروضات واقع‌بین انه‌تر ک ه نمای انگر پدی ده‌های واقعی = س وگیری کم هس تند .در رگرس یون خطی ،غ یرخطی ب ودن ویژگی‌ه ا نادی ده گرفت ه می‌ش ود و ب ه عن وان متغیرهای خطی تقریب می‌شوند .بنابراین ،مدل‌های رگرسیون خطی ذات ا ً در براب ر نمایش سوگیری باال آسیب‌پذیر هستند. واریانس اگر از مجموعه داده ه ای متف اوتی ب رای آم وزش م دل اس تفاده ش ود ،واری انس میزان دقت یک مدل برچسب را تخمین می زند .واریانس حس اب می کن د ک ه آی ا فرمول ریاضی مدل ما تعمیم خوبی از الگوهای زیربنایی است یا خیر .قوانین بیش برازش خاص بر اساس سناریوها و موقعیت های خاص = واریانس ب اال ،و قوانی نی که تعمیم یافته و برای انواع سناریوها و موقعیت ها قابل اج را هس تند = واری انس کم .هدف ما در یادگیری ماشین آموزش مدل هایی است که بایاس کم و واری انس کم را نش ان می دهن د .دس تیابی ب ه این ه دف همیش ه آس ان نیس ت و معم وال ً دانشمندان داده را در شب بیدار نگه می دارد. موازنه سوگیری-واریانس هنگام آموزش یک مدل یادگیری ماشینی خاص ،تصمیم گیری در مورد سطح تعمیم مناسب برای قوانینی که یک مدل آموزش دیده را تشکیل می دهن د دش وار اس ت. مبارزه برای دستیابی به سطح درست تعمیم توسط موازنه س وگیری-واری انس ب ه تصویر کشیده می شود .توجه داشته باشید که مفروضات ساده تر = تعمیم بیش تر 254 = واریانس کم = س وگیری ب اال .این موازن ه بین س وگیری و واری انس ب ا انتخ اب الگوریتم ،ویژگی های داده ها و فراپارامترهای مختلف تعیین می شود .دستیابی ب ه سازش مناسب بین سوگیری و واریانس بر اساس الزام ات مس ئله خاص ی ک ه در تالش برای حل آن هستید ،مهم است. تعیین فازهای طبقه بندها پس از آماده شدن داده های برچسب گ ذاری ش ده ،توس عه طبق ه بن د ه ا ش امل آموزش ،ارزیابی و استقرار می شود. این سه مرحله از پیاده سازی یک طبقه بن د در چرخ ه عم ر ( CRISP-DMفرآین د استاندارد بین صنعتی برای داده کاوی) در نمودار زیر نشان داده شده است (چرخه زندگی CRISP-DMبا جزئیات بیش تر در فص ل ،5الگ وریتم ه ای نم ودار توض یح داده شده است) 255 شکل :5-7چرخه حیات CRISP DM در دو مرحل ه اول اج رای ی ک طبقه‌بن د -مراح ل آزم ون و آم وزش -از داده‌ه ای برچسب‌دار استفاده می‌کنیم .داده های برچسب گذاری شده به دو پارتیشن تقسیم می شوند -یک پارتیشن بزرگتر به نام داده های آموزشی و یک پارتیشن کوچکتر به ن ام داده ه ای آزم ون .ی ک تکنی ک نمونه‌گ یری تص ادفی ب رای تقس یم داده‌ه ای برچسب‌گذاری شده ورودی به پارتیشن‌های آموزشی و آزمون استفاده می‌ش ود ت ا اطمینان حاصل شود که هر دو پارتیشن دارای الگوهای سازگار هستند .توجه داشته باشید که همانطور که نمودار قبل نشان می دهد ،ابتدا یک مرحل ه آموزش ی وج ود دارد که در آن از داده های آموزش ی ب رای آم وزش ی ک م دل اس تفاده می ش ود. هنگامی که مرحله آموزش به پایان رسید ،م دل آم وزش دی ده ب ا اس تفاده از داده های آزمون ارزیابی می شود .ماتریس ه ای عملک ردِ متف اوتی ،ب رای تع یین کمیت عملکرد مدل آموزش دیده استفاده می شود .هنگ امی ک ه م دل ارزی ابی ش د ،م ا مرحله استقرار م دل را داریم ،ک ه در آن م دل آم وزش دی ده مس تقر می ش ود و برای استنتاج و حل مسائل دنیای واقعی با برچسب گذاری داده های بدون برچسب استفاده می شود.حال ،اجازه دهید به برخی از الگوریتم های طبقه بندی نگاه کنیم. ما به الگوریتم های طبقه بندی زیر می پردازیم .الگوریتم ه ای طبق ه بن دی زی ر را در بخش های بعدی بررسی خواهیم کرد: ‏ الگوریتم درخت تصمیم ‏ الگوریتم XGBoost ‏ الگوریتم جنگل تصادفی ‏ الگوریتم رگرسیون لجستیک ‏ الگوریتم ماشین بردار پشتیبانی (.)SVM ‏ الگوریتم بیز ساده بیایید با الگوریتم درخت تصمیم شروع کنیم. 256 الگوریتم طبقه بندی درخت تصمیم درخت تصمیم بر اساس رویکرد پارتیشن بندی بازگشتی (تقسیم و ح ل) اس ت ک ه مجموعه ای از قوانین را ایجاد می کند که می تواند ب رای پیش بی نی ی ک برچس ب استفاده شود .با یک گ ره ریش ه ش روع می ش ود و ب ه چن دین ش اخه تقس یم می شود .گره های داخلی ،آزمایش ی را ب ر روی ی ک وی ژگی خ اص نش ان می دهن د و نتیجه آزمایش با یک شاخه به سطح بعدی نشان داده می ش ود .درخت تص میم ب ه گره های برگ که حاوی تصمیمات هستند ختم می شود .هنگامی که پارتیشن بن دی دیگر نتیجه را بهبود نمی بخشد ،فرآیند متوقف می شود. درک الگوریتم طبقه بندی درخت تصمیم ویژگی متمایز طبقه بندی درخت تصمیم ،تولید سلسله مراتب قوانین قاب ل تفس یر توسط انسان است که برای پیش بینی برچسب در زمان اج را اس تفاده می ش ود. الگوریتم ماهیت بازگشتی دارد .ایجاد این سلسله مراتب قوانین شامل مراحل زی ر است: .1پیدا کردن مهم ترین ویژگی :از بین هم ه وی ژگی ه ا ،الگ وریتم وی ژگی را شناسایی می کند که بهترین تفاوت را بین نقاط داده در مجموعه داده آموزشی ب ا توجه به برچسب دارد .این محاسبه بر اساس معیارهایی مانند افزایش اطالعات ی ا ناخالصی جینی است. .2دو شاخه شدن :با استفاده از مشخص ترین ویژگی مهم ،الگوریتم معیاری را ایجاد می کند که برای تقس یم مجموع ه داده آموزش ی ب ه دو ش اخه اس تفاده می شود: ‏ نقاط داده ای که شرط را برآورده می کنند ‏ نقاط داده ای که شرط را برآورده نمی کنند .3بررسی گره های برگ :اگر هر شاخه حاصل عمدتا ً دارای برچسب های ی ک کالس باشد ،شاخه نهایی می شود و در نتیجه یک گره برگ ایجاد می شود. 257 .4بررسی شرایط توقف و تکرار :اگ ر ش رایط توق ف ارائ ه ش ده ب رآورده نشد ،آنگاه الگوریتم برای تکرار بعدی به مرحله 1برمی گردد .در غیر این ص ورت، مدل به عنوان آموزش دیده عالمت گ ذاری می ش ود و ه ر گ ره از درخت تص میم حاصل در پایین ترین سطح به عنوان یک گره برگ برچسب گذاری می شود .شرط توقف می‌تواند به سادگی تعریف تعداد تکرارها باشد ،ی ا می‌ت وان از ش رط توق ف پیش‌فرض استفاده کرد ،جایی که الگوریتم به محض رسیدن به سطح همگن معینی برای هر یک از گره‌های برگ متوقف می‌شود. الگوریتم درخت تصمیم را می توان با نمودار زیر توضیح داد: شکل :6-7درخت تصمیم در نمودار قبلی ،ریشه شامل یک دسته دایره و صلیب اس ت .الگ وریتم معی اری را ایجاد می کند که سعی می کند دایره ه ا را از ص لیب ه ا ج دا کن د .در ه ر س طح، درخت تصمیم پارتیشن‌هایی از داده‌ها را ایجاد می‌کند که انتظار می‌رود از سطح 1 به باال بیشتر و بیشتر همگن باشند .یک طبقه بند کامل دارای گره های ب رگ اس ت که فقط شامل دایره یا صلیب است .آموزش طبقه‌بند های کامل به دلیل تص ادفی بودن ذاتی مجموعه داده آموزشی معموال ً دشوار است. 258 استفاده از الگوریتم طبقه بندی درخت تصمیم برای چالش طبق++ه بن++د ها حال ،بیایید از الگوریتم طبقه‌بندی درخت تصمیم برای مسئله رایجی که قبال ً تعریف کرده‌ایم استفاده ک نیم ت ا پیش‌بی نی ک نیم ک ه آی ا مش تری در نه ایت محص ولی را خریداری می‌کند یا خیر: .1برای انجام این کار ،ابتدا الگوریتم طبقه‌بن دی درخت تص میم را مث ال می‌زنیم و مدلی را با استفاده از بخش آموزشی داده‌هایی که برای طبقه‌بند ه ای خ ود آم اده کرده‌ایم آموزش می‌دهیم: ‏import sklearn.metrics as metrics )y_pred = classifier.predict(X_test )cm = metrics.confusion_matrix(y_test, y_pred ‏cm خروجی زیر را می دهد: اکنون ،بیایید صحت ،نرخ یادآوری ،و مقادیر دقت طبقه‌بند ایجاد شده را با اس تفاده از الگوریتم طبقه‌بندی درخت تصمیم محاسبه کنیم: )accuracy= metrics.accuracy_score(y_test,y_pred )recall = metrics.recall_score(y_test,y_pred )precision = metrics.precision_score(y_test,y_pred )print(accuracy,recall,precision 259 با اجرای کد قبلی خروجی زیر تولید می شود: معیارهای عملکرد به ما کمک می کنند تا تکنیک های مختلف م دل س ازی آموزش ی را با یکدیگر مقایسه کنیم. نقاط قوت و ضعف طبقه بندی درخت تصمیم در این قسمت ب ه نق اط ق وت و ض عف اس تفاده از الگ وریتم طبق ه بن دی درخت تصمیم می پردازیم. نقاط قوت نقاط قوت طبقه‌بند درخت تصمیم به شرح زیر است: قوانین مدل های ایجاد شده با اس تفاده از الگ وریتم درخت تص میم توس ط انس ان قابل تفسیر است .به م دل ه ایی از این دس ت ،م دل ه ای Whiteboxگفت ه می شود .هر زمان که برای ردیابی جزئیات و دالیل تصمیمات اتخاذ ش ده توس ط م دل به شفافیت نی از باش د ،م دل‌های Whiteboxی ک ال زام هس تند .این ش فافیت در برنامه‌ه ایی ک ه می‌خ واهیم از س وگیری جلوگ یری ک نیم و از جوام ع آس یب‌پذیر محافظت کنیم ،ضروری است .به عنوان مثال ،یک مدل Whiteboxب ه ط ور کلی یک الزام برای موارد استفاده حیاتی در صنایع دولتی و بیمه است. طبقه بند درخت تصمیم برای استخراج اطالعات از فضای مسئله گسسته ط راحی شده است .این بدان معنی است که بیشتر ویژگی ها متغیرهای موض وعی هس تند، بنابراین استفاده از درخت تصمیم برای آموزش مدل انتخاب خوبی است. 260 نقاط ضعف نقاط ضعف طبقه‌بند درخت تصمیم به شرح زیر است: اگر درخت تولی د ش ده توس ط طبقه‌بن د درخت تص میم بیش از ح د عمی ق باش د، قوانین جزئیات زیادی را ثبت می‌کنند و در نتیجه ی ک م دل بیش ب رازش می‌ش ود. در حین استفاده از الگوریتم درخت تصمیم ،باید توجه داشته باشیم ک ه درخت‌ه ای تصمیم در برابر بیش برازش آسیب‌پذیر هستند و بنابراین برای جلوگیری از این امر باید هر زمان که الزم بود درخت را هرس کنیم. نقطه ض عف طبقه‌بن د درخت تص میم ،ن اتوانی آن‌ه ا در درک رواب ط غ یرخطی در قوانینی است که ایجاد می‌کنند. مطالعات موردی در این بخش ،به موارد استفاده ای که الگوریتم درخت تص میم ب رای آنه ا اس تفاده می شود ،می پردازیم. طبقه بندی سوابق طبقه‌بند درخت تصمیم را می‌توان برای طبقه‌بندی نقاط داده اس تفاده ک رد ،مانن د مثال‌های زیر: برنامه های وام مسکن :برای آموزش یک طبقه بند دودویی ب رای تع یین اینک ه آیا متقاضی احتماال ً در بازپرداخت ،کوتاهی می کند یا خیر. تقسیم بندی مشتری :برای دسته بن دی مش تریان ب ه مش تریان ب ا ارزش ب اال، متوسط و کم ارزش به طوری که استراتژی های بازاریابی را بتوان برای هر دس ته سفارشی کرد. تشخیص پزشکی :برای آموزش طبقه بند که بتواند رشد خوش خیم یا ب دخیم را طبقه بندی کند. 261 تجزیه و تحلیل اثربخشی درمان :برای آموزش طبقه‌بند که بتواند بیم ارانی را که به یک درمان خاص واکنش مثبت نشان داده‌اند عالمت‌گذاری کند. انتخاب ویژگی الگوریتم طبقه بند درخت تصمیم زیرمجموعه کوچکی از وی ژگی ه ا را ب رای ایج اد قوانین انتخاب می کند .وقتی تعداد زیادی ویژگی دارید ،می‌توان از انتخ اب وی ژگی برای انتخاب ویژگی‌های الگوریتم یادگیری ماشینی دیگر استفاده کرد. آشنایی با روش های جمعی جمعی روشی است ،در یادگیری ماشین ،برای ایجاد بیش از یک مدل کمی متفاوت با استفاده از پارامترهای مختلف و سپس ت رکیب آنه ا در ی ک م دل مجم وع .ب رای ایجاد مجموعه‌های مؤثر ،باید معیار تجمیع ما برای تولید مدل حاص ل را پی دا ک نیم. بیایید به برخی از الگوریتم های جمعی نگاه کنیم. پیاده سازی gradient boostingبا الگوریتم XGBoost XGBoostدر س ال 2014ایج اد ش دوب ر اس اس اص ول gradient ‏boostingاست .این الگوریتم به یکی از محبوب ترین الگ وریتم ه ای طبق ه بن دی جمعی تبدیل شده است .این مدل یک دسته از درختان مرتبط به هم تولید می کن د و از شیب نزول برای به حداقل رساندن خطای باقیمانده استفاده می کند .این کار باعث می‌شود که آن را برای زیرساخت‌های توزیع‌شده ،مانند ،Apache Sparkیا ب رای محاس بات اب ری ،مانن د Google Cloudی ا Amazon Web Services ) (AWSمناسب باشد .ح اال ببی نیم چگون ه می‌ت وانیم gradient boostingرا ب ا الگوریتم XGBoostپیاده‌سازی کنیم: .1ابتدا ،طبقه‌بند XGBClassfierرا نمونه‌سازی می‌کنیم و م دل را ب ا اس تفاده از بخش آموزشی داده‌ها آموزش می‌دهیم: 262 : پیش‌بینی‌هایی را بر اساس مدل آموزش‌دیده جدید ایجاد خواهیم کرد،سپس y_pred = classifier.predict(X_test) cm = metrics.confusion_matrix(y_test, y_pred) cm :خروجی زیر را تولید می کند : عملکرد مدل را محاسبه می کنیم،در نهایت accuracy= metrics.accuracy_score(y_test,y_pred) recall = metrics.recall_score(y_test,y_pred) precision = metrics.precision_score(y_test,y_pred) 263 )print(accuracy,recall,precision این کد خروجی زیر را به ما می دهد: حاال ،بیایید به الگوریتم جنگل تصادفی نگاه کنیم. استفاده از الگوریتم جنگل تصادفی جنگل تصادفی یک نوع روش جمعی است که با ترکیب چندین درخت تص میم ب رای کاهش بایاس و واریانس کار می کند. آموزش الگوریتم جنگل تصادفی در آم وزش ،این الگ وریتم Nنمون ه از داده ه ای آموزش ی می گ یرد و mزی ر مجموعه از داده ه ای کلی م ا را ایج اد می کن د .این زی ر مجموع ه ه ا ب ا انتخ اب تصادفی برخی از سطرها و ستون های داده های ورودی ایجاد می شوند .الگ وریتم mدرخت تصمیم مستقل می سازد .این درختان طبقه بن دی ب ا C1ت ا Cmنش ان داده می شوند. استفاده از جنگل تصادفی برای پیش بینی هنگامی که مدل آموزش داده شد ،می توان از آن برای برچسب گ ذاری داده ه ای جدید استفاده کرد .هر یک از درختان جداگانه یک برچسب تولید می کند .پیش‌بی نی نهایی با رأی دادن به این پیش‌بینی‌های فردی مشخص می‌شود ،همانطور که نش ان داده شده است: 264 شکل :7-7جنگل تصادفی توجه داشته باشید که در نمودار قبل، m ،درختان آموزش داده شده اند ک ه ب ا C1 تا Cmنشان داده شده است .یعنی } Trees = {C1,..,Cmمی باشد.هر ی ک از درخت ان ی ک پیش‌بی نی ایج اد می‌کن د ک ه ب ا ی ک مجم وعه‌ نش ان داده می‌ش ود: پیش‌بینی‌ه ای ف ردی = } .P= {P1,..., Pmپیش‌بی نی نه ایی ب ا Pfنش ان داده می‌شود .این پیش بینی توسط اکثر پیش بینی های فردی تعیین می شود. 265 تابع modeرا می توان برای فهمیدن تص میم اک ثریت اس تفاده ک رد ( modeع ددی است که اغلب تکرار می ش ود و در اک ثریت اس ت) .پیش‌بی نی ف ردی و پیش‌بی نی نهایی به صورت زیر مرتبط می‌شوندPf = mode (P) : تمایز الگوریتم جنگل تصادفی از ensemble boosting هر یک از درخت ان تولی د ش ده توس ط الگ وریتم جنگ ل تص ادفی ک امال ً مس تقل از یکدیگر هستند .از هیچ یک از جزئیات درختان دیگر گ روه ،آگ اه نیس ت .این تف اوت آن را از سایر تکنیک ها ،مانند ،ensemble boostingمتمایز می کند. استفاده از الگوریتم جنگل تصادفی برای چالش طبقه بند ها بیایید الگوریتم جنگل تصادفی را نمونه‌سازی کنیم و از آن برای آموزش م دل خ ود با استفاده از داده‌های آموزشی استفاده کنیم .دو فراپارامتر کلی دی وج ود دارد ک ه در اینجا به آنها نگاه خواهیم کرد: ‏n_estimators ‏max_depth فراپارامتر n_estimatorsتعداد درخت های تصمیم گیری منفرد ساخته ش ده را کنترل می کند و فراپارامتر max_depthکنترل می کند ک ه ه ر ی ک از این درخت های تصمیم منفرد چقدر می توانند به عمق بروند .بن ابراین ،ب ه عب ارت دیگ ر ،ی ک درخت تصمیم می تواند به شکافتن و تقسیم شدن ادامه دهد تا زمانی که ی ک گ ره داشته باشد که نشان دهنده هر نمون ه داده ش ده در مجموع ه آموزش ی باش د .ب ا تنظیم ،max_depthتعداد سطوح تقس یم را مح دود می ک نیم .این ک ار پیچی دگی مدل را کنترل می کند و تعیین می کند ک ه چق در ب ا داده ه ای آموزش ی مط ابقت دارد .اگ ر ب ه خ روجی زی ر مراجع ه ک نیم n_estimators ،ع رض م دل جنگ ل تصادفی و max_depthعمق مدل را کنترل می‌کند: 266 بیایید از آن برای پیش بینی،هنگامی که مدل جنگل تصادفی آموزش داده شد :استفاده کنیم y_pred = classifier.predict(X_test) cm = metrics.confusion_matrix(y_test, y_pred) cm :که خروجی را به صورت زیر می دهد : بیایید حساب کنیم که مدل ما چقدر خوب است،حال accuracy= metrics.accuracy_score(y_test,y_pred) recall = metrics.recall_score(y_test,y_pred) precision = metrics.precision_score(y_test,y_pred) print(accuracy,recall,precision) :خروجی زیر را مشاهده خواهیم کرد 267 حاال ،بیایید به رگرسیون لجستیک نگاه کنیم. رگرسیون لجستیک رگرسیون لجستیک یک الگوریتم طبق ه بن دی اس ت ک ه ب رای طبق ه بن دی دودویی استفاده می شود .از یک تابع لجستیک برای فرموله کردن تعام ل بین وی ژگی ه ای ورودی و برچسب اس تفاده می کن د .این یکی از س اده‌ترین تکنیک‌ه ای طبقه‌بن دی است که برای مدل‌سازی یک متغیر وابسته دودویی استفاده می‌شود. مفروضات رگرسیون لجستیک موارد زیر را فرض می‌کند: ‏ مجموعه داده آموزشی مقدار گمشده ای ندارد. ‏ برچسب یک متغیر موضوعی دودویی است. ‏ برچسب ترتیبی است -به عبارت دیگر ،یک متغیر موضوعی با مقادیر م رتب شده است. ‏ همه ویژگی ها یا متغیرهای ورودی مستقل از یکدیگر هستند. برقراری رابطه برای رگرسیون لجستیک ،مقدار پیش‌بینی‌شده به صورت زیر محاسبه می‌شودý= : ) σ (ω X +jبیایید فرض کنیم z = ωX+ jSo اکنون: 268 رابطه قبلی را می توان به صورت گرافیکی به صورت زیر نشان داد: شکل :8-7رسم تابع سیگموید توجه داشته باشید که اگر zبزرگ باشد ) σ (zبرابر با 1خواهد بود .اگر zبسیار کوچک یا یک عدد منفی بزرگ باشد ) σ (zبرابر 0خواهد بود .همچنین وقتی =0 zباشد σ (z)=0.5 ،است Sigmoid .یک تابع طبیعی برای نشان دادن احتماالت است ،زیرا به طور دقیق بین 0و 1محدود شده است .هدف از آموزش ی ک م دل 269 رگرسیون لجستیک ،یافتن مقادیر صحیح برای wو jاست .رگرسیون لجس تیک ب ه خاطر تابعی که ب رای فرمول‌بن دی آن اس تفاده می‌ش ود ب ه ن ام ت ابع لجس تیک ی ا سیگموید نامگذاری می‌شود. توابع زیان و هزینه تابع زیان تعریف می کند که چگونه می خواهیم یک خطا را برای یک مثال خ اص در داده های آموزشی خود محاسبه کنیم. تابع هزینه تعریف می کند که چگونه می خواهیم یک خط ا را در ک ل مجموع ه داده آموزش ی خ ود ب ه ح داقل برس انیم .بن ابراین ،ت ابع زی ان ب رای یکی از مثال‌ه ای مجموعه داده آموزشی و تابع هزینه برای هزینه کلی استفاده می‌شود ک ه انح راف کلی مق ادیر واقعی و پیش‌بینی‌ش ده را نش ان می‌ده د .این ت ابع ب ه انتخ اب wو h بستگی دارد .تابع زیان مورد استفاده در رگرسیون لجستیک برای مثال خ اص iدر مجموعه آموزشی به شرح زیر است: )) Loss (ý(i), y(i)) = - (y(i) log ý(i) + (1-y(i) ) log (1-ý(iتوجه داشته باشید که وقتی ))- = y(i) = 1، Loss(ý(i), y(i ). logý(iبه حداقل رساندن زیان منجر به مقدار زیادی از ) ý(iمی شود .به عن وان یک تابع سیگموید ،حداکثر مقدار 1خواهد بود .اگر ))y(i) = 0، loss(ý(i), y(i )). .= - log (1-ý(iبه حداقل رساندن زیان منجر به کوچک شدن ) ý(iتا حد امکان می شود که 0است .تابع هزینه رگرسیون لجستیک به شرح زیر است: زمان استفاده از رگرسیون لجستیک 270 رگرسیون لجستیک برای طبق ه بن د ه ای دودویی ع الی عم ل می کن د .رگرس یون لجستیک زمانی که داده ها بسیار زیاد هستند و کیفیت داده ه ا ع الی نیست ،خیلی خوب عمل نمی کن د .می توان د روابطی را ک ه خیلی پیچی ده نیس تند درک کن د .در حالی که معموال ً بهترین عملکرد را ندارد ،ام ا معی ار بس یار خ وبی را ب رای ش روع تعیین می کند. استفاده از الگوریتم رگرسیون لجستیک برای چالش طبقه بند ها در این بخش ،خواهیم دی د ک ه چگون ه می ت وانیم از الگ وریتم رگرس یون لجس تیک برای چالش طبقه بند ها استفاده کنیم: . 1ابتدا بیایید یک مدل رگرسیون لجستیک را مثال بزنیم و آن را با اس تفاده از داده های آموزشی ،آموزش دهیم: ‏from sklearn.linear_model import LogisticRegression )classifier = LogisticRegression(random_state = 0 )classifier.fit(X_train, y_train بیایید مقادیر داده های آزمون را پیش بینی کنیم و یک ماتریس سردرگمی ایجاد کنیم: )y_pred = classifier.predict(X_test )cm = metrics.confusion_matrix(y_test, y_pred ‏cm با اجرای کد قبلی خروجی زیر را دریافت می کنیم: 271 حاال بیایید به معیارهای عملکرد نگاه کنیم: )accuracy= metrics.accuracy_score(y_test,y_pred )recall = metrics.recall_score(y_test,y_pred )precision = metrics.precision_score(y_test,y_pred )print(accuracy,recall,precision با اجرای کد قبلی خروجی زیر را دریافت می کنیم: در مرحله بعد ،بیایید به SVMنگاه کنیم. الگوریتم SVM حاال بیایید به SVMنگاه کنیم SVM .طبقه بندی است ک ه ی ک اب ر ص فحه بهین ه را پیدا می کند که حاشیه بین دو کالس را به ح داکثر می رس اند .در SVMه ا ،ه دف بهینه سازی ما ،ب ه ح داکثر رس اندن حاش یه اس ت .حاش یه ب ه عن وان فاص له بین ابرصفحه جداکننده (مرز تصمیم) و نمونه های آموزش ی ک ه نزدی ک ت ر ب ه این اب ر صفحه هستند ،که بردارهای پشتیبان نامیده می شوند ،تعری ف می ش ود .بن ابراین، اجازه دهید با یک مثال بسیار ابتدایی با تنها دو بع د X1و X2ش روع ک نیم .م ا ی ک خط می خواهیم تا دایره ها را از صلیب ها جدا کند .این در نمودار زی ر نش ان داده شده است: 272 شکل :9-7الگوریتم SVM ما دو خط کشیده ایم و هر دو کامال ً صلیب ها را از دایره ه ا ج دا می ک نیم .ب ا این حال ،باید یک خط بهینه یا مرز تصمیم وجود داشته باشد که بهترین شانس را ب رای طبقه‌بندی صحیح بیشتر نمونه‌های اضافی به ما می‌دهد .یک انتخ اب معق ول ممکن است خطی باشد که بین این دو کالس به طور مساوی فاصله داشته باشد تا ب رای هر کالس کمی فاصله ایجاد کند ،همانطور که نشان داده شده است: 273 شکل :10-7مفاهیم مربوط به SVM حال ،بیایید ببینیم چگونه می توانیم از SVMب رای آم وزش ی ک طبق ه بن دی ب رای چالش خود استفاده کنیم. استفاده از الگوریتم SVMبرای چالش طبقه بند ها ابتدا ،بیایید طبقه‌بند SVMرا نمونه‌سازی کنیم و سپس از بخش آموزشی داده‌ه ای برچسب‌گذاری‌شده برای آموزش آن استفاده کنیم .فراپارامتر هس ته ،ن وع تب دیلی را ک ه روی داده ه ای ورودی اعم ال می ش ود ،تع یین می کن د ت ا بت وان آن را ب ه صورت خطی جدا کرد: ‏from sklearn.svm import SVC )classifier = SVC(kernel = 'linear', random_state = 0 )classifier.fit(X_train, y_train 274 پس از آموزش ،بیایید چند پیش‌بینی ایجاد کنیم و به ماتریس سردرگمی نگاه کنیم: )y_pred = classifier.predict(X_test )cm = metrics.confusion_matrix(y_test, y_pred ‏cm خروجی زیر را مشاهده کنید: اکنون ،بیایید به معیارهای مختلف عملکرد نگاه کنیم: )accuracy= metrics.accuracy_score(y_test,y_pred )recall = metrics.recall_score(y_test,y_pred )precision = metrics.precision_score(y_test,y_pred )print(accuracy,recall,precision پس از اجرای کد قبلی ،مقادیر زیر را به عنوان خروجی دریافت می کنیم: درک الگوریتم بیز ساده بر اساس تئوری احتمال ،بیز ساده یکی از ساده ت رین الگ وریتم ه ای طبق ه بن دی است .اگر به درستی استفاده شود ،می تواند پیش بینی ه ای دقیقی داش ته باش د. الگوریتم Naive Bayesبه دو دلیل نامگذاری شده است: 275  مبتنی بر یک فرض ساده است ک ه بین وی ژگی ه ا و متغ یر ورودی اس تقالل وجود دارد. ‏ بر اساس قضیه بیز است. این الگوریتم سعی می کند نمونه ها را بر اساس احتماالت صفات/نمونه های قبلی با فرض استقالل کامل ویژگی ،طبقه بندی کند .سه نوع رویداد وجود دارد: ‏ رویدادهای مستقل بر احتمال وقوع یک رویداد دیگ ر ت أثیری نمی‌گذارن د (ب ه عنوان مثال ،دریافت ایمیلی که ب ه ش ما اج ازه ورود رایگ ان ب ه ی ک روی داد فناوری و سازماندهی مجدد در شرکت شما را می‌دهد). ‏ رویدادهای وابسته بر احتمال وقوع یک رویداد دیگر تأثیر می گذارد .یع نی ب ه نوعی به هم مرتبط هستند (مثال ً احتمال اینکه شما به موقع به یک کنف رانس برسید می تواند تحت تأثیر اعتص اب کارکن ان خط وط ه وایی ی ا پروازه ایی باشد که ممکن است به موقع انجام نشوند). ‏ رویدادهای انحصاری متقابل نمی توانند به ط ور همزم ان اتف اق بیفتن د (مثال ً احتمال انداختن س ه و ش ش روی ی ک ت اس منف رد 0اس ت -این دو نتیج ه انحصاری متقابل هستند). قضیه بیز قضیه بیز ،برای محاسبه احتمال ش رطی بین دو روی داد مس تقل A ،و Bاس تفاده می شود .احتمال وق وع روی دادهای Aو Bب ا ) P(Aو ) P(Bنش ان داده می ش ود. احتمال شرطی با ) P(B|Aنشان داده می شود ،که با توجه ب ه اینک ه روی داد Aرخ داده است ،احتمال شرطی رخ دادن رویداد Bاست: 276 محاسبه احتماالت Naive Bayesمبتنی بر اص ول احتم ال اس ت .احتم ال وق وع ی ک روی داد واح د (احتمال مشاهده‌ای) با در نظر گرفتن تعداد دفعات وق وع روی داد و تقس یم آن ب ر تعداد کل فرآیندهایی که می‌توانست به آن رویداد منجر شود ،محاسبه می‌شود .به عنوان مثال ،یک مرکز تماس روزانه بر اساس 50باری که در ب ازه ی ک ماه ه ثبت شده،بیش از 100تماس پشتیبانی دریافت می کند .شما می خواهید بدانید ک ه ب ر اساس دفعات قبلی که به یک تماس پاسخ داده شده است ،احتمال اینک ه در کم تر از 3دقیقه به آن پاسخ داده شود ،چقدر است .اگر مرک ز تم اس موف ق ش ود این رکورد زمانی را در 27بار انجام دهد ،احتم ال مش اهده 100تم اس در کم تر از 3 دقیقه به صورت زیر است: 100( Pتماس پشتیبانی در کمتر از 3دقیقه) = ()٪54 ( 0.54 = )50 / 27 100تماس را می توان در کمتر از 3دقیقه در نیمی از زمان پاسخ داد ،بر اساس سوابق 50باری که در گذشته اتفاق افتاده است. قوانین ضرب برای رویدادهای AND برای محاسبه احتمال وقوع دو یا چند رویداد به طور همزم ان ،مس تقل ی ا وابس ته بودن رویدادها را در نظر بگیرید .اگ ر آنه ا مس تقل باش ند ،از ق انون ض رب س اده استفاده می شود( P :نتیجه 1و نتیجه ( P = )2نتیجه ( P * )1نتیجه )2برای مثال، ب رای محاس به احتم ال دری افت ایمی ل ب ا ورود رایگ ان ب ه ی ک روی داد ف نی و سازماندهی مجدد در محل کار شما ،از این قانون ضرب ساده اس تفاده می ش ود. این دو رویداد مستقل هستند زی را وق وع یکی ب ر ش انس وق وع دیگ ری ت أثیر نمی گذارد اگر دریافت ایمیل رویداد فنی 31درصد و احتمال سازماندهی مجدد کارکنان 82درصد باشد ،احتمال وقوع هر دو به شرح زیر محاسبه می شود. 277 )P(email AND re-organization) = P(email) * P(reorganization )= (0.31) * (0.82) = 0.2542 (25% قانون ضرب عمومی اگر دو یا چند رویداد وابسته باشند ،از قانون ضرب عمومی استفاده می ش ود .این فرم ول در واق ع در ه ر دو م ورد روی دادهای مس تقل و وابس ته معت بر اس ت: | P(outcome 1 AND outcome 2)=P(outcome 1)*P(outcome 2 ).outcome1توجه داشته باشید که ) P(outcome 2 | outcome 1به احتمال مشروط وقوع نتیجه 2با توج ه ب ه اینک ه نتیج ه 1قبال ً رخ داده اس ت .این فرم ول وابستگی بین روی دادها را در ب ر می گ یرد .اگ ر روی دادها مس تقل باش ند ،احتم ال شرطی نامربوط است زیرا یک نتیجه بر شانس وق وع دیگ ری ت أثیر نمی گ ذارد ،و ) P(outcome 2 | outcome 1به سادگی ) P(outcome 2اس ت .توج ه داشته باشید که فرمول در این مورد فقط به قانون ضرب ساده تبدیل می شود. قوانین اضافه برای رویدادهای OR هنگام محاسبه احتمال وقوع یک رویداد یا رویداد دیگر (متقابل انحصاری) ،از قانون جم ع س اده زی ر اس تفاده می ش ودP(outcome 1 OR outcome 2) = : ) P(outcome 1) + P(outcome 2به عنوان مثال ،احتمال رو آمدن 6یا 3چقدر است؟ برای پاسخ به این سوال ،ابتدا توجه داشته باشید که هر دو نتیجه نمی توانند به طور همزمان رخ دهند .احتمال رو آمدن یک )6/1( 6اس ت و همین ام ر را می توان برای رو آمدن یک 3در نظر گرفتP(6 OR 3) = (1/6) + (1/6) = 0.33 : ) (33%در ص ورتی ک ه روی دادها متقاب ل انحص اری نیس تند و می توانن د ب ه ط ور همزمان اتفاق بیفتند ،از فرمول جمع کلی زیر استفاده کنید ،ک ه همیش ه در ه ر دو مورد انحصار متقاب ل و ع دم انحص ار متقاب ل معت بر اس تP(outcome 1 OR : 278 outcome 2) = P(outcome 1) + P(outcome 2) P(outcome 1 AND )outcome 2 استفاده از الگوریتم ساده بیز برای چالش طبقه بند ها حاال بیایید از الگوریتم ساده بیز برای حل چالش طبقه‌بند استفاده کنیم: .1ابتدا تابع () GaussianNBرا وارد ک رده و از آن ب رای آم وزش م دل اس تفاده می کنیم: ‏from sklearn.naive_bayes import GaussianNB )(classifier = GaussianNB )classifier.fit(X_train, y_train حال بیایید از مدل آموزش دیده برای پیش بینی نتایج استفاده کنیم .م ا از آن ب رای پیش‌بینی برچسب‌های پارتیشن آزمایش ی خ ود اس تفاده خ واهیم ک رد ک ه X_test است: پیش بینی نتایج مجموعه آزمون )y_pred = classifier.predict(X_test )cm = metrics.confusion_matrix(y_test, y_pred ‏cm حاال بیایید ماتریس سردرگمی را چاپ کنیم: 279 اکنون ،بیایید ماتریس های عملکرد را چاپ کنیم تا کیفیت مدل آموزش دیده خود را محاسبه کنیم: )accuracy= metrics.accuracy_score(y_test,y_pred )recall = metrics.recall_score(y_test,y_pred )precision = metrics.precision_score(y_test,y_pred )print(accuracy,recall,precision که خروجی را به صورت زیر می دهد: برای الگوریتم های طبقه بندی ،برنده است بیایید به معیارهای عملکرد الگوریتم های مختلفی که ارائه کرده ایم نگاه ک نیم .این در جدول زیر خالصه شده است: صحت الگوریتم دقت نرخ یادآوری درخت تصمیم 0.94 0.93 0.88 ‏XGBoost 0.93 0.90 0.87 جنگل تصادفی 0.93 0.90 0.87 ‏Logistic 0.91 0.81 0.89 ‏regression ‏SVM 0.89 0.71 0.92 بیز ساده 0.92 0.81 0.92 280 با نگاهی به جدول قبل ،می‌توان مشاهده کرد ک ه طبقه‌بن د درخت تص میم از نظ ر صحت و یادآوری بهترین عملکرد را دارد .اگ ر م ا ب ه دنب ال دقت هس تیم ،پس بین SVMو بیز ساده رابطه وجود دارد ،بنابراین هر کدام برای ما کار خواهد کرد. آشنایی با الگوریتم های رگرسیون اگر برچسب یک متغیر پیوسته باشد ،مدل یادگیری ماشین نظ ارت ش ده از یکی از الگوریتم‌های رگرسیون استفاده می‌کند. در این مورد ،مدل یادگیری ماشین ،ی ک رگرس یون نامی ده می‌ش ود .در این بخش، الگوریتم‌های مختلفی را ارائه می‌کنیم که می‌توان از آنه ا ب رای آم وزش ی ک م دل رگرسیون یادگیری ماشین با نظارت یا به‌طور ساده ،رگرسیون استفاده ک رد .قب ل از اینک ه ب ه جزئی ات الگ وریتم ه ا ب پردازیم ،اج ازه دهی د ابت دا چالش ی ب رای این الگوریتم ها ایجاد کنیم تا عملکرد ،توانایی ها و اثربخشی آنها را آزمایش کنیم. ارائه چالش رگرسیون مشابه رویکردی که با الگوریتم‌های طبقه‌بندی استفاده کردیم ،ابت دا ی ک مس ئله را به عن وان چالش ی ب رای هم ه الگوریتم‌ه ای رگرس یون ارائ ه خ واهیم داد .م ا این مس ئله رایج را چ الش رگرس یون می‌ن امیم .س پس ،از س ه الگ وریتم رگرس یون مختلف برای رس یدگی ب ه چ الش اس تفاده خ واهیم ک رد .این رویک رد اس تفاده از چالش مشترک برای الگوریتم های رگرسیون مختلف دو مزیت دارد: می توانیم داده ه ا را ی ک ب ار آم اده ک نیم و از داده ه ای آم اده ش ده در ه ر س ه الگوریتم رگرسیون استفاده کنیم. ما می‌توانیم عملکرد سه الگوریتم رگرسیون را به روشی مع نی‌دار مقایس ه ک نیم، زیرا از آنها برای حل همان مسئله استفاده خواهیم کرد. بیایید به بیان مسئله چالش نگاه کنیم. 281 بیان مسئله چالش رگرسیون پیش بینی مس افت پیم وده ش ده خودروه ای مختل ف این روزه ا از اهمیت زی ادی برخوردار است .یک وسیله نقلیه کارآمد برای محیط زیست خوب اس ت و همچ نین مقرون به صرفه است .مسافت پیموده شده را می ت وان از روی ق درت موت ور و ویژگی های وسیله نقلیه تخمین زد .بیایید چالشی را برای رگرسیون ایج اد ک نیم ت ا مدلی را آموزش دهند که بتواند مایل در هر گ الن ( )MPGی ک وس یله نقلی ه را ب ر اساس ویژگی‌های آن پیش‌بینی کند .بیایید به مجموع ه داده‌ه ای ت اریخی ک ه ب رای آموزش رگرسیون استفاده خواهیم کرد نگاه کنیم. کاوش مجموعه داده های تاریخی ویژگی‌های مجموعه داده‌ه ای داده ت اریخی ک ه م ا در اختی ار داریم ،ب ه ش رح زی ر است: نام توضیح نوع یک وسیله نقلیه خاص را مشخص می ‏NAME موضوعی(گسسته) ‏CYLINDERS پیوسته تعداد سیلندرها (بین 4تا )8 ‏DISPLACEMENT پیوسته حجم موتور بر حسب مکعب ‏HORSEPOWER پیوسته اسب بخار موتور ‏ACCELERATION پیوسته زمان الزم برای شتاب گیری از 0تا کند 60مایل در ساعت (بر حسب ثانیه) 282 برچسب این مسئله ی ک متغ یر پیوس ته MPGاس ت ک ه mpgرا ب رای ه ر ی ک از وسایل نقلیه مشخص می کند .اجازه دهید ابتدا خط لوله پردازش داده را برای این مسئله طراحی کنیم. مهندسی ویژگی با استفاده از خط لوله پردازش داده بیایید ببینیم چگونه می‌توانیم یک خط لوله پردازش قابل استفاده مجدد برای مقابله با چالش‌های رگرسیون طراحی کنیم .هم انطور ک ه گفت ه ش د داده ه ا را ی ک ب ار آماده کرده و سپس در تمامی الگوریتم های رگرسیون استفاده می کنیم .بیایید این مراحل را دنبال کنیم: .1ما با وارد کردن مجموعه داده به شرح زیر شروع می کنیم: )'dataset = pd.read_csv('auto.csv حال بیایید پیش نمایش مجموعه داده را مشاهده کنیم: )dataset.head(5 مجموعه داده به این صورت خواهد بود: 283 حاال بیایید به انتخاب ویژگی ادامه دهیم .بیایی د س تون NAMEرا ح ذف ک نیم زی را فقط یک شناسه است که برای خودروها الزم است .ستون‌هایی که برای شناسایی ردیف‌های مجموعه داده ما استفاده می‌شوند ،برای آموزش م دل مرتب ط نیس تند. بیایید این ستون را حذف کنیم: )]'dataset=dataset.drop(columns=['NAME بیایید همه متغیرهای ورودی را تبدیل کنیم و تمام مقادیر تهی را به آن اضافه کنیم: )]'dataset=dataset.drop(columns=['NAME )'dataset= dataset.apply(pd.to_numeric, errors='coerce )dataset.fillna(0, inplace=True Imputationکیفیت داده ه ا را بهب ود می بخش د و آنه ا را ب رای اس تفاده ب رای آموزش مدل آماده می کند .حاال بیایید مرحله نهایی را ببینیم: بیایید داده ها را به پارتیشن های آزمون و آموزشی تقسیم کنیم: ‏from sklearn.model_selection import train_test_split #from sklearn.cross_validation import train_test_split ‏X_train, X_test, y_train, y_test = train_test_split(X, )y, test_size = 0.25, random_state = 0 این کد چهار ساختار داده زیر را ایجاد کرده است: : X_trainساختار داده ای حاوی ویژگی های داده های آموزشی : X_testساختار داده ای حاوی ویژگی های آزمون : y_trainبردار حاوی مقادیر برچسب در مجموعه داده آموزشی 284 : y_testبردار حاوی مقادیر برچسب در مجموعه داده آزمون حال بیایید از داده های آماده شده بر روی سه رگرسیون مختلف اس تفاده ک نیم ت ا بتوانیم عملکرد آنها را با هم مقایسه کنیم. رگرسیون خطی از بین تم ام تکنیک‌ه ای ی ادگیری ماش ینی ب ا نظ ارت ،الگ وریتم رگرس یون خطی ساده‌ترین الگوریتم برای درک است. ابتدا به رگرسیون خطی ساده نگاه می کنیم و سپس مفهوم را به رگرسیون خطی چندگانه گسترش می دهیم. رگرسیون خطی ساده در ساده ترین شکل ،رگرسیون خطی رابطه بین یک متغ یر مس تقل پیوس ته و ی ک متغیر مستقل پیوسته منفرد را فرمول ه می کن د .از ی ک رگرس یون (س اده) ب رای نشان دادن میزانی استفاده می شود که تغییرات در یک متغیر وابسته (نش ان داده شده در محور )yرا می توان به تغییرات یک متغیر توض یحی (نش ان داده ش ده در )xaxisنسبت داد. می توان آن را به صورت زیر نشان داد: این فرمول را می توان به صورت زیر توضیح داد: yمتغیر وابسته است. 285 Xمتغیر مستقل است. ‏ωشیبی است که نشان می دهد برای هر افزایش Xچقدر خط افزایش می یابد. αفاصله ای است که مقدار yرا در زمانی که X = 0نشان می دهد. چند نمونه از روابط بین یک متغیر وابسته پیوسته و یک متغیر مستقل پیوسته به شرح زیر است: ‏ وزن فرد و کالری دریافتی او ‏ قیمت خانه و مساحت آن بر حسب فوت مربع در یک محله خاص ‏ رطوبت هوا و احتمال بارندگی برای رگرسیون خطی ،هم متغیر ورودی (مستقل) و هم متغیر هدف (وابسته) بای د عددی باشند. بهترین رابطه با به حداقل رساندن مجموع مجذورات فواصل عمودی ه ر نقط ه از یک خط کشیده شده از میان تمام نقاط بدس ت می آی د .ف رض ب ر این اس ت ک ه رابطه بین متغیر پیش بینی کننده و برچسب خطی است .به عن وان مث ال ،ه ر چ ه پ ول بیش تری در تحقی ق و توس عه س رمایه گ ذاری ش ود ،ف روش ب االتری خواه د داشت .بیایید به یک مثال خاص نگاه کنیم .بیایید سعی کنیم رابط ه بین هزین ه ه ای بازاریابی و فروش را برای یک محص ول خ اص فرم ول بن دی ک نیم .آنه ا ب ه ط ور مستقیم با یکدیگر در ارتباط هس تند .هزین ه ه ای بازاری ابی و ف روش ب ر روی ی ک نمودار دو بعدی ترسیم شده و به صورت الم اس آبی نش ان داده ش ده اس ت .این رابطه را می توان با ترسیم یک خط مستقیم ،مانند نمودار زیر ،تقریب زد: 286 شکل :11-7رگرسیون خطی هنگامی که خط رگرسیون خطی ترسیم شد ،می توانیم رابط ه ریاض ی بین هزین ه های بازاریابی و فروش را مشاهده کنیم. ارزیابی رگرسیون خط رگرسیون خطی ک ه رس م ک ردیم تقری بی از رابط ه بین متغیره ای وابس ته و مستقل است .حتی بهترین خ ط دارای مق داری انح راف از مق ادیر واقعی خواه د بود ،همانطور که نشان داده شده است: 287 شکل :12-7ارزیابی رگرسیون یک روش معمولی برای محاسبه عملکرد مدل های رگرسیون خطی ب ا اس تفاده از ریشه میانگین مربعات خطا ( )RMSEاست .این انحراف استاندارد ،خطاهای ایج اد شده توسط مدل آموزش دیده را به صورت ریاض ی محاس به می کن د .ب ه عن وان مثال ،در مجموعه داده آموزشی ،تابع زیان به صورت زیر محاسبه می شودLoss : (ý(i), y(i)) = 1/2(ý(i)- y(i))2این فرمول منجر به تابع هزینه زیر می شود ، .که زیان تمام نمونه های مجموعه آموزشی را به حداقل می رساند: بیایید سعی کنیم RMSEرا تفسیر کنیم .اگ ر RMSEب رای م دل مث ال م ا 50دالر باشد که قیمت ی ک محص ول را پیش‌بی نی می‌کن د ،ب ه این مع نی اس ت ک ه ح دود 288 ٪68.2از پیش‌بینی‌ها در 50دالر ارزش واقعی (یعنی )αق رار می‌گیرن د .همچ نین ب ه این مع نی اس ت ک ه ٪95از پیش بی نی ه ا در 100دالر (یع نی )2αاز ارزش واقعی قرار می گیرن د .در نه ایت ٪99.7 ،از پیش بی نی ه ا در 150دالر از ارزش واقعی قرار می گیرند. رگرسیون چندگانه واقعیت این است که بیشتر تحلی ل ه ای دنی ای واقعی بیش از ی ک متغ یر مس تقل دارند .رگرسیون چندگانه بس ط رگرس یون خطی س اده اس ت .تف اوت اص لی این است که ضرایب بتا اضافی برای متغیره ای پیش بی نی اض افی وج ود دارد .هنگ ام آموزش یک مدل ،هدف یافتن ضرایب بت ا اس ت ک ه خطاه ای معادل ه خطی را ب ه حداقل می رساند .بیایید سعی کنیم رابطه بین متغیر وابسته و مجموع ه متغیره ای مستقل (ویژگی ها) را به صورت ریاضی فرمول ه ک نیم .مش ابه ی ک معادل ه خطی ساده ،متغیر وابسته ،y ،به عنوان مجموع یک جمله ثابت ب ه اض افه حاص ل ض رب ضرایب βمحاسبه می شود .ضرب در مقدار xبرای هر یک از ویژگی های = i: y . α + β 1 x 1 + β 2 x 2 +...+ β i x i + εخطا با εنمایش داده می شود و نشان می دهد که پیش بینی ها کامل نیستند .ض رایب βب ه ه ر وی ژگی اج ازه می دهد تا اثر تخمینی جداگانه ای روی مقدار yداشته باشد زیرا yبا مق دار β iب رای هر واحد افزایش در xiتغییر می کند .عالوه بر این ،فاصله ( )αمقدار مورد انتظ ار yرا زمانی نشان می‌دهد که متغیرهای مستقل همه 0باش ند .توج ه داش ته باش ید ک ه هم ه متغیره ای معادل ه قبلی را می‌ت وان ب ا دس ته‌ای از برداره ا نش ان داد. متغیره ای ه دف و پیش بی نی اکن ون برداره ایی ب ا ی ک ردی ف هس تند و ض رایب رگرسیون ،β ،و خطاها ، εنیز بردار هستند. استفاده از الگوریتم رگرسیون خطی برای چالش های رگرسیون 289 حاال بیایید مدل را با استفاده از بخش آموزشی مجموعه داده ،آموزش دهیم: .1بیایید با وارد کردن بسته رگرسیون خطی شروع کنیم: ‏from sklearn.linear_model import LinearRegression سپس ،بیایید مدل رگرسیون خطی را مثال بزنیم و آن را با استفاده از مجموعه داده آموزشی آموزش دهیم: )(regressor = LinearRegression )regressor.fit(X_train, y_train حال ،بیایید نتایج را با استفاده از بخش آزمون مجموعه داده پیش بینی کنیم: )y_pred = regressor.predict(X_test ‏from sklearn.metrics import mean_squared_error ‏from math import sqrt ))sqrt(mean_squared_error(y_test, y_pred خروجی تولید شده با اجرای کد قبلی ،موارد زیر را ایجاد می کند: همانطور که در بخش قبل بحث ش د RMSE ،انح راف اس تاندارد خط ا اس ت .این نشان می دهد ک ه ٪68.2از پیش بی نی ه ا در 4.36از مق دار برچس ب ق رار می گیرند. 290 چه زمانی از رگرسیون خطی استفاده می شود؟ رگرسیون خطی ب رای ح ل بس یاری از مس ائل دنی ای واقعی از جمل ه م وارد زی ر استفاده می شود: ‏ پیش بینی فروش ‏ پیش بینی قیمت بهینه محصوالت ‏ محاسبه رابطه علی بین یک رویداد و پاسخ ،مانند آزمایش ات دارویی ب الینی، تست های ایمنی مهندسی ،یا تحقیقات بازاریابی ‏ شناسایی الگوهایی ک ه می‌توانن د ب رای پیش‌بی نی رفت ار آین ده ،ب ا توج ه ب ه معیارهای شناخته شده م ورد اس تفاده ق رار گیرن د -ب رای مث ال ،پیش‌بی نی خسارت بیمه ،خسارت بالیای طبیعی ،نتایج انتخابات ،و میزان جرم و جنایت نقاط ضعف رگرسیون خطی نقاط ضعف رگرسیون خطی به شرح زیر است: ‏ فقط با ویژگی های عددی کار می کند. ‏ داده های موضوعی باید از قبل پردازش شوند. ‏ به خوبی با داده های گمشده کنار نمی آید. ‏ در مورد داده ها مفروضاتی ایجاد می کند. الگوریتم درخت رگرسیون الگوریتم درخت رگرسیون مشابه الگوریتم درخت طبقه بندی است ،ب ا این تف اوت که برچسب یک متغیر پیوسته است ،نه یک متغیر گسسته. استفاده از الگوریتم درخت رگرسیون برای چالش های رگرسیون 291 در این بخش ،خواهیم دید که چگونه می ت وان از الگ وریتم درخت رگرس یون ب رای چالش رگرسیون استفاده کرد: . 1ابتدا مدل را با استفاده از الگوریتم درخت رگرسیون آموزش می دهیم: هنگامی که مدل درخت رگرسیون آموزش داده ش د ،از م دل آم وزش دی ده ب رای پیش بینی مقادیر استفاده می کنیم: )y_pred = regressor.predict(X_test سپس RMSE ،را برای عملکرد مدل محاسبه می‌کنیم: ‏from sklearn.metrics import mean_squared_error ‏from math import sqrt ))sqrt(mean_squared_error(y_test, y_pred خروجی زیر را دریافت می کنیم: الگوریتم رگرسیون تقویت گرادیان 292 بیایید اکنون به الگوریتم رگرس یون تق ویت گرادی ان نگ اه ک نیم .از مجموع ه ای از درختان تص میم در تالش ب رای فرمول ه ک ردن به تر الگوه ای اساس ی در داده ه ا استفاده می کند. استفاده از الگوریتم رگرسیون تقویت گرادیان برای چالش رگرسیون در این بخش ،خ واهیم دی د ک ه چگون ه می ت وانیم از الگ وریتم رگرس یون تق ویت گرادیان برای چالش رگرسیون استفاده کنیم: . 1ابتدا مدل را با استفاده از الگوریتم رگرسیون تقویت گرادیان آموزش می دهیم: هنگ امی ک ه م دل الگ وریتم رگرس یون گرادی ان آم وزش داده ش د ،از آن ب رای پیش‌بینی مقادیر استفاده می‌کنیم: )y_pred = regressor.predict(X_test 293 در نهایت ،ما RMSEرا برای محاسبه عملکرد مدل محاسبه می‌کنیم: ‏from sklearn.metrics import mean_squared_error ‏from math import sqrt ))sqrt(mean_squared_error(y_test, y_pred اجرای این مقدار خروجی را به صورت زیر به ما می دهد: برای الگوریتم های رگرسیون ،برنده است بیایید به عملک رد س ه الگ وریتم رگرس یون ک ه در داده‌ه ای مش ابه و دقیق ا ً م ورد استفاده یکسان استفاده کردیم نگاه کنیم: ‏RMSE الگوریتم رگرسیون خطی 4.36214129677179 درخت رگرسیون 5.2771702288377 رگرسیون تقویت گرادیان 4.034836373089085 ب ا نگ اهی ب ه عملک رد هم ه الگوریتم‌ه ای رگرس یون ،ب دیهی اس ت ک ه عملک رد رگرسیون تقویت گرادیان بهترین است زی را کم ترین RMSEرا دارد .ب ه دنب ال آن رگرس یون خطی انج ام می ش ود .الگ وریتم درخت رگرس یون ب دترین عملک رد را برای این مسئله دارد. مثال عملی – چگونه آب و هوا را پیش بینی کنیم 294 بیایید ببینیم چگونه می توانیم از مفاهیم توسعه یافته در این فصل ب رای پیش بی نی آب و ه وا اس تفاده ک نیم .بیایی د ف رض ک نیم ک ه می‌خ واهیم ب ر اس اس داده‌ه ای جمع‌آوری‌شده در طول یک سال برای یک شهر خاص ،پیش‌بینی ک نیم ک ه آی ا ف ردا باران خواهد بارید یا خیر .داده‌های موجود برای آموزش این مدل در فای ل CSVب ه نام weather.csvاست: .1بیایید داده ها را به عنوان یک قاب داده pandaوارد کنیم: ‏import numpy as np ‏import pandas as pd )"df = pd.read_csv("weather.csv بیایید به ستون های قاب داده نگاه کنیم: در مرحله بعد ،بیایید به سربرگ 13ستون اول داده های weather.csvنگاه کنیم: 295 اکنون ،اجازه دهید به 10ستون آخر داده های weather.csvنگاه کنیم: بیایید از xبرای نمایش ویژگی های ورودی استفاده ک نیم .م ا فیل د ت اریخ را ب رای لیست ویژگی حذف می کنیم زیرا در زمینه پیش بینی ها مفید نیس ت .م ا همچ نین برچسب RainTomorrowرا حذف می کنیم: )x = df.drop(['Date','RainTomorrow'],axis=1 بیایید از yبرای نشان دادن برچسب استفاده کنیم: ]'y = df['RainTomorrow حاال بیایید داده ها را به train_test_splitتقسیم کنیم: 296 from sklearn.model_selection import train_test_split = train_x , train_y ,test_x , test_y = train_test_split(x,y , test_size = 0.2,random_state )2 از آنجایی که برچسب یک متغیر دودویی اس ت ،م ا در ح ال آم وزش ی ک طبقه‌بن د هستیم .بنابراین ،رگرسیون لجستیک در اینجا انتخاب خوبی خواهد بود. ابتدا بیایید مدل رگرسیون لجستیک را مثال بزنیم: )(model = LogisticRegression اکنون می توانیم از train_xو test_xبرای آموزش مدل استفاده کنیم: )model.fit(train_x , test_x پس از آموزش مدل ،بیایید از آن برای پیش بینی استفاده کنیم: )predict = model.predict(train_y اکنون ،بیایید دقت مدل آموزش دیده خود را پیدا کنیم: 297 اکنون می توان از این طبقه بند دودویی برای پیش بینی بارندگی فردا استفاده کرد. خالصه در این فصل ،با نگاهی به اصول یادگیری ماشینی با نظارت شروع ک ردیم .س پس، الگوریتم‌های طبقه‌بندی مختلف را با جزئی ات بیش تری بررس ی ک ردیم .در مرحل ه بع د ،روش‌ه ای مختلفی را ب رای ارزی ابی عملک رد طبقه‌بن د‌ها بررس ی ک ردیم و الگوریتم‌های رگرسیون مختلف را مطالعه کردیم .ما همچنین روش‌ه ای مختلفی را که می‌توان برای ارزیابی عملکرد الگوریتم‌هایی که مورد مطالعه قرار دادیم ،م ورد بررسی قرار دادیم .در فصل بعدی ،به ش بکه‌های عص بی و الگوریتم‌ه ای ی ادگیری عمیق خواهیم پرداخت .ما به روش های م ورد اس تفاده ب رای آم وزش ی ک ش بکه عص بی و همچ نین ب ه ابزاره ا و چ ارچوب ه ای مختل ف موج ود ب رای ارزی ابی و استقرار یک شبکه عصبی نگاه خواهیم کرد. 298 8الگوریتم های شبکه عصبی "هیچ الگوریتمی برای طنز وجود ندارد" -- .رابرت منکف ترکی بی از عوام ل مختل ف ،ش بکه‌های عص بی را ب ه یکی از مهم‌ت رین تکنیک‌ه ای یادگیری ماشین تبدیل کرده است .این عوامل عبارتند از :نیاز به حل مسائل پیچیده تر ،انفجار داده ها ،و ظهور فناوری هایی مانند محاسبات ابری که قدرت محاسباتی الزم برای طراحی و استفاده از الگوریتم های بسیار پیچی ده را ف راهم می کن د .در واقع ،شبکه های عصبی یک حوزه تحقیقاتی اس ت ک ه ب ه س رعت در ح ال تکام ل است و مسئول بسیاری از پیشرفت‌های عمده ادعا شده توسط حوزه‌های فن اوری پیشرفته مانند رباتیک ،محاسبات لبه ،پردازش زبان طبیعی ،و ماش ین‌های خ ودران است .این فصل ابتدا به معرفی مفاهیم و اجزای اصلی یک شبکه عص بی معم ولی پرداخته و سپس انواع مختلف شبکه های عصبی را ارائه کرده و انواع مختلف توابع فعال سازی مورد اس تفاده در این ش بکه ه ای عص بی را توض یح می ده د .س پس الگوریتم پس انتشار به تفصیل مورد بحث قرار می گیرد که پرکاربردترین الگوریتم برای آموزش شبکه عصبی اس ت .در ادام ه ،تکنی ک ی ادگیری انتق الی توض یح داده می‌شود که می‌توان از آن برای ساده‌سازی و تا حدی خودکارسازی آموزش مدل‌ها استفاده کرد .در نهایت ،نحوه استفاده از یادگیری عمیق برای عالمت گذاری اس ناد تقلبی از طریق یک نمونه کاربردی در دنیای واقعی بررسی می‌شود .مفاهیم اصلی زیر در این فصل مورد بحث قرار گرفته‌اند: ‏ آشنایی با شبکه های عصبی ‏ سیر تکاملی شبکه های عصبی ‏ آموزش شبکه عصبی ‏ ابزارها و چارچوب ها ‏ یادگیری انتقالی 299  مطالعه موردی :استفاده از یادگیری عمیق برای کشف تقلب بیایید با نگاهی به اصول اولیه شبکه های عصبی شروع کنیم. تکامل شبکه های عصبی با نگاهی به ساختار یک شبکه عصبی مشاهده می کنیم ،واحد اصلی آن ی ک ن ورون است .قدرت واقعی شبکه عصبی در توانایی آن در استفاده از ق درت ن ورون ه ای متعدد با سازماندهی آنها در یک معماری الیه ای نهفته است .ی ک ش بکه عص بی ب ا زنجیر کردن نورون ها به یکدیگر در الیه های مختلف ،یک معماری الیه ای ایجاد می کند .سیگنالی از این الیه ها عب ور می کن د و در ه ر ی ک از الی ه ه ا ب ه روش ه ای مختلف پردازش می شود تا خروجی مورد نیاز نهایی تولی د ش ود .هم انطور ک ه در این فص ل خ واهیم دی د ،الیه‌ه ای پنه ان اس تفاده ش ده توس ط ش بکه‌های عص بی به‌عنوان الیه‌های انتزاع عمل می‌کنند و یادگیری عمیق را امکان‌پذیر می‌کنند ،که ب ه طور گس ترده در تحق ق برنامه‌ه ای قدرتمن دی مانن د الکس ای آم ازون ،جس تجوی تصویر گوگل و Google Photosاستفاده می‌شود. تاریخچه با الهام از کار نورون ها در مغز انسان ،مفهوم ش بکه ه ای عص بی توس ط فران ک روزنبالت در سال 1957ارائ ه ش د .ب رای درک کام ل معم اری ،نگ اهی کوت اه ب ه ساختار الیه ای نورون ها در مغز انسان مفید است( .به شکل 1-8مراجعه کنی د ت ا ایده ای در مورد نحوه زنجیر شدن نورون های مغز انسان به هم پیدا کنید ).در مغز انسان ،دندریت ها به عنوان حسگرهایی عمل می کنند که سیگنال را تش خیص می دهند .سپس سیگنال به آکسون ارسال می‌شود که یک برآمدگی بلند و باریک از یک سلول عصبی است .وظیفه آکسون انتق ال این س یگنال ب ه عض الت ،غ دد و س ایر نورون ها است .همانطور که در نمودار زیر نشان داده شده است ،سیگنال قب ل از 300 اینکه به نورون های دیگر منتقل شود از طریق بافت متصل به هم به ن ام س یناپس حرکت می کند .توجه داشته باشید که از طریق این خط لوله ارگانیک ،س یگنال ب ه حرکت خود ادامه می دهد تا زمانی که به عضله یا غده هدف برسد ،جایی که باعث عمل م ورد نی از می ش ود .معم وال ً هفت ت ا هش ت میلی ثانی ه ط ول می کش د ت ا سیگنال از زنجیره نورون ها عبور کند و به مقصد برسد: شکل :1-8نورون زنجیر شده در مغز انسان فرانک روزنبالت با الهام از این شاهکار معماری طبیعی پ ردازش س یگنال ،تک نیکی را ابداع کرد که به این معنی اس ت ک ه اطالع ات دیجیت ال را می ت وان در الی ه ه ا برای حل یک مسئله پیچیده ریاضی پردازش کرد .تالش اولیه او ب رای ط راحی ی ک شبکه عصبی بسیار ساده ب ود و ش بیه ی ک م دل رگرس یون خطی ب ود .این ش بکه عصبی ساده هیچ الیه پنهانی نداش ت و پرس پترون ن ام گ رفت .ی ک ش بکه عص بی ساده بدون هیچ الیه ای به نام پرسپترون و تبدیل به واحد اصلی شبکه های عص بی شد. زمستان هوش مصنوعی و طلوع بهار هوش مصنوعی متأسفانه ،هنگامی که تمام هیجانات نسبت به پرسپترون پیش نهادی ک اهش ی افت، تجزیه و تحلیل دقیق و جزئی پرسپترون دارای محدودیت ه ای ج دی ب ود .در س ال 301 ،1969ماروین مینسکی و سیمور پاپرت روی تحقیقاتی کار کردند که به این نتیج ه رسیدند که پرسپترون قادر به یادگیری هیچ منطق پیچیده ای نیس ت .در واق ع ،آنه ا نشان دادند که یادگیری توابع منطقی به سادگی XORبرای ی ک پرس پترون س خت است .این کار منجر به کاهش عالقه به یادگیری ماشین به طور کلی و ش بکه ه ای عصبی به طور خاص شد و عصری را آغاز کرد که اکنون به عنوان زمس تان ه وش مصنوعی شناخته می شود .محقق ان در سراس ر جه ان ه وش مص نوعی را ج دی نمی‌گیرند و فکر می‌کنند ک ه این ه وش مص نوعی ق ادر ب ه ح ل مش کالت پیچی ده نیس ت .ب ا نگ اهی ب ه گذش ته ،یکی از دالی ل اص لی ب ه اص طالح زمس تان ه وش مصنوعی ،محدودیت قابلیت های سخت افزاری موجود در آن زمان ب ود .ی ا ق درت محاسباتی الزم در دسترس نبود ،یا بسیار گران بود .در اواخر دهه 1990یک تغی یر جزر و مدی در مورد تصویر هوش مصنوعی و پتانسیل درک شده آن وجود داش ت. کاتالیزور این تغییر ،پیشرفت در محاسبات توزیع شده ب ود ک ه زیرس اخت ه ای ب ه راحتی در دسترس و مقرون به صرفه را فراهم ک رد .ب ا دی دن پتانس یل ،غول‌ه ای فناوری اطالعات آن زمان (مانند گوگل) که به تازگی تاجگذاری کرده بودن د ،ه وش مصنوعی را به عنوان تمرکز تالش‌ه ای تحقی ق و توس عه خ ود ق رار دادن د .عالق ه مجدد به هوش مصنوعی منجر به گرم شدن زمستان موسوم ب ه ه وش مص نوعی شد .گرم شدن تحقیقات ،هوش مصنوعی را تقویت ک رد .این در نه ایت منج ر ب ه تبدیل دوره فعلی به دوره ای شد که می ت وان آن را به ار ه وش مص نوعی نامی د، جایی که عالقه زیادی به هوش مصنوعی و شبکه های عصبی وجود دارد. آشنایی با شبکه های عصبی ابتدا اجازه دهید با قلب شبکه عصبی ،پرسپترون شروع کنیم .ش ما می توانی د ی ک پرسپترون را به عنوان ساده ترین ش بکه عص بی ممکن در نظ ر بگیری د ک ه بل وک ساختار اصلی معماری های چند الیه پیچیده مدرن را تشکیل می دهد .اجازه دهید با درک عملکرد یک پرسپترون شروع کنیم. 302 درک پرسپترون یک پرسپترون منفرد چندین ورودی و یک خ روجی دارد ک ه توس ط ی ک ت ابع فع ال سازی کنترل یا فعال می شود. در شکل 2-8نشان داده شده است. شکل :2-8پرسپترون پرسپترون نشان داده شده در شکل 2-8دارای سه ویژگی ورودی اس تx1، x2 . و .x3ما همچنین ی ک س یگنال ث ابت ب ه ن ام بای اس اض افه می ک نیم .ویژگی‌ه ای ورودی و بایاس در وزن‌ها ضرب می‌شوند و به صورت جمع وزنی خالصه می‌شوند بنابراین مجموع وزنی به تابع فعال سازی منتقل می ش ود ک ه خ روجی yرا تولی د می کند .توانایی استفاده از طیف گسترده ای از توابع فع ال س ازی ب رای فرمول ه 303 کردن روابط پیچیده بین ویژگی ه ا و برچس ب ه ا یکی از نق اط ق وت ش بکه ه ای عصبی است .تنوع توابع فعال سازی از طریق فراپارامترها قابل انتخاب است. درک شهود پشت شبکه های عصبی در فصل قبل ،ب رخی از الگوریتم‌ه ای ی ادگیری ماش ین س نتی را م ورد بحث ق رار دادیم .این الگوریتم‌های ی ادگیری ماش ین س نتی ب رای بس یاری از م وارد اس تفاده مهم ،عالی عمل می‌کنند .اما آنها محدودیت ه ایی ن یز دارن د .زم انی ک ه الگوه ای خط‌دار در مجموعه داده آموزشی شروع به غیرخطی و چند بع دی ش دن می‌کنن د، شروع به فراتر رفتن از قابلیت‌های الگوریتم‌های یادگیری ماشین س نتی می‌کن د ت ا رواب ط پیچی ده بین ویژگی‌ه ا و برچس ب را به‌ط ور دقی ق ثبت کن د .این فرمول‌بندی‌های ریاضی تا ح دی س اده و غ یر ج امع از الگوه ای پیچی ده منج ر ب ه عملکرد غیربهینه مدل‌های آموزش‌دیده برای این موارد استفاده می‌شود .در دنی ای واقعی در بسیاری از م وارد اس تفاده ،رابط ه بین برچس ب و وی ژگی ها ،الگوه ای پیچیده تری را نشان می دهد .شبکه‌های عصبی به کمک می‌آیند و گزینه‌ای قدرتمند برای آموزش مدل‌ها با برخی محدودیت‌هایی که بعدا ً در این فصل مورد بحث ق رار می‌گیرند ،به ما می‌دهند .اجازه دهی د ب رخی از الگوه ای رایج و چالش‌ه ایی را ک ه آنها برای الگوریتم‌های یادگیری ماشینی ساده‌تر مانند الگوریتم‌ه ای اس تفاده ش ده توسط رگرسیون خطی ایجاد می‌کنند ،درک کنیم .فرض کنید که می‌خواهیم حق وق یک دانشمند داده را با استفاده از «س ال‌های ص رف ش ده در آم وزش» پیش‌بی نی ک نیم .م ا دو مجموع ه داده متف اوت داریم ک ه از دو س ازمان مختل ف جمع‌آوری شده‌اند .مجموعه داده ،1شکل :)a(3-8این یک رابطه نس بتا ً س اده بین وی ژگی و برچسبی است که خطی بودن را نشان می‌دهد .اما هنگام تالش برای فرمول‌بن دی ریاضی آن از طریق یک الگوریتم خطی ،دو چالش در این الگوی ساده وج ود دارد: اول ،می‌دانیم که حقوق نمی‌تواند منفی باشد .این بدان معناست که صرف نظر از مقدار ( xیعنی حق وق) y ،نمی توان د منفی باش د .ب ه نظ ر می رس د ح داقل ی ک 304 دانش مند داده ج وان وج ود دارد ک ه ش اید ب ه ت ازگی ب ا x1س ال تحص یلی ف ارغ التحص یل ش ده باش د و بن ابراین حق وقش ص فر باش د ،ش اید در ح ال ک ارآموزی باشد . .بنابراین برای مقادیر xاز 0تا x1مقدار yصفر می ماند .شکل )a(3-8را ببینید .همانطور که بعدا خواهیم دید که از طریق تابع فعالسازی خطی اصالح ش ده موجود در ش بکه عص بی ،م ا ق ادر خ واهیم ب ود رواب ط پیچی ده ای مانن د این ،بین برچسب و ویژگی را ثبت کنیم .مجموع ه داده ،2ش کل :)b(3-8غ یر خطی ب ودن رابطه بین ویژگی و برچسب را نشان می دهد ،ب ه ش کل (3-8ب) مراجع ه کنی د. دستمزد برچسب ( 0 )yباقی می ماند زیرا xاز 0تا x1تغییر می کن د .ب ا نزدی ک شدن مقدار xبه x2نسبت آن به شدت افزایش می یابد .اما ،با افزایش مق دار y به باالی ،x2مقدار yهموار می شود .همانطور که بعدا خواهیم دی د ک ه از طری ق تابع فع ال س ازی س یگموید ،می ت وانیم در حین اس تفاده از ش بکه عص بی ،چ نین روابطی را درک کنیم. شکل :3-8حقوق ~ سال های تحصیل 305 مجموعه داده :1الگوهای خطی (ب) مجموعه داده :2الگوهای غیر خطی آشنایی با معماری های یادگیری عمیق الیه ای برای مسائل پیچیده تر ،محققان یک شبکه عصبی چند الیه ب ه ن ام پرس پترون چن د الیه ایجاد کرده اند .یک شبکه عصبی چند الیه دارای چند الیه مختل ف اس ت ک ه در نمودار زیر نشان داده شده است .این الیه ها به شرح زیر است: الیه ورودی :اولین الی ه ،الی ه ورودی اس ت .در الی ه ورودی ،مق ادیر وی ژگی ب ه عنوان ورودی به شبکه تغذیه می شود. الیه(های مخفی) :الیه ورودی توسط یک یا چند الیه پنه ان دنب ال می ش ود .ه ر الیه پنهان آرایه هایی از تابع فعال سازی مشابه هستند. الیه خروجی :الیه نهایی ،الیه خروجی نامیده می شود. یک شبکه عصبی ساده یک الیه پنهان خواهد داشت .شبکه عصبی عمیق ،یک ش بکه عصبی با دو یا چند الیه پنهان است .شکل ( )4-8را ببینید 306 شکل :4-8شبکه عصبی ساده و شبکه عصبی عمیق در مرحله بعد ،اجازه دهید سعی کنیم عملکرد الیه های پنهان را درک کنیم. توسعه شهود برای الیه های پنهان برای ایجاد درک عمیق تر در مورد چگونگی ترکیب و انتزاع الیه های پنه ان وی ژگی های ورودی ،اجازه دهید مسئله پیش بینی حق وق دانش مند داده را دوب اره در نظ ر بگیریم .فرض کنید پنج ویژگی ورودی داریم )1 :تجربه شغلی )2سال های تحص یل )3مهارت های )SQL 4مهارت های برنامه نویس ی و )5دانش الگ وریتمی .ب رای درک شهود پشت الیه های پنهان ،ما روی الیه پنهان با سه گره ایجاد کرده ایم .گره ها ورودی اولین گره الیه پنهان ،تجربه شغلی و سال‌های تحصیل است .گ ره ب االی الیه پنهان یک گره واحد را ارائه می دهد که اثر ترکیب این دو متغیر را انتزاعی می کند .ما آن را به عنوان "پس زمینه" نام گذاری ک رده ایم .ورودی گ ره می انی الی ه های مخفی مه ارت ه ای SQLو مه ارت ه ای برنام ه نویس ی اس ت و ب ه عن وان مهارتهای مهندسی داده نامگ ذاری می ش ود .گ ره س وم الی ه پنه ان دارای ورودی هایی به عنوان مهارت های برنام ه نویس ی و دانش الگ وریتمی اس ت و ب ه عن وان مهارت های یادگیری ماشین نامگذاری می شود. 307 شکل :5-8حل مسئله با استفاده از چندین الیه از چند الیه پنهان باید استفاده کرد؟ توجه داشته باشید که تعداد بهین ه الی ه ه ای پنه ان از مس ئله ای ب ه مس ئله دیگ ر متفاوت است .برای برخی مسائل باید از شبکه های عصبی تک الیه استفاده ش ود. برای مسائل دیگر ما باید چندین الیه برای به ترین عملک رد اض افه ک نیم .ب ه ط ور کلی ،این بس تگی ب ه پیچی دگی الگوه ای ذاتی داده‌ه ا دارد ک ه م ا در تالش ب رای فرمول‌بندی با استفاده از ش بکه‌های عص بی هس تیم .ب رای مس ائلی ک ه الگوه ای ساده را نشان می دهند ،استفاده از تعداد زیادی از الیه ه ای پنه ان منج ر ب ه بیش برازش می شود .از سوی دیگر ،اگر با مسائل پیچیده ای سر و کار داش ته باش یم، تعداد کمی از الیه های پنهان ممکن اس ت نتوانن د الگوه ا را ب ه ط ور کام ل ثبت و فرموله کنند که منجر به مدلی کم برازش می شود .تجزیه و تحلیل دقیق مس ئله و آزمایش با یک مدل تجربی پایه به ما کمک می کن د ت ا تع داد مناس بی از الی ه ه ای پنهان را پیدا کنیم. 308 مبانی ریاضی شبکه عصبی شکل :6-8یک پرسپترون چند الیه نکته مهمی که باید به آن توجه داشت این است که ن ورون واح د اص لی این ش بکه نورون یک الیه به تمام نورون های الیه بعدی متصل است .ب رای ش بکه است و هر ِ های پیچیده ،تع داد این اتص االت منفج ر می ش ود و م ا راه ه ای مختلفی را ب رای کاهش این اتصاالت بدون از دس ت دادن کیفیت زی اد بررس ی خ واهیم ک رد .ابت دا، بیایید سعی کنیم مسئله ای را که می خواهیم حل کنیم ،فرمول بندی ک نیم .ورودی یک بردار ویژگی ، xبه ابعاد nاس ت .م ا از ش بکه عص بی می خ واهیم مق ادیر را پیش بینی کند .مقادیر پیش‌بینی‌شده با ýنشان داده می‌شوند .از نظر ریاض ی ،م ا می‌خواهیم با توجه به یک ورودی خاص ،احتمال جعلی بودن ی ک ت راکنش را تع یین کنیم .به عبارت دیگر ،با توجه به مقدار خاص ی از ،xاحتم ال اینک ه y = 1باش د چقدر است؟ از نظر ریاضی ،می توانیم این را به صورت زیر نشان دهیم: 309 توجه داشته باشید که xیک بردار -nxبعدی اس ت ک ه nxتع داد متغیره ای ورودی است .این شبکه عصبی دارای چهار الیه است .الیه های بین ورودی و خروجی الیه های پنهان هستند .تعداد نورون ها در اولین الیه پنهان با ) n (hiنشان داده می شود پیوندهای بین گره های مختلف با پارامترهایی به نام وزن ضرب می شوند .آموزش یک شبکه عصبی در مورد یافتن مقادیر مناسب ب رای وزن ه ا اس ت .بیایی د ببی نیم چگونه می توانیم یک شبکه عصبی را آموزش دهیم. آموزش شبکه عصبی فرآیند ساخت یک شبکه عصبی با استفاده از مجموعه داده معین ،آم وزش ش بکه عصبی نامیده می شود .بیایید به آناتومی ی ک ش بکه عص بی معم ولی نگ اه ک نیم. وقتی در مورد آموزش شبکه عص بی ص حبت می ک نیم ،در م ورد محاس به به ترین مقادیر برای وزن ه ا ص حبت می ک نیم .آم وزش ب ه ص ورت مک رر ب ا اس تفاده از مجموعه ای از مثال ها در قالب داده ه ای آموزش ی انج ام می ش ود .نمون ه ه ای موجود در داده های آموزشی دارای مقادیر مورد انتظار خروجی برای ت رکیب ه ای مختلف مقادیر ورودی هستند .فرآیند آم وزش ش بکه‌های عص بی ب ا روش آم وزش مدل‌های سنتی متفاوت اس ت (ک ه در فص ل ،7الگوریتم‌ه ای ی ادگیری ب ا نظ ارت سنتی مورد بحث قرار گرفت). آشنایی با آناتومی یک شبکه عصبی بیایید ببینیم یک شبکه عصبی از چه عناصری تشکیل شده است: 310 الیه ها :الیه ها بلوک های اصلی ی ک ش بکه عص بی هس تند .ه ر الی ه ی ک م اژول پردازش داده است که به عنوان ی ک فیل تر عم ل می کن د .ی ک ی ا چن د ورودی می گیرد ،آن را به روشی خاص پردازش می کند و سپس یک یا چند خروجی تولی د می کند .هر بار که داده ها از یک الی ه عب ور می کنن د ،از مرحل ه پ ردازش می گ ذرد و الگوهایی را نشان می دهد که مربوط به سؤال تجاری است که ما س عی داریم ب ه آن پاسخ دهیم. تابع زیان :یک ت ابع زی ان س یگنال ب ازخوردی را ارائ ه می ده د ک ه در تکراره ای مختلف فرآیند یادگیری اس تفاده می ش ود .ت ابع زی ان انح راف را ب رای ی ک مث ال فراهم می کند. تابع هزینه :تابع هزینه تابع زیان در مجموعه کاملی از مثال ها است. بهینه ساز :بهینه ساز تعیین می کند که سیگنال بازخورد ارائ ه ش ده توس ط ت ابع زیان چگونه تفسیر شود. داده های ورودی :داده های ورودی داده هایی هس تند ک ه ب رای آم وزش ش بکه عصبی استفاده می شود و متغیر هدف را مشخص می کند. وزن ها :وزن ها با آموزش ش بکه محاس به می ش وند .وزن ه ا تقریب ا ً ب ا م یزان اهمیت هر یک از ورودی ها مطابقت دارند .به عنوان مث ال ،اگ ر ی ک ورودی خ اص مهمتر از سایر ورودی ها باشد ،پس از آموزش ،وزن بیشتری به آن داده می ش ود و به عنوان یک ضریب عم ل می کن د .ح تی ی ک س یگنال ض عیف ب رای آن ورودی مهم ،قدرت را از مقدار وزن زیاد (که به عن وان ی ک ض ریب عم ل می کن د) جم ع آوری می کند .بنابراین وزن هر یک از ورودی ها را با توجه به اهمیت آنها تغی یر می دهد. تابع فعال سازی :مقادیر در وزن های مختل ف ض رب می ش وند و س پس جم ع می شوند .اینکه دقیقا ً چگونه آنها جمع می ش وند و چگون ه مق دار آنه ا تفس یر می شود با توجه به نوع تابع فعال سازی انتخاب شده تعیین می شود. 311 حال بیایید نگاهی به جنبه بسیار مهم آموزش شبکه ه ای عص بی بین دازیم .در حین آموزش شبکه های عصبی ،هر یک از مثال ها را یکی یکی می آوریم .برای ه ر ی ک از مثال‌ها ،خروجی را با استفاده از مدل زیرِ آموزش ،تولید می‌کنیم .ما تفاوت بین خروجی مورد انتظار و خروجی پیش بینی شده را محاسبه می کنیم. ب رای ه ر نمون ه جداگان ه ،این تف اوت ،زی ان نامی ده می ش ود .در مجم وع ،زی ان مجموعه داده آموزشی کامل ،هزینه نامیده می شود .همانطور که به آموزش م دل ادامه می‌دهیم ،هدف ما یافتن مقادیر مناسب وزن‌ه ا اس ت ک ه منج ر ب ه کم ترین مقدار زیان می‌شود .در طول آموزش ،ما به تنظیم مقادیر وزن ها ادام ه می دهیم تا زمانی که مجموعه ای از مقادیر وزن ها را پیدا کنیم که منج ر ب ه ح داقل هزین ه کلی ممکن می شود .هنگ امی ک ه ب ه ح داقل هزین ه رس یدیم ،م دل را ب ه عن وان آموزش دیده ،عالمت گذاری می کنیم. تعریف نزول گرادیان هدف از آموزش مدل شبکه عصبی ،یافتن مقادیر مناسب برای وزن ه ا اس ت .م ا شروع به آموزش یک شبکه عصبی با مقادیر تصادفی یا پیش ف رض ب رای وزن ه ا می کنیم .سپس ،ما به طور مکرر از یک الگوریتم بهینه ساز ،مانند ن زول گرادی ان، استفاده می کنیم تا وزن ها را به گونه ای تغییر دهیم که پیش بی نی ه ای م ا بهب ود یابد .نقطه شروع یک الگوریتم نزولی گرادیان ،مقادیر تصادفی وزن هایی است ک ه باید در حین تکرار الگوریتم بهینه شوند .در هر یک از تکرارهای بع دی ،الگ وریتم ب ا تغییر مقادیر وزن ها به گونه ای پیش می رود که هزین ه ب ه ح داقل برس د .نم ودار زیر منطق الگوریتم نزول گرادیان را توضیح می دهد: 312 شکل :7-8الگوریتم نزول گرادیان در نم ودار قبلی ،ورودی ،ب ردار وی ژگی Xاس ت .مق دار واقعی متغ یر ه دف Yو مقدار پیش‌بینی‌شده متغیر هدف ’Yاست .ما انحراف مقدار واقعی از مقادیر پیش بینی شده را حساب می کنیم .وزن ها را به روز می کنیم و مراحل را تا زمانی ک ه هزینه به حداقل برسد تکرار می کنیم .نحوه تغییر وزن در هر تکرار الگوریتم ب ه دو عامل زیر بستگی دارد: ‏ جهت :برای به دست آوردن حداقل تابع زیان به کدام جهت باید رفت ‏ نرخ یادگیری :تغییر در جهتی که ما انتخاب کرده ایم چقدر باید باشد یک فرآیند تکراری ساده در نمودار زیر نشان داده شده است: 313 شکل :8-8الگوریتم نزول گرادیان ،یافتن حداقل ها نمودار نشان می دهد که چگونه با تغییر وزن ،نزول گرادیان سعی در یافتن ح داقل هزینه دارد .نرخ یادگیری و جهت انتخاب شده ،نقطه بعدی نمودار را تعیین می کند. انتخاب مقدار مناسب برای ن رخ ی ادگیری مهم اس ت .اگ ر ن رخ ی ادگیری خیلی کم باشد ،ممکن است مسئله ،زمان زیاد برای همگ رایی نی از داش ته باش د .اگ ر ن رخ یادگیری خیلی زیاد باشد ،مسئله همگرا نخواهد شد .در نمودار قبلی ،نقط ه ای ک ه حل فعلی ما را نشان می دهد ،بین دو خط مخالف نمودار در نوس ان اس ت .ح ال، ِ بیایید ببینیم که چگونه یک گرادیان را به ح داقل برس انیم .فق ط دو متغ یر xو yرا در نظر بگیرید .گرادیان xو yبه صورت زیر محاسبه می شود: برای به حداقل رساندن گرادیان می توان از روش زیر استفاده کرد: ‏while(gradient!=0): ‏if (gradient < 0); move right 314 if (gradient > 0); move left این الگوریتم همچنین می‌تواند برای یافتن مقادیر بهین ه ی ا نزدی ک ب ه بهین ه وزن‌ه ا برای یک شبکه عصبی استفاده شود .توجه داشته باشید که محاسبه نزول گرادی ان در سراسر شبکه به عقب انجام می‌شود .ابتدا گرادیان الی ه نه ایی را محاس به می کنیم و سپس الیه دوم به آخر و سپس الیه قبل از آن را محاسبه می کنیم تا به الیه اول برسیم .این ک ار ،پس انتش ار نامی ده می ش ود ک ه توس ط هینت ون ،ویلی امز و روملهارت در سال 1985معرفی شد .در ادامه ،اجازه دهید به تواب ع فع ال س ازی نگاه کنیم. توابع فعال سازی یک تابع فعال‌سازی نحوه پردازش ورودی‌های یک نورون خاص برای تولی د خ روجی را فرمول‌بندی می‌کند .همانطور که در نمودار زیر نشان داده شده اس ت ،ه ر ی ک از نورون‌های یک شبکه عصبی دارای یک تابع فعال‌سازی اس ت ک ه نح وه پ ردازش ورودی‌ها را تعیین می‌کند: شکل :9-8تابع فعال سازی 315 در نمودار قبلی ،می بینیم ک ه نت ایج تولی د ش ده توس ط ی ک ت ابع فع ال س ازی ب ه خروجی منتقل می شود .تابع فعال سازی معیارهایی را تع یین می کن د ک ه چگون ه مقادیر ورودی ها قرار است برای تولید ی ک خ روجی تفس یر ش وند .ب رای مق ادیر ورودی دقیقا ً یکسان ،توابع فعال سازی مختل ف خ روجی ه ای متف اوتی تولی د می کنند .درک نحوه انتخاب تابع فع ال س ازی مناس ب هنگ ام اس تفاده از ش بکه ه ای عصبی برای حل مسائل مهم است .اکن ون اج ازه دهی د این تواب ع فع ال س ازی را یکی یکی بررسی کنیم. تابع Step ساده ترین تابع فعال سازی ممکن تابع آستانه است .خروجی تابع آستانه یک مقدار دودویی است 0 :یا .1اگر هر یک از ورودی ها بزرگ تر از 1باش د 1 ،را ب ه عن وان خروجی تولید می کند .این را می توان در نمودار زیر توضیح داد: شکل :10-8تابع Step 316 توجه داش ته باش ید ک ه ب ه محض اینک ه در مجم وع وزنی ورودی‌ه ا نش انه‌هایی از حیات مشاهده شود ،خروجی ( )yبه 1تبدیل می‌شود. این باعث می شود که عملکرد فعال سازی آستانه بس یار حس اس باش د .این ت ابع کامال آسیب پذیر است که به اشتباه توسط کوچکترین س یگنال در ورودی ب ه دلی ل یک نقص یا نویز ایجاد شود. سیگموید تابع سیگموید را می توان به عنوان بهبود تابع آستانه در نظ ر گ رفت .در اینج ا ،م ا روی حساسیت تابع فعال سازی کنترل داریم: شکل :11-8تابع فعال سازی سیگموید تابع سیگموید ،y ،به صورت زیر تعریف می شود: 317 می توان آن را به صورت زیر در پایتون پیاده سازی کرد: ‏def sigmoidFunction(z): ))return 1/ (1+np.exp(-z توجه داشته باشید که با کاهش حساسیت عملکرد فعال سازی ،اشکاالت ورودی را کمتر مختل می کنیم .توجه داشته باشید ک ه خ روجی ت ابع فع ال س ازی س یگموید همچنان دودویی است ،یعنی 0یا .1 واحد خطی اصالح شده ()ReLU خروجی دو تابع فعال س ازی اول ارائ ه ش ده در این فص ل دودویی ب ود .این ب دان مع نی اس ت ک ه آنه ا مجموع ه ای از متغیره ای ورودی را می گیرن د و آنه ا را ب ه خروجی های دودویی تبدیل می کنند ReLU .یک تابع فعال سازی است که مجموعه ای از متغیره ای ورودی را ب ه عن وان ورودی می گ یرد و آنه ا را ب ه ی ک خ روجی پیوسته تبدیل می کند .در ش بکه‌های عص بی ReLU ،محب وب‌ترین ت ابع فعال‌س ازی است و معموال ً در الیه‌های پنهان استفاده می‌شود ،جایی که نمی‌خواهیم متغیره ای پیوسته را به متغیرهای گسسته تبدیل کنیم .نم ودار زی ر ت ابع فعال‌س ازی ReLUرا نشان می دهد: 318 شکل :12-8واحد خطی اصالح شده توجه داشته باشید که وقتی x≤ 0باشد ،این به معن ای y = 0اس ت .این ب دان معنی است که هر سیگنالی از ورودی که صفر یا کمتر از صفر باشد به یک خروجی صفر تبدیل می شود: 319 به محض اینکه xبیش از صفر شد ،خروجی براب ر xمی ش ود .ت ابع ReLUیکی از پرکاربردترین توابع فعال س ازی در ش بکه ه ای عص بی اس ت .می ت وان آن را ب ه صورت زیر در پایتون پیاده سازی کرد: ‏def ReLU(x): ‏if x<0: ‏return 0 ‏else: ‏return x 320 حال بیایید به Leaky ReLUکه مبتنی بر ReLUاست نگاه کنیم. ‏Leaky ReLU در ،ReLUیک مقدار منفی برای xمنجر به یک مقدار ص فر ب رای yمی ش ود .این بدان معنی است که برخی از اطالعات در این فرآیند از بین می رود ک ه ب اعث می شود دوره های آموزش به خصوص در ش روع آم وزش ط والنی ت ر ش ود .عملک رد فعال سازی Leaky ReLUاین مشکل را حل می کن د .م وارد زی ر ب رای Leaky ReLuاعمال می شود: 321 این تابع در نمودار زیر نشان داده شده است: 322 شکل Leaky ReLU :8.13 در اینجا ß ،یک پارامتر با مقدار کمتر از یک است .می‌توان آن را به صورت زیر در پایتون پیاده‌سازی کرد: ‏def leakyReLU(x,beta=0.01): ‏if x<0: )return (beta*x ‏else: ‏return x سه راه برای تعیین مقدار ßوجود دارد: می توانیم مقدار پیش فرض ßرا تعیین کنیم. ما می توانیم ßرا به یک پارامتر در شبکه عصبی خود تب دیل ک نیم و می ت وانیم ب ه شبکه عصبی اجازه دهیم مقدار را تعیین کنید (به آن ReLUپارامتری می گویند). 323 می‌توانیم ßرا یک مقدار تصادفی تعیین کنیم (به آن ReLUتصادفی می‌گویند). مماس هایپربولیک ()tanh تابع tanhمشابه تابع سیگموید است ،اما توانایی دادن س یگنال منفی را ن یز دارد. نمودار زیر این موضوع را نشان می دهد: شکل :8.14مماس هایپربولیک تابع yبه صورت زیر است: 324 توسط کد پایتون زیر قابل پیاده سازی است: ‏def tanh(x): )numerator = 1-np.exp(-2*x )denominator = 1+np.exp(-2*x ‏return numerator/denominator حاال بیایید به تابع softmaxنگاه کنیم. ‏Softmax گ اهی اوق ات ب رای خ روجی ت ابع فع ال س ازی ب ه بیش از دو س طح نی از داریم. Softmaxیک تابع فع ال س ازی اس ت ک ه بیش از دو س طح را ب رای خ روجی در اختیار ما قرار می دهد .برای مسائل طبقه بن د چن د کالس ه مناس ب اس ت .بیایی د فرض کنیم که nکالس داریم .ما مقادیر ورودی را داریم .مق ادیر ورودی کالس ه ا را به صورت زیر ترسیم می کندx = {x(1),x(2),....x(n)}. Softmax : بر اساس نظریه احتمال عمل می کن د .احتم ال خ روجی ethکالس softmaxب ه صورت زیر محاسبه می شود: 325 ب رای طبقه‌بن د‌های دودویی ،ت ابع فعال‌س ازی در الی ه نه ایی س یگموید و ب رای طبقه‌بندهای چند کالسه softmaxخواهد بود. ابزارها و چارچوب ها در این بخش ،چارچوب‌ها و ابزارهای موجود برای پیاده‌س ازی ش بکه‌های عص بی را ب ه تفص یل بررس ی خ واهیم ک رد .ب ا گذش ت زم ان ،چارچوب‌ه ای مختلفی ب رای پیاده‌سازی شبکه‌های عصبی ایجاد ش ده‌اند .چ ارچوب ه ای مختل ف نق اط ق وت و ض عف خ ود را دارن د .در این بخش ،م ا روی Kerasب ای ک Backend TensorFlowتمرکز خواهیم کرد. ‏Keras Kerasیکی از محبوب‌ترین و آسان‌ترین کتابخانه‌های شبکه عص بی اس ت ک ه ب ه زبان پایتون نوشته ش ده اس ت .این کتابخان ه ب ا س هولت اس تفاده در ذهن نوش ته شده است و سریع ترین راه را برای پیاده س ازی ی ادگیری عمی ق ارائ ه می ده د. Kerasفقط بلوک های سطح باال را ارائه می دهد و در سطح مدل در نظر گرفت ه می شود. 326 موتورهای Backend of Keras Kerasبرای انجام دس تکاری‌های س طح تنس ور ب ه ی ک کتابخان ه ی ادگیری عمی ق س طح پ ایین‌تر نی از دارد .این کتابخان ه ی ادگیری عمی ق س طح پ ایین ت ر موت ور Backendنامیده می ش ود .موتوره ای Backendاحتم الی ب رای Kerasش امل موارد زیر است: ) :TensorFlow (https://www.tensorflow.orgاین محبوب ترین فریم ورک در نوع خود است و توسط گوگل منبع باز است. )(deeplearning.net/software/theano :Theonaاین ف ریم ورک در آزمایشگاه MILAدر دانشگاه مونترال توسعه یافته است. مایکروسافت ) :Cognitive Toolkit (CNTKاین ابزار توسط مایکروسافت توسعه یافته است. قالب این پشته ی فناوری یادگیری عمیق م دوالر در نم ودار زی ر نش ان داده ش ده است: 327 شکل :15-8معماری Keras مزیت این معماری یادگیری عمیق ماژوالر این است که backend Kerasرا می توان بدون بازنویسی هیچ کدی تغی یر داد .ب ه عن وان مث ال ،اگ ر TensorFlowرا برای یک ک ار خ اص به تر از Theonaب دانیم ،می‌ت وانیم ب ه س ادگی backendرا بدون بازنویسی هیچ کدی به TensorFlowتغییر دهیم. الیه های سطح پایین پشته یادگیری عمیق سه موتور backendکه به آنها اشاره کردیم همگی می‌توانن د هم روی CPUو هم GPUبا استفاده از الیه‌های سطح پایین پشته اجرا شوند .برای CPUها ،یک کتابخانه سطح پایین از عملیات تنسور به نام Eigenاستفاده می شود .برای پردازن ده‌های 328 گرافیکی TensorFlow ،از کتابخانه شبکه عصبی عمیق ) CUDA (cuDNNانویدیا استفاده می‌کند. تعریف فراپارامترها همانطور که در فصل ،6الگوریتم‌های یادگیری ماشین بدون نظارت بحث ش د ،ی ک فراپارامتر ،پارامتری اس ت ک ه مق دار آن قب ل از ش روع فرآین د ی ادگیری انتخ اب می‌شود .ما با مقادیر منطقی شروع می کنیم و سپس سعی می کنیم بع دا ً آنه ا را بهینه کنیم .برای شبکه های عصبی ،فراپارامترهای مهم عبارتند از: ‏ تابع فعال سازی ‏ نرخ یادگیری ‏ تعداد الیه های پنهان ‏ تعداد نورون ها در هر الیه پنهان بیایید بررسی کنیم که چگونه می توانیم یک مدل را ب ا اس تفاده از Kerasتعری ف کنیم. تعریف مدل Keras برای تعریف یک مدل کامل Kerasسه مرحله وجود دارد: .1الیه ها را تعریف کنید. ما می توانیم با استفاده از Kerasبه دو روش ممکن یک مدل بسازیم: APIمتوالی :به ما امکان می دهد مدل هایی را برای یک پش ته خطی از الی ه ه ا طراحی کنیم .برای مدل ه ای نس بتا س اده اس تفاده می ش ود و انتخ اب معم ولی برای ساختن مدل ها است: 329 توجه داشته باشید که در اینجا ما سه الیه ایجاد ک رده ایم -دو الی ه اول ت ابع فع ال سازی ReLUو الیه سوم دارای softmaxبه عنوان تابع فعال سازی است. :Functional APIبه ما اجازه می دهد تا مدل هایی را برای نموداره ای غ یر چرخه ای الیه ها طراحی کنیم .مدل ه ای پیچی ده ت ری را می ت وان ب ا اس تفاده از Functional APIایجاد کرد. 330 توجه داشته باشید که ما می توانیم یک ش بکه عص بی را ب ا اس تفاده از APIه ای متوالی و کاربردی تعریف کنیم .از نقطه نظر عملکرد ،فرقی نمی‌کن د ک ه از ک دام رویکرد برای تعریف مدل استفاده کنید. فرآیند یادگیری را تعریف کنید. در این مرحله سه چیز را تعریف می کنیم: ‏ بهینه ساز ‏ تابع زیان ‏ معیارهایی که کیفیت مدل را محاسبه می کند: توجه داشته باشید که ما از تابع model.compileبرای تعری ف بهین ه س از ،ت ابع زیان و معیارها استفاده می کنیم. .1مدل را آموزش دهید. هنگامی که معماری تعریف شد ،نوبت به آموزش مدل می رسد: توجه داش ته باش ید ک ه پارامتره ایی مانن د batch_sizeو epochsپارامتره ای قابل تنظیم هستند و آنها را به فراپارامترها تبدیل می کند. انتخاب مدل متوالی یا کاربردی مدل ترتیبی ،شبکه عصبی را به عنوان یک پشته ساده از الیه ایجاد می کند .درک و پیاده‌سازی م دل ترتی بی آس ان و س اده اس ت ،ام ا معم اری س اده‌گرایانه آن ن یز 331 محدودیت عمده‌ای دارد .هر الیه دقیقا ً به یک تنسور ورودی و خروجی متصل است. این به این معنی است که اگر مدل ما دارای چندین ورودی یا خ روجی ه ای متع دد در ورودی یا خروجی یا در هر یک از الیه های پنهان باش د ،آنگ اه نبای د از ی ک م دل ترتیبی استفاده می کنیم .در این صورت باید از مدل کاربردی استفاده کنیم. درک TensorFlow TensorFlowیکی از محبوب ترین کتابخانه ه ا ب رای ک ار ب ا ش بکه ه ای عص بی است .در بخش قبل ،دیدیم که چگون ه می‌ت وانیم از آن ب ه عن وان موت ور پش تیبان Kerasاستفاده کنیم .این یک کتابخانه منبع باز و با کارایی ب اال اس ت ک ه در واق ع می تواند برای هر محاسبات عددی استفاده شود .اگر به پشته نگاه کنیم ،می‌بی نیم که می‌توانیم کد TensorFlowرا در یک زبان سطح باال مانن د Pythonی ا C ++ بنویسیم که توسط موتور اجرای توزیع‌شده TensorFlowتفسیر می‌ش ود و آن را برای توسعه دهندگان بسیار مفید و محبوب می کند .روشی که TensorFlowکار می کند این است که شما یک گراف مس تقیم ( )DGب رای نم ایش محاس بات خ ود ایجاد می کنید .اتصال گره ه ا ،لب ه ه ا ،ورودی و خ روجی عملی ات ریاض ی اس ت. همچنین ،آنها آرایه هایی از داده ها را نشان می دهند. ارائه مفاهیم پایه تنسورفلو بیایید نگاهی کوتاه به مفاهیم TensorFlowمانند اسکالرها ،بردارها و ماتریس ه ا بیندازیم .می دانیم که عدد ساده ای مانن د س ه ی ا پنج در ریاض یات س نتی اس کالر نامیده می شود .عالوه بر این ،در فیزیک ،بردار چ یزی ب ا مق دار و جهت اس ت .از نظر ،TensorFlowما از بردار به معنای آرایه های یک بعدی استفاده می کنیم. با گسترش این مفهوم ،یک آرایه دو بعدی یک ماتریس اس ت .ب رای ی ک آرای ه س ه بعدی از اصطالح تنسور س ه بع دی اس تفاده می ک نیم .م ا از اص طالح رتب ه ب رای 332 دریافت ابعاد یک ساختار داده اس تفاده می ک نیم .ب ه این ت رتیب ،ی ک اس کالر ی ک ساختار داده رتبه ،0یک بردار یک ساختار داده رتبه ،1و ی ک م اتریس ی ک س اختار داده رتبه 2است .این ساختارهای چند بعدی به نام تنسور ش ناخته می ش وند و در نمودار زیر نشان داده شده اند: شکل :16-8ساختارهای چند بعدی یا تنسورها همانطور که در نمودار قبلی می بینیم ،رتبه ،ابعاد یک تنس ور را مش خص می کن د. اکنون به پارامتر دیگری ،به نام فرم نگاه می کنیم .فرم چن دین ع دد ص حیح اس ت که طول یک آرای ه را در ه ر بع د مش خص می کن د .نم ودار زی ر مفه وم ش کل را توضیح می دهد: با استفاده از فرم و رتبه می توانیم جزئیات تنسورها را مشخص کنیم. 333 درک ریاضیات تنسور اکنون به محاسبات مختلف ریاضی با استفاده از تنسورها نگاه می کنیم: بیایید دو اسکالر تعریف کنیم و سعی کنیم آنها را با استفاده از TensorFlowجمع و ضرب کنیم: ما می توانیم آنها را اضافه و ضرب کنیم و نتایج را نمایش دهیم: همچنین می توانیم با اضافه کردن دو تنسور یک تنسور اسکالر جدید ایجاد کنیم: ما همچنین می توانیم توابع تنسور پیچیده را انجام دهیم: 334 آشنایی با انواع شبکه های عصبی بیش از یک راه برای ساخت شبکه های عصبی وج ود دارد .اگ ر ه ر ن ورون در ه ر الیه به هر یک از نورون های الیه دیگر متصل باشد ،آن را یک شبکه عصبی م تراکم یا تمام متصل می نامیم .بیایید به برخی از اش کال دیگ ر ش بکه ه ای عص بی نگ اه کنیم. شبکه های عصبی کانولوشنال شبکه های عصبی کانولوش ن ( )CNNمعم وال ً ب رای تجزی ه و تحلی ل داده ه ای چن د رسانه ای استفاده می شوند .به منظور کسب اطالعات بیش تر در م ورد چگ ونگی استفاده از CNNبرای تجزیه و تحلیل داده های مبتنی بر تصویر ،باید فرآیندهای زیر را درک کنیم: ‏ کانولوشن ‏ ادغام بیایید آنها را یکی یکی بررسی کنیم. کانولوشن فرآیند کانولوشن بر الگوی مورد عالقه در یک تصویر خاص با پردازش آن با تص ویر کوچکترِ دیگری به نام فیلتر (که هسته نیز نامیده می شود) تأکید می کند .به عنوان مثال ،اگر بخواهیم لبه‌های اشیاء را در یک تصویر پیدا کنیم ،می‌ت وانیم تص ویر را ب ا 335 ی ک فیل تر خ اص فیل تر ک نیم ت ا آنه ا را بدس ت آوریم .تش خیص لب ه می توان د در تشخیص اشیا ،طبقه بندی اشیا و سایر برنامه ها به ما کمک کن د .بن ابراین ،فرآین د کانولوشن در مورد یافتن ویژگی‌ها و مشخصه ها در یک تصویر است .رویکرد یافتن الگوها مبتنی بر یافتن الگوهایی است ک ه می‌توانن د مج ددا ً روی داده‌ه ای مختل ف استفاده شوند .الگوهای قابل استفاده مجدد ،فیلتر یا هسته نامیده می شوند. ادغام بخش مهمی از پردازش داده‌های چندرسانه‌ای به منظور ی ادگیری ماش ینی ،نمون ه برداری از آن است .این کار دو فایده دارد: ‏ ابعاد کلی مسئله را کاهش می دهد و زمان مورد نیاز برای آم وزش م دل را به طور عمده کاهش می دهد. ‏ از طریق تجمیع ،ما جزئیات غیر ضروری را در داده‌های چندرسانه‌ای انتزاعی می‌کنیم ،و آن را عمومی‌تر و معرف مسائل مشابه می‌کنیم. نمونه برداری به صورت زیر انجام می شود: شکل :17-8نمونه برداری کاهشی توجه داشته باشید که ما هر بلوک چهار پیکسلی را با یک پیکسل جایگزین کرده ایم و باالترین مقدار از چهار پیکس ل را ب ه عن وان مق دار آن ی ک پیکس ل انتخ اب می کنیم .این به این معنی است که ما با ضریب چهار نمونه برداری کاهشی انجام داده 336 ایم .از آنجایی که حداکثر مقدار را در هر بلوک انتخاب ک رده‌ایم ،این فرآین د ادغ ام حداکثر نامیده می‌ش ود .م ا می توانس تیم مق دار متوس ط را انتخ اب ک نیم .در آن صورت ،ادغام میانگین خواهد بود. شبکه های عصبی بازگشتی شبکه‌های عصبی بازگشتی ( )RNNنوع خاصی از شبکه‌های عصبی هستند که مبت نی بر معماری حلقه‌ای هستند .به همین دلیل به آنها بازگش تی می گوین د .نکت ه مهمی که باید به آن توجه کرد این است که RNNها دارای حافظه هستند .این بدان مع نی است که آنها توانایی ذخیره اطالعات تکرارهای اخیر را دارن د .آنه ا در زمین ه ه ایی مانند تجزیه و تحلیل ساختار جمله برای پیش بینی کلمه بعدی در یک جمله استفاده می شوند. شبکه های متخاصم مولد شبکه‌های متخاصم مولد ( )GANنوعی شبکه عصبی هستند ک ه داده‌ه ای مص نوعی تولی د می‌کنن د .این ش بکه ه ا در س ال 2014توس ط Goodfellow Ianو همک ارانش س اخته ش دند .می ت وان از آنه ا ب رای تولی د عکس ه ایی از اف رادی استفاده کرد که هرگز وجود نداشته ان د .مهم تر از آن ،آنه ا ب رای تولی د داده ه ای مصنوعی برای تقویت مجموعه داده ه ای آموزش ی اس تفاده می ش وند .در بخش آینده ،خواهیم دید که یادگیری انتقالی چیست. یادگیری انتقالی در طول سال‌ها ،بسیاری از سازمان‌ها ،گروه‌های تحقیقاتی و افراد در جامعه منب ع باز ،مدل‌های پیچیده‌ای را که با استفاده از مق ادیر عظیمی از داده‌ه ا ب رای م وارد 337 استفاده عمومی آموزش داده شده‌اند ،تکمیل کرده‌اند .در برخی موارد ،آنه ا س ال ها تالش خود را برای بهینه سازی این مدل ه ا انج ام داده ان د .ب رخی از این م دل های منبع باز را می توان برای برنامه های زیر استفاده کرد: ‏ تشخیص اشیاء در ویدئو ‏ تشخیص اشیا در تصاویر ‏ رونویسی برای صدا ‏ تحلیل احساسات برای متن هر زمان که ما شروع به کار بر روی آموزش یک م دل جدی د ی ادگیری ماش ین می کنیم ،سوالی که باید از خود بپرسیم این است: آیا می‌توانیم به‌ج ای ش روع از ص فر ،ی ک م دل از پیش آموزش‌دیده‌ش ده را ب رای اهداف خود سفارشی کنیم؟ به عبارت دیگر آیا می توانیم یادگیری مدل های موجود را ب ه م دل سفارش ی خ ود منتقل کنیم تا بتوانیم به سوال تجاری خود پاسخ دهیم؟ اگر بتوانیم این کار را انجام دهیم ،سه فایده به همراه خواهد داشت: ‏ تالش‌های آموزشی مدل ما یک شروع سریع خواهد بود. ‏ با استفاده از یک مدل کامال ً آزمایش شده و تثبیت شده ،کیفیت کلی مدل ما احتماال ً بهبود می یابد. ‏ اگر داده‌های کافی برای مسئله ای که روی آن کار می‌کنیم ن داریم ،اس تفاده از یک مدل از پیش آموزش‌دیده از طریق یادگیری انتقالی ممکن است کمک کند. بیایید به دو مثال واقعی که مفید است نگاه کنیم: هنگام آموزش یک ربات ،ابتدا می‌توانیم از یک بازی شبیه‌سازی برای آموزش م دل شبکه عصبی استفاده کنیم. 338 در آن شبیه‌سازی ،ما می‌توانیم همه آن رویدادهای نادر را ایجاد کنیم که ی افتن آنه ا در دنیای واقعی بسیار سخت است .پس از آموزش ،می‌توانیم از ی ادگیری انتق الی برای آموزش مدل برای دنیای واقعی استفاده کنیم. بیایید فرض کنیم که می‌خواهیم مدلی را آموزش دهیم که بتواند لپ‌تاپ‌ه ای اپ ل و ویندوز را از طریق فید ویدیویی طبقه‌بندی کند. در حال حاضر مدل‌های کامال ً تثبیت‌شده‌ای وجود دارد که به‌عنوان منب ع ب از موج ود است که می‌تواند اشیاء مختلف را در یک فید ویدیویی به‌طور دقیق طبقه‌بندی کند. ما می توانیم از این مدل ها به عن وان نقط ه ش روع اس تفاده ک نیم و اش یاء را ب ه عنوان لپ تاپ شناسایی کنیم .هنگامی ک ه اش یاء را ب ه عن وان لپ‌ت اپ شناس ایی کردیم ،می‌توانیم مدل را برای تم ایز بین لپ‌تاپ‌ه ای Appleو ، Windowsبیش تر آموزش دهیم. در بخش بعدی ،مفاهیمی را که در این فصل پوشش داده‌ایم برای ساخت یک س ند تقلبی طبقه‌بندی شبکه عصبی اعمال خواهیم کرد. مطالعه موردی – استفاده از یادگیری عمیق برای کشف تقلب استفاده از تکنیک‌های یادگیری ماشینی ( )MLبرای شناسایی اسناد تقلبی ،یک زمینه تحقیقاتی فعال و چالش برانگیز است .محققان در حال بررسی هس تند ک ه ت ا چ ه حد می توان از قدرت تشخیص الگوی شبکه های عصبی برای این منظور اس تفاده کرد .به جای استخراج کننده دستی ویژگی ها ،پیکسل های خ ام را می ت وان ب رای چندین ساختار معماری یادگیری عمیق استفاده کرد. 339 روش شناسی تکنیک ارائ ه ش ده در این بخش از ن وعی معم اری ش بکه عص بی ب ه ن ام س یامی استفاده می کند شبکه های عصبی ،که دارای دو شاخه است که معماری ه ا و پارامتره ای یکس انی را ب ه اش تراک می گذارن د .اس تفاده از ش بکه ه ای عص بی س یامی ب رای عالمت گذاری اسناد تقلبی در نمودار زیر نشان داده شده است: شکل :18-8شبکه های عصبی سیامی هنگامی که یک سند خاص نیاز به تأیید صحت دارد ،ابتدا سند را ب ر اس اس ط رح و ن وع آن طبق ه بن دی می ک نیم و س پس آن را ب ا ق الب و الگ وی م ورد انتظ ارش مقایسه می کنیم .اگر از یک آستانه خاص منحرف شود ،به عن وان ی ک س ند جعلی عالمت گذاری می شود در غیر این صورت سند معتبر یا واقعی محسوب می شود. برای موارد استفاده حیاتی ،می‌توانیم یک فرآیند دستی ب رای م وارد م رزی اض افه کنیم که در آن الگوریتم شبکه عصبی به طور قطعی یک سند را به عنوان معت بر ی ا جعلی طبقه‌بندی نمی‌کند .برای مقایسه یک سند ب ا الگ وی م ورد انتظ ار آن ،از دو CNNیکسان در معماری سیامی خود استفاده می‌کنیم CNN .ه ا از م زیت ی ادگیری آشکارسازهای وی ژگی محلی ب ا تغی یر ناپ ذیر بهین ه برخ وردار هس تند و می توانن د 340 نمایش هایی را ایجاد کنند که در برابر اعوجاج های هندس ی تص ویر ورودی ،مق اوم هستند .این به خوبی برای مسئله م ا مناس ب اس ت زی را ه دف م ا این اس ت ک ه اسناد معتبر و آزمایشی را از طریق یک شبکه واحد منتقل کنیم و سپس نت ایج آنه ا را برای شباهت مقایسه کنیم .برای رسیدن به این هدف ،مراح ل زی ر را اج را می کنیم .فرض کنید می خواهیم یک س ند را آزم ایش ک نیم .ب رای ه ر کالس از س ند، مراحل زیر را انجام می دهیم: .1تصویر ذخیره شده سند معتبر را دریافت کنید .ما آن را س ند واقعی می ن امیم. سند آزمون باید شبیه سند واقعی باشد. .2سند واقعی از الیه های شبکه عصبی عبور داده می ش ود ت ا ی ک ب ردار وی ژگی ایجاد شود که نمایش ریاضی الگوهای سند واقعی اس ت .هم انطور ک ه در نم ودار قبل نشان داده شده است ،ما آن را بردار ویژگی 1می نامیم. .3مدرکی که نی از ب ه آزم ایش دارد را س ند آزم ون می نامن د .م ا این س ند را از طریق یک شبکه عصبی مشابه شبکه ای که ب رای ایج اد ب ردار وی ژگی ب رای س ند واقعی استفاده شده است عبور می دهیم .بردار ویژگی سند آزمون ،بردار وی ژگی 2نامیده می شود. .4ما از فاصله اقلیدسی بین بردار ویژگی 1و بردار ویژگی 2برای محاسبه امتی از شباهت بین سند واقعی و سند آزمون استفاده می کنیم .این امتیاز شباهت ،ان دازه گیری ش باهت ( )MOSنامی ده می ش ود MOS .ع ددی بین 0و 1اس ت .ع دد ب االتر نشان دهنده فاصله کمتر بین اسناد و احتمال بیشتر مشابه بودن اسناد است. .5اگر امتیاز شباهت محاسبه شده توس ط ش بکه عص بی زی ر ی ک آس تانه از پیش تعریف شده باشد ،سند را به عنوان تقلبی عالمت گذاری می کنیم. بیایید ببینیم چگونه می توانیم شبکه ه ای عص بی س یامی را ب ا اس تفاده از پ ایتون پیاده سازی کنیم: 341 .1ابتدا بیایید بسته های پایتون مورد نیاز را وارد کنیم: ‏import random ‏import numpy as np ‏import tensorflow as tf در مرحله بعد ،ش بکه عص بی را ک ه ب رای پ ردازش ه ر ی ک از ش اخه ه ای ش بکه سیامی استفاده می شود ،تعریف می کنیم: ‏def createTemplate(): [(return tf.keras.models.Sequential ‏tf.keras.layers.Flatten(), ‏tf.keras.layers.Dense(128, activation='relu'), ‏tf.keras.layers.Dropout(0.15), ‏tf.keras.layers.Dense(128, activation='relu'), ‏tf.keras.layers.Dropout(0.15), ‏tf.keras.layers.Dense(64, activation='relu'), )] توجه داشته باشید که برای کاهش بیش برازش ،ن رخ ح ذف تص ادفی را ن یز 0.15 تعیین کرده ایم. .1ب رای پی اده س ازی ش بکه ه ای س یامی از تص اویر MNISTاس تفاده می ک نیم. تصاویر MNISTبرای آزم ایش اثربخش ی رویک رد م ا ای ده آل هس تند .رویک رد م ا مستلزم آماده سازی داده ها به گونه ای است که هر نمونه دارای دو تص ویر و ی ک عالمت ش باهت دودویی باش د .این عالمت نش ان می ده د ک ه آنه ا از ی ک طبق ه 342 را پی اده س ازی ک نیم ک ه می توان دpreadData بیایید اکنون تابعی به ن ام.هستند :داده ها را برای ما آماده کند def prepareData(inputs: np.ndarray, labels: np.ndarray): classesNumbers = 10 digitalIdx = [np.where(labels == i)[0] for i in range(classesNumbers)] pairs = list() labels = list() n = min([len(digitalIdx[d]) for d in range(classesNumbers)]) – 1 for d in range(classesNumbers): for i in range(n): z1, z2 = digitalIdx[d][i], digitalIdx[d][i + 1] pairs += [[inputs[z1], inputs[z2]]] inc = random.randrange(1, classesNumbers) dn = (d + inc) % classesNumbers z1, z2 = digitalIdx[d][i], digitalIdx[dn][i] pairs += [[inputs[z1], inputs[z2]]] labels += [1, 0] return np.array(pairs), np.array(labels, dtype=np.float32) منجر به تعداد مساوی نمونه در تمامprepareData)( توجه داشته باشید که .ارقام می شود 343 :اکنون مجموعه داده های آموزشی و آزمون را آماده می کنیم (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() x_train = x_train.astype(np.float32) x_test = x_test.astype(np.float32) x_train /= 255 x_test /= 255 input_shape = x_train.shape[1:] train_pairs, tr_labels = prepareData(x_train, y_train) test_pairs, test_labels = prepareData(x_test, y_test) : بیایید دو نیمه سیستم سیامی را ایجاد کنیم،حال input_a = tf.keras.layers.Input(shape=input_shape) enconder1 = base_network(input_a) input_b = tf.keras.layers.Input(shape=input_shape) enconder2 = base_network(input_b) که فاصله بین دو س ندی را ک ه،) را پیاده سازی می کنیمMOS( معیار تشابه،اکنون : محاسبه می کند،می خواهیم مقایسه کنیم distance = tf.keras.layers.Lambda( lambda embeddings: tf.keras.backend.abs(embeddings[0] embeddings[1])) ([enconder1, enconder measureOfSimilarity = tf.keras.layers.Dense(1, activation='sigmoid') (distance) 344 حاال بیایید مدل را آموزش دهیم .برای آموزش این مدل از 10دور()epoch استفاده خواهیم کرد: توج ه داش ته باش ید ک ه ب ا اس تفاده از 10دور ب ه دقت 97.49درص د رس یدیم. افزایش تعداد دور ها باعث بهبود بیشتر سطح دقت می شود. 345 خالصه در این فصل ابت دا جزئی ات ش بکه ه ای عص بی را بررس ی ک ردیم .م ا ب ا بررس ی چگونگی تکامل شبکه‌های عصبی در طول سال‌ها شروع ک ردیم .م ا ان واع مختل ف شبکه های عصبی را مورد مطالعه قرار دادیم .س پس ،م ا ب ه بل وک ه ای س ازنده مختلف شبکه های عصبی نگاه کردیم .ما الگوریتم نزول گرادیان را به ط ور عمی ق مورد مطالعه قرار دادیم که برای آموزش شبکه‌های عصبی اس تفاده می‌ش ود .م ا توابع فعال سازی مختلف را مورد بحث قرار دادیم و کاربردهای توابع فع ال س ازی را در یک شبکه عصبی مورد مطالعه قرار دادیم .همچنین مفه وم ی ادگیری انتق الی را بررسی کردیم .در نهایت ،ما به یک مث ال عملی از نح وه اس تفاده از ی ک ش بکه عصبی برای آموزش یک م دل ی ادگیری ماش ینی ک ه می‌توان د ب رای عالمت‌گ ذاری اسناد جعلی یا تقلبی استفاده شود ،نگاه کردیم .با نگاهی به آینده ،در فص ل بع دی ب ه نح وه اس تفاده از چ نین الگوریتم‌ه ایی ب رای پ ردازش زب ان ط بیعی خ واهیم پرداخت .ما همچنین مفهوم جاسازی وب را معرفی خ واهیم ک رد و ب ه اس تفاده از شبکه های بازگشتی برای پردازش زبان طبیعی خواهیم پ رداخت .در نه ایت ،نح وه اجرای تحلیل احساسات را نیز بررسی خواهیم کرد. 346 بخش :3موضوعات پیشرفته همانطور که از نامش پیداس ت ،در این قس مت ب ه چن د موض وع پیش رفته منتخب مرتبط با الگوریتم ها می پردازیم .رمزنگاری و الگوریتم‌های مقیاس بزرگ از نکات برجسته این بخش هستند .ما همچنین به مسائل مربوط ب ه زیرس اخت در مقی اس بزرگ مورد نیاز برای آموزش الگوریتم پیچی ده نگ اه خ واهیم ک رد .فص ل آخ ر این بخش به بررسی مالحظات عملی می‌پردازد که باید هنگ ام پیاده‌س ازی الگوریتم‌ه ا در نظر داشت .فصول موجود در این بخش عبارتند از: فصل ،9الگوریتم های داده فصل ،10رمزنگاری فصل ،11الگوریتم های مقیاس بزرگ فصل ،12مالحظات عملی 347 9الگوریتم داده "داده ها نفت جدید اقتصاد دیجیتال است" :مجله Wired تصمیم گیری در سراسر جهان به ط ور فزاین ده ای مبت نی ب ر داده اس ت .داده‌ه ا اطالعات مربوط به پدی ده را جمع‌آوری می‌کنن د و الگوریتم‌ه ا می‌توانن د ب ه م ا در استخراج و استفاده معنادار از آن کم ک کنن د .این فص ل در م ورد چ نین الگ وریتم های داده محور است و به طور خاص ،ب ر س ه جنب ه از الگ وریتم ه ای داده مح ور تمرکز دارد :ذخیره سازی ،جریان و فشرده سازی .این فصل ب ا م روری کوت اه ب ر الگوریتم های داده محور شروع می شود ،سپس در مورد اس تراتژی ه ای مختلفی که می توانند در ذخیره سازی داده ها استفاده شوند بحث خواهیم ک رد .در ادام ه، نح وه اعم ال الگوریتم‌ه ا در جری ان داده توض یح داده می‌ش ود ،س پس روش‌ه ای مختلف ب رای فشرده‌س ازی داده‌ه ا م ورد بحث ق رار می‌گ یرد .در نه ایت ،م ا ی اد خواهیم گرفت که چگون ه می ت وانیم از مف اهیم توس عه یافت ه در این فص ل ب رای نظارت بر س رعت خودروه ایی ک ه در بزرگ راه ب ا اس تفاده از ی ک ش بکه حس گر پیشرفته در حال حرکت هستند استفاده کنیم .در پایان این فصل ،شما بای د بتوانی د مفاهیم و موازنه های مربوط به طراحی الگوریتم های مختل ف داده مح ور را درک کنید .این فصل مفاهیم زیر را مورد بحث قرار می دهد: ‏ طبقه بندی داده ها ‏ الگوریتم های ذخیره سازی داده ها ‏ نحوه استفاده از الگوریتم ها برای فشرده سازی داده ها ‏ نحوه استفاده از الگوریتم ها برای جریان داده ها اجازه دهید ابتدا مفاهیم اولیه را معرفی کنیم. مقدمه ای بر الگوریتم های داده 348 چه بدانیم چه ندانیم ،در عصری از کالن داده زندگی می کنیم .فق ط ب رای دری افت ایده در مورد میزان تولید مداوم داده ه ا ،ک افی اس ت ب ه ب رخی از اع داد منتش ر ش ده توس ط Googleب رای س ال 2019نگ اه کنی د .هم انطور ک ه می دانیم، Google Photosمخ زن چن د رس انه ای ب رای ذخ یره عکس ه ای ایج اد ش ده توسط Googleاست .در سال ،2019روزانه به طور متوسط 1.2میلی ارد عکس و ویدیو در Google Photosآپلود شد .همچنین ،هر روز به ط ور متوس ط 400 س اعت وی دیو (ب ه م یزان PB 1داده) در YouTubeآپل ود می ش د .می ت وان ب ا اطمینان گفت که مقدار داده ای که تولید می شود به سادگی منفج ر ش ده اس ت. عالقه فعلی به الگوریتم های مبتنی بر داده به دلیل این واقعیت اس ت ک ه داده ه ا ح اوی اطالع ات و الگوه ای ارزش مندی هس تند .اگ ر از داده ه ا ب ه روش ص حیح اس تفاده ش ود ،می توان د مبن ای تص میم گ یری ه ای سیاس ت گ ذاری ،بازاری ابی، حاکمیت و تجزیه و تحلیل روند باشد .به دالیل واضح ،الگوریتم هایی ک ه ب ا داده ه ا سروکار دارند روز به روز اهمیت بیشتری پیدا می کنند .طراحی الگوریتم هایی ک ه می توانند داده ها را به طور کارآمد پردازش کنند ،ی ک ح وزه فع ال تحقی ق اس ت. شکی نیست که کاوش در بهترین راه‌ها برای استفاده از داده‌ها ،برای ارائ ه ب رخی مزایای قابل اندازه‌گیری ،تمرکز س ازمان‌ها ،کس ب‌وکارها و دولت‌ه ای مختل ف در سراسر جهان است .اما داده ها به شکل خام به ندرت مفید هستند .برای استخراج اطالعات از داده های خام ،باید پردازش ،آماده سازی و تجزیه و تحلیل شود .روش های کارآمد برای ذخیره داده ه ا روز ب ه روز اهمیت بیش تری پی دا می کنن د .توج ه داشته باشید که با توجه به محدودیت‌های ذخیره‌سازی فیزیکی سیستم‌های تک‌گره، داده‌های بزرگ را فقط می‌توان در فضای ذخیره‌سازی توزیع‌ش ده متش کل از بیش از یک گره که با لینک‌های ارتباطی پرسرعت متصل هستند ،ذخ یره ک رد .بن ابراین، منطقی است که برای یادگیری الگوریتم‌های داده ،ب ا نگ اه ک ردن ب ه الگوریتم‌ه ای مختلف ذخیره‌سازی داده‌ها شروع کنیم .ابتدا ،اج ازه دهی د داده‌ه ا را در دس ته‌های مختلف طبقه‌بندی کنیم. 349 طبقه بندی داده ها بیایید ببینیم چگونه می توانیم داده ها را در زمینه طراحی الگوریتم های داده ،طبقه بندی کنیم. همانطور که در فصل ،2ساختارهای داده مورد استفاده در الگوریتم ه ا بحث ش د، می توان از محاسبه حجم ،تنوع و سرعت داده ها ب رای طبق ه بن دی آنه ا اس تفاده کرد .این طبقه‌بندی می‌تواند مبنایی ب رای ط راحی الگوریتم‌ه ای داده‌ای باش د ک ه می‌توانند برای ذخیره و پردازش آن استفاده ش وند .بیایی د این ویژگی‌ه ا را ی ک ب ه یک در زمینه الگوریتم‌های داده بررسی کنیم: حجم ،مق دار داده‌ه ایی را ک ه بای د در ی ک الگ وریتم ذخ یره و پ ردازش ش وند ،ب ه صورت عددی نشان می‌دهد .با افزایش حجم ،کار داده فشرده می شود و نی از ب ه تهی ه من ابع ک افی ب رای ذخ یره ،کش ک ردن و پ ردازش داده ه ا دارد .کالن داده اصطالحی است که به طور مبهم حجم زیادی از داده را تعریف می کند ک ه توس ط یک گره واحد قابل مدیریت نیست. سرعت ،نرخ تولید داده های جدید را مشخص می کند .معموال ً داده‌های سرعت باال را داده‌های داغ یا جریان داغ و داده‌ه ای س رعت پ ایین را جری ان س رد ی ا به‌ط ور ساده داده‌های سرد می‌گویند .در بسیاری از برنامه‌ها ،داده‌ها ترکیبی از جریان‌ه ای گرم و سرد خواهند بود که ابتدا باید آماده شوند و در یک جدول واحد ترکیب ش وند تا بتوان با الگوریتم استفاده کرد. تنوع به انواع مختلف داده های ساختاریافته و بدون ساختار اش اره دارد ک ه قب ل از استفاده توسط الگوریتم باید در یک جدول واحد ترکیب ش وند .بخش بع دی ب ه م ا کمک می کند تا موازنات مربوط به آن را درک کنیم و انتخاب های مختلف ط راحی را هنگام طراحی الگوریتم های ذخیره سازی ارائه می دهد. ارائه الگوریتم های ذخیره سازی داده ها 350 یک مخزن داده قابل اعتماد و کارآمد ،قلب یک سیستم توزیع ش ده اس ت .اگ ر این مخزن داده برای تجزیه و تحلیل ایجاد شود ،به آن دریاچ ه داده ن یز می گوین د .ی ک مخزن داده ،داده های حوزه های مختلف را در ی ک مک ان واح د گ رد هم می آورد. بیایید ابتدا با درک مسائل مختلف مربوط به ذخ یره س ازی داده ه ا در ی ک مخ زن توزیع شده شروع کنیم. آشنایی با استراتژی های ذخیره سازی داده ها در سالهای اولیه محاسبات دیجیتال ،روش معمول طراحی مخزن داده ب ا اس تفاده از معماری تک گ ره ب ود .ب ا اف زایش روزاف زون ان دازه مجموع ه داده ه ا ،ذخ یره سازی توزیع شده داده ها اکن ون ب ه جری ان اص لی تب دیل ش ده اس ت .اس تراتژی مناسب برای ذخیره داده ها در یک محیط توزیع شده به نوع داده و الگوی اس تفاده مورد انتظار آن و همچنین نیازمندیهای غیر کاربردی آن بستگی دارد .برای تجزی ه و تحلیل بیشتر نیازمندی‌های یک ذخیره‌سازی داده‌های توزیع‌شده ،اجازه دهید با قضیه سازگاری دسترسی پذیری تحمل پارتیشن ( )CAPشروع کنیم ،که اساس ابداع ی ک اس تراتژی ذخیره‌س ازی داده ب رای ی ک سیس تم توزیع‌ش ده را در اختی ار م ا ق رار می‌دهد. ارائه قضیه CAP در سال 1998اریک بروئر قضیه ای را مطرح کرد که بعدها به قضیه CAPمعروف شد .برای درک قضیه ،CAPابتدا سه ویژگی زیر را در سیستم ه ای ذخ یره س ازی توزیع شده تعریف می کنیم :سازگاری ،دسترسی پذیری و تحمل پارتیشن CAP .در واقع یک مخفف است که از این سه ویژگی تشکیل شده است: سازگاری (یا به سادگی :)Cذخ یره س ازی توزی ع ش ده از گ ره ه ای مختلفی تشکیل شده است. 351 هر یک از این گره ها را می توان برای خواندن ،نوشتن یا ب ه روز رس انی رکورده ا در مخزن داده استفاده کرد .سازگاری تضمین می کند که در یک زم ان خ اص،t1 ، مستقل از اینکه از کدام گره برای خواندن داده ها استفاده می کنیم ،هم ان نتیج ه را خواهیم گرفت .هر عملیات خواندن ،یا آخرین داده هایی را ک ه در مخ زن توزی ع شده یکسان است برمی گرداند یا یک پیام خطا می دهد. دسترسی پذیری (یا به سادگی :)Aدسترسی پذیری تض مین می کن د ک ه ه ر گره در سیستم ذخیره سازی توزیع شده قادر خواهد بود بالفاصله درخواس ت را ب ا یا بدون سازگاری انجام دهد. تحمل پارتیشن (یا به سادگی :)Pدر یک سیستم توزیع ش ده ،چن دین گ ره از طریق یک شبکه ارتباطی به هم متصل می شوند .تحمل پارتیشن تض مین می کن د که در صورت خرابی ارتباط بین یک زیر مجموعه کوچک از گ ره ه ا (ی ک ی ا چن د)، سیس تم ،عملی اتی ب اقی می مان د .توج ه داش ته باش ید ک ه ب رای تض مین تحم ل پارتیشن ،داده ها باید در تعداد کافی گره تکرار شوند. با استفاده از این سه ویژگی ،قضیه CAPبه دقت موازنه های موجود در معم اری و طراحی یک سیستم توزیع شده را خالصه می کند .به طور خاص ،قض یه CAPبی ان می کند که ،در یک سیستم ذخیره سازی ،م ا فق ط می ت وانیم دو م ورد از وی ژگی های زیر را داشته باشیم :سازگاری یا ،Cدسترسی پذیری یا ،Aو تحمل پارتیشن ی ا .Pاین قضیه در نمودار زیر نشان داده شده است: 352 شکل :1-9قضیه CAP قضیه CAPهمچنین به این معنی است که ما می ت وانیم س ه ن وع سیس تم ذخ یره سازی توزیع شده داشته باشیم: ‏ یک سیستم ( CAپیاده‌سازی سازگاری-دسترسی پذیری) ‏ یک سیستم ( APدسترسی پذیری -تحمل پارتیشن را پیاده سازی می کند) ‏ یک سیستم ( CPاجرای سازگاری-تحمل پارتیشن) بیایید آنها را یکی یکی بررسی کنیم. سیستم های CA 353 سیستم های تک گره سنتی سیستم های CAهستند .این به این دلیل است ک ه اگ ر سیستم توزیع شده نداشته باشیم ،دیگر نیازی به نگرانی در م ورد تحم ل پارتیش ن نداریم .در آن صورت ،ما می‌توانیم سیستمی داشته باشیم ک ه هم س ازگاری و هم دسترسی پذیری یعنی یک سیستم CAداشته باشد .پایگاه‌های داده س نتی ت ک گ ره مانند Oracleیا MySQLهمگی نمونه‌هایی از سیستم‌های CAهستند. سیستم های AP سیس تم ه ای APسیس تم ه ای ذخ یره س ازی توزی ع ش ده ای هس تند ک ه ب رای دسترسی پذیری تنظیم شده اند .آنها که به عنوان سیستم‌هایی با واکنش‌پذیری باال طراحی شده‌اند ،می‌توانند در صورت نیاز ،سازگاری را قربانی کنند ت ا داده‌ه ای ب ا سرعت باال را در خود جای دهند .این بدان معناست ک ه اینه ا سیس تم ه ای ذخ یره سازی توزیع شده ای هستند که برای رسیدگی فوری ب ه درخواس ت ه ای ک اربران طراحی شده اند .درخواست های کاربر معمولی خواندن یا نوشتن داده هایی است ک ه ب ه س رعت در ح ال تغی یر هس تند .سیس تم‌های APمعم ولی در سیس تم‌های مانیتورینگ بالدرنگ مانند شبکه‌های حسگر استفاده می‌شوند .پایگاه‌ه ای اطالع اتی توزیع شده با سرعت باال ،مانند ،Cassandraنمونه‌های خ وبی از سیس تم‌های AP هستند .اگر Transport Canadaبخواهد ترافیک یکی از بزرگراه های اتاوا را از طریق شبکه ای از حسگرهای نصب شده در مکان ه ای مختل ف بزرگ راه نظ ارت کند ،یک سیستم APبرای اجرای ذخ یره س ازی داده ه ای توزی ع ش ده توص یه می شود. سیستم های CP سیستم های CPهم سازگاری و هم تحمل پارتیش ن دارن د .این ب دان معناس ت ک ه اینها سیستم‌های ذخیره‌سازی توزیع‌شده‌ای هستند که تنظیم شده‌اند تا قبل از اینکه 354 فرآیند خواندن یک مقدار را دریافت کند ،س ازگاری را تض مین می‌کنن د .ی ک م ورد معمول استفاده برای سیستم‌های CPزمانی است که می‌خواهیم فایل‌های س ند را در ق الب JSONذخ یره ک نیم .ذخیره‌س ازی داده‌ه ای س ند مانن د MongoDB سیستم‌های CPهستند که برای سازگاری در یک محیط توزیع‌ش ده تنظیم ش ده‌اند. ذخیره‌سازی داده‌های توزیع‌شده به طور فزاین ده‌ای ب ه مهم‌ت رین بخش زیرس اخت فناوری اطالعات مدرن تبدیل می‌شود. ذخیره سازی داده های توزیع شده باید بر اساس ویژگی های داده ها و نیازمندیهای مسئله ای که می خواهیم حل کنیم ،با دقت طراحی شود .طبقه‌بن دی ذخیره‌س ازی داده‌ها به سیستم‌های CA، APو CPبه ما کمک می‌کند تا موازنات مختلف مرب وط ب ه ط راحی سیس تم‌های ذخیره‌س ازی داده را درک ک نیم .اکن ون ،بیایی د ب ه الگوریتم‌های جریان داده نگاه کنیم. ارائه الگوریتم های جریان داده داده ها را می توان به صورت محدود یا نامحدود طبقه بندی کرد .داده‌ه ای مح دود داده های در حالت استراحت هستند و معموال ً از طریق یک فرآیند دسته‌ای پردازش می‌شوند .جریان ،اساسا ً پردازش داده بر روی داده های نامحدود اس ت .بیایی د ب ه یک مثال نگاه کنیم .بیایید فرض کنیم که در حال تجزیه و تحلیل تراکنش های تقلبی در یک بانک هستیم .اگر بخ واهیم ب ه دنب ال ت راکنش ه ای کاله برداری 7روز پیش باشیم ،باید به داده های در حالت استراحت نگاه کنیم .این نمونه ای از ی ک فرآین د دسته ای است .از س وی دیگ ر ،اگ ر بخ واهیم تقلب را در زم ان واقعی شناس ایی کنیم ،این نمونه ای از جریان است. از این رو ،الگوریتم‌ه ای داده جری انی ،الگوریتم‌ه ایی هس تند ک ه ب ا پ ردازش جریان‌های داده سروکار دارند .ایده اساسی این است که جری ان داده ه ای ورودی را به دسته هایی تقسیم کنیم که سپس توسط گره ی پردازش ،پردازش می شود. الگوریتم‌های جریان بای د در مقاب ل خط ا تحمل‌پ ذیر باش ند و بای د بتوان د س رعت 355 ورودی داده را مدیریت کند .با افزایش تقاضا برای تحلیل روند بالدرنگ ،این روزه ا تقاضا برای پردازش جریان نیز در حال افزایش است .توجه داشته باشید ک ه ب رای کارکرد جریان ،داده ها باید سریع پردازش شوند و در هنگام ط راحی الگ وریتم ه ا، باید همیشه در نظر گرفته شود. کاربردهای جریان کاربردهای زیادی از جریان داده و استفاده از آن به روشی معنادار وجود دارد. برخی از برنامه های کاربردی به شرح زیر است: ‏ تشخیص تقلب ‏ نظارت بر سیستم ‏ مسیریابی سفارشات هوشمند ‏ داشبوردهای زنده ‏ سنسورهای ترافیک در بزرگراه ها ‏ تراکنش های کارت اعتباری ‏ حرکت کاربر در بازی آنالین چند کاربره ارائه الگوریتم های فشرده سازی داده ها الگوریتم‌های فشرده‌سازی داده‌ها در فرآیند ک اهش ان دازه داده‌ه ا نقش دارن د .در این فصل ،یک الگوریتم فشرده‌سازی داده‌ها به ن ام الگ وریتم فشرده‌س ازی ب دون زیان را بررسی می‌کنیم. الگوریتم های فشرده سازی بدون زیان 356 اینها الگوریتم هایی هستند که می توانن د داده ه ا را ب ه گون ه ای فش رده کنن د ک ه بدون از دست دادن اطالعات ،از حالت فشرده خ ارج ش وند .آنه ا زم انی اس تفاده می شوند ک ه بازی ابی دقی ق فای ل ه ای اص لی پس از فش رده س ازی مهم باش د. کاربردهای معمول الگوریتم های فشرده سازی بدون زیان به شرح زیر است: ‏ برای فشرده سازی اسناد ‏ برای فشرده سازی و بسته بندی کد منبع و فایل های اجرایی ‏ برای تبدیل تعداد زیادی فایل کوچک به تعداد کمی فایل بزرگ آشنایی با تکنیک های اساسی فشرده سازی بدون زیان فشرده‌سازی داده‌ها بر این اصل استوار است که اک ثر داده‌ه ا بیش تر از بیت‌ه ایی استفاده می‌کنند که آنتروپی آن نشان می‌دهد بهینه است .به یاد بیاورید که آنتروپی اصطالحی اس ت ک ه ب رای مش خص ک ردن اطالع اتی ک ه داده ه ا حم ل می کنن د استفاده می شود .به این معنی که نمایش بیت بهینه تری از همان اطالعات امک ان پ ذیر اس ت .ک اوش و فرمول‌بن دی نم ایش بیت کارآم دتر مبن ایی ب رای اب داع الگوریتم‌های فشرده‌سازی می‌شود. فشرده‌سازی بدون زیان از این افزونگی برای فشرده‌سازی داده‌ها ،بدون از دست دادن اطالع ات اس تفاده می‌کن د .در اواخ ر ده ه Ziv ،80و Lempelتکنیک‌ه ای فشرده‌سازی داده مبتنی بر فرهنگ لغت را پیشنهاد کردند که می‌ت وان از آن ب رای اج رای فشرده‌س ازی داده‌ه ای ب دون زی ان اس تفاده ک رد .این تکنیک‌ه ا ب ه دلی ل سرعت و نرخ فشرده‌سازی خوب ،فورا ً مورد استفاده ق رار گرفتن د .از این تکنی ک ها برای ایجاد ابزار فشرده س ازی محب وب Unixbasedاس تفاده ش د .همچ نین، فرمت تصویر گیف فراگ یر ،از این تکنیک‌ه ای فشرده‌س ازی اس تفاده می‌کن د ،ک ه ثابت شد محبوب هستند زیرا می‌توان از آن‌ها برای نمایش همان اطالعات در تعداد کمتری بیت ،صرفه‌جویی در فضا و پهنای باند ارتباطی اس تفاده ک رد .این تکنیک‌ه ا بعدا ً مبنای توسعه ابزار zipو انواع آن شدند .استاندارد فشرده‌سازی ،V.44 ،ک ه 357 در مودم‌ها استفاده می‌ش ود ن یز ب ر اس اس آن اس ت .اکن ون در بخش‌ه ای آین ده تکنیک‌ها را یکی یکی بررسی می‌کنیم. کد گذاری هافمن کدگذاری هافمن یکی از قدیمی ترین روش های فشرده سازی داده ها اس ت و ب ر پایه ایجاد درخت هافمن است که هم برای رمزگذاری و هم ب رای رمزگش ایی داده ه ا اس تفاده می ش ود .کدگ ذاری ه افمن می‌توان د محت وای داده‌ه ا را ب ه ش کل فش رده‌تری ب ا بهره‌ب رداری از این واقعیت ک ه ب رخی از داده‌ه ا (مثال ً ب رخی از کاراکترهای حروف الفبا) بیشتر در یک جریان داده ظاهر می‌شوند ،نمایش ده د .ب ا اس تفاده از رمزگ ذاری‌هایی ب ا طول‌ه ای مختل ف (کوت اه‌تر ب رای پرتکرارت رین کاراکترها و طوالنی‌تر برای کم‌تکرارترین کاراکترها) ،داده‌ها فضای کمتری مص رف می‌کنند .حال ،بیایید چند اصطالح مرتبط با کدگذاری هافمن را بیاموزیم: متن داده ،نشان دهنده روش نمایش داده ها از ی ک ش کل کدگذاری :کدگذاری در ِ به شکل دیگر است .ما می خواهیم فرم حاصل مختصر باشد. کلمه رمز :یک کاراکتر خاص به شکل رمزگذاری شده کلمه رمز نامیده می شود. کدگذاری با طول ثابت :زمانی اس ت ک ه ه ر ک اراکتر رمزگ ذاری ش ده ،یع نی کلمه رمز ،از تعداد بیت های یکسانی استفاده می کند. کدگذاری با طول متغیر :کلم ات رم ز می توانن د از تع داد بیت ه ای متف اوتی استفاده کنند. ارزیابی کد :این تعداد بیت مورد انتظار در هر کلمه رمز است. کدهای رایگان پیشوندی :این بدان معناست ک ه هیچ کلم ه رم زی پیش وند هیچ کلمه رمز دیگری نیست. 358 رمزگشایی :ب ه این مع نی اس ت ک ه ی ک ک د ب ا ط ول متغ یر بای د ع اری از ه ر پیشوندی باشد. برای درک دو عبارت آخر ،ابتدا باید به این جدول نگاهی بیندازید: کاراکتر فرکانس کد طول متغیر کد طول ثابت ‏L 0.45 000 0 ‏M 0.13 001 101 ‏N 0.12 010 100 ‏X 0.16 011 111 ‏Y 0.09 100 1101 ‏Z 0.05 101 1100 حال می توانیم موارد زیر را استنباط کنیم: کد طول ثابت :کد با طول ثابت برای این جدول 3است. کد طول متغیر :کد با طول متغیر برای این جدول (0.12 + )3(0.13 + )1(45 2.24 = )4(0.05 + )4(0.09 + )3(0.16 + )3است. نمودار زیر درخت هافمن ایجاد شده از مثال قبل را نشان می دهد: 359 شکل :2-9مثالی از درخت هافمن توجه داشته باشید که رمزگذاری هافمن در مورد تب دیل داده ه ا ب ه درخت ه افمن است که فشرده سازی را امکان پذیر می کند .رمزگشایی ی ا لغ و فش رده س ازی، داده ها را به فرمت اصلی باز می گرداند. یک مثال عملی -تحلیل احساسات بالدرنگ توییتر 360 گفته می شود توییتر تقریبا ً 7000توییت در هر ثانیه در موضوعات مختلف دارد. بیایید سعی کنیم یک تحلیلگر احساسات بس ازیم ک ه بتوان د احساس ات اخب ار را از منابع مختلف خبری در زمان واقعی ضبط کند .ما با وارد کردن بسته های مورد نیاز شروع می کنیم: .1بسته های مورد نیاز را وارد کنید: ‏import tweepy,json,time ‏import numpy as np ‏import pandas as pd ‏import matplotlib.pyplot as plt ‏from vaderSentiment.vaderSentiment import ‏SentimentIntensityAnalyzer )(analyzer = SentimentIntensityAnalyzer توجه داشته باشید که ما از دو بسته زیر استفاده می کنیم: .2تجزی ه و تحلی ل احساس ات VADERک ه مخف ف کلم ات Valence Aware Dictionaryو Sentiment Reasonerاست و یکی از ابزارهای محبوب تجزیه و تحلیل احساسات مبتنی بر قوانین است که برای رسانه های اجتماعی توسعه یافته است .اگر قبال ً از آن استفاده نکرده اید ،ابتدا باید موارد زیر را اجرا کنید: ‏pip install vaderSentiment Tweepyکه یک APIمبتنی بر پایتون برای دسترسی به توییتر اس ت .مج دداً ،اگ ر قبال ً از آن استفاده نکرده اید ،ابتدا باید کد زیر را اجرا کنید: ‏pip install Tweepy 361 بای د، ب رای دسترس ی ب ه جری ان زن ده توییت‌ه ا.مرحله بعدی کمی مشکل اس ت هنگ امی ک ه.درخواستی برای ایجاد یک حساب توسعه‌دهنده ب ا تویی تر ارائ ه دهی د : می توانید آنها را با متغیرهای زیر نشان دهید، را داریدAPI کلیدهای twitter_access_token = <your_twitter_access_token> twitter_access_token_secret = <your_twitter_access_token_secret> twitter_consumer_key = <your_consumer_key> twitter_consumer_secret = <your_twitter_consumer_secret> بای د، ب رای آن. را پیکربن دی ک نیمAPI Tweepy سپس اجازه دهید اح راز ه ویت :متغیرهای ایجاد شده قبلی را ارائه کنیم auth = tweepy.OAuthHandler(twitter_consumer_key, twitter_consumer_secret) auth.set_access_token(twitter_access_token, twitter_access_token_secret) api = tweepy.API(auth, parser=tweepy.parsers.JSONParser()) ما دسته‌های توییتر منابع خبری را ک ه می‌خ واهیم ب رای.حاال قسمت جالب می آید منابع خبری زیر را، برای این مثال. انتخاب می‌کنیم، نظارت کنیم،تحلیل احساسات :انتخاب کرده ایم news_sources = ("@BBC", "@ctvnews", "@CNN","@FoxNews", "@dawn_com") 362 ح اال بیایی د حلق ه اص لی را ایج اد ک نیم .این حلق ه ب ا ی ک آرای ه خ الی ب ه ن ام array_sentimentsبرای نگهداری احساسات ش روع می ش ود .س پس ،ه ر پنج منب ع خ بری را م رور می ک نیم و از ه ر ک دام 100ت وییت جم ع آوری می ک نیم. سپس ،برای هر توییت ،تمایل آن را محاسبه می کنیم: اکنون ،بیایید نموداری ایجاد کنیم که تمایل اخبار را از این منابع خبری جداگانه نشان دهد: 363 .1توجه داشته باشید که هر یک از منابع خبری با رنگ متفاوتی نشان داده شده است. .2حال بیایید به آمار خالصه نگاه کنیم: اع داد قبلی رون د احساس ات را خالص ه می کنن د .ب ه عن وان مث ال ،احساس ات بی‌بی‌سی مثبت‌ترین است و ب ه نظ ر می‌رس د کان ال خ بری کان ادایی CTVnews بیشترین احساسات منفی را دارد. 364 خالصه در این فصل به طراحی الگوریتم های داده مح ور پرداخ تیم .م ا روی س ه جنب ه از الگوریتم‌های داده محور تمرکز ک ردیم :ذخیره‌س ازی ،فشرده‌س ازی ،و جری ان .م ا بررسی کردیم ک ه چگون ه ویژگی‌ه ای داده می‌توان د ط راحی ذخیره‌س ازی داده را دیکته کند .ما دو نوع مختل ف الگ وریتم فش رده س ازی داده را بررس ی ک ردیم .در فصل بعدی ،به الگوریتم‌های رمزنگاری نگاه خواهیم کرد .ما یاد خواهیم گ رفت ک ه چگونه می توانیم از قدرت این الگوریتم ها برای ایمن سازی پیام های تبادل شده و ذخیره شده استفاده کنیم. 10رمزنگاری 365 "من شعرهای نانوشته ام را به صورت رمزی روی صورتم حمل می کنم!" -جورج الیوت این فصل شما را با الگوریتم های مرتبط با رمزنگ اری آش نا می کن د .م ا ب ا ارائ ه پیشینه شروع می کنیم ،سپس الگوریتم های رمزگذاری متقارن را مورد بحث قرار می دهیم .سپس الگوریتم ) Message-Digest 5 (MD5و الگ وریتم هش ایمن ( )SHAرا توضیح می دهیم و محدودیت ها و ضعف های پیاده س ازی الگ وریتم ه ای متق ارن را ارائ ه می دهیم .در ادام ه ،الگوریتم‌ه ای رمزگ ذاری نامتق ارن و نح وه استفاده از آنها برای ایجاد گواهی‌های دیجیتال را م ورد بحث ق رار خ واهیم داد .در نهایت ،ما یک مثال عملی ارائه خ واهیم داد ک ه تم ام این تکنی ک ه ا را خالص ه می کن د .در پای ان این فص ل ،ش ما ی ک درک اساس ی از مس ائل مختل ف مرب وط ب ه رمزنگاری خواهید داشت .موضوعات زیر در این فصل مورد بحث قرار می گیرند: ‏ مقدمه ای بر رمزنگاری ‏ آشنایی با انواع تکنیک های رمزنگاری ‏ مثال -نگرانی های امنیتی هنگام استقرار یک مدل یادگیری ماشینی بیایید با نگاه کردن به مفاهیم اولیه شروع کنیم. مقدمه ای بر رمزنگاری تکنیک های محافظت از اسرار قرن هاست که وجود داش ته اس ت .اولین تالش ه ا برای ایمن سازی و مخفی کردن داده ها از دشمنان به کتیب ه ه ای باس تانی کش ف ش ده ب ر روی بناه ای ت اریخی در مص ر ب رمی گ ردد ،ج ایی ک ه از الفب ای خاص ی استفاده می شد ک ه تنه ا مع دودی از اف راد م ورد اعتم اد آن را می ش ناختند .این شکل اولیه امنیت ،ابهام نامیده می شود و امروزه نیز به اش کال مختل ف اس تفاده می شود .برای اینک ه این روش ک ار کن د ،مح افظت از راز بس یار مهم اس ت ،ک ه معنای مخفی الفبا در مثال باال خواهد ب ود .بع دا ً در زم ان جن گ جه انی اول و دوم 366 یافتن راه‌های بی اشتباه برای محافظت از پیام‌های مهم ،اهمیت پیدا کرد .در اواخر قرن بیستم ،با معرفی الکترونیک و کامپیوتر ،الگ وریتم ه ای پیچی ده ای ب رای ایمن سازی داده ها توسعه یافتند که زمینه جدیدی به نام رمزنگاری را به وجود آورد .این فص ل جنب ه ه ای الگ وریتمی رمزنگ اری را م ورد بحث ق رار می ده د .ه دف این الگ وریتم ه ا امک ان تب ادل امن داده بین دو فرآین د ی ا ک اربر اس ت .الگوریتم‌ه ای رمزنگاری استراتژی‌های استفاده از توابع ریاض ی را ب رای تض مین اه داف امنی تی بیان شده پیدا می‌کنن د .ابت دا ب ه اهمیت «ض عیف‌ترین پیون د» در زیرس اخت نگ اه می‌کنیم. درک اهمیت ضعیف ترین پیوند گاهی اوقات ،هنگام معماری امنیت زیرساخت دیجیتال ،بر امنیت هر ی ک از نهاده ا بیش از حد تأکید می‌کنیم و به ام نیت سرتاس ری توج ه الزم را نمی‌ک نیم .این ک ار می‌تواند منجر به نادیده گرفتن برخی از حفره‌ها و آسیب‌پذیری‌ها در سیس تم ش ود که بعدا ً می‌توانند توسط هکرها ب رای دسترس ی ب ه داده‌ه ای حس اس م ورد س وء استفاده قرار گیرند. نکته مهمی که باید به خاطر بسپارید این است که یک زیرساخت دیجیتال ،به عنوان یک کل ،به اندازه ضعیف ترین حلقه آن ،قوی است. برای یک هکر ،این ضعیف ترین پیوند می تواند دسترسی درب پشتی ب ه داده ه ای حساس در زیرساخت دیجیتال را فراهم کند. فراتر از یک نقطه خاص ،تقویت درب جلو بدون بس تن تم ام دره ای پش تی فای ده چندانی ن دارد .هم انطور ک ه الگوریتم‌ه ا و تکنیک‌ه ای حف ظ زیرس اخت دیجیت الی، پیچی ده‌تر و پیچی ده‌تر می‌ش وند ،مهاجم ان ن یز ب ه ارتق ای تکنیک‌ه ای خ ود ادام ه می‌دهند .همیشه مهم است که ب ه ی اد داش ته باش ید ک ه یکی از س اده‌ترین راه‌ه ا 367 ب رای مهاجم ان ب رای ه ک ک ردن زیرس اخت‌های دیجیت ال ،اس تفاده از این آسیب‌پذیری‌ها برای دسترسی به اطالعات حساس است. در سال ،2014یک حمله سایبری به یک موسسه تحقیقاتی فدرال کانادا -ش ورای تحقیقات ملی ( - )NRCتخمین زده می شود ک ه ص دها میلی ون دالر هزین ه داش ته باشد .مهاجمان توانستند دهه‌ها داده‌های تحقیقاتی و مطالب مالکیت معن وی را ب ه سرقت ببرند .آنها از یک حفره در نرم افزار آپاچی استفاده کردند که در سرورهای وب برای دسترسی به داده های حساس استفاده می شد. در این فصل ،آسیب‌پذیری‌های الگوریتم‌های رمزنگاری مختلف را برجسته می‌کنیم. بیایید ابتدا به اصطالحات اساسی مورد استفاده نگاه کنیم. اصطالحات پایه بیایید به اصطالحات پایه مربوط به رمزنگاری نگاه کنیم: رمز :الگوریتمی است که عملکرد رمزنگاری خاصی را انجام می دهد. متن ساده :داده های ساده که می تواند یک فایل متنی ،یک ویدیو ،یک بیت مپ یا یک صدای دیجیت الی باش د .در این فص ل ،متن س اده را ب ه ص ورت Pنم ایش می دهیم. متن رمز :متن درهم شده ای است که پس از اعمال رمزنگ اری روی متن س اده به دست می آید .در این فصل ،ما آن را به صورت Cنشان خواهیم داد. مجموعه رمز :مجموعه یا مجموعه ای از اجزای نرم اف زار رمزنگ اری .هنگ امی که دو گره مجزا می خواهند با استفاده از رمزنگاری پیام ها را رد و بدل کنند ،ابتدا باید روی یک مجموعه رمز به توافق برس ند .این ک ار ب رای اطمین ان از اینک ه آنه ا دقیقا ً از همان پیاده سازی توابع رمزنگاری استفاده می کنند مهم است. 368 رمزگذاری :فرآیند تبدیل متن س اده ،P ،ب ه متن رم ز ،C ،رمزگ ذاری نامی ده می شود .از نظر ریاضی ،با encrypt(P) = Cنشان داده می شود. رمزگش++ایی :فرآین د تب دیل متن رم زی ب ه متن س اده .از نظ ر ریاض ی ،ب ا ‏decrypt(C) = Pنشان داده می شود. :Cryptanalysisروش‌ه ای م ورد اس تفاده ب رای تجزی ه و تحلی ل ق درت الگوریتم‌های رمزنگاری .تحلیلگر سعی می کن د متن س اده را ب دون دسترس ی ب ه رمز بازیابی کند. اطالعات قابل شناسایی شخصی ( PII :)PIIاطالعاتی است ک ه در ص ورت استفاده به تنهایی یا همراه با سایر داده های مرتبط می توان ب رای ردی ابی ه ویت یک ف رد اس تفاده ک رد .ب رخی از نمونه‌ه ا ش امل اطالع ات محافظت‌ش ده ،مانن د شماره تامین اجتماعی ،تاریخ تولد ،یا نام خانوادگی مادر است. اجازه دهید ابتدا نیازهای امنیتی یک سیستم را درک کنیم. آشنایی با نیازهای امنیتی مهم اس ت ک ه ابت دا نیازه ای امنی تی دقی ق ی ک سیس تم را درک کنی د .درک این موضوع به ما کمک می کند تا از تکنیک رمزنگاری صحیح استفاده کنیم و حفره های احتمالی یک سیس تم را کش ف ک نیم .یکی از راه‌ه ای ایج اد درک به تر از نیازه ای امنیتی یک سیستم ،پاسخ به چهار سؤال زیر است: ‏ کدام افراد یا فرآیندها باید محافظت شوند؟ ‏ ما از افراد و فرآیندها در برابر چه کسی محافظت می کنیم؟ ‏ کجا باید از آنها محافظت کنیم؟ ‏ چرا از آنها محافظت می کنیم؟ 369 اجازه دهید مثالی از یک ابر خصوصی مجازی ( )VPCدر AWS CloudبزنیمVPC . به ما اجازه می دهد تا یک شبکه ایزوله منطقی ایجاد کنیم که در آن من ابعی مانن د ماشین های مجازی به آن اضافه می شوند .ب رای درک نیازه ای امنی تی ی ک ،VPC مهم است که ابتدا هویت ها را با پاسخ دادن به چهار سوال باال شناسایی کنید. ‏ چند نفر قصد استفاده از این سیستم را دارند؟ ‏ چه نوع اطالعاتی باید محافظت شود؟ ‏ آیا باید فقط از VPCمح افظت ک نیم ی ا در ح ال ارس ال پی امی ب ه سیس تم هستیم که باید رمزگذاری شود و به VPCمخابره شود؟ ‏ طبقه بندی امنیتی داده ها چیس ت؟ خط رات احتم الی چیس ت؟ چ را کس ی انگیزه ای برای تالش برای هک کردن سیستم داشته باشد؟ بیشتر پاسخ‌های این سؤاالت با انجام سه مرحله زیر به دست می‌آیند: مرحله :1موجودیت ها را شناسایی کنید. مرحله :2اهداف امنیتی را تعیین کنید. مرحله :3حساسیت داده ها را درک کنید. بیایید این مراحل را یکی یکی بررسی کنیم. مرحله :1شناسایی موجودیت ها یک موجودیت را می توان به عنوان یک فرد ،یک فرآیند یا یک منبع که بخشی از یک سیستم اطالعاتی است ،تعریف کرد .ابتدا باید شناسایی کنیم که ک اربران ،من ابع و فرآیندها چگونه در زمان اجرا حضور دارند .س پس ،نیازه ای امنی تی این موج ودیت های شناسایی شده را به صورت جداگانه یا گ روهی تع یین می ک نیم .هنگ امی ک ه این نیازها را بهتر درک ک نیم ،می ت وانیم اه داف امنی تی سیس تم دیجیت ال خ ود را تعیین کنیم. 370 مرحله :2تعیین اهداف امنیتی هدف از طراحی یک سیس تم امنی تی مح افظت از اطالع ات در براب ر س رقت ،ب ه خطر افتادن یا حمله است. الگوریتم‌های رمزنگاری معموال ً برای دستیابی به یک یا چن د ه دف امنی تی اس تفاده می‌شوند: احراز هویت :به زبان ساده ،اح راز ه ویت روش ی اس ت ک ه م ا ث ابت می ک نیم کاربر همان کسی است که ادعا می کند .از طریق فرآیند احراز هویت ،ما اطمینان حاصل می کنیم که هویت کاربر تأیید شده است .فرآیند احراز هویت با ارائه هویت کاربر شروع می شود .به دنبال آن اطالعاتی ارائه می شود که فقط توس ط ک اربر شناخته شده است و بنابراین فقط می تواند توسط آنها تولید شود. محرمانگی :داده هایی که نیاز به محافظت دارن د ،داده ه ای حس اس نامی ده می شوند .محرمانگی مفهومی است که داده های حس اس را فق ط ب ه ک اربران مج از محدود می کند .برای محافظت از محرمانگی داده‌های حساس در ط ول انتق ال ی ا ذخیره‌سازی آن ،باید داده‌ها را به گونه‌ای ارائه کنید که غیرقابل خواندن باشد مگ ر توسط کاربران مجاز .این کار ب ا اس تفاده از الگ وریتم ه ای رمزگ ذاری انج ام می شود که در ادامه در این فصل به آنها خواهیم پرداخت. یکپارچگی :یکپارچگی فرآیندی است که نش ان می ده د داده ه ا ب ه هیچ وج ه در طول انتقال یا ذخیره سازی تغی یر نک رده ان د .ب ه عن وان مث ال( TCP/IP ،پروتک ل کنترل انتقال/پروتک ل این ترنت) از الگوریتم‌ه ای جم ع کن ترل ی ا بررس ی اف زونگی چرخه‌ای ( )CRCبرای تأیید یکپارچگی داده‌ها استفاده می‌کند. عدم انکار :عدم انکار توانایی تولید شواهد غیرقابل جعل و انک ار ناپ ذیر مب نی ب ر ارسال یا دریافت پیام است .از این شواهد می توان بعدا ً برای اثب ات دری افت داده ها استفاده کرد. 371 مرحله :3درک حساسیت داده ها درک ماهیت طبقه بندی شده داده ها مهم است .داده‌ه ا توس ط مقام ات نظ ارتی مانند دولت‌ه ا ،آژانس‌ه ا ی ا س ازمان‌ها ب ر اس اس م یزان ج دی ب ودن ع واقب در صورت به خطر افتادن آن دسته‌بندی می‌شوند .دسته بندی داده ها به ما کم ک می کند تا الگوریتم رمزنگاری صحیح را انتخاب کنیم .بیش از یک راه برای دس ته بن دی داده ه ا ،ب ر اس اس حساس یت اطالع اتی آنه ا ،وج ود دارد .بیایی د ب ه روش ه ای معمول طبقه بندی داده ها نگاه کنیم: داده های عمومی یا داده ه++ای طبق++ه بن++دی نش++ده :ه ر چ یزی ک ه ب رای مصرف عمومی در دسترس است .به عنوان مثال ،اطالعاتی که در وب سایت ی ک شرکت یا پورتال اطالعاتی یک دولت یافت می شود. داده های داخلی یا داده های محرمانه :اگرچه برای مصرف عم ومی نیس ت، اما افشای این داده ها در معرض عموم ممکن است عواقب مخربی نداشته باش د. برای مثال ،اگر ایمیل‌های یک کارمند ک ه از م دیرش ش کایت می‌کن د ف اش ش ود، ممکن است برای شرکت شرم‌آور باشد اما ممکن اس ت ع واقب مخ ربی نداش ته باشد. داده‌های حساس یا داده‌های سری :داده‌هایی که ق رار نیس ت ب رای مص رف عمومی باشند و افشای آن در معرض عموم عواقب زیان‌باری برای یک فرد ی ا ی ک سازمان دارد .به عنوان مثال ،افشای جزئیات یک آیفونی ک ه ق رار اس ت در آین ده عرضه شود ،ممکن است به اهداف تجاری اپل آس یب برس اند و ب ه رقب ایی مانن د سامسونگ امتیاز بدهد. داده ه++ای بس++یار حس++اس :داده ه ای ف وق س ری ن یز نامی ده می ش ود .این اطالعاتی است که در صورت افشای آن به شدت ب رای س ازمان زی ان آور خواه د بود .این اطالعات می تواند شامل شماره تامین اجتماعی مش تری ،ش ماره ک ارت اعتباری یا سایر اطالع ات بس یار حس اس باش د .داده ه ای ف وق س ری از طری ق چندین الیه امنیتی محافظت می شوند و برای دسترسی به مجوز خاصی نیاز دارند. 372 به طور کلی ،طراحی های امنیتی پیچیده ت ر بس یار کن دتر از الگ وریتم ه ای س اده هستند .ایجاد تعادل مناسب بین امنیت و عملکرد سیستم بسیار مهم است. آشنایی با طراحی پایه رمزها طراحی رمزها در مورد ایجاد الگوریتمی است که می تواند داده های حساس را به هم بزند تا یک فرآیند مخرب یا یک کاربر غیرمجاز نتواند به آن دسترس ی پی دا کن د. اگرچه با گذشت زمان رمزنگاری‌ها پیچی ده‌تر و پیچی ده‌تر ش ده‌اند ،اص ول پای ه ک ه رمزها بر اساس آن‌ها هستند ،بدون تغییر باقی می‌مانند .بیایید با نگ اهی ب ه ب رخی رمزهای نسبتا ً س اده ش روع ک نیم ک ه ب ه م ا در درک اص ول پای ه ک ه در ط راحی الگوریتم‌های رمزنگاری استفاده می‌شوند کمک می‌کنند. ارائه رمزهای جایگزین رمزهای جایگزین صدها سال است که در اشکال مختلف مورد استفاده قرار گرفته اند .همانطور که از نام آن مشخص است ،رمزهای جایگزین بر اساس ی ک مفه وم ساده هستند -جایگزینی کاراکترها در متن ساده ب ا س ایر کاراکتره ا ب ه روش ی از پیش تعیین شده و سازماندهی شده .بیایید به مراحل دقیق مربوط به این موض وع نگاه کنیم: .1ابتدا هر کاراکتر را به یک کاراکتر جایگزین نگاشت می کنیم. .2سپس ،با جایگزین کردن ه ر ک اراکتر در متن س اده ب ا ک اراکتر دیگ ری در متن رمزی با استفاده از نگاشت جایگزین ،متن ساده را رمزگذاری و به متن رمز تبدیل کنید. . 3برای رمزگشایی ،متن ساده را با استفاده از نگاشت جایگزین بازگردانید. در زیر نمونه هایی از رمزهای مبتنی بر جایگزینی آورده شده است. 373  رمز سزار ‏ چرخش 13 اجازه دهید آنها را با جزئیات بیشتر بررسی کنیم رمز سزار در سزار رمزها بر اس اس ی ک نقش ه ج ایگزینی اس ت .ی ک نگاش ت ج ایگزینی ب ا اعمال یک فرمول ساده که مخفی نگه داشته می شود ،رشته واقعی را ب ه روش ی قطعی تغییر می دهد .نگاشت جایگزینی ،با جایگزینی هر ک اراکتر ب ا ک اراکتر س وم سمت راس ت آن ایج اد می ش ود .این نگاش ت در نم ودار زی ر توض یح داده ش ده است: شکل :1نگاشت جایگزینی رمزهای سزار بیایید ببینیم چگونه می توانیم رمز سزار را با استفاده از پایتون پیاده سازی کنیم: 374 import string ‏rotation = 3 ’’=P = ‘CALM’; C ‏for letter in P: ))C = C+ (chr(ord(letter) + rotation می بینیم که ما یک رمز سزار را روی متن ساده اعمال CALMک ردیم .بیایی د متن رمز را پس از رمزگذاری با رمز سزار چاپ کنیم: گفته می شود که رمزهای سزار توسط ژولی وس س زار ب رای برق راری ارتب اط ب ا مشاورانش استفاده شده است. رمز سزار یک رمز ساده است و پیاده سازی آن آسان است .نکته منفی این اس ت که شکستن آن خیلی سخت نیست زیرا یک هکر می تواند به سادگی تمام تغی یرات احتمالی الفبا را تکرار کند (همه 2626مورد) و ببین د آی ا پی ام معق ولی ظ اهر می شود .ب ا توج ه ب ه توانایی‌ه ای پردازش ی فعلی رایانه‌ه ا ،این تع داد نس بتا ً کمی از ترکیب‌ها برای انجام دادن است .نباید برای محافظت از داده ه ای بس یار حس اس استفاده شود. چرخش )ROT13( 13 ROT13یکی دیگ ر از رمزگ ذاری ه ای مبت نی ب ر ج ایگزینی اس ت .در ،ROT13 نگاشت جایگزینی با جایگزینی هر کاراکتر با نویسه 13در س مت راس ت آن ایج اد می شود .نمودار زیر این موضوع را نشان می دهد: 375 شکل :2-10رمز ROT13 این بدان معنی است که اگر () ROT13تابعی باشد که ROT13را پیاده سازی می کند ،پس موارد زیر اعمال می شود: ‏import codecs 'a_message = 'CALM ''=c )'c=codecs.encode(a_message, 'rot_13 حاال بیایید مقدار کدگذاری شده Cرا چاپ کنیم: )>> print(c ‏PNYZ رمز رمزهای جایگزین تحلیل ِ پیاده سازی و درک رمزهای جایگزین ساده است .متأسفانه شکستن آنها نیز آس ان ی رمزه ای ج ایگزین نش ان می‌ده د ک ه اگ ر از الفب ای است .یک تحلیل ساده رمز ِ زبان انگلیسی استفاده کنیم ،تنها چیزی که برای شکستن رمز نیاز داریم این اس ت که چقدر در حال چ رخش هس تیم .می‌ت وانیم ت ک ت ک ح روف الفب ای انگلیس ی را امتحان کنیم تا زمانی که بتوانیم متن را رمزگش ایی ک نیم .این ب دان معناس ت ک ه 376 برای بازسازی متن ساده حدود 25تالش الزم است .اکنون ،اجازه دهید نوع دیگری از رمزهای ساده را بررسی کنیم. درک رمزهای جابجایی در رمزهای جابجایی ،کاراکتره ای متن س اده جابه‌ج ا می‌ش وند .بیایی د ب ه مراح ل مربوط به این کار نگاه کنیم: . 1ماتریس را ایجاد کنید و اندازه ماتریس جابجایی را انتخاب کنید .بای د ب ه ان دازه کافی بزرگ باشد تا با رشته متن ساده مطابقت داشته باشد. . 2ماتریس را با نوشتن تمام کاراکترهای رشته به صورت افقی پر کنید. .3تمام کاراکترهای رشته را به صورت عمودی در ماتریس بخوانید. بیایید به یک مث ال نگ اه ک نیم .بیایی د متن س اده ) Ottawa Rocks (Pرا در نظ ر بگیریم .ابتدا ،اج ازه دهی د Pرا رمزگ ذاری ک نیم .ب رای آن ،از ی ک م اتریس 4×3 استفاده می کنیم و در متن ساده به صورت افقی می نویسیم: ‏Otta ‏waRo ‏cks فرآیند خواندن ،رشته را به صورت عمودی می خواند ،که متن رمز را تولید می کند .OwctaktRsaoآلمانی ها در جنگ جهانی اول از رمزی به نام ADFGVXاستفاده کردن د ک ه هم از رمزهای جابجایی و هم جایگزینی اس تفاده می ک رد .س ال ه ا بع د ،توس ط ج ورج پینوین کرک شد. بنابراین ،اینها برخی از انواع رمزها هستند .اکنون ،اجازه دهی د ب ه ب رخی از تکنی ک های رمزنگاری که در حال حاضر استفاده می شود نگاهی بیندازیم. 377 آشنایی با انواع تکنیک های رمزنگاری انواع مختلف تکنیک های رمزنگ اری از ان واع مختلفی از الگ وریتم ه ا اس تفاده می کنند و تحت شرایط مختلف مورد اس تفاده ق رار می گیرن د .ب ه ط ور کلی ،تکنی ک های رمزنگاری را می توان به سه نوع زیر تقسیم کرد: ‏ هش کردن ‏ متقارن ‏ نامتقارن بیایید یک به یک آنها را بررسی کنیم. با استفاده از تابع هش رمزنگاری تابع هش رمزنگاری یک الگوریتم ریاضی است که می تواند برای ایجاد اثر انگش ت منحصر به فرد از یک پیام استفاده شود .این یک خروجی با اندازه ثابت به نام هش از متن ساده ایجاد می کند .از نظر ریاضی ،این کار به صورت زیر است: )C1 = hashFunction (P1 توضیحات به شرح ذیل می باشد: P1متن ساده ای است که داده های ورودی را نشان می دهد. C1یک هش با طول ثابت است که توسط تابع هش رمزنگاری تولید می شود. این قضیه در نمودار زیر نشان داده شده است .داده های با طول متغ یر از طری ق یک تابع هش یک طرفه به یک هش با طول ثابت تبدیل می شوند: 378 شکل :3-10توابع هش یک طرفه تابع هش دارای پنج ویژگی زیر است: .1قطعی است .همان متن ساده همان هش را تولید می کند. .2رشته های ورودی منحصر به فرد بای د مق ادیر هش خ روجی منحص ر ب ه ف ردی ایجاد کند. .3صرف نظر از پیام ورودی ،طول ثابتی دارد. .4حتی تغییرات کوچک در متن ساده یک هش جدید ایجاد می کند. .5این یک تابع یک طرفه است ،به این معنی که متن ساده ،P1 ،نمی توان د از متن رمز C1 ،تولید شود. اگر شرایطی داشته باشیم که هر پیام منحص ربه‌فرد دارای ی ک هش منحص ربه‌فرد نباشد ،به آن برخورد می‌گوییم .یعنی اگر دو متن P1و P2داش ته باش یم در م ورد collisionبه معنی ) hashFunction(P1) = hashFunction(P2است .ص رف نظر از الگوریتم هش استفاده ش ده ،برخورده ا ن ادر هس تند .در غ یر این ص ورت، 379 هش کردن مفید نخواهد بود .با این ح ال ،ب رای ب رخی از برنام ه ه ا ،برخورده ا را نمی توان تحمل کرد .در این موارد ،ما باید از یک الگوریتم هش اس تفاده ک نیم ک ه پیچیده‌تر است اما احتمال تولید مقادیر هش که با هم برخورد داش ته باش ند بس یار کمتر است. پیاده سازی توابع هش رمزنگاری توابع هش رمزنگاری را می توان با استفاده از الگوریتم های مختل ف پی اده س ازی کرد .بیایید نگاهی عمیق تر به دو مورد از آنها بیندازیم. درک MD5-tolered MD5توسط Poul-Henning Kampدر سال 1994ساخته شد تا جایگزین MD4 شود .یک هش 128بیتی تولید می کند MD5 .یک الگوریتم نس بتا س اده اس ت ک ه در برابر برخورد آسیب پذیر است .در برنامه هایی که نمی ت وان برخ ورد را تحم ل کرد MD5 ،نباید استفاده شود .بیایید به یک مثال نگاه کنیم .برای تولی د هش MD5 در پایتون ،از کتابخانه passlibاستفاده می کنیم که یکی از محبوب ترین کتابخان ه های منبع باز است که بیش از 30الگوریتم هش رمز عبور را پیاده سازی می کن د. اگر قبال ً روی دستگاه شما نصب نشده است ،با استفاده از کد زیر در یک نوت بوک Jupyterآن را نصب کنید: !pip install passlib در پایتون می توانیم هش MD5را به صورت زیر تولید کنیم: توجه داشته باشید که MD5هش 128بیتی تولید می کند .همانطور که گفت ه ش د، می ت وانیم از این هش تولی د ش ده ب ه عن وان اث ر انگش ت متن اص لی ک ه 380 myPasswordبود اس تفاده ک نیم .بیایی د ببی نیم چگون ه می ت وانیم این ک ار را در پایتون انجام دهیم: توجه داشته باشید که هش تولید شده ب رای رش ته myPasswordب ا هش اص لی مطابقت دارد که یک مقدار Trueایجاد می کند. با این حال ،به محض تغییر متن ساده به myPassword2، Falseرا برگرداند. زمان استفاده از MD5 با نگاهی به تاریخ ،نق اط ض عف MD5در اواخ ر ده ه 1990کش ف ش د .عل یرغم چندین مشکل ،استفاده از MD5همچنان محب وب اس ت .ای ده آل اس ت ک ه ب رای بررسی یکپارچگی داده ها استفاده شود .توجه داشته باشید ک ه خالص ه پی ام MD5 به طور منحصر به فردی هش را با مالک آن مرتبط نمی کند .از آنجایی ک ه خالص ه MD5یک هش امضا شده نیست MD5برای اثبات اینک ه ف ایلی از زم ان محاس به هش تغییر نکرده است استفاده می شود .برای اثبات صحت یک فایل استفاده نمی ش ود .اکن ون ،بیایی د ب ه الگ وریتم هش دیگ ری نگ اه ک نیم -الگ وریتم هش ایمن ( .)SHA آشنایی با الگوریتم هش امن ()SHA SHAتوسط موسسه ملی استاندارد و فناوری ( )NISTتوس عه یافت ه اس ت .بیایی د ببینیم چگونه می ت وانیم از پ ایتون ب رای ایج اد هش ب ا اس تفاده از الگ وریتم SHA استفاده کنیم: 381 from passlib.hash import sha512_crypt = sha512_crypt.using(salt )""qIo0foX5",rounds=5000).hash("myPassword ‏myHash=sha512_crypt.using(salt="qIo0foX5",rounds=5000). )"hash("myPassword ب ه اس تفاده از پ ارامتری ب ه ن ام saltتوج ه کنی د Salting .روی ه اض افه ک ردن کاراکترهای تصادفی قبل از هش است .اجرای این کد نتیجه زیر را به ما می دهد: توجه داشته باشید که وقتی از الگوریتم SHAاستفاده می کنیم ،هش تولید شده 512بایت است. کاربرد تابع هش رمزنگاری توابع هش برای بررسی یکپارچگی یک فایل پس از ک پی ک ردن از آن اس تفاده می شود .برای دستیابی به این هدف ،هنگامی که یک فایل از یک منب ع ب ه مقص د ک پی می شود (به عنوان مثال ،زمانی که از یک وب س رور دانل ود می ش ود) ،ی ک هش مربوطه نیز با آن کپی می شود .این هش اصلی ،horiginal ،به عنوان اثر انگشت فایل اصلی عمل می کند .پس از کپی ک ردن فای ل ،هش را دوب اره از نس خه ک پی شده فایل ایجاد می کنیم -یعنی .hcopiedاگ ر - horiginal = hcopiedیع نی هش تولید شده ب ا هش اص لی مط ابقت دارد -این تأیی د می کن د ک ه فای ل تغی یر نکرده است و هیچ یک از داده ها در طول فرآیند دانلود از بین نرفتند .ما می‌ت وانیم از هر تابع هش رمزنگاری ،مانند MD5یا SHAب رای تولی د هش ب رای این منظ ور استفاده کنیم .اکنون ،اجازه دهید به رمزگذاری متقارن نگاه کنیم. 382 استفاده از رمزگذاری متقارن در رمزنگاری ،یک کلید ترکیبی از اع داد اس ت ک ه ب رای رمزگ ذاری متن س اده ب ا استفاده از الگوریتم انتخابی م ا اس تفاده می ش ود .در رمزگ ذاری متق ارن ،ب رای رمزگذاری و رمزگشایی از یک کلید استفاده می کنیم .اگر کلید مورد استفاده برای رمزگذاری متقارن Kباشد ،ب رای رمزگ ذاری متق ارن ،معادل ه زی ر برق رار اس ت: EK(P) = CHere، Pمتن ساده و Cمتن رمز است .برای رمزگش ایی ،از هم ان کلید Kاستفاده می کنیم .برای تبدیل آن به P:DK(C) = Pاین فرآین د در نم ودار زیر نشان داده شده است: شکل :4-10رمزگذاری متقارن حاال بیایید ببینیم چگونه می توانیم از رمزگذاری متقارن با پایتون استفاده کنیم. کدگذاری رمزگذاری متقارن ما از بسته رمزنگاری Pythonدر این بخش برای نش ان دادن رمزگ ذاری متق ارن اس تفاده خ واهیم ک رد .این ی ک بس ته ج امع اس ت ک ه بس یاری از الگ وریتم ه ای رمزنگاری مانند رمزهای متقارن و خالصه های مختلف پیام را پیاده سازی می کند. هنگام استفاده از آن برای اولین بار ،ابتدا باید آن را با استفاده از دستور pipنصب کنیم: !pip install cryptography 383 پس از نصب ،اکنون می توانیم از بسته برای پیاده سازی رمزگذاری متقارن ،به شرح زیر استفاده کنیم: ابتدا ،بیایید بسته های مورد نیاز خود را وارد کنیم: ‏import cryptography as crypt ‏from cryptography.fernet import Fernet بیایید کلید را تولید کنیم: حاال بیایید کلید را باز کنیم: )'file = open('mykey.key', 'wb )file.write(key )(file.close با استفاده از کلید ،اکنون سعی می کنیم پیام را رمزگذاری کنیم: )'file = open('mykey.key', 'rb )(key = file.read )(file.close حاال بیایید پیام را با استفاده از همان کلید رمزگشایی کنیم: ‏from cryptography.fernet import Fernet )(message = "Ottawa is really cold".encode )f = Fernet(key 384 )encrypted = f.encrypt(message بیایید پیام را رمزگشایی کنیم و آن را به متغیری به نام decryptاختصاص دهیم: )decrypted = f.decrypt(encrypted حاال بیایید متغیر decryptرا چاپ کنیم تا بررسی کنیم که آیا می‌توانیم همان پیام را دریافت کنیم: بیایید به برخی از مزایای رمزگذاری متقارن نگاه کنیم. مزایای رمزگذاری متقارن اگرچه عملکرد رمزگذاری متقارن بستگی به الگوریتم دقیقی دارد ک ه اس تفاده می شود ،اما به طور کلی ،سرعت آن بسیار بیشتر از رمزگذاری نامتقارن است. مشکالت رمزگذاری متقارن هنگامی که دو کاربر ی ا فرآین د قص د دارن د از رمزگ ذاری متق ارن ب رای برق راری ارتباط استفاده کنند ،باید کلیدها را با اس تفاده از ی ک کان ال امن مبادل ه کنن د .این امر باعث دو مشکل زیر می شود: ‏ حفاظت از کلید :نحوه محافظت از کلید رمزگذاری متقارن. ‏ توزیع کلید :نحوه اشتراک گذاری کلید رمزگذاری متقارن از مبدا تا مقصد. حاال بیایید به رمزگذاری نامتقارن نگاه کنیم. 385 رمزگذاری نامتقارن در دهه ،1970رمزگذاری نامتق ارن ب رای رف ع ب رخی از نق اط ض عف رمزگ ذاری متقارن ابداع شد که در بخش قبل مورد بحث قرار گرفت .اولین گام در رمزگذاری نامتقارن ،تولید دو کلید متفاوت است که کامال ً متف اوت ب ه نظ ر می رس ند ام ا از نظر الگوریتمی به هم مرتبط هستند .یکی از آنها به عنوان کلید خصوص ی ،Kpr ،و دیگری به عنوان کلید عمومی Kpu ،انتخاب می شود .از نظ ر ریاض ی ،می ت وانیم این را به صورت زیر نشان دهیم: ‏EKpr(P) = C در اینجا Pمتن ساده و Cمتن رمز است .ما می توانیم آن را به صورت زیر رمزگشایی کنیم: ‏DKpu(C) = P کلیدهای عمومی قرار است آزادانه توزیع شوند و کلیدهای خصوصی توسط صاحب جفت کلید ،مخفی نگه داش ته ش وند .اص ل اساس ی این اس ت ک ه اگ ر ب ا یکی از کلیدها رمزگذاری کنی د ،تنه ا راه رمزگش ایی آن اس تفاده از کلی د دیگ ر اس ت .ب ه عنوان مثال ،اگر داده ها را با استفاده از کلید عمومی رمزگذاری ک نیم ،بای د آن را با استفاده از کلید دیگر -یعنی کلید خصوصی -رمزگشایی ک نیم .اکن ون ،بیایی د ب ه یکی از پروتکل‌های اساسی رمزگذاری نامتقارن نگاهی بیندازیم -دس ت دادن الی ه سوکت‌های امن ( / )SSLامنیت الیه انتق ال ( - )TLSک ه مس ئول برق راری ارتب اط بین دو گره با استفاده از رمزگذاری نامتقارن است. الگوریتم دست دادن SSL/TLS 386 SSLدر ابتدا برای افزودن امنیت ب ه HTTPایج اد ش د .ب ا گذش ت زم ان SSL ،ب ا پروتکل کارآمدتر و ایمن تر به نام TLSجایگزین شد .دست دادن TLSاساس نحوه ایجاد یک جلس ه ارتب اطی امن توس ط HTTPاس ت .ی ک دس ت دادن TLSبین دو موجودیت شرکت کننده -کالینت و سرور -رخ می دهد .این فرآیند در نم ودار زی ر نشان داده شده است: شکل :5-10جلسه ایمن بین مشتری و سرور یک دست دادن TLSیک ارتباط امن بین گره های ش رکت کنن ده برق رار می کن د. مراحل زیر در این فرآیند دخیل است: . 1مشتری پیام سالم مشتری را به سرور ارسال می کند .این پیام همچ نین ح اوی موارد زیر است: ‏ نسخه TLSکه استفاده می شود ‏ لیست مجموعه های رمز پشتیبانی شده توسط مشتری ‏ یک الگوریتم فشرده سازی ‏ یک رشته بایت تصادفی که توسط byte_clientشناسایی می شود 387 .2سرور یک پیام س الم س رور را ب ه مش تری ارس ال می کن د .این پی ام همچ نین حاوی موارد زیر است: ‏ مجموعه رمزی که توسط سرور از لیست ارائه شده توسط مشتری انتخاب شده است ‏ شناسه جلسه ‏ یک رشته بایت تصادفی که توسط byte_serverشناسایی می شود ‏ یک گواهی دیجیتال سرور ،شناسایی شده توسط ،cert_serverحاوی کلی د عمومی سرور اگر سرور ب ه گ واهی دیجیت ال ب رای اح راز ه ویت مش تری ی ا درخواس ت گ واهی مشتری نیاز دارد ،درخواست سرور مشتری شامل موارد زیر نیز می شود: ‏ اسامی متمایز CAهای قابل قبول ‏ انواع گواهی های پشتیبانی شده .3مشتری cert_serverرا تأیید می کند. .4مش تری ی ک رش ته ب ایت تص ادفی تولی د می کن د ک ه توس ط byte_client2 شناس ایی می ش ود و آن را ب ا کلی د عم ومی س رور ارائ ه ش ده از طری ق cert_serverرمزگذاری می کند. .5مش تری ی ک رش ته ب ایت تص ادفی تولی د می کن د و رمزگ ذاری ه ا را ب ا کلی د خصوصی خود شناسایی می کند. .6سرور گواهی مشتری را تأیید می کند. .7مشتری یک پیام تمام شده را به سرور ارس ال می کن د ک ه ب ا ی ک کلی د مخفی رمزگذاری شده است. . 8برای تایید این موضوع از سمت سرور ،سرور یک پیام تمام شده ب رای مش تری ارسال می کند که با یک کلید مخفی رمزگذاری شده است. 388 . 9سرور و مشتری اکنون یک کانال امن ایجاد کرده اند .آنها اکنون می توانن د پی ام هایی را که به طور متقارن با کلید مخفی مشترک رمزگذاری شده اند ،مبادله کنند. کل متدولوژی به صورت زیر نشان داده شده است: شکل :6-10جلسه امن بین مشتری و سرور حال ،بیایی د در م ورد اینک ه چگون ه می‌ت وانیم از رمزگ ذاری نامتق ارن ب رای ایج اد زیرساخت کلید عمومی ( )PKIاستفاده کنیم ،که ب رای ب رآوردن ی ک ی ا چن د ه دف امنیتی برای یک سازمان ایجاد می‌شود ،بحث کنیم. زیرساخت کلید عمومی 389 ب رای پی اده س ازی PKIاز رمزگ ذاری نامتق ارن اس تفاده می ش ود PKI .یکی از محبوب ترین و قابل اعتمادترین راه ها برای مدیریت کلیدهای رمزگذاری برای ی ک سازمان است .همه شرکت کنندگان به یک مرجع اعتماد مرکزی به نام CAاعتم اد دارند CA .هویت افراد و سازمان‌ها را تأیید می‌کن د و س پس گواهی‌ه ای دیجیت الی برای آن‌ها صادر می‌کند (یک گواهی دیجیتال ح اوی ی ک ک پی از کلی د عم ومی ی ک شخص یا سازمان و هویت آن است) ،و تأیید می‌کند که کلید عمومی مرتب ط ب ا آن فرد یا سازمان واقعا ً متعلق به آن فرد یا سازمان است .روش ک ار ب ه این ص ورت است که CAاز کاربر می خواهد هویت خود را با استانداردهای متف اوتی ک ه ب رای افراد و سازمان ها دنبال می شود ،اثبات کند .این امر می‌تواند شامل تأیید مالکیت نام دامنه باشد ،یا می‌تواند شامل فرآیند دقیق‌تری باشد ک ه ش امل اثب ات ف یزیکی هویت است ،بسته به ن وع گ واهی دیجیت الی ک ه ک اربر در تالش ب رای دری افت آن است .اگر CAمتقاعد شود که کاربر واقعا ً هم ان چ یزی اس ت ک ه ادع ا می کن د، کاربر سپس کلید رمزگذاری عمومی خود را از طریق یک کان ال امن در اختی ار CA قرار می دهد CA .از این اطالعات برای ایجاد یک گواهی دیجیتالی استفاده می کند که حاوی اطالعاتی درباره هویت کاربر و کلی د عم ومی آنه ا اس ت .این گ واهی ب ه صورت دیجیتالی توسط CAامضا شده است .سپس کاربر می‌تواند گواهی خ ود را به هر کسی که می‌خواهد هویت خود را تأیید کند ،بدون نیاز به ارسال آن از طری ق ی ک کان ال امن نش ان ده د ،زی را خ ود گ واهی ح اوی اطالع ات حساس ی نیس ت. شخصی که گواهی را دریافت می کند مجبور نیست مستقیما ً هویت ک اربر را تأیی د کند .آن شخص به سادگی می تواند اعتبار گ واهی را ب ا تأیی د امض ای دیجیت ال CA تأیید کند ،که تأیید می کند که کلید عمومی موجود در گواهی در واقع متعلق به فرد یا سازمانی است که در گواهی نامگذاری شده است. کلید خصوصی CAیک سازمان ،ضعیف ت رین حلق ه در زنج یره اعتم اد PKIاس ت. برای مثال ،اگر یک جعل هویت ،کلی د خصوص ی مایکروس افت را در دس ت بگ یرد، می‌تواند با جع ل ه ویت به‌روزرس انی وین دوز ،نرم‌اف زار مخ رب را روی میلیون‌ه ا رایانه در سراسر جهان نصب کند. 390 بالک چین و رمزنگاری شکی نیست ک ه در س ال ه ای اخ یر هیج ان زی ادی در م ورد بالک چین و ارزه ای دیجیتال وجود دارد .گفت ه می ش ود ک ه بالک چین یکی از امن ت رین فن اوری ه ایی است که تا به حال اختراع شده اس ت .هیج ان در م ورد بالک چین ب ا بیت ک وین و ارزهای دیجیتال شروع شد .اگرچه ارزهای دیجیت ال از س ال 1980توس عه یافتن د، ام ا ب ا بیت ک وین ،ب ه جری ان اص لی تب دیل ش د .اف زایش بیت ک وین ب ه دلی ل در دسترس بودن گسترده سیستم های توزیع شده بود .این دو وی ژگی مهم اس ت ک ه آن را به یک تغییر دهنده بازی تبدیل کرده است .ط راحی آن غ یرمتمرکز اس ت .از شبکه ای از ماینرها و یک الگوریتم توزیع شده به ن ام بالک چین اس تفاده می کن د. بیت کوین بر اساس انگیزه های ذاتی برای ماینرها است تا با تالش برای پاس خ ب ه یک معمای محاسباتی بسیار پیچی ده ،ب رای اف زودن ی ک بالک ب ه بالک چین رق ابت کنند .ماینر برنده ،واجد شرایط دریافت بیت کوین ه ای مختل ف ب ه عن وان پ اداش برای تالش خود است .اگرچه بالک چین ب رای بیت ک وین توس عه یافت ه اس ت ،ام ا کاربردها و استفاده های گسترده تری پی دا ک رده اس ت .بالک چین ب ر اس اس ی ک الگوریتم اجماع توزیع ش ده ،ب ا اس تفاده از فن اوری دف تر ک ل توزی ع ش ده ()DLT است .دارای ویژگی های زیر است: غیر متمرکز :مبتنی بر معماری توزیع ش ده اس ت ن ه متمرک ز .هیچ مرج ع مرک زی وجود ندارد .هر گره در یک سیستم بالک چین در حفظ یکپ ارچگی DLTنقش دارد. بین تمام گره های شرکت کننده یک توافق قابل اعتماد وجود دارد .در این معم اری توزیع‌شده ،تراکنش‌ها در گره‌های تشکیل‌دهنده ذخیره می‌ش وند و ی ک ش بکه P2P را تش کیل می‌دهن د .تش کل‌های زنجیره‌مانن د :هم ه تراکنش‌ه ای بالک چین در فهرست بلوک‌ه ا انباش ته می‌ش وند .هنگ امی ک ه چن دین بل وک اض افه می ش ود، تشکیل زنجیره مانند ایج اد می کن د و دلی ل نامگ ذاری آن اس ت:Immutability . داده ه ا امن ،تک رار ش ده و در بل وک ه ای تغییرناپ ذیر ذخ یره می ش وند .ق ابلیت 391 اطمینان :ی ک اص ل و نس ب ی ا تاریخچ ه ب رای ه ر ت راکنش حف ظ می ش ود .ه ر تراکنش با اس تفاده از تکنیک‌ه ای رمزنگ اری تأیی د و ثبت می‌ش ود .تحت پوش ش، تراکنش‌های بالک چین از هش‌های رمزنگاری هر ی ک از بلوک‌ه ای قبلی در زنج یره استفاده می‌کنند .توابع هش برای ایجاد اثر انگشت یک طرفه از یک تکه دلخ واه از داده استفاده می کن د .درخت مرک ل ی ا درخت هش ب رای تأیی د داده ه ای ذخ یره شده ،مدیریت و انتقال بین گره های مختلف ش رکت کنن ده اس تفاده می ش ود .از SHA-2برای هش استفاده می کند .نمودارِ یک تراکنش خ اص در زی ر نش ان داده شده است. شکل :7-10درخت مرکل بالک چین 392 شکل 7-10عملکرد بالک چین را خالص ه می کن د .این نش ان می ده د ک ه چگون ه تراکنش ها به بلوک ها تبدیل می شوند که به نوبه خود به زنجیره تبدیل می ش وند. در سمت چپ ،چهار تراکنش A، B، Cو Dنشان داده شده است .س پس ،ریش ه Merkleبا اعمال تابع هش ایجاد می شود .ریش ه Merkleرا می ت وان ب ه عن وان یک ساختار داده در نظ ر گ رفت ک ه بخش ی از هِ دِر بل وک را تش کیل می ده د .از آنجایی که ت راکنش تغییرناپ ذیر اس ت ،ت راکنش ه ای ثبت ش ده قبلی ،قاب ل تغی یر نیستند .توجه داشته باشید که مقدار هش هدر بلوک قبلی ن یز ب ه بخش ی از بل وک تبدیل می‌شود ،بنابراین سوابق تراکنش را در بر می‌گیرد. این س اختارهای پردازش ی زنج یره ای ایج اد می کن د و دلی ل نامگ ذاری بالک چین است .هر یک از کاربران بالک چین با استفاده از رمزنگ اری ،اح راز ه ویت و مج از می شوند و نیاز به احراز هویت و مجوز شخص ثالث را از بین می برند .از امض ای دیجیتال برای ایمن سازی تراکنش ها نیز استفاده می شود .گیرنده ت راکنش دارای ی ک کلی د عم ومی اس ت .فن اوری بالک چین دخ الت اش خاص ث الث را ب رای اعتبارسنجی تراکنش ح ذف می‌کن د و ب رای آن ب ه اثب ات رمزنگ اری متکی اس ت. ت راکنش ه ا ب ا اس تفاده از امض ای دیجیت ال ایمن می ش وند .ه ر ک اربر ی ک کلی د خصوصی منحصر به فرد دارد و هویت دیجیتال خود را در سیستم ایجاد می کند مثال -نگرانی های امنیتی هنگام استقرار یک مدل یادگیری ماشینی در فصل ،6الگوریتم‌های یادگیری ماشین بدون نظ ارت ،ب ه چرخ ه حی ات CRISP- ( DMفرایند استاندارد بین صنعتی برای داده کاوی) نگاه کردیم که مراح ل مختل ف آموزش و استقرار یک مدل یادگیری ماشین را مشخص می‌کن د .پس از آم وزش و ی ارزیابی یک مدل ،مرحله نهایی استقرار است .اگر این ی ک م دل ی ادگیری ماش ین ِ حیاتی است ،پس می‌خواهیم مطمئن ش ویم ک ه تم ام اه داف امنی تی آن ب رآورده شده‌اند .بیایید چالش‌های رایجی را ک ه در اس تقرار م دلی مانن د این ب ا آن مواج ه هستیم و اینکه چگونه می‌توانیم با استفاده از مفاهیم م ورد بحث در این ،چالش‌ه ا 393 را برطرف کنیم ،تحلیل کنیم .فصل ما در مورد استراتژی هایی ب رای مح افظت از مدل آموزش دیده خود در برابر سه چالش زیر بحث خواهیم کرد: ‏ حمالت ).Man-in-the-Middle (MITM ‏ بالماسکه کردن ‏ تعدیل داده ها بیایید یک به یک آنها را بررسی کنیم. حمالت MITM یکی از حمالت احتمالی که می خواهیم از م دل خ ود در براب ر آن مح افظت ک نیم، حمالت MITMاست .ی ک حمل ه MITMزم انی رخ می‌ده د ک ه ی ک نف وذگر س عی می‌کند از ی ک ارتب اط ظ اهرا ً خصوص ی اس تراق س مع کن د ت ا ی ک م دل ی ادگیری ماشینی آموزش‌دی ده را مس تقر کن د .بیایی د س عی ک نیم حمالت MITMرا به‌ط ور مت والی ب ا اس تفاده از ی ک س ناریوی مث ال درک ک نیم .ف رض ک نیم ب اب و آلیس می‌خواهند با استفاده از PKIپیام‌ها را رد و بدل کنند: .1باب از { }PrBob، PuBobو آلیس از { }PrAlice، PuAliceاستفاده می‌کند. باب یک پیام ،MBob ،و آلیس یک پیام MAlice ،ایجاد کرده است .آنه ا می خواهن د این پیام ها را به روشی امن با یکدیگر رد و بدل کنند. . 2در ابتدا باید کلیدهای عمومی خود را مبادله کنند تا ارتباط امنی با یکدیگر برقرار کنند .این بدان معناست ک ه ب اب قب ل از ارس ال پی ام ب ه آلیس از PuAliceب رای رمزگذاری MBobاستفاده می کند. .3فرض می کنیم یک استراق سمع به ن ام Xداریم ک ه از { }PrX, PuXاس تفاده می کند .مهاجم می تواند مبادالت کلید عمومی بین باب و آلیس را رهگیری کرده و آنها را با گواهی عمومی خود جایگزین کند. .4باب MBobرا به آلیس می فرستد و آن را به جای PuAliceبا PuXرمزگذاری می کند و به اشتباه فکر می کند که این گواهی عمومی آلیس است .استراق س مع 394 Xارتباط را قطع می کند .پیام MBobرا رهگیری می کند و ب ا اس تفاده از PrBob آن را رمزگشایی می کند. این حمله MITMدر نمودار زیر نشان داده شده است: شکل :8-10اکنون بیایید ببینیم چگونه می توانیم از حمالت MITMجلوگیری کنیم. چگونه از حمالت MITMجلوگیری کنیم بیایید بررسی کنیم که چگونه می توانیم ب ا مع رفی ی ک CAب ه س ازمان از حمالت MITMجلوگیری کنیم .فرض کنید نام این CA، myTrustCAاست .گواهی دیجیتال دارای کلید عمومی خود به نام PumyTrustCAاست که در آن تعبیه ش ده اس ت. myTrustCAمسئول امضای گواهینامه ها برای همه افراد سازمان از جمل ه آلیس و ب اب اس ت .این ب دان مع نی اس ت ک ه Bobو Aliceه ر دو گواهینام ه خ ود را توس ط myTrustCAامض ا ک رده ان د .هنگ ام امض ای گواهینامه‌ه ای خ ود، myTrustCAتأیید می‌کند ک ه آنه ا واقع ا ً هم ان چ یزی هس تند ک ه ادع ا می‌کنن د. اکنون ،با این ترتیب جدید ،بیایید تعامل متوالی بین ب اب و آلیس را دوب اره بررس ی کنیم: 395 .1باب از { }PrBob، PuBobو آلیس از { }PrAlice، PuAliceاستفاده می‌کند. هر دو کلید عمومی آنها در گواهینام ه ه ای دیجیت ال آنه ا ک ه توس ط myTrustCA امضا شده اند ،تعبیه شده است .باب یک پی ام ،MBob ،و آلیس ی ک پی امMAlice ، ایجاد کرده است .آنها می خواهند این پیام ها را به روشی امن با یکدیگر رد و ب دل کنند. .2آنها گواهی های دیجیتال خود را که ح اوی کلی دهای عم ومی اس ت ،مبادل ه می کنند .آنها تنها در صورتی کلیدهای عمومی را می پذیرند که در گواهینامه های امض ا شده توسط CAمورد اعتماد آنها تعبیه شده باشد .آنها باید کلی دهای عم ومی خ ود را مبادله کنند تا ارتباط امنی با یکدیگر برقرار کنند .این بدان معنی اس ت ک ه ب اب قبل از ارسال پیام به آلیس از PuAliceبرای رمزگذاری MBobاستفاده می کند. .3فرض می کنیم یک استراق سمع به ن ام Xداریم ک ه از { }PrX, PuXاس تفاده می کند .مهاجم می تواند مبادالت کلید عمومی بین باب و آلیس را رهگ یری کن د و آنها را با گواهی عمومی خود PuXجایگزین کند. .4باب تالش Xرا رد می کند ،زیرا گواهی دیجیتال شخص بد توسط CAکه باب به آن اعتماد دارد امضا نشده است .دست دادن ایمن لغو می شود ،تالش برای حمله با مهر زمانی و تمام جزئیات ثبت می شود ،و یک استثنا امنیتی مطرح می شود. هنگام استقرار یک مدل یادگیری ماشین آموزش دیده ،ب ه ج ای ،Aliceی ک س رور استقرار وجود دارد Bob .تنها پس از ایجاد ی ک کان ال امن ،ب ا اس تفاده از مراح ل ذکر شده قبلی ،مدل را مستقر می کند .اجازه دهی د ببی نیم چگون ه می ت وانیم این مدل را در پایتون پیاده سازی کنیم .ابتدا اجازه دهید بس ته ه ای م ورد نی از را وارد کنیم. ‏from xmlrpc.client import SafeTransport, ServerProxy ‏import ssl 396 .اکنون اجازه دهید کالسی ایجاد کنیم که بتواند گواهینامه را تأیید کند class CertVerify(SafeTransport): def __init__(self, cafile, certfile=None, keyfile=None): SafeTransport.__init__(self) self._ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) self._ssl_context.load_verify_locations(cafile) if cert: self._ssl_context.load_cert_chain(certfile, keyfile) self._ssl_context.verify_mode = ssl.CERT_REQUIRED def make_connection(self, host): s = super().make_connection((host, {'context': self._ssl_context})) return s # Create the client proxy s = ServerProxy('https://cloudanum.com:15000', transport=VerifyCertSafeTransport('server_cert.pem اجازه دهید آسیب‌پذیری‌های دیگری را که مدل مستقر ما می‌تواند با آن‌ها مواجه . بررسی کنیم،شود پرهیز از بالماسکه کردن ک ه، و به داده های حساس، باب است، وانمود می کند که یک کاربر مجازX مهاجم م ا بای د از م دل در. دسترسی پی دا می کن د،مدل آموزش دیده در این مورد است 397 برابر هرگون ه تغی یر غیرمج از مح افظت ک نیم .یکی از راه‌ه ای مح افظت از م دل آموزش‌دیده‌مان در برابر پنهان‌کاری ،رمزگذاری مدل با کلید خصوصی ک اربر مج از است .پس از رمزگذاری ،هر کسی می‌تواند مدل را ب ا رمزگش ایی از طری ق کلی د عم ومی ک اربر مج از ،ک ه در گ واهی دیجیت ال او ی افت می‌ش ود ،بخوان د و از آن استفاده کند .هیچ کس نمی تواند تغییرات غیرمجاز در مدل ایجاد کند. رمزگذاری داده و مدل پس از استقرار مدل ،داده‌های بدون برچسب بی‌درنگ که به عنوان ورودی به مدل ارائه می‌شوند نیز می‌توانن د دس تکاری ش وند .م دل آم وزش دی ده ب رای اس تنتاج استفاده می شود و یک برچسب برای این داده ها ارائه می دهد .برای محافظت از داده ه ا در براب ر دس تکاری ،بای د از داده ه ا در ح الت اس تراحت و در ارتب اط مح افظت ک نیم .ب رای مح افظت از داده ه ا در ح الت اس تراحت ،می ت وان از رمزگذاری متقارن برای رمزگذاری آن استفاده کرد .برای انتق ال داده‌ه ا ،می‌ت وان کانال‌های امن مبتنی بر SSL/TLSایجاد ک رد ت ا ی ک تون ل امن را ف راهم کن د .این تونل امن را می توان برای انتقال کلید متقارن استفاده کرد و داده ه ا را می ت وان قبل از ارائه به مدل آموزش دیده روی سرور رمزگشایی کرد .این یکی از راه های کارآمدتر و بی خطا برای محافظت از داده ها در برابر دستکاری است .رمزگ ذاری متقارن همچنین می‌تواند برای رمزگذاری یک م دل زم انی ک ه آم وزش داده ش ده است ،قبل از استقرار آن در سرور اس تفاده ش ود .این ک ار از هرگون ه دسترس ی غیرمجاز به مدل قب ل از اس تقرار آن جلوگ یری می کن د .بیایی د ببی نیم چگون ه می توانیم یک مدل آموزش دیده را با استفاده از رمزگذاری متقارن با کمک مراحل زیر در منب ع رمزگ ذاری ک نیم ، ،و س پس آن را در مقص د قب ل از اس تفاده از آن رمزگشایی کنیم: .1ابتدا یک مدل ساده را با استفاده از مجموعه داده Irisآموزش می دهیم: ‏from sklearn.linear_model ‏import LogisticRegression 398 from cryptography.fernet import Fernet from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y) model = LogisticRegression() model.fit(X_train, y_train) :حاال بیایید نام فایل هایی را که مدل را ذخیره می کنند تعریف کنیم filename_source = 'myModel_source.sav' filename_destination = "myModel_destination.sav" filename_sec = "myModel_sec.sav" ف ایلی اس ت ک ه م دل رمزگ ذاریfilename_source توجه داشته باش ید ک ه.1 ف ایلیfilename_destination .نشده آموزش دی ده را در منب ع ذخ یره می کن د اس ت ک ه م دل رمزگ ذاری نش ده آم وزش دی ده را در مقص د ذخ یره می کن د و . مدل آموزش داده شده رمزگذاری شده استfilename_sec : برای ذخیره مدل آموزش دیده در یک فایل استفاده می کنیمpickle ما از.2 from pickle import dump dump(model, open(filename_source, 'wb')) 399 تعریف کنیم که یک کلید متقارن ایجاد می کند وwrite_key )( بیایید تابعی به نام : ذخیره می کندkey.key آن را در فایلی به نام def write_key(): key = Fernet.generate_key() with open("key.key", "wb") as key_file: key_file.write(key) تعریف کنیم که بتواند کلید ذخیره شده را ازload_key )(حاال بیایید تابعی به نام : بخواندkey.key فایل def load_key(): return open("key.key", "rb").read() تعریف ک نیم ک ه می توان د م دل راencrypt )( اجازه دهید یک تابع،در مرحله بعد : ذخیره کندfilename_sec رمزگذاری و آموزش دهد و آن را در فایلی به نام def encrypt(filename, key): f = Fernet(key) with open(filename_source,"rb") as file: file_data = file.read() encrypted_data = f.encrypt(file_data) with open(filename_sec,"wb") as file: file.write(encrypted_data) 400 ما از این توابع برای تولید یک کلید متقارن و ذخیره آن در یک فایل استفاده خواهیم کرد .سپس ،این کلید را می خوانیم و از آن برای ذخیره مدل آموزش دیده خ ود در فایلی به نام filename_secاستفاده می کنیم: )(write_key ))(encrypt(filename_source,load_key اکنون مدل رمزگذاری شده است .به مقصدی که برای پیش بینی استفاده می شود منتقل می شود: ابتدا تابعی به نام () decryptتعریف می ک نیم ک ه می ت وانیم ب ا اس تفاده از کلی د ذخ یره ش ده در فای ل key.keyم دل را از filename_secب ه filename_destinationرمزگشایی کنیم: ‏def decrypt(filename, key): )f = Fernet(key ‏with open(filename_sec, "rb") as file: )(encrypted_data = file.read )decrypted_data = f.decrypt(encrypted_data ‏with open(filename_destination, "wb") as file: )file.write(decrypted_data ح ال بیایی د از این ت ابع ب رای رمزگش ایی م دل و ذخ یره آن در ف ایلی ب ه ن ام filename_destinationاستفاده کنیم: ))(decrypt(filename_sec,load_key 401 حاال بیایید از این فایل رمزگذاری نشده برای بارگذاری مدل و استفاده از آن برای پیش بینی استفاده کنیم: توجه داشته باشید که برای رمزگذاری م دل از رمزگ ذاری متق ارن اس تفاده ک رده ایم .در صورت نیاز می توان از همین تکنیک برای رمزگذاری داده ه ا ن یز اس تفاده کرد. خالصه در این فصل با الگوریتم های رمزنگاری آشنا شدیم .ما با شناسایی اه داف امنی تی یک مسئله شروع کردیم .سپس تکنیک‌های مختل ف رمزنگ اری را م ورد بحث ق رار دادیم و همچ نین جزئی ات زیرس اخت PKIرا بررس ی ک ردیم .در نه ایت ،راه‌ه ای مختلف محافظت از یک مدل یادگیری ماشینی آموزش‌دیده در برابر حمالت رایج را بررسی کردیم .اکنون ،شما باید بتوانید اصول الگوریتم‌ه ای امنی تی م ورد اس تفاده برای حف اظت از زیرس اخت‌های فن اوری اطالع ات م درن را درک کنی د .در فص ل بعدی ،به طراحی الگوریتم‌ه ای مقی اس ب زرگ خ واهیم پ رداخت .م ا چ الش ه ا و مبادالت مربوط به طراحی و انتخاب الگوریتم های بزرگ را مطالع ه خ واهیم ک رد. همچنین استفاده از GPUو کالسترها برای حل مسائل پیچی ده را بررس ی خ واهیم کرد. 402 11الگوریتم مقیاس بزرگ الگوریتم های مقیاس بزرگ برای حل مسائل پیچیده غول پیکر طراحی شده اند. ویژگی مشخصه الگوریتم‌های مقیاس بزرگ ،نیاز آنها به بیش از یک موت ور اج رایی به دلیل مقیاس داده‌ها و نیازهای پردازشی آنهاست .این فصل با بحث درباره اینکه چه نوع الگوریتم هایی برای اجرای موازی مناسب هستند شروع می ش ود .س پس مسائل مربوط به الگوریتم های موازی سازی را مورد بحث قرار می دهد .س پس، معماری یکپارچه دس تگاه محاس به ( )CUDAرا ارائ ه می‌کن د و در م ورد چگ ونگی اس تفاده از واح د پ ردازش گ رافیکی ( )GPUی ا آرایه‌ای از GPUب رای تس ریع الگوریتم‌ها بحث می‌کند .همچنین در مورد تغییراتی که باید در الگوریتم ایج اد ش ود تا به طور موثر از قدرت GPUاستفاده شود ،بحث می شود .در نه ایت ،این فص ل در مورد محاسبات خوشه ای بحث می کند و نحوه ایجاد مجموعه داده ه ای توزی ع شده انعطاف پذیر ( )RDDsرا برای ایجاد یک پیاده س ازی م وازی بس یار س ریع از الگوریتم های استاندارد مورد بحث قرار می ده د .در پای ان این فص ل ،ش ما ق ادر خواهید بود استراتژی های اساسی مربوط به طراحی الگوریتم های مقیاس بزرگ را درک کنید .موضوعات زیر در این فصل پوشش داده شده است: ‏ مقدمه ای بر الگوریتم های مقیاس بزرگ 403  طراحی الگوریتم های موازی ‏ الگوریتم هایی برای استفاده از GPU ‏ درک الگوریتم های استفاده از محاسبات خوشه ای ‏ نحوه استفاده از GPUبرای اجرای الگوریتم های مقیاس بزرگ ‏ چگونه از قدرت خوشه ها برای اجرای الگوریتم های مقیاس بزرگ اس تفاده کنیم بیایید با مقدمه شروع کنیم. مقدمه ای بر الگوریتم های مقیاس بزرگ انسان دوست دارد به چالش کش یده ش ود .ب رای ق رن ه ا ،ن وآوری ه ای مختل ف بشری به ما این امکان را داده اس ت ک ه مس ائل بس یار پیچی ده را ب ه روش ه ای مختلف حل کنیم .از پیش‌بی نی منطق ه ه دف بع دی حمل ه ملخ گرفت ه ت ا محاس به بزرگترین عدد اول ،روش‌های ارائه پاسخ برای مسائل پیچیده اط راف م ا همچن ان در حال تکامل بودند .با ظهور کامپیوتر ،ما یک راه قدرتمند جدید برای حل الگوریتم های پیچیده پیدا کردیم. تعریف یک الگوریتم خوب طراحی شده و مقیاس بزرگ الگوریتم مقیاس بزرگ که به خوبی طراحی شده است دارای دو ویژگی زیر است: ‏ ط راحی ش ده اس ت ت ا حجم عظیمی از داده ه ا و نیازه ای پ ردازش را ب ا استفاده از مجموعه منابع موجود به طور بهینه مدیریت کند. ‏ مقی اس پ ذیر اس ت .هم انطور ک ه مس ئله پیچی ده ت ر می ش ود ،می توان د پیچیدگی را به سادگی با تهیه منابع بیشتر کنترل کند. 404 یکی از کاربردی‌ترین راه‌های پیاده‌سازی الگوریتم‌ه ای مقی اس ب زرگ ،اس تفاده از استراتژی تقسیم و حل است ،یعنی تقسیم مسئله بزرگ‌تر به مسائل ک وچک‌تر ک ه می‌توانند مستقل از یکدیگر حل شوند. اصطالحات بیایید به ب رخی از اص طالحاتی ک ه می ت وان ب رای محاس به کیفیت الگ وریتم ه ای مقیاس بزرگ استفاده کرد نگاه کنیم. تاخیر تأخیر زمانی است که برای انجام یک محاسبه صرف می ش ود .اگ ر Computer1 یک محاسبه منف رد را نش ان می‌ده د ک ه از t1ش روع می‌ش ود و در t2ب ه پای ان می‌رسد ،می‌توانیم بگوییم :تأخیر = t2-t1 توان عملیاتی در زمینه رایانش ابری موازی ،توان عملیاتی تعداد محاسباتی است که می‌توانند به طور همزمان انجام شوند .برای مثال ،اگر در ،t1بتوانیم چهار محاس بات همزم ان C1، C2، C3و C4را انجام دهیم ،آنگاه توان عملیاتی چهار خواهد بود. اصل محلی بودن داده به طور س نتی ،در پ ردازش م وازی و توزی ع ش ده ،اص ل محلی ب ودن داده ه ا در تصمیم گیری برای تخصیص بهینه منابع بسیار مهم است .اساسا ً نشان می دهد ک ه حرکت داده ها باید در زیرساخت های توزیع شده متوقف شود .در ص ورت امک ان، 405 ب ه ج ای انتق ال داده ه ا ،بای د ب ه ص ورت محلی در گ ره ای ک ه در آن ق رار دارد پردازش شود ،در غیر این صورت ،مزایای م وازی س ازی و مقی اس بن دی افقی را کاهش می دهد .در همین حال ،پیش رفت در پهن ای بان د ش بکه ،اص ل محلی ب ودن داده را کم تر مرتب ط ک رده اس ت .پهن ای بان د ش بکه را می ت وان ب ا پهن ای بان د دوبخشی شبکه که پهنای بان د بین دو قس مت مس اوی از ی ک ش بکه اس ت ان دازه گیری کرد و هنگامی که در محاسبات توزیع شده با منابعی که ب ه ص ورت ف یزیکی توزیع شده اند ،این قضیه مهم است .اگر یک خط بین دو مجموعه از من ابع در ی ک شبکه توزیع شده رسم کنیم ،پهن ای بان د دوبخش ی ن رخ ارتب اطی اس ت ک ه در آن سرورها در یک طرف خط می توانند با سرورهای طرف دیگر ارتباط برق رار کنن د، همانطور که در شکل 1-11نشان داده شده اس ت .ب رای اینک ه محاس بات توزی ع شده به طور موثر کار کند ،این مهمترین پ ارامتری اس ت ک ه بای د در نظ ر گرفت ه شود .اگر پهنای باند دوبخشی شبکه به مقدار کافی نداشته باشیم ،مزایای به دست آمده از در دسترس بودن موتورهای اجرایی متعدد در محاس بات توزی ع ش ده تحت الشعاع لینک های ارتباطی کند قرار می گیرد. 406 شکل :1-11پهنای باند دوبخشی پهنای باند دوبخشی باال ما را قادر می سازد تا داده ها را در جایی که هس تند ب دون کپی برداری پردازش ک نیم .این روزه ا رای انش اب ری ب زرگ ،پهن ای بان د دو بخش بزرگی را به شبکه گوگل ارائه می دهد .به عنوان مثال ،در ی ک مرک ز داده گوگ ل، پهنای باند دوبخشی به اندازه PB/s 1پهنای باند است .پهنای بان د دوبخش ی س ایر فروشندگان ابر عمده نیز در این مح دوده اس ت .ب ا پهن ای بان د دوبخش ی پت ابیت، گزینه‌ها و الگوهای طراحی جدید ب رای ذخ یره و پ ردازش کارآم د داده‌ه ای ب زرگ پدیدار می‌شوند .ارتباطات به قدری سریع است که اصل محلّی داده که همیش ه در معماری‌های Big Dataمبتنی بر Hadoopقدیمی‌تر رعایت می‌شد ،دیگر مرتب ط نیست .دیگ ر انتق ال فای ل ه ا و ذخ یره آنه ا ب ه ص ورت محلی منطقی نیس ت .در عوض ،منطقی است که از داده ها از جایی که ذخیره شده است استفاده کنید. 407 مقیاسی کردن مقیاس افقی برای تقسیم یک مسئله پیچیده به مسائل کوچکتر اس تفاده می ش ود که می توانند به بیش از یک منبع محاسباتی اختصاص داده شوند .برای یک راه ح ل کارآمد ،ما به دنبال پیاده سازی دو ویژگی زیر در زیرساخت خود هستیم: .1قابلیت ارتجاعی :توانایی زیرس اخت ب رای ت امین من ابع کم و بیش ب ا توج ه ب ه نیازهای محاسباتی. .2تع ادل ب ار :اس تفاده از تم ام من ابع موج ود ب ه روش بهین ه ب رای بهین ه س ازی عملکرد ،دسترسی پذیری و قابلیت اطمینان. بگذارید یک به یک آنها را بررسی کنیم: قابلیت ارتجاعی توان ایی زیرس اخت ب رای اف زودن ی ا ح ذف من ابع ب ا تغی یر نیازمن دی ه ا ،ق ابلیت ارتجاعی نامیده می شود .مقیاس خودکار در رایانش ابری یکی از راه‌های دستیابی به قابلیت ارتجاعی است .مقیاس خودکار در شکل 2-11نش ان داده ش ده اس ت. بر اساس نیاز ،گروه سرور می تواند تعداد گره های گروه سرور را تنظیم کند. شکل :2-11مقیاس خودکار سرور 408 سه غول رایانش ابری ،گوگل ،آمازون و مایکروس افت می توانن د زیرس اخت ه ای بسیار انعطاف پذیری را ارائه دهند .با توج ه ب ه ان دازه عظیم من ابع مش ترک آنه ا، تعداد کمی از ش رکت ه ا وج ود دارن د ک ه پتانس یل مط ابقت ب ا ق ابلیت ارتج اعی زیرساخت این سه شرکت را دارند .اگر زیرساخت قابلیت ارتج اعی داش ته باش د، می تواند یک راه حل مقیاس پذیر برای مسئله ایجاد کند. تعادل بار Load Balancingمکانیزم توزیع کارآمد ب ار ک اری بین من ابع محاس باتی موج ود است .مکانیسم های مختلفی وجود دارد که می توان از آنها برای توزیع بار استفاده کرد .ساده‌ترین الگوریتم Round Robinاست که حجم کار به ط ور مس اوی بین منابع محاسباتی موجود در یک مکانیسم چرخه‌ای توزیع می‌شود .این ک ار در ش کل 3-11نشان داده شده است. شکل :3-11تعادل بار 409 دو راه وجود دارد که می‌توانیم تعادل بار را هوشمندتر کنیم. ‏ ‏ با افزودن قوانین توزیع بار( :به‌جای انجام آن به روش چرخه‌ای ساده) با افزودن مقیاس خودکار سرور :این کار در ش کل 4-11نش ان داده ش ده است. شکل :4-11تعادل بار هوشمند با قوانین و مقیاس خودکار سرور طراحی الگوریتم های موازی توجه به این نکته مهم است که الگوریتم های م وازی ی ک گلول ه نق ره ای نیس تند. حتی بهترین معماری های موازی ط راحی ش ده ممکن اس ت عملک ردی را ک ه م ا انتظار داریم را ارائه ندهن د .یکی از قوانی نی ک ه ب ه ط ور گس ترده ب رای ط راحی الگوریتم های موازی استفاده می شود ،قانون امدال است. قانون امدال()Amdahl 410 ژن امدال یکی از اولین افرادی بود که در ده ه 1960پ ردازش م وازی را مطالع ه کرد .او قانون Amdahlرا پیشنهاد کرد ،که هنوز هم قابل اج را اس ت و می توان د مبنایی برای درک مبادالت مختلف در هنگام طراحی یک راه حل محاس باتی م وازی باشد .قانون امدال را می توان به صورت زیر توضیح داد :این قانون بر اس اس این مفهوم است که در هر فرآیند محاس باتی ،نمی ت وان هم ه فرآین دها را ب ه ص ورت موازی اجرا کرد .یک بخش متوالی از فرآیند وجود خواهد داش ت ک ه نمی ت وان آن را موازی کرد .بیایید به یک مثال خاص نگاه کنیم. فرض کنید می خواهیم تعداد زیادی فایل ذخیره شده در ک امپیوتر را بخ وانیم و می خواهیم با استفاده از داده های موجود در این فایل ها یک مدل یادگیری ماش ینی را آموزش دهیم .کل این فرآیند Pنامیده می شود .بدیهی است که Pرا می ت وان ب ه دو مورد زیر تقسیم کرد .فرآیندهای فرعی: :P1فایل های موجود در دایرکتوری را اسکن کنید ،لیستی از نام فای ل ه ا را ایج اد کنید که با فایل ورودی مطابقت دارد و آن را ارسال کنید. :P2فایل ها را بخوانید ،خط لوله پردازش داده را ایجاد کنید ،فای ل ه ا را پ ردازش کنید و مدل را آموزش دهید. انجام تجزیه و تحلیل فرآیند متوالی زم ان اج رای Pب ا ) Tseq(Pنش ان داده می ش ود .زم ان اج رای P1و P2ب ا ) Tseq(P1و ) Tseq(P2نشان داده می شود .بدیهی است که هنگام اجرا ب ر روی یک گره ،می توانیم دو چیز را مشاهده کنیم: P2نمی تواند قبل از تکمیل P1شروع به اجرا کند .این با P1 -- > P2نشان داده می شود )Tseq(P) = Tseq(P1) + Tseq(P2 411 بیایید فرض کنیم که Pبه طور کلی 10دقیقه طول می کشد تا روی یک گره اج را شود .از این 10دقیقه P1 2 ،دقیقه طول می کشد و P2 8دقیقه طول می کشد تا روی یک گره اجرا شود .این قضیه در نمودار زیر نشان داده شده است: شکل :5-11زمان صرف شده برای اجرای P1و ( P2به عنوان مثال ،با خیال راحت تغییر دهید) اکنون نکته مهمی که باید به آن توجه کرد این است که P1ماهیت ترتی بی دارد .م ا نمی‌توانیم آن را با موازی کردن سریع‌تر کنیم .از طرف دیگ ر P2 ،را می ت وان ب ه راحتی به وظایف فرعی موازی تقسیم کرد که می توانند ب ه ص ورت م وازی اج را ش وند .بن ابراین ،می‌ت وانیم ب ا اج رای م وازی آن را س ریع‌تر ک نیم .م زیت اص لی اس تفاده از رای انش اب ری ،در دس ترس ب ودن مجموع ه ب زرگی از من ابع اس ت و بسیاری از آنها به صورت م وازی اس تفاده می‌ش وند .ط رح اس تفاده از این من ابع برای یک مسئله معین ،برنامه اجرا نامیده می شود .قانون Amdahlبه طور ج امع برای شناسایی تنگناها برای یک مسئله معین و مجموع ه ای از من ابع اس تفاده می شود. انجام تحلیل اجرای موازی اگر بخواهیم از بیش از یک گره برای اف زایش س رعت Pاس تفاده ک نیم ،فق ط ب ا ضریب s>1روی P2تأثیر می گذارد: 412 سرعت فرآیند Pرا می توان به راحتی به صورت زیر محاسبه کرد: نسبت بخش موازی پذیر یک فرآیند به کل آن با bنشان داده می شود و به صورت زیر محاسبه می شود: 413 برای مثال ،در سناریوی قبل .b = 8/10 = 0.8 ،ساده سازی این معادالت ،قانون امدال را به ما می دهد: در اینجا موارد زیر را داریم: Pفرآیند کلی است. bنسبت بخش موازی پذیر Pاست. sسرعت به دست آمده در بخش موازی پذیر Pاست. بیایید فرض کنیم که قصد داریم فرآیند Pرا روی سه گره موازی اجرا کنیم: P1بخش متوالی است و با استفاده از موازی نمی توان آن را کاهش داد و 2ثانیه زمان می برد. P2اکنون به جای 9ثانیه 3ثانیه طول می کشد. بنابراین ،کل زمان صرف شده توسط فرآیند Pبه 5ثانیه کاهش می یابد ،همانطور که در نمودار زیر نشان داده شده است: 414 شکل :6-11کاهش بازه زمانی ( Pبا خیال راحت تغییر دهید) در مثال قبل می توانیم موارد زیر را محاسبه کنیم: = npتعداد پردازنده ها = 3 = bقسمت موازی = ٪81.81 = 9/11 = sافزایش سرعت = 3 حال ،بیایید به یک نمودار معمولی نگاه کنیم که قانون امدال را توضیح می دهد: 415 شکل :7-11نموداری که قانون امدال را نشان می دهد در نمودار قبل ،نمودار بین sو npرا برای مقادیر مختلف bرسم می کنیم. جریان هوا -یک کاربرد عملی از جریان هوا برای نگ ارش گ ردش ک ار ب ه عن وان گرافه ای ب دون دور جهت دار ( )DAGوظایف استفاده کنید .زمان‌بندی جریان هوا ،وظایف شما را در مجموعه‌ای از کارگران در حالی که وابستگی‌های مشخص شده را دنبال می‌کند ،اج را می‌کن د. ابزارهای غنی خ ط فرم ان ،انج ام ج راحی ه ای پیچی ده روی DAGه ا را ب ه ی ک فوریت تبدیل می کند .رابط کاربری غنی ،تصویرسازی خطوط لول ه در ح ال اج را در تولید ،نظارت بر پیش رفت ،و عیب ی ابی مس ائل را در ص ورت نی از آس ان می کند DAG .ها پارامتری هستند ،همیشه شامل بازه ای هستند که برای آن "در ح ال اجرا هستند" (فاص له داده) ،ام ا ب ا س ایر پارامتره ای اختی اری ن یز ک ار می کنن د. 416 وظایف دارای وابستگی هایی هستند که ب ه یک دیگر اعالم ش ده ان د .این ک ار را در یک DAGیا با استفاده از عملگرهای >> و << خواهید دید: شکل :8-11نمایش یک DAG درک جزئیات کار وقتی یک الگوریتم را موازی می کنیم ،یک کار بزرگتر به چندین کار م وازی تقس یم می شود .یافتن تعداد بهینه وظایف موازی که ی ک ک ار بای د ب ه آنه ا تقس یم ش ود، همیشه ساده نیست .اگر وظایف م وازی خیلی کم باش د ،م ا از محاس بات م وازی سود زیادی نخواهیم برد .اگر وظایف بیش از حد وجود داشته باشد ،س ربار بیش از حد ایجاد می کند .این یک چالش است که ب ه عن وان جزئی ات ک ار ن یز نامی ده می شود. فعال کردن پردازش همزمان در پایتون ساده‌ترین راه برای فعال کردن پردازش موازی در پایتون ،شبیه‌س ازی ی ک فرآین د فعلی است که ی ک فرآین د همزم ان جدی د ب ه ن ام فرآین د فرزن د را آغ از می‌کن د. 417 برنامه‌نویسان پایتون ،اگرچه زیست‌شناس نیستند ،فرآیند شبیه‌سازی خود را ایج اد کرده‌اند .درست مانند یک گوسفند شبیه سازی شده ،کپی شبیه سازی شده از کپی دقیق فرآیند اصلی است. استراتژی پردازش چند منبعی در ابتدا ،الگوریتم های مقیاس بزرگ برای اجرا بر روی ماشین های عظیمی به ن ام ابررایانه ها استفاده می شد .این ابر رایانه ها فضای حافظه یکسانی داشتند. منابع همگی محلی بودند – از نظ ر ف یزیکی در ی ک ماش ین ق رار می گرفتن د .این بدان معنی است که ارتباطات بین پردازنده های مختلف بس یار س ریع ب وده و آنه ا می توانن د متغیره ای مش ابهی را از طری ق فض ای حافظ ه مش ترک ب ه اش تراک بگذارند .با تکامل سیستم ها و افزایش نیاز به اجرای الگوریتم های مقیاس بزرگ، ابررایانه ها به حافظه مشترک توزیع شده ( )DSMتبدیل ش دند ک ه در آن ه ر گ ره پردازشی دارای بخشی از حافظه فیزیکی بود .در نهایت ،خوشه‌هایی توسعه یافتن د که به‌طور سست جفت شده‌اند و به ارسال پیام از میان گره‌ه ای پردازش ی متکی هستند .برای الگوریتم‌های مقیاس ب زرگ ،بای د بیش از ی ک موت ور اج رایی را پی دا کنیم که به صورت موازی کار می‌کنند تا یک مسئله پیچیده را حل کنیم: 418 شکل :9-11استراتژی پردازش چند منبعی سه استراتژی برای داشتن بیش از یک موتور اجرایی وجود دارد: ‏ به درون نگاه کنید :از من ابع موج ود در رایان ه به ره ب رداری کنی د .از ص دها هسته پردازنده گرافیکی برای اجرای یک الگ وریتم مقی اس ب زرگ اس تفاده کنید. ‏ به بیرون نگاه کنید :از محاسبات توزی ع ش ده ب رای ی افتن من ابع محاس باتی بیشتری استفاده کنید که می توانند به طور جمعی برای حل مسئله مقی اس بزرگ مورد استفاده قرار گیرند. ‏ استراتژی ترکیبی :از محاسبات توزیع شده استفاده کنید و در هر یک از گ ره ها ،از GPUیا آرای ه ای از GPUب رای تس ریع در اج رای الگ وریتم اس تفاده کنید. معرفی CUDA 419 پردازنده‌های گرافیکی در اصل برای پردازش گرافیکی طراحی شده‌اند .آنه ا ب رای مطابقت با نیازهای بهین ه س ازی در م ورد داده ه ای چن د رس انه ای ی ک ک امپیوتر معمولی طراحی شده اند .برای انجام این کار ،آنها وی ژگی ه ای خاص ی را توس عه داده اند که آنها را از CPUها متمایز می کند .به عن وان مث ال ،آنه ا در مقایس ه ب ا تعداد محدود هسته های ،CPUهزاران هسته دارند .سرعت کالک آنه ا بس یار کم تر از یک CPUاست .یک GPU DRAMمخصوص ب ه خ ود را دارد .ب ه عن وان مث ال، RTX 2080انویدیا دارای 8گیگابایت رم است .توج ه داش ته باش ید ک ه GPUه ا دستگاه های پردازش تخصصی هس تند و وی ژگی ه ای واح د پ ردازش عم ومی ،از جمله وقفه ها یا ابزارهای آدرس دهی دستگاه ها ،ب ه عن وان مث ال ،ص فحه کلی د و ماوس را ندارند .در اینجا معماری GPUها آمده است: شکل :10-11معماری پردازنده های گرافیکی ب ه زودی پس از تب دیل ش دن ب ه پردازن ده‌های گ رافیکی رایج ،دانش مندان داده، شروع به کاوش در پردازنده‌های گرافیکی برای پتانسیل آن‌ه ا ب رای انج ام کارآم د عملیات م وازی کردن د .از آنج ایی ک ه ی ک GPUمعم ولی ه زاران ALUدارد ،این پتانسیل را دارد که 1000فرآیند همزمان ایجاد کن د .این ک ار ب اعث می ش ود ک ه معماری گرافیکی برای محاسبات موازی داده بهینه شده باشد .از این رو ،الگوریتم هایی که می توانند محاسبات موازی را انجام دهند برای GPUه ا مناس ب هس تند. 420 ب ه عن وان مث ال ،جس تجوی ش ی در ی ک وی دیو ح داقل 20براب ر س ریعتر در پردازنده‌های گرافیکی در مقایسه با پردازنده‌های مرکزی شناخته می‌شود. الگوریتم‌های گراف ،که در فصل ،5الگوریتم‌های گراف مورد بحث قرار گرفت ،ب ر روی پردازنده‌های گرافیکی بسیار سریع‌تر از پردازنده‌ها اجرا می‌شوند .برای تحقق رویاهای دانشمندان داده برای استفاده کامل از GPUب رای الگوریتم‌ه ا ،انوی دیا در سال 2007یک چارچوب متن باز به نام CUDAایجاد کرد .ک ه مخف ف Compute Unified Device Architectureاست CUDA .کار CPUو GPUرا به ترتیب به عن وان میزب ان و دس تگاه خالص ه می کن د .میزب ان یع نی CPUوظیف ه فراخ وانی دستگاه را بر عهده دارد ک ه هم ان GPUاس ت .معم اری CUDAدارای الی ه ه ای مختلفی از انتزاعات است که می توان به صورت زیر ارائه کرد: 421 شکل :11-11معماری یک CUDA توجه داشته باشید که CUDAروی پردازنده‌های گرافیکی انویدیا اجرا می‌شود .نیاز به پشتیبانی در هس ته سیس تم عام ل دارد CUDA .در ابت دا ب ا پش تیبانی از هس ته لینوکس شروع به کار کرد .اخیراً ،ویندوز به طور کامل پشتیبانی می شود .س پس، CUDA Driver APIرا داریم که ب ه عن وان پلی بین APIزب ان برنام ه نویس ی و درایور CUDAعمل می کند .در الیه باالیی ،ما از C، ++ Cو Pythonپش تیبانی می کنیم. طراحی الگوریتم های موازی بر روی CUDA بیایید نگاهی عمیق‌تر ب ه چگ ونگی س رعت بخش یدن ب ه عملی ات پردازش ی خ اص توسط GPUداشته باشیم .همانطور ک ه می دانیم CPU ،ه ا ب رای اج رای مت والی داده ها طراحی شده اند که منجر به زمان اج رای قاب ل ت وجهی ب رای کالس ه ای خاصی از برنامه ها می شود .بیایید به مثال پردازش تص ویری در ان دازه 1920در 1200نگاه کنیم .می توان محاسبه کرد که 2204000پیکسل برای پردازش وجود دارد .پردازش متوالی به این معنی است که پردازش آنها در یک CPUسنتی زم ان زی ادی ط ول خواه د کش ید .پردازن ده‌های گ رافیکی م درن مانن د تس الی انوی دیا می‌توانن د این مق دار ب اورنکردنی 2204000رش ته م وازی را ب رای پ ردازش پیکسل‌ها ایجاد کنند .برای اکثر برنامه ه ای چن د رس انه ای ،پیکس ل ه ا می توانن د مستقل از یکدیگر پردازش شوند و به سرعت قابل توجهی دست پیدا کنند .اگر ه ر پیکسل را با یک نخ نگاشت کنیم ،همه آنها می توانند در زمان ثابت ( O )1پردازش شوند .اما پردازش تصویر تنها برنامه ای نیست که می توانیم از موازی سازی داده ها برای سرعت بخشیدن ب ه فرآین د اس تفاده ک نیم .م وازی س ازی داده ه ا را می توان در تهیه داده ها برای کتابخانه ه ای ی ادگیری ماش ین اس تفاده ک رد .در واق ع، 422 GPUمی تواند زمان اجرای الگوریتم های موازی پذیر را به شدت کاهش ده د ک ه شامل موارد زیر است: ‏ استخراج پول برای بیت کوین ‏ شبیه سازی در مقیاس بزرگ ‏ تجزیه و تحلیل DNA ‏ تجزیه و تحلیل فیلم و عکس پردازنده‌های گرافیکی ب رای ی ک برنام ه ی چن د داده ( )SPMDط راحی نش ده‌اند. برای مثال ،اگر بخواهیم هش یک بلوک داده را محاسبه کنیم ،یک برنامه واحد است ک ه نمی توان د ب ه ص ورت م وازی اج را ش ود .پردازن ده‌های گ رافیکی در چ نین سناریوهایی کن دتر عم ل می‌کنن د .ک دی ک ه می‌خ واهیم روی GPUاج را ک نیم ب ا کلمات کلیدی ویژه CUDAب ه ن ام هس ته مش خص می‌ش ود .این هس ته ه ا ب رای عالمت گذاری توابعی که قصد داریم روی GPUها برای پردازش موازی اجرا ک نیم استفاده می شود .بر اساس هسته ها ،کامپایلر GPUکد مورد نیاز برای اجرا شدن روی GPUو CPUرا از هم جدا می کند. استفاده از GPUبرای پردازش داده در پایتون پردازنده‌های گرافیکی برای پردازش داده‌ها در ی ک س اختار داده چن د بع دی ع الی هستند. این ساختارهای داده ذاتا ً قابل موازی سازی هستند .بیایید ببینیم چگون ه می ت وانیم از GPUبرای پردازش داده های چند بعدی در پایتون استفاده کنیم: .1ابتدا اجازه دهید بسته های پایتون مورد نیاز را وارد کنیم: ‏import numpy as np 423 import cupy as cp import time ک ه ی ک بس ته س نتی، اس تفاده خ واهیم ک ردNumPy ما از یک آرایه چند بع دی در یک آرایه چند بعدی با اس تفاده از، سپس. استفاده می کندCPU پایتون است که از زم ان بن دی ه ا، سپس. استفاده می کندGPU ایجاد می کنیم که ازCuPy یک آرایه :را با هم مقایسه می کنیم ### Running at CPU using Numpy start_time = time.time() myvar_cpu = np.ones((800,800,800)) end_time = time.time() print(end_time - start_time) ### Running at GPU using CuPy start_time = time.time() myvar_gpu = cp.ones((800,800,800)) cp.cuda.Stream.null.synchronize() end_time = time.time() print(end_time - start_time) : خروجی زیر را ایجاد می کند،اگر این کد را اجرا کنیم 424 توجه داشته باشید که ح دود 1.13ثانی ه ب رای ایج اد این آرای ه در NumPyو ح دود 0.012در CuPyطول کشیده است که باعث می شود مقداردهی اولی ه این آرای ه 92برابر سریعتر در GPUباشد. محاسبات خوشه ای محاس بات خوش ه‌ای یکی از روش‌ه ای پیاده‌س ازی پ ردازش م وازی ب رای الگوریتم‌های مقیاس بزرگ اس ت .در محاس بات خوش ه ای ،م ا چن دین گ ره را از طریق یک شبکه بسیار پرسرعت ب ه هم متص ل می ک نیم .الگ وریتم ه ای مقی اس عنوان کار ،ارسال می شوند .هر کار به وظایف مختلفی تقسیم می ش ود بزرگ به ِ و هر کار بر روی یک گره جداگانه اج را می ش ود .آپ اچی اس پارک یکی از محب وب ترین روش های پیاده سازی محاسبات خوشه ای است .در آپاچی اسپارک ،داده ه ا به مجموعه داده های توزیع شده مقاوم در برابر خط ا تب دیل می ش وند ک ه ب ه آن مجموعه داده های توزیع شده انعطاف پذیر ( )RDDمی گویند RDD .ها انتزاع هسته Apache Sparkهستند .آنها مجموع ه ای تغییرناپ ذیر از عناص ر هس تند ک ه می توانند به صورت موازی کار کنند .آنها به پارتیشن ها تقسیم می شوند و در سراسر گره ها توزیع می شوند ،همانطور که در اینجا نشان داده شده است: 425 شکل :12-11محاسبات خوشه ای از طریق این ساختار داده موازی ،می توانیم الگوریتم ها را به صورت موازی اجرا کنیم. پیاده سازی پردازش داده ها در آپاچی اسپارک بیایید ببینیم چگونه می توانیم یک RDDدر Apache Sparkایجاد کنیم و پ ردازش توزیع شده را روی آن در سراسر خوشه اجرا کنیم: .1برای این کار ،ابتدا باید یک جلسه Sparkجدید به شرح زیر ایجاد کنیم: ‏from pyspark.sql import SparkSession = spark )(SparkSession.builder.appName('cloudanum').getOrCreate 426 هنگ امی ک ه ی ک جلس ه Sparkایج اد ک ردیم ،از ی ک فای ل CSVب رای منب ع RDD استفاده می کنیم .سپس ،تابع زیر را اجرا می کنیم -یک RDDایجاد می کند که ب ه عنوان یک DataFrameبه نام dfانتزاع می شود .ق ابلیت ان تزاع RDDب ه عن وان DataFrameدر Spark 2.0اضافه ش ده اس ت و این ک ار پ ردازش داده ه ا را آسان تر می کند: = df ‏spark.read.csv('taxi2.csv',inferSchema=True,header=True ) بیایید به ستون های DataFrameنگاه کنیم: 427 در مرحله بعد ،می توانیم یک جدول موقت از DataFrameایجاد کنیم ،به صورت زیر: )"df.createOrReplaceTempView("main هنگامی که جدول موقت ایجاد شد ،می توانیم دستورات SQLرا برای پردازش داده ها اجرا کنیم: نکته مهمی که باید به آن توجه داشت این است که اگرچه مانن د ی ک DataFrame معمولی به نظر می رسد ،اما فقط یک ساختار داده سطح باال است .در زی ر ه ود، این RDDاست که داده ها را در سراس ر خوش ه پخش می کن د .ب ه ط ور مش ابه، وقتی توابع SQLرا اجرا می کنیم ،در زیر هود ،به ترانسفورماتور و کاهن ده م وازی تبدیل می شوند و به طور کامل از توان خوشه برای پردازش کد استفاده می کنند. استراتژی ترکیبی ب ه ط ور فزاین ده‌ای ،محاس بات اب ری ب رای اج رای الگوریتم‌ه ای مقی اس ب زرگ محبوب‌تر می‌شود .این کار فرصتی را برای ما فراهم می کند ت ا نگ اه ب ه ب یرون و نگاه درون استراتژی ها را ترکیب کنیم .این را می توان با تهیه یک ی ا چن د GPUدر چندین ماشین مجازی انجام داد ،همانطور که در تصویر زیر نشان داده شده است: 428 شکل GPU :13-11در چندین ماشین مجازی استفاده بهینه از معماری ترکیبی یک کار بی اهمیت است .برای این ک ار ابت دا داده ها به چند پارتیشن تقسیم می شوند .وظ ایف محاس باتی ک ه نی از ب ه داده کم تری دارند در هر گره در GPUموازی می شوند. خالصه در این فص ل ب ه ط راحی الگوریتم‌ه ای م وازی و مس ائل ط راحی الگوریتم‌ه ای مقیاس بزرگ پرداختیم .ما به دنب ال اس تفاده از محاس بات م وازی و پردازن ده‌های گرافیکی ب رای پیاده‌س ازی الگوریتم‌ه ای مقی اس ب زرگ ب ودیم .همچ نین بررس ی کردیم که چگون ه می‌ت وانیم از خوش ه‌های Sparkب رای پیاده‌س ازی الگوریتم‌ه ای مقی اس ب زرگ اس تفاده ک نیم .در این فص ل ،ب ا مس ائل مرب وط ب ه الگوریتم‌ه ای مقیاس بزرگ آشنا شدیم .م ا مس ائل مرب وط ب ه الگ وریتم ه ای م وازی س ازی و تنگناهای بالقوه ایجاد ش ده در این فرآین د را بررس ی ک ردیم .در فص ل بع دی ،ب ه برخی از جنبه های عملی پیاده سازی الگوریتم ها خواهیم پرداخت. 429 12مالحظات عملی مجموعه ای از الگوریتم های ارائه شده در این کتاب وجود دارد که می توان از آنها برای حل مسائل دنیای واقعی استفاده کرد .این فصل در مورد برخی از مالحظ ات عملی الگوریتم های ارائه شده در این کتاب است .این فص ل ب ه ش رح زی ر تنظیم شده است .با یک مقدمه شروع می کنیم .سپس ،مسائلی را در مورد توضیح‌پذیری یک الگوریتم ارائه می‌کنیم ،ک ه درجه‌ای اس ت ک ه مکانی ک داخلی ی ک الگ وریتم را می‌توان با عبارات قابل فهم توضیح داد .س پس اخالق اس تفاده از ی ک الگ وریتم و امکان ایجاد سوگیری در هنگام پیاده س ازی آنه ا را ارائ ه خ واهیم ک رد .در ادام ه، تکنیک‌های رسیدگی به مسائل NP-hardمورد بحث قرار می‌گیرند .در نه ایت ،م ا عواملی را ک ه بای د قب ل از انتخ اب ی ک الگ وریتم در نظ ر گرفت ه ش وند ،بررس ی 430 خواهیم کرد .در پایان این فص ل ،ش ما ب ا مالحظ ات عملی ک ه هنگ ام اس تفاده از الگوریتم‌ها برای حل مسائل دنیای واقعی باید در نظر داش ته باش ید ،آش نا خواهی د شد.در این فصل ،به موضوعات زیر می پردازیم: ‏ معرفی مالحظات عملی ‏ توضیح پذیری یک الگوریتم ‏ درک اخالق و الگوریتم ها ‏ کاهش سوگیری در مدل ها ‏ مقابله با مسائل NP-hard ‏ زمان استفاده از الگوریتم ها بیایید با مقدمه شروع کنیم. معرفی مالحظات عملی عالوه بر طراحی ،توسعه و آزم ایش ی ک الگ وریتم ،در بس یاری از م وارد ،در نظ ر گرفتن جنبه های عملی خاصی از شروع تکیه بر یک ماشین ب رای ح ل ی ک مس ئله دنی ای واقعی ،مهم اس ت .ب رای الگوریتم‌ه ای خاص ی ،ممکن اس ت الزم باش د راه‌هایی را ب رای ت رکیب مطمئن اطالع ات مهم جدی د در نظ ر بگ یریم ک ه انتظ ار می‌رود حتی پس از استقرار الگوریتم خود همچنان در حال تغییر باشند .ما بای د ب ه دقت در نظر بگیریم ک ه آی ا ت رکیب این اطالع ات جدی د کیفیت الگ وریتم آزم ایش شده ما را به هر نحوی تغییر می دهد؟ اگر چنین اس ت ،ط راحی م ا چگون ه ب ا آن برخورد می کند؟ انتظار غیر منتظره اکثر راه‌حل‌های مسائل دنیای واقعی که با استفاده از الگوریتم‌ه ا توس عه یافته‌ان د، بر اساس برخی مفروضات هستند .این مفروضات ممکن است به طور غیرمنتظره 431 ای پس از اس تقرار م دل تغی یر کنن د .ب رای ب رخی از الگوریتم‌ه ا از مفروض اتی استفاده می‌شود که ممکن است با تغییر وضعیت ژئوپلیتیک جهانی تحت تأثیر ق رار گیرند .به عنوان مثال ،یک مدل آموزش دیده را در نظر بگیرید ک ه س ود م الی ی ک شرکت بین المللی که دف اتری در سراس ر جه ان دارد را پیش بی نی می کن د .ی ک رویداد مخرب غیرمنتظره مانند جنگ یا انتشار ی ک وی روس مرگب ار ناگه انی ممکن است منجر به تغییر اساسی فرضیات این م دل در کیفیت پیش‌بینی‌ه ا ش ود .ب رای چنین م واردی ،توص یه این اس ت ک ه «منتظ ر م وارد غ یرمنتظره» باش ید و ب رای غافلگیری استراتژی داشته باشید .برای ب رخی از م دل‌های مبت نی ب ر داده ،ممکن اس ت تعجب از تغی یرات در سیاس ت‌های نظ ارتی پس از اس تقرار راه‌ح ل باش د. هنگامی که ما از الگوریتم‌ها برای حل یک مسئله دنیای واقعی استفاده می‌کنیم ،به نوعی به ماشین‌ها برای حل مسئله تکیه می‌کنیم .حتی پیچیده‌ترین الگوریتم‌ه ا ن یز مبتنی بر ساده‌س ازی و فرض یات هس تند و نمی‌توانن د غافلگیرکنن ده‌ها را م دیریت کنند .ما هنوز حتی ب ه انتق ال کام ل تص میم گ یری ه ای حی اتی ب ه الگ وریتم ه ای ط راحی ش ده خ ود نزدی ک نش ده ایم .ب رای مث ال ،الگ وریتم ه ای موت ور توص یه طراحی شده Googleاخیرا ً به دلیل نگرانی های مربوط به حفظ حریم خصوص ی با محدودیت های قانونی اتحادیه اروپا مواجه شده اند .این الگوریتم‌ها ممکن اس ت از پیشرفته‌ترین الگوریتم‌ه ا در زمین ه خ ود باش ند .ام ا در ص ورت ممن وعیت ،این الگوریتم‌ها ممکن است بی‌فایده باشند زیرا نمی‌توان از آنها برای حل مس ائلی ک ه قرار بود با آن‌ها برخورد می‌کرد استفاده کرد .اما ،حقیقت موض وع این اس ت ک ه، متأسفانه ،مالحظات عملی یک الگوریتم هنوز هم پس از تفکراتی هستند که معموال ً در مرحل ه ط راحی اولی ه م ورد توج ه ق رار نمی گیرن د .ب رای بس یاری از م وارد استفاده ،هنگامی که یک الگوریتم به کار گرفته می شود و هیجان کوتاه مدت ارائ ه راه حل به پایان می رسد ،جنبه های عملی و پیامدهای استفاده از یک الگ وریتم ب ه مرور زمان کشف می شود و موفقیت یا شکست پروژه را مشخص می کند .بیایید به یک مثال عملی که در آن توجه نکردن به مالحظات عملی یک پ روژه پرمخ اطب 432 ط راحی ش ده توس ط یکی از به ترین ش رکت ه ای فن اوری اطالع ات در جه ان شکست خورد ،نگاه کنیم. داستان غم انگیز یک ربات توییتر هوش مصنوعی بیایید نمون ه کالس یک Tayرا ارائ ه ک نیم ک ه ب ه عن وان اولین رب ات تویی تر ه وش مص نوعی ایج اد ش ده توس ط مایکروس افت در س ال 2016ارائ ه ش د Tay .ب ا استفاده از یک الگوریتم هوش مصنوعی قرار بود از محیط بیاموزد و به بهبود خ ود ادامه دهد .متأس فانه ،پس از چن د روز زن دگی در فض ای مج ازی ،ت ای ش روع ب ه یادگیری از نژادپرستی و بی ادبی توییت ه ای ادام ه دار ک رد .خیلی زود ش روع ب ه نوشتن توییت های توهین آمیز خود کرد .اگرچه هوش مندی از خ ود نش ان داد و ب ه سرعت یاد گرفت که چگونه توییت های سفارش ی ش ده را ب ر اس اس روی دادهای زمان واقعی ایجاد کند ،اما همانطور که طراحی شده بود ،در عین حال مردم را ب ه شدت آزار می داد .مایکروسافت آن را آفالین کرد و سعی کرد آن را دوباره تب دیل به ابزار کند ،اما کار نکرد .مایکروسافت مجبور شد در نه ایت پ روژه را ن ابود کن د. این پای ان غم انگ یز ی ک پ روژه بلندپروازان ه ب ود .توج ه داش ته باش ید ک ه اگرچ ه اطالعات هوشمند ساخته شده توسط مایکروسافت قابل توجه بود ،اما این شرکت پیامدهای عملی استقرار یک ربات توییتر خودآم وز را نادی ده گ رفت .الگوریتم‌ه ای NLPو یادگیری ماشین ممکن است بهترین در کالس باشند ،اما به دلیل کاستی‌های آشکار ،عمال پروژه‌ای بی‌فایده بود .امروزه Tay ،به دلیل نادی ده گ رفتن پیام دهای عملی اج ازه دادن ب ه الگ وریتم ه ا ب رای ی ادگیری در حین اج را ،ب ه نمون ه ای از شکست در کتاب درسی تبدیل شده است .درس هایی که از شکست ت ای آموخت ه شد قطعا ً بر پروژه های هوش مصنوعی سال های بع د ت أثیر گذاش ت .دانش مندان داده همچنین شروع به توجه بیشتر به شفافیت الگوریتم ها کردند .این کار ما را به موضوع بعدی می‌برد ،که نیاز و راه‌های شفاف‌سازی الگوریتم‌ها را بررسی می‌کند. 433 توضیح پذیری یک الگوریتم ابتدا اجازه دهید بین الگوریتم جعبه سیاه و جعبه سفید تفاوت قائل شویم. الگوریتم جعبه سیاه ،الگوریتمی است که منطق آن به دلیل پیچیدگی و ی ا ب ه دلی ل اینکه منطق آن به صورت پیچیده نمایش داده می شود ،توسط انسان قابل تفس یر نیست. الگوریتم جعبه سفید الگوریتمی است که منطق آن ب رای انس ان قاب ل مش اهده و قابل درک باشد. به عبارت دیگر ،توضیح‌پذیری به مغز انسان کمک می‌کند تا بفهمد چرا یک الگوریتم نتایج خاصی می‌دهد .درجه توضیح پذیری معیاری است که یک الگوریتم خاص ب رای مغز انسان قابل درک است .بسیاری از کالس‌های الگوریتم‌ها ،به‌وی ژه آن‌ه ایی ک ه مربوط به یادگیری ماشین هستند ،به عنوان جعبه س یاه طبقه‌بن دی می‌ش وند .اگ ر الگوریتم‌ها برای تصمیم‌گیری حیاتی استفاده شوند ،ممکن اس ت درک دالی ل نت ایج حاصل از الگوریتم مهم باشد .تبدیل الگوریتم‌های جعبه سیاه به الگوریتم‌های جعب ه سفید نیز بینش بهتری در مورد عملکرد داخلی مدل ارائه می‌دهد .به عن وان مث ال، یک الگوریتم قابل توضیح پزشکان را راهنمایی می کند که در واقع از ک دام وی ژگی ها برای طبقه بندی بیماران به عنوان بیمار یا غیر بیمار اس تفاده ش ده اس ت .اگ ر پزشک در مورد نتایج شک دارد ،می‌تواند به عقب برگردد و آن ویژگی‌های خ اص را برای دقت بیشتر ،بررسی کند. الگوریتم های یادگیری ماشین و توضیح پذیری توضیح پذیری یک الگوریتم اهمیت وی ژه ای ب رای الگ وریتم ه ای ی ادگیری ماش ین دارد .در بسیاری از کاربردهای یادگیری ماشینی ،از کاربران خواس ته می ش ود ک ه به یک مدل اعتماد کنند تا به آنها در تصمیم گیری کمک کند .توض یح‌پذیری ش فافیت را در صورت نیاز در چنین موارد کاربردی فراهم می‌کند .بیایید ب ه ی ک مث ال خ اص 434 عمیق‌تر نگاه کنیم .بیایید فرض کنیم که می خواهیم از یادگیری ماشینی ب رای پیش بینی قیمت خانه ها در منطقه بوستون بر اساس وی ژگی ه ای آنه ا اس تفاده ک نیم. بیایید همچنین فرض کنیم که مقررات ش هری محلی تنه ا در ص ورتی ب ه م ا اج ازه می‌دهد که از الگوریتم‌های ی ادگیری ماش ینی اس تفاده ک نیم ک ه بت وانیم اطالع ات دقیقی را برای توجیه هرگون ه پیش‌بی نی ه ر زم ان ک ه الزم باش د ارائ ه دهیم .این اطالعات برای اهداف حسابرسی مورد نیاز است تا اطمینان حاصل شود ک ه بخش های خاصی از بازار مسکن به طور مصنوعی دس تکاری نش ده ان د .توض یح پ ذیری مدل آموزش‌دیده ما این اطالع ات اض افی را ف راهم می‌کن د .بیایی د ب ه گزینه‌ه ای مختلفی ک ه ب رای پیاده‌س ازی توض یح پ ذیری م دل آموزش‌دی ده‌مان در دس ترس هستند ،نگاه کنیم. ارائه راهبردهایی برای توضیح پذیری برای یادگیری ماشین ،اساسا ً دو استراتژی برای ارائه توضیح پذیری به الگوریتم ه ا وجود دارد: ‏ استراتژی تبیین پذیری جهانی :برای ارائه جزئیات فرمول بندی ی ک م دل ب ه عنوان یک کل است. ‏ یک استراتژی توضیح‌پذیری محلی :این استراتژی برای ارائه منطق یک یا چند پیش‌بینی واحد است که توسط مدل آموزش‌دیده ما انجام شده است. برای توضیح جهانی ،تکنیک‌ه ایی مانن د تس ت ب ا برداره ای فعال‌س ازی مفه ومی ( )TCAVداریم که برای ارائه توضیح پذیری برای مدل‌های طبقه‌بندی تصویر استفاده می‌شود TCAV .به محاسبه مش تقات جه تی ب رای تع یین کمیت م یزان رابط ه بین مفهوم تعریف شده توس ط ک اربر و طبق ه بن دی تص اویر بس تگی دارد .ب ه عن وان مثال ،تعیین می‌کند که پیش‌بینی طبقه‌بندی یک فرد به عنوان مرد چقدر نس بت ب ه ی وجود موهای صورت در تصویر حساس است .استراتژی‌های توض یح پ ذیری جه ان ِ دیگری ،مانند نمودارهای وابستگی جزئی و محاسبه اهمیت جایگشت وجود دارد ک ه می‌توان د ب ه توض یح فرمول‌بن دی‌ها در م دل آموزش‌دی ده م ا کم ک کن د .ه ر دو 435 استراتژی تبیین پذیری جه انی و محلی می توانن د م دل خ اص ی ا م دل-آگنوس تیک باشند .استراتژی‌های مدل خاص برای انواع خاصی از م دل‌ها اعم ال می‌ش وند ،در حالی که استراتژی‌های مدل-آگنوستیک را می‌توان برای م دل‌های متن وعی ب ه ک ار برد .نمودار زیر استراتژی‌های مختلف موجود برای توضیح‌پذیری یادگیری ماشین را خالصه می‌کند: شکل :1-12استراتژی های توضیح پذیری ح ال ،بیایی د ببی نیم چگون ه می‌ت وانیم توض یح‌پذیری را ب ا اس تفاده از یکی از این استراتژی‌ها پیاده‌سازی کنیم. پیاده سازی توضیح پذیری توضیحات مدل قابل تفسیر محلی ( )LIMEیک رویک رد م دل-آگنوس تیک اس ت ک ه می تواند پیش بینی های واحد ساخته شده توسط یک مدل آموزش دیده را توض یح ده د .از آنج ایی ک ه م دل-آگنوس تیک اس ت ،می‌توان د پیش‌بینی‌ه ای بیش تر ان واع مدل‌های یادگیری ماشین آموزش‌دیده را توضیح دهد LIME .تص میمات را ب ا ایج اد تغییرات کوچک در ورودی برای هر نمونه توضیح می‌دهد .ب رای آن نمون ه می‌توان د 436 اثرات را بر روی مرز تصمیم محلی جمع‌آوری کن د .روی حلق ه تک رار می ش ود ت ا جزئیات هر متغیر را ارائه دهد .با نگاهی به خروجی ،می‌توانیم ببینیم که کدام متغیر بیشترین تأثیر را روی آن نمونه دارد .بیایید ببینیم چگون ه می‌ت وانیم از LIMEب رای توضیح دادن پیش‌بینی‌های واحد مدل قیمت خانه‌مان استفاده کنیم: .1اگر قبال از LIMEاستفاده نکرده اید ،باید بسته را با استفاده از pipنصب کنید: !pip install lime سپس ،بیایید بسته های پایتون مورد نیاز خود را وارد کنیم: ‏import sklearn as sk ‏import numpy as np ‏from lime.lime_tabular import LimeTabularExplainer as ‏ex ما مدلی را آموزش خواهیم داد که بتواند قیمت مسکن را در یک ش هر خ اص پیش بینی کند .برای این کار ابت دا مجموع ه داده ای را ک ه در فای ل house.pklذخ یره شده است وارد می کنیم .سپس ،ویژگی های آن را بررسی می کنیم: بر اساس این ویژگی ها باید قیمت یک خانه را پیش بینی کنیم. 437 .1ح اال بیایی د م دل را آم وزش دهیم .م ا از ی ک رگرس یون جنگ ل تص ادفی ب رای آموزش مدل اس تفاده خ واهیم ک رد .ابت دا داده ه ا را ب ه پارتیش ن ه ای آزم ون و آموزشی تقسیم می کنیم و سپس از آن برای آموزش مدل استفاده می کنیم: ‏from sklearn.ensemble import RandomForestRegressor = X_train, X_test, y_train, y_test ‏sklearn.model_selection.train_test_split(housing.data, )housing.target )(regressor = RandomForestRegressor )regressor.fit(X_train, y_train در مرحله بعد ،اجازه دهید ستون های موضوعی را شناسایی کنیم: )cat_col = [i for i, col in enumerate(housing.data.T ]if np.unique(col).size < 10 اکنون ،اجازه دهید توضیح دهنده LIMEرا با پارامترهای پیکربندی مورد نیاز نمونه سازی کنیم. توجه داشته باشید که ما مشخص می کنیم که برچسب ما ''priceاست که نش ان دهنده قیمت خانه ها در بوستون است: ‏myexplainer = ex(X_train, ‏feature_names=housing.feature_names, ‏class_names=['price'], ‏categorical_features=cat_col, )'mode='regression بیایید سعی کنیم جزئیات پیش بینی ها را بررسی کنیم .برای آن ابتدا pyplotرا ب ه عنوان پالتر از matplotlibوارد کنیم 438 exp = myexplainer.explain_instance(X_test[25], ‏regressor.predict, )num_features=10 )(exp.as_pyplot_figure ‏from matplotlib import pyplot as plt )(plt.tight_layout همانطور که توضیح دهنده LIMEروی پیش بینی های واحد کار می کن د ،بای د پیش بینی هایی را که می خواهیم تجزیه و تحلیل کنیم انتخاب کنیم .ما از توض یح دهن ده برای توجیه پیش بینی های شاخص شده به صورت 1و 35درخواست کرده ایم: 439 شکل :2-12استفاده از LIME بیایید سعی کنیم توضیح قبلی را توسط LIMEتجزیه و تحلیل ک نیم ،ک ه ب ه م ا می گوید: 440 فهرس ت ویژگی‌ه ای م ورد اس تفاده در پیش‌بینی‌ه ای واح د :در تص ویر قبلی روی yaxisنشان داده شده‌اند. اهمیت نسبی ویژگی ها در تعیین تصمیم :هر چه خط میله بزرگتر باش د ،اهمیت آن بیشتر است .مقدار عدد در محور xاست. تأثیر مثبت یا منفی هر یک از ویژگی‌های ورودی ب ر روی برچس ب :نواره ای قرم ز تأثیر منفی و نوارهای سبز تأثیر مثبت یک ویژگی خاص را نشان می‌دهند. درک اخالق و الگوریتم ها فرم ول بن دی الگوه ا از طری ق الگ وریتم ه ا ممکن اس ت ب ه ط ور مس تقیم ی ا غیرمستقیم منجر به تصمیم گ یری غ یراخالقی ش ود .در حین ط راحی الگوریتم‌ه ا، پیش‌بینی دامنه کامل پیامدهای اخالقی بالقوه ،به‌وی ژه ب رای الگوریتم‌ه ای مقی اس بزرگ ،که ممکن است بیش از یک کاربر در طراحی دخیل باشند ،دشوار است .این امر تجزیه و تحلیل تأثیرات ذهنیت انسانی را دشوارتر می کند .شرکت های بیش تر و بیشتری تجزیه و تحلیل اخالقی یک الگ وریتم را بخش ی از ط راحی آن می کنن د. اما حقیقت این است که تا زمانی ک ه ی ک م ورد اس تفاده مشکل‌س از پی دا نک نیم، ممکن است مشکالت آشکار نشوند. مشکالت الگوریتم های یادگیری الگوریتم هایی که قادر به تنظیم دقیق خود با توجه به الگوه ای داده در ح ال تغی یر هستند ،الگوریتم یادگیری نامیده می شوند .آنها در حالت ی ادگیری در زم ان واقعی هس تند ،ام ا این ق ابلیت ی ادگیری در زم ان واقعی ممکن اس ت پیام دهای اخالقی داش ته باش د .این امک ان را ایج اد می کن د ک ه ی ادگیری آنه ا می توان د منج ر ب ه تصمیماتی شود که ممکن است از نظر اخالقی مش کالتی داش ته باش د .از آنج ایی که آنها برای قرار گرفتن در ی ک ف از تک املی پیوس ته س اخته ش ده‌اند ،انج ام ی ک 441 تحلیل اخالقی مداوم از آنها تقریبا غیرممکن است .با افزایش پیچیدگی الگوریتم‌ها، درک کامل پیامدهای بلندمدت آنها برای افراد و گروه‌های درون سازمانی در جامعه دشوارتر می‌شود. درک مالحظات اخالقی راه حل ه ای الگ وریتمی فرم ول ه ای ریاض ی ب دون قلب هس تند .این مس ئولیت افرادی است که مسئول توسعه الگوریتم‌ها هستند ،اطمینان حاصل کنند که آنه ا ب ا حساس یت‌های اخالقی در م ورد مس ئله ای ک ه م ا در تالش ب رای ح ل آن هس تیم مطابقت دارند .این مالحظ ات اخالقی الگوریتم‌ه ا ب ه ن وع الگ وریتم بس تگی دارد. برای مثال ،اجازه دهید الگوریتم‌های زیر و مالحظات اخالقی آنه ا را بررس ی ک نیم. چند نمونه از الگوریتم های قدرتمند که برای آنها مالحظات اخالقی دقیق مورد نی از است به شرح زیر است: الگوریتم‌های طبقه‌بندی ،زمانی که در جامعه استفاده می‌شوند ،نحوه ش کل‌گیری و مدیریت افراد و گروه‌ها را مشخص می‌کنند. الگوریتم‌ها ،زمانی که در موتورهای توصیه استفاده می‌شوند ،می‌توانند رزومه‌ها را با افراد جویای کار ،چه فردی و چه گروهی ،مطابقت دهند. الگوریتم های داده کاوی برای استخراج اطالع ات از ک اربران اس تفاده می ش ود و در اختیار تصمیم گیرندگان و دولت ها قرار می گیرد. استفاده از الگوریتم های یادگیری ماشین توسط دولت ها برای اعطا یا رد وی زا ب ه متقاضیان آغاز شده است. از این رو ،مالحظات اخالقی الگوریتم‌ها به مورد استفاده و نهادهایی که مستقیم ی ا غیرمستقیم بر آنها تأثیر می‌گذارند بستگی دارد .تجزیه و تحلیل دقیق از نقطه نظ ر اخالقی قبل از شروع به استفاده از یک الگوریتم برای تص میم گ یری حی اتی م ورد 442 نیاز است .در بخش‌های آینده ،فاکتورهایی را خواهیم دی د ک ه هنگ ام انج ام تحلی ل دقیق الگوریتم‌ها باید در نظر داشته باشیم. شواهد بی نتیجه داده هایی که ب رای آم وزش الگ وریتم ی ادگیری ماش ین اس تفاده می ش ود ممکن است ش واهد قطعی نداش ته باش د .ب رای مث ال ،در کارآزمایی‌ه ای ب الینی ،ممکن است اثربخشی ی ک دارو ب ه دلی ل ش واهد مح دود موج ود ،ث ابت نش ود .ب ه ط ور مش ابه ،ممکن اس ت ش واهد غ یرقطعی مح دودی وج ود داش ته باش د ک ه نش ان می‌دهد کد پستی خاص در یک شهر خاص بیشتر درگیر کالهبرداری است .زمانی که تصمیم‌گیری خود را بر اساس الگوهای ریاضی یافت شده از طری ق الگوریتم‌ه ا ب ا استفاده از این داده‌های محدود قضاوت می‌کنیم ،باید م راقب باش یم .تص میم‌هایی که بر اس اس ش واهد غ یرقطعی هس تند مس تعد انج ام اق دامات غیرقاب ل توجی ه هستند. قابلیت ردیابی قطع ارتباط بین مرحله آموزش و مرحله آزمون در الگوریتم های یادگیری ماش ینی به این معنی است که اگر آسیبی توسط یک الگوریتم ایجاد شود ،ردی ابی و اش کال زدایی آن بسیار سخت است .همچنین ،هنگامی که مشکلی در ی ک الگ وریتم ی افت می‌شود ،تعیین افرادی که تحت تأثیر آن قرار گرفته‌اند ،دشوار است. شواهد نادرست الگوریتم ها فرمول های داده محور هس تند .اص ل Garbage-in, Garbage-out ) (GIGOبه این معنی است که نتایج الگوریتم‌ها فقط می‌توانند به اندازه داده‌ه ایی 443 که بر اساس آن‌ها هستند قابل اعتماد باشند .اگر سوگیری ه ایی در داده ه ا وج ود داشته باشد ،در الگوریتم ها نیز منعکس خواهند شد. نتایج ناعادالنه استفاده از الگوریتم‌ها ممکن است منجر به آسیب رساندن ب ه جوام ع و گروه‌ه ای آسیب‌پذیری شود که در حال حاضر در وضعیت نامساعدی قرار دارند. الگوریتم‌هایی که برای اعطای مه اجرت اس تفاده می‌ش وند ،گ اهی اوق ات به‌ط ور ناخواسته به سمت گروه‌های آسیب‌پذیر جمعیت سوگیری می‌کنند .علیرغم استفاده از داده‌های با کیفیت باال و فرمول‌های پیچیده ریاضی ،اگر نتیجه یک نتیجه ناعادالن ه باشد ،کل تالش ممکن است آسیب بیشتری تا سود به همراه داشته باشد. کاهش سوگیری در مدل ها در دنیای کنونی ،سوگیری های کلی شناخته شده و کامال ً مستند بر اساس جنسیت، نژاد و گرایش جنس ی وج ود دارد .ب ه این مع نی ک ه انتظ ار می‌رود داده‌ه ایی ک ه جمع‌آوری می‌کنیم این سوگیری‌ها را نش ان دهن د ،مگ ر اینک ه ب ا محیطی س روکار داشته باشیم که قبل از جمع‌آوری داده‌ها ،تالشی برای حذف این سوگیری‌ها انج ام شده باشد .همه سوگیری‌ها در الگوریتم‌ها ،به‌طور مستقیم یا غیرمستقیم ،ناشی از سوگیری انسانی اس ت .س وگیری انس انی می توان د در داده ه ای م ورد اس تفاده الگوریتم یا در فرمول بندی خود الگوریتم منعکس شود .ب رای ی ک پ روژه ی ادگیری ماش ین معم ولی ک ه از چرخ ه عم ر ( CRISP-DMمخف ف فرآین د اس تاندارد بین صنعتی) پیروی می کن د ،ک ه در فص ل ،5الگ وریتم ه ای گ راف توض یح داده ش د، سوگیری به شکل زیر است: 444 شکل :3-12سوگیری مش کل ت رین بخش ک اهش س وگیری این اس ت ک ه ابت دا س وگیری ناخودآگ اه را شناسایی و مکان یابی کنید. مقابله با مسائل NP-hard مسائل NP-hardبه طور گس ترده در فص ل ،4ط راحی الگ وریتم ه ا م ورد بحث قرار گرفت .برخی از مسائل NP-hardمهم هستند و ما نیاز به ط راحی الگ وریتم هایی برای حل آنها داریم .اگر یافتن راه حل ب رای ی ک مس ئله NP-hardب ه دلی ل 445 پیچیدگی آن یا محدودیت منابع موجود دور از دسترس به نظر می رسد ،می ت وانیم یکی از این رویکردها را در پیش بگیریم: . ‏ ساده کردن مسئله ‏ سفارشی کردن یک راه حل شناخته شده برای یک مسئله مشابه ‏ استفاده از روش احتمالی بیایید یک به یک آنها را بررسی کنیم. ساده کردن مسئله م ا می ت وانیم ب ر اس اس فرض یات خاص ی مس ئله را س اده ک نیم .مس ئله ح ل شده ،راه حلی ارائه می دهد که کامل نیست اما هنوز روشنگر و مفید است .ب رای این کار ،مفروضات انتخاب شده باید تا حد امکان غیر محدود کننده باشند. مثال رابطه بین وی ژگی ه ا و برچس ب ه ا در مس ائل رگرس یون ب ه ن درت ک امال ً خطی است .اما ممکن است در محدوده عملیاتی معمول ما خطی باش د .تق ریب رابط ه به صورت خطی ،الگوریتم را بسیار ساده می کند و به طور گسترده مورد استفاده قرار می گ یرد .ام ا این ن یز ب رخی از تق ریب ه ا را مع رفی می کن د ک ه ب ر دقت الگوریتم تأثیر می گذارد .موازنه بین تقریب ها و دقت باید ب ه دقت م ورد مطالع ه قرار گیرد و توازن مناسب برای ذینفعان انتخاب شود. سفارشی کردن یک راه حل شناخته شده برای یک مسئله مشابه اگر راه حلی برای یک مسئله مشابه شناخته شود ،آن راه حل می توان د ب ه عن وان نقطه شروع استفاده شود .می توان آن را ب رای ح ل مس ئله ای ک ه ب ه دنب ال آن بودیم سفارشی کرد .مفهوم یادگیری انتقالی ( )TLدر یادگیری ماشین بر این اص ل 446 استوار است .ایده این است که از استنتاج مدل های از قبل آموزش دیده به عنوان نقطه شروع برای آموزش الگوریتم استفاده شود. مثال بیایید فرض کنیم که می‌خواهیم یک طبقه‌بند دودویی آموزش دهیم که می‌توان د بین لپ‌تاپ‌ه ای اپ ل و وین دوز ب ر اس اس فی د وی دیوی بالدرن گ ب ا اس تفاده از بین ایی کامپیوتر در طول آموزش شرکتی ،تمایز قائل شود .از طری ق فی د وی دئو ،مرحل ه اول توسعه م دل ،شناس ایی اش یاء مختل ف و تش خیص اینک ه ک دام ی ک از اش یاء لپ‌تاپ هستند ،خواه د ب ود .پس از اتم ام ،می‌ت وانیم ب ه مرحل ه دوم فرمول‌بن دی قوانینی برویم که می‌توانند بین لپ‌تاپ‌های اپل و ویندوز تمایز قائل ش وند .اکن ون، مدل‌های منبع باز آموزش‌دیده و آزمایش‌شده‌ای وجود دارد که می‌توانن د ب ا مرحل ه اول آموزش این مدل مقابله کنند .چرا از آنها به عنوان نقطه ش روع اس تفاده نمی کنیم و از استنباط به سمت فاز دوم ،یعنی تم ایز بین لپ ت اپ ه ای وین دوز و اپ ل استفاده نمی کنیم؟ این به ما یک شروع پرش می دهد و راه حل کمتر مستعد خطا خواهد بود زیرا فاز 1قبال ً به خوبی آزمایش شده است. استفاده از روش احتمالی ما از یک روش احتمالی برای به دست آوردن یک راه حل نسبتا خوب اس تفاده می کنیم که قاب ل اج را باش د ،ام ا بهین ه نیس ت .هنگ امی ک ه از الگوریتم‌ه ای درخت تصمیم در فصل ،7الگوریتم‌های ی ادگیری س نتی نظ ارت ش ده ب رای ح ل مس ئله استفاده کردیم ،راه‌حل بر اساس روش احتمالی بود .ما ث ابت نک ردیم ک ه این ی ک راه حل بهینه است ،اما این یک راه حل مناسب بود تا به ما پاسخ مفیدی به مسئله ای بدهد که در چارچوب محدودیت های تعریف شده در نیازمندیها سعی در ح ل آن داشتیم. 447 مثال بسیاری از الگوریتم‌های یادگیری ماشین از یک راه‌حل تص ادفی ش روع می‌ش وند و سپس به طور مکرر راه‌حل را بهبود می‌بخشند .راه حل نهایی ممکن است کارآم د باشد ،اما نمی توانیم ث ابت ک نیم ک ه به ترین راه ح ل اس ت .این روش در مس ائل پیچیده برای حل آنها در یک بازه زمانی معقول اس تفاده می ش ود .ب ه همین دلی ل است که برای بسیاری از الگوریتم‌های ی ادگیری ماش ین ،تنه ا راه ب رای ب ه دس ت آوردن نتایج قابل تکرار ،استفاده از همان دنباله اعداد تصادفی با استفاده از هم ان عدد شروع است. زمان استفاده از الگوریتم ها الگوریتم ها مانند ابزارهایی هستند که در جعبه ابزار ی ک پزش ک ق رار دارن د .ابت دا باید بدانیم که در شرایط خاص کدام ابزار بهترین است .گ اهی اوق ات ،الزم اس ت از خود بپرسیم که آی ا ح تی ب رای مس ئله ای ک ه س عی در ح ل آن داریم راه حلی داریم و زمان مناسب برای به کارگیری راه حل ما چه زمانی است .م ا بای د تع یین کنیم که آیا استفاده از یک الگوریتم می تواند راه حلی برای ی ک مس ئله واقعی ک ه واقعا مفید است ،به ج ای ج ایگزین ارائ ه ده د ی ا خ یر .م ا بای د ت أثیر اس تفاده از الگوریتم را از سه جنبه تجزیه و تحلیل کنیم: ‏ هزین ه :آی ا اس تفاده از آن می توان د هزین ه مرب وط ب ه تالش ب رای اج رای الگوریتم را توجیه کند؟ ‏ زمان :آیا راه حل ما فرآیند کلی را کارآمدتر از ج ایگزین ه ای س اده ت ر می کند؟ ‏ دقت :آیا راه حل ما نتایج دقیق تری نسبت به جایگزین ه ای س اده ت ر ایج اد می کند؟ برای انتخاب الگوریتم مناسب ،باید پاسخ سواالت زیر را پیدا کنیم: ‏ آیا می توانیم با فرضیات ،مسئله را ساده کنیم؟ 448  چگونه الگوریتم خود را ارزیابی خواهیم کرد؟ معیارهای کلیدی چیست؟ ‏ چگونه استقرار و استفاده خواهد شد؟ ‏ آیا نیاز به توضیح دارد؟ ‏ آیا ما سه الزام مهم غیرتابعی -امنیت ،عملکرد و دسترس ی پ ذیری را درک می کنیم؟ ‏ آیا مهلت مورد انتظاری وجود دارد؟ یک مثال عملی -رویدادهای قو سیاه الگوریتم ها داده ها را وارد می کنند ،آن ه ا را پ ردازش و فرمول ه می کنن د و ی ک مس ئله را ح ل می کنن د .اگ ر داده‌ه ای جمع‌آوری‌ش ده درب اره ی ک روی داد بس یار تأثیرگذار و بسیار نادر باش د ،چ ه؟ چگون ه می‌ت وانیم از الگوریتم‌ه ایی ب ا داده‌ه ای تولید شده توسط آن رویداد و رویدادهایی که ممکن است به آن انفجار بزرگ منجر شده است استفاده کنیم؟ بیایید در این بخش به این جنبه نگ اه ک نیم .چ نین وق ایع بس یار ن ادری ب ا اس تعاره رویدادهای قو سیاه توسط نسیم طالب در کت اب خ ود ف ریب خ ورده تص ادفی در سال 2001نشان داده شد .قبل از اینکه قوهای س یاه ب رای اولین ب ار در ط بیعت کشف شوند ،برای قرن ها ،آنها برای نشان دادن چیزی که نمی توان د اتف اق بیفت د استفاده می شد .پس از کشف آنها ،این اصطالح محبوب باقی ماند ،اما تغی یری در آنچه نشان می دهد وجود داشت .اکنون نشان دهنده چ یزی بس یار ن ادر اس ت ک ه نمی توان آن را پیش بینی ک رد .ط الب این چه ار معی ار را ب رای طبق ه بن دی ی ک رویداد به عنوان رویداد قو سیاه ارائه کرد. چهار معیار برای طبقه بندی یک رویداد به عنوان رویداد قو سیاه تصمیم گیری در مورد اینکه آیا یک رویداد نادر باید به عن وان ی ک روی داد ق و س یاه طبقه بندی شود یا خیر کمی دشوار است .ب ه ط ور کلی ب رای اینک ه در دس ته ق و سیاه قرار گیرد باید چهار معیار زیر را داشته باشد. 449 .1اوالً ،هنگامی که این رویداد اتفاق افتاده است ،ب رای ن اظران بای د ش گفت‌انگیز باشد ،مثال ً انداختن بمب اتم روی هیروشیما. .2این رویداد باید یک فیلم پرفروش باشد -یک ب رهم زنن ده و ی ک روی داد ب زرگ، مانند شیوع آنفوالنزای اسپانیایی. .3هنگامی که رویداد رخ داد و گرد و غبار نشست ،دانش مندان داده ک ه بخش ی از گروه ناظر بودند باید متوجه شوند که در واقع آنقدرها هم غافلگیرکننده نبود. ناظران هرگز به برخی سرنخ ه ای مهم توج ه نکردن د .اگ ر آنه ا ظ رفیت و ابتک ار عمل داشتند ،رویداد قو سیاه قابل پیش بینی بود .به عنوان مثال ،شیوع آنفوالنزای اسپانیایی سرنخ هایی داشت که قبل از تبدیل شدن ب ه ی ک ش یوع جه انی ش ناخته شده بود که نادیده گرفته می شدند .همچنین ،پروژه منهتن س ال‌ها قب ل از پرت اب شدن بمب اتمی در هیروشیما اجرا می‌شد .افراد در گروه ن اظر فق ط نمی توانن د نقاط را به هم وصل کنند. . 4وقتی این اتفاق افتاد ،در حالی که ناظران رویداد قو سیاه شگفتی عمر خ ود را دیدند ،ممکن است افرادی باشند که اصال ً برای آنها غافلگیر کننده نب وده اس ت .ب ه عنوان مثال ،برای دانشمندانی که سال‌ها بر روی ساخت بمب اتمی کار می‌کردن د، استفاده از نیروی اتمی هرگز غافلگیرکننده نبود ،بلکه یک رویداد مورد انتظار بود. استفاده از الگوریتم ها در رویدادهای قو سیاه جنبه های اصلی رویدادهای قو سیاه وجود دارد که به الگوریتم ها مربوط می شود: ی پیچی ده ی زی ادی وج ود دارد .ام ا اگ ر امی دوار باش یم از ی پیش بی ن ِ الگوریتم ها ِ تکنیک‌های پیش‌بینی استاندارد برای پیش‌بینی ی ک روی داد ق و س یاه ب ه عن وان ی ک اقدام احتیاطی استفاده کنیم ،کارساز نخواهد بود .استفاده از چ نین الگ وریتم ه ای پیش بینی تنها امنیت کاذب را ارائه می دهد. پس از وقوع رویداد قو سیاه ،پیش‌بینی پیام دهای دقی ق آن ب ر حوزه‌ه ای وس یع‌تر جامعه از جمل ه اقتص اد ،جامع ه و مس ائل دول تی معم وال ً امکان‌پ ذیر نیس ت .اوالً، 450 به‌عنوان یک رویداد نادر ،ما داده‌های مناسبی برای تغذیه الگوریتم‌ها نداریم ،و درک درستی از همبستگی و تعامل بین حوزه‌های وس یع‌تری از جامع ه ن داریم ک ه ش اید هرگز آن را کشف و درک نکرده باشیم. نکته مهمی که باید به آن توجه داشت این است که رویدادهای قو سیاه روی دادهای تصادفی نیستند .ما فقط این ظرفیت را نداشتیم که ب ه اتفاق ات پیچی ده ای ک ه در نهایت منجر به این حوادث شد توجه کنیم .این حوزه ای است که الگ وریتم ه ا می توانن د نقش مهمی در آن ایف ا کنن د .م ا بای د مطمئن ش ویم ک ه در آین ده ،م ا ی ک استراتژی برای پیش‌بینی و شناسایی این رویدادهای جزئی داریم که در طول زمان ترکیب شده و رویداد قو سیاه را ایجاد می‌کند. شیوع COVID-19در اوایل سال 2020به ترین مث ال از ی ک روی داد ق و س یاه در زمان ما است .مثال قبلی نشان می ده د ک ه چق در مهم اس ت ک ه ابت دا جزئی ات مسئله ای را که می خواهیم حل کنیم در نظر بگ یریم و درک ک نیم و س پس ب ه آن دست یابیم .مناطقی که می‌توانیم با پیاده‌سازی یک راه‌حل مبت نی ب ر الگ وریتم ب ه یک راه‌حل کمک کنیم. بدون تجزیه و تحلی ل ج امع ،هم انطور ک ه قبال ً ارائ ه ش د ،اس تفاده از الگوریتم‌ه ا ممکن است تنها بخشی از ی ک مس ئله پیچی ده را ح ل کن د ک ه کم تر از انتظ ارات است. خالصه در این فصل با جنبه های کاربردی که باید در ط راحی الگ وریتم ه ا در نظ ر گرفت ه شوند آش نا ش دیم .م ا مفه وم توض یح‌پذیری الگ وریتمی و راه‌ه ای مختلفی را ک ه می‌توانیم آن را در سطوح مختلف ارائه کنیم ،بررسی کردیم .ما همچنین به مسائل اخالقی ب القوه در الگ وریتم ه ا نگ اه ک ردیم .در نه ایت ،م ا توض یح دادیم ک ه چ ه عواملی را در هنگام انتخاب یک الگوریتم در نظر بگیریم .الگوریتم‌ها موتورهایی در 451 دنیای خودکار جدید هستند که امروزه شاهد آن هس تیم .ی ادگیری ،آزم ایش و درک مفاهیم ِ استفاده از الگوریتم ها بسیار مهم است .درک نقاط قوت و مح دودیت‌های آن‌ها و مفاهیم اخالقی استفاده از الگوریتم‌ها کمک زی ادی ب ه تب دیل این جه ان ب ه مکانی بهتر برای زندگی می‌کند .و این کت اب تالش ی ب رای دس تیابی ب ه این ه دف مهم در این دنیای همیشه در حال تغییر و تحول است. 452

150,000 تومان