دقیقه اول – مقدمه:
این یک آموزش سطح بالا برای کسانی است که تازه با یادگیری ماشین و هوش مصنوعی آشنا شدهاند و فرض می کند که شما پیش نیازهای زیر را دارید:
- پایتون 2 یا 3 را نصب کرده باشید.
- حداقل تجربه برنامه نویسی شما مبتدی باشد
- 5 دقیقه وقت اضافی
این آموزش جزئیات سطح پایین و ریاضیات سنگینی که شبکه های عصبی از آن استفاده میکنند را نادیده می گیرد و بر ایجاد یک شبکه عصبی در 5 دقیقه که سرطان سینه را پیش بینی میکند تمرکز می کند!
ما برای پیاده سازی شبکه عصبی از کتابخانه scikit-learn و پیش بینی اینکه آیا فردی به سرطان سینه مبتلا شده است یا نه، از داده های به دست آمده از مجموعه داده “UC Irvine “Breast Cancer Wisconsin استفاده خواهیم کرد. خواص هسته سلولی (مانند بافت یا محل درگیر سرطان) برای یک توده پستان وارد شبکه عصبی می شود و به دنبال آن پیش بینی بدخیم یا خوش خیم بودن توده توسط شبکه عصبی به عنوان خروجی تولید می شود.
دقیقه دوم – شروع:
اگر هنوز scikit-learn را نصب نکرده اید، pip install scikit-learn را در ترمینال خود اجرا کنید. با این کار باید نصب scikit-learn و کتابخانههای پیشنیازی را که به آن نیاز خواهیم داشت، انجام شود.
یک IDE یا ویرایشگر باز کنید و یک فایل خالی به نام neuralnet.py یا هر نام دیگری که دوست دارید ایجاد کنید. در مرحله بعد، برای پیادهسازی شبکه عصبی، مجموعه دادههای سرطان سینه و تابعی را برای تقسیم دادههایمان به مجموعههای آموزشی و آزمایشی وارد میکنیم تا به شبکه عصبی ما وارد شود.
برای یادگیری بیشتر شبکه های عصبی با scikit-learn، در زیر مستندات مربوط به یادگیری آن لیست شده اند:
- داکیومنت های مربوط به مجموعه داده سرطان پستان (load_breast_cancer)
- داکیومنت های لازم برای تابع پیش پردازش (train_test_split)
- داکیومنت های مربوط به پیاده سازی شبکه عصبی (MLPClassifier)
دقیقه سوم – پیش پردازش:
قبل از اینکه ما آماده انجام یادگیری ماشینی در مجموعه داده های سرطان پستان باشیم، ابتدا پیش پردازش داده ها ضروری است. ما با بارگذاری دادههای خود شروع میکنیم و به دنبال آن ویژگیهای توده پستان (آرایه ای دو بعدی حاوی مقادیر عددی) را به عنوان ویژگی و اینکه آیا توده پستان بدخیم یا خوشخیم است (آرایه ای از 0 و 1) به عنوان برچسب ذخیره میکنیم.
محتوی هر اندیس از هر آرایه به عنوان مثال با یک توده پستان با ویژگیهای به مقدر [0]attributes یا به صورت بدخیم یا خوشخیم با lables[0] تعریف میشود.
در مرحله بعد، داده های خود را به مجموعه های آموزشی (برای آموزش شبکه عصبی) و تست (برای آزمایش عملکرد شبکه عصبی) تقسیم می کنیم. مجموعه آموزشی شامل ویژگی های_train و labels_train و مجموعه تست شامل ویژگی های_test و labels_test می باشد. ما یک سوم از مجموعه داده های خود را به مجموعه آزمایشی خود اختصاص می دهیم که نتیجه آن این است که دو سوم باقی مانده در مجموعه آموزشی است.
دقیقه چهارم – شبکه عصبی:
اکنون که دادههای ما به مجموعههای آموزشی و آزمایشی تقسیم شدهاند، آمادهایم تا با بخش شبکه عصبی این آموزش ادامه دهیم! پس از نمونه سازی یک شبکه عصبی پرسپترون چند لایه، شبکه عصبی خود را با مجموعه آموزشی خود با استفاده از تابع fit آموزش می دهیم، دقت شبکه عصبی خود را با تابعscore ارزیابی می کنیم و میزان دقت را برمیگردانیم.
سعی کنید شبکه عصبی را با استفاده از ترمینال و با دستور python neuralnetworktutorial.py حدود 10 بار اجرا کنید (هر بار فقط یک ثانیه طول می کشد) و نتایج را یادداشت کنید!
دقیقه پنجم – بهینه سازی نتایج:
به احتمال زیاد، شما شاهد تغییرات زیادی در عملکرد شبکه عصبی خواهید بود. وقتی دادههای خود را به مجموعههای آموزشی و آزمایشی تقسیم کردیم، دادهها با استفاده از یک هسته یا seed تصادفی مخلوط شدند، که نوسان نتایج ما را توضیح میدهد. با تنها 569 ورودی در مجموعه داده ما، شبکه عصبی همیشه با یک مجموعه آموزشی (379 ورودی) که نماینده کل مجموعه داده باشد، آموزش داده نمی شود و باعث بیش از حد برازش شدن می شود.
علاوه بر این، وقتی یک شبکه عصبی جدید را با neuralnet = MLPClassifier() در کد خود نمونهسازی کردیم، constructor را خالی گذاشتیم که به این معنی بود که شبکه عصبی با پارامترهای پیشفرض تعریفشده توسط scikit-learn ساخته میشد و منجر به یک شبکه عصبی غیربهینهسازی میشد.
ما میتوانیم این مشکل را با آموزش و آزمایش روی یک مجموعه داده بزرگتر یا بهترین استفاده از موقعیت خود با تغییر پارامترهای مجموعه داده برطرف کنیم.
با تلاش بعدی، حلکننده بهینهسازی وزن را از مقدار پیشفرض adam به lbfgs تغییر دادم، بهطور خلاصه، چون داکیومنت یادآوری میکند که lbfgs بهترین عملکرد را در مجموعه دادههای کوچک دارد. من همچنین تابع فعالسازی در لایه پنهان را پس از آزمایشهایی از relu به logistic تغییر دادم و در نهایت آلفا را از 0.0001 به 10.0 رساندم تا از برازش بیشازحد جلوگیری کنم، که گمان میکردم دلیل نوسانات شدید دقت ما در چندین اجرا باشد.
خیلی بهتر به نظر می رسد! هنوز مقداری کاهش دقت وجود دارد، اما بهطور مداوم میتوانیم در چندین اجرا به دقت بسیار بالاتری با کاهش قابلتوجهی در دقت دست یابیم. تنظیماتی که ما انجام دادیم ساده و ابتدایی بودند و فضایی را برای بهینه سازی بیشتر باقی می گذاشتند، اما این کار برای وقت دیگری است.
نتیجه گیری
آنچه یاد گرفتید به هر مجموعه داده و هر پیاده سازی الگوریتم یادگیری ماشینی که در scikit-learn یافت می شود، گسترش می یابد. من استفاده از یک شبکه عصبی را برای پیشبینی سرطان پستان نشان دادم زیرا هر دو موضوع بالا در حال حاضر حوزههای مورد علاقه در STEM هستند.
امتحان کردن الگوریتم دیگری به سادگی جایگزینی خطوطی از کد با خطوطی است که پیاده سازی شبکه عصبی را وارد و نمونه سازی می کنند و یک الگوریتم متفاوت مانند زیر را نمونه سازی میکند:
اگر به دوره های حضوری در رابطه با موضوعات گفته شده دسترسی ندارید، منابع آنلاین زیادی برای تقویت درک شما در یادگیری ماشین و هوش مصنوعی وجود دارد. اگر در این آموزش از یادگیری ماشینی زیاد شنیدید، نگران نباشید، این مقاله فقط برای آشنایی شما است. اگر این مقاله برای شنا خیلی سطح بالایی به نظر می رسد، من این دوره آموزشی Coursera را که توسط Andrew Ng تدریس شده است، توصیه می کنم که از نظر بسیاری از همکارانم مفید بوده است و بر ریاضیات و تئوری پشت یادگیری ماشین و همچنین پیاده سازی های سطح پایینتر تمرکز دارد.