صفحه 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:
دنیای خودکار جدید هستند که امروزه شاهد آن هستیم. بادگیری: آزمایش و درک
مفاهیم استفاده از الگوریتم ها بسیار مهم است. درک تقاط قوت و محدودیتهای
آنها و مفاهیم اخلاقی استفاده از الگوزیتمها کمک زینادی بنه تبندیل این جهنان بنه
مکانی بهتر برای زندگی میکند. و اين کتاب تلاشی براى دستيابى به اين هدف
مهم در اين دنياى هميشه در حال تغيير و تحول است.