گام به گام یک پروژه ی یادگیری ماشین کامل در پایتون – بخش اول

«هدف این مقاله قرار دادن قسمت های مختلف یادگیری ماشین کنار هم است.»

وقتی کتاب های علوم داده ( Data Science ) را می خوانید یا دوره های مرتبط به آن را می گذرانید، احساس می کنید که تمام اطلاعات و توانایی های لازم برای کار در زمینه علوم داده را دارید ، اما مسلم است که کاملاً روی ماجرا تسلط نخواهید داشت و نمی دانید که چگونه تکه های پازل اطلاعاتتان را کنار هم قرار دهید.

رفتن به مراحل بالاتر و انجام یک پروژه ی یادگیری ماشین به صورت کامل می تواند برای شما دلهره آور باشد، اما از طرفی هم انجام دادن و تکمیل پروژه اول به شما اطمینان می دهد که می توانید هرگونه مشکلی در زمینه علوم داده را از سر راهتان بردارید.

در این مقالات، یک راهکار یادگیری ماشین را با استفاده از یک مجموعه داده در دنیای واقعی به صورت گام به گام تا تکمیل پروژه پیش می بریم تا بتوانیم ببینیم که چگونه همه اطلاعات و روش هایی که یاد گرفتیم، در کنار هم قرار می گیرند تا شما را در مسیر انجام پروژه یاری کنند.

ما قدم به قدم در کنار شما روند کار یادگیری ماشین را دنبال خواهیم کرد:

۱. پاکسازی ( پالایش ) و قالب بندی داده ها

۲. تجزیه و تحلیل اکتشافی داده ها

۳. مهندسی ویژگی ها و فرآیند انتخاب

۴. مقایسه چندین مدل مختلف یادگیری ماشین روی یک سیستم بررسی عملکرد

۵. انجام تنظیم (تیونینگ) Hyperparameter ها بر روی بهترین مدل

۶. ارزیابی و شناسایی بهترین مدل در مجموعه آزمایش

۷. تفسیر نتایج مدل

۸. نتیجه گیری و کار بر روی اسناد

در طول راه ، خواهیم دید که چگونه پروژه ی ما ازهر مرحله به مرحله بعدی جریان می یابد و چگونه می توان هر قسمت را به طور اختصاصی در پایتون پیاده سازی کرد. توجه داشته باشید که پروژه ی کامل در GitHub و نوتبوک قسمت اول موجود است. این مقاله اول مراحل ۱ تا ۳ را پوشش داده و بقیه موارد در پست های بعدی ذکر خواهند شد.

تعریف مساله

اولین قدم قبل از کد نویسی، درک مساله ای است که ما سعی در حل آن با کمک داده های موجود داریم. در این پروژه با داده های انرژی ساختمانی مربوط به شهر نیویورک که در دسترس عموم قرار دارد، کار خواهیم کرد.

هدف استفاده از داده های انرژی، ساختن الگویی است که می تواند امتیاز انرژی مصرفی یک ساختمان را بر حسب امتیاز ستاره ای پیش بینی کند و در کنار آن نتایج را نیز تفسیر کند تا عوامل مؤثر بر نمره ی سازه را پیدا کند.

این داده ها شامل امتیاز ستاره انرژی ( Energy Star ) هستند، که به همین خاطر این، یک مساله یادگیری ماشین رگرسیون نظارت شده یا Supervised Regression Machine Learning است:

نظارت شده : ما به ویژگی ها و هدف دسترسی داریم و قصد ما آموزش مدلی است که بتواند ارتباط بین این دو را ایجاد کند.

رگرسیون : باید در نظر داشته باشیم که نمره ی Energy Star یک متغیر پیوسته است.

در این پروژه ما می خواهیم مدلی را تهیه کنیم که دقت بالایی داشته باشد و بتواند امتیاز Energy Star نزدیک به مقدار واقعی را پیش بینی کند و قابل تفسیر هم باشد، به گونه ای که بتوان پیش بینی های مدل را به درستی درک کرد. وقتی ما هدفمان را بدانیم، می توانیم از آن برای تصمیم گیری در هنگام جستجوی داده ها و ساخت مدل ها، استفاده کنیم.

پالایش اطلاعات

برخلاف آنچه که اکثر دوره های علوم داده به شما یاد می دهند، همه داده ها یک دسته نظارت شده از مشاهداتی که هیچ ارزش از دست رفته یا ناهنجاری ندارند، نیستند. ( بر خلاف مجموعه داده های mtcars و iris ). داده های دنیای واقعی پالایش نشده هستند و این بدان معنی است که ما باید قبل از شروع تجزیه و تحلیل ، آن ها را در قالب قابل قبولی پاکسازی و پالایش کنیم. تمیز کردن داده ها بخشی است که کمتر به آن توجه می شود، ولی از ضروری ترین کار ها برای رفع مشکلات مربوط به علوم داده است.

ابتدا می توانیم داده ها را در چارچوب Pandas DataFrame بارگذاری کنیم و نگاهی دقیق تر به آن بیندازیم:

import pandas as pd
import numpy as np
# Read in data into a dataframe 
data = pd.read_csv('data/Energy_and_Water_Data_Disclosure_for_Local_Law_84_2017__Data_for_Calendar_Year_2016_.csv')
# Display top of dataframe
data.head()
داده های مصرف انرژی پروژه پایتون
داده های واقعی این شکلی هستند!

در واقع این داده ها، زیر مجموعه ای از داده های کاملی هستند که شامل ۶۰ ستون می باشند. در حال حاضر ، ما می توانیم چند مشکل را به صورت کلی مشاهده کنیم:

 اول این که ما می دانیم که می خواهیم امتیاز ENERGY STAR Score را پیش بینی کنیم اما نمی دانیم که هر یک از ستون ها دقیقاً به چه معنی هستند. البته این موضوع لزوماً یک مشکل به حساب نمی آید – چرا که ما اغلب می توانیم بدون اطلاع از متغیر ها یک مدل دقیق بسازیم – می خواهیم روی قابل تفسیر بودن تمرکز داشته باشیم ، چرا که درک حداقل برخی از ستون ها ممکن است مهم باشد.

وقتی در ابتدا این پروژه را شروع کردیم ، نمی خواستیم بپرسیم که نام هر یک از ستون ها چیست ، به همین خاطر به نام پرونده ها نگاه کردیم.

فایل داده های پروژه مصرف انرژی

و تصمیم به جستجوی “قانون محلی ۸۴” گرفتیم. این جستجو ما را به این مقاله کشاند که در آن توضیح داده شده که این یک قانون مربوط به شهر نیویورک New York است که همه ی ساختمان های شهر که دارای ابعاد مشخصی هستند را ملزم می کند که انرژی مصرفی خودشان را گزارش دهند. جستجوی بیشتر ما را به سمت تعاریف کامل همه ی ستون ها کشاند. شاید نگاه کردن به یک نام فایل مکانی خوب و واضح برای شروع باشد، اما ذکر کردن این نکته صرفاً یک یادآوری بود تا آگاه باشید که آرام پیش بروید تا هیچ چیز مهمی را در روند انجام پروژه از دست ندهید!

توجه داشته باشید که لازم نیست همه ستون ها را مطالعه کنیم، اما حداقل باید Energy Star را درک کنیم، این امتیاز به شرح زیر توصیف شده است:

یک امتیاز بر حسب درصد – از ۱ تا ۱۰۰ – است که بر اساس مصرف انرژی گزارش شده و برای مدت یک سال محاسبه می گردد. به طور کلی امتیاز Energy Star یک معیار نسبی است که برای مقایسه ی راندمان انرژی ساختمان ها مورد استفاده قرار می گیرد.

دانستن این تعریف مشکل اول ما را برطرف می کند ، اما مشکل دوم این است که مقادیر گمشده ای تحت عنوان Not Available کد گشایی شده اند. در واقع این مورد یک رشته یا String در پایتون می باشد و به این معنی است که حتی ستون های شماره دار در پروژه نیز به عنوان داده های object ذخیره می شوند، چرا که Pandas هر ستونی را که دارای داده ای از نوع رشته باشد، به ستونی از همه ی داده های آن از نوع رشته هستند تبدیل می کند. ما می توانیم با استفاده از دستور  dataframe.info() داده های ستون ها را مشاهده کنیم:

# See the column data types and non-missing values
data.info()
داده های مصرف انرژِی در pandas

مطمئناً ، برخی از ستون هایی که به وضوح حاوی شماره هستند (مانند ft²) ، به عنوان object ذخیره می شوند. لازم به ذکر است که ما نمی توانیم آنالیز و محاسبات عددی را بر روی رشته ها انجام دهیم ، بنابراین آن ها باید به داده های عددی تبدیل شوند ( معمولا float ).

در اینجا کد پایتون کوتاهی وجود دارد که تمام ورودی های  Not Availableرا با داده ها ( np.nan ) جایگزین می کند، که باعث می شود این داده ها به صورت اعداد تفسیر شوند. این کد در ادامه آن ستون ها را float تبدیل می کند:

وقتی ستون های صحیح به صورت عدد باشند ، می توانیم به بررسی داده ها بپردازیم.

داده ها ی گم شده و داده های پرت

علاوه بر نوع نادرست داده ها، مشکل شایع دیگری هنگام برخورد با داده های دنیای واقعی وجود دارد. این مشکل در واقع همان داده های گم شده و دادهای پرت هستند. این موارد به دلایل زیادی ممکن است بوجود آمده باشند و قبل از شروع آموزش یک مدل یادگیری ماشین، باید پُر یا حذف شوند. برای شروع بیایید ببینیم که تعداد مقادیر گمشده در هر ستون چقدر است (برای کد به نوتبوک مراجعه کنید).

داده های گم شده در پروژه مصرف انرژی

( برای ایجاد این جدول ، از یک تابع در این انجمن Stack Overflow استفاده شده است )

در حالی که ما همیشه باید مراقب حذف اطلاعات باشیم ، باید توجه داشته باشیم درصورتی که یک ستون درصد بالایی از مقادیر گمشده را داشته باشد ، احتمالاً برای مدل ما مفید نخواهد بود. آستانه حذف ستون ها با مساله ما در تناسب است (در این مقاله در این مورد بحث می شود) و برای این پروژه ، هر ستونی را با بیش از ۵۰٪ مقادیر گمشده حذف خواهیم کرد.

در این مرحله ، ممکن است بخواهیم داده های پرت را نیز حذف کنیم. این داده ها می توانند ناشی از اشتباه تایپی در وارد کردن داده ها ، اشتباه در واحد ها یا مقادیر قانونی داده ها باشند .

برای این پروژه ، ناهنجاری ها را بر اساس تعریفی که از داده های بسیار پرت ( Extreme Outliers ) داریم حذف خواهیم کرد :

  • کمتر از چارک اول − ۳ ∗ دامنه بین چارکی
  • بیشتر از چارک سوم + ۳ ∗ دامنه بین چارکی

( برای دسترسی به کد حذف ستون ها و ناهنجاری ها ، به نوتبوک مراجعه کنید )

در پایان فرآیند تمیز کردن داده ها و حذف ناهنجاری ، بیش از ۱۱،۰۰۰ ساختمان با ۴۹ ویژگی باقی ماند.

آنالیز اکتشافی داده ها

اکنون که مرحله خسته کننده – اما واجب – تمیز کردن داده ها کامل شد ، می توانیم به جستجو و واشکافی داده های خودمان برویم! تجزیه و تحلیل داده های اکتشافی (EDA) Exploratory Data Analysis  یک فرایند با پایان باز است که در آن ما آمار را محاسبه می کنیم حدس هایی برای یافتن روند ها ، ناهنجاری ها ، الگو های موجود و یا روابط درون داده ها می زنیم.

به طور خلاصه ، هدف EDA این است که بدانیم داده های ما چه چیزی را می توانند به ما بگویند. این کار عموماً با یک نمای کلی سطح بالا شروع می شود ، و در حالی که قسمت های جالبی از داده ها را پیدا می کنیم ، به مناطق خاصی، محدود و متمرکز می شویم. این یافته ها ممکن است به خودی خود جالب باشند ، چرا که می توان از آن ها برای اطلاع از انتخاب صحیح روش مدل سازی استفاده کرد ، به طوری که این یافته ها به ما در تصمیم گیری برای استفاده از ویژگی های مختلف کمک می کنند.

نمودار های تک متغیره

هدف ما در این پروژه پیش بینی امتیاز Energy Star می باشد ( در داده های ما به score تغییر نام داده شده است ) به همین خاطر این قسمت مکانی مناسب برای شروع بررسی توزیع این متغیر است. هیستوگرام روشی ساده و در عین حال بسیار مؤثر برای به نمایش درآوردن نحوه ی توزیع یک متغیر واحد در نمودار است و تهیه ی آن با استفاده از matplotlib بسیار ساده است.

import matplotlib.pyplot as plt
# Histogram of the Energy Star Score
plt.style.use('fivethirtyeight')
plt.hist(data['score'].dropna(), bins = 100, edgecolor = 'k');
plt.xlabel('Score'); plt.ylabel('Number of Buildings'); 
plt.title('Energy Star Score Distribution');
توزیع امتیاز مصرف انرژی ساختمان ها

این نمودار کاملاً مشکوک به نظر می رسد! امتیاز Energy Star یک رتبه بندی درصدی است ، به همین دلیل ما انتظار داریم که شاهد توزیع یکنواخت باشیم و به هر امتیازی به همان تعداد ساختمان اختصاص یابد که به امتیاز های دیگر اختصاص یافته است. با این حال ، تعداد نا معقولی از ساختمان ها بالاترین امتیاز – یعنی ۱۰۰ – و یا کمترین امتیاز – یعنی ۱ – را دارند. ( امتیازهای بالاتر برای نمره ی Energy Star بهتر می باشند )

اگر به تعریف امتیاز برگردیم ، می بینیم که این امتیاز ها مبتنی بر ” مصرف انرژی گزارش شده توسط ساکنین خود ساختمان ها ” است ، پس این شک به وجود می آید که ممکن است گزارش دهندگان نمرات بسیار بالایی را گزارش داده باشند. درخواست از صاحبان ساختمان برای گزارش فرستادن از میزان انرژی خودشان مشابه این است که از دانشجویان بخواهید که نمرات خود را در یک امتحان به دلخواه خودشان ارائه دهند! در نتیجه ، این اعداد و ارقام به احتمال زیادی عینی ترین سنجش برای دانستن بهره وری انرژی یک ساختمان نیستند.

اگر زمان نامحدودی داشتیم ، می توانستیم بررسی کنیم که چرا بسیاری از ساختمان ها دارای نمرات بسیار بالا و یا بسیار پایینی هستند که با انتخاب این ساختمان ها و دیدن مشخصات و ویژگی های مشترک بین آن ها پاسخ این سوال پیدا میشد. با این حال ، هدف ما فقط پیش بینی نمره است و تدوین روشی بهتر برای ثبت امتیاز ساختمان ها جز اهداف ما نیست! ما می توانیم در گزارش خود یادداشت کنیم که نمرات توزیع مشکوکی دارند ، اما تمرکز اصلی ما بر روی پیش بینی امتیاز است.

جستجو برای روابط

جالب است بدانید که بخش عمده ای از EDA در جستجوی روابط بین ویژگی ها و هدف است. به همین دلیل متغیر هایی که با هدف ارتباط دارند برای ساخت و عملکرد یک مدل مفید هستند زیرا می توان از آن ها برای پیش بینی و تخمین هدف استفاده کرد. یک روش خوب برای بررسی تأثیر متغیر های طبقه بندی شده ( متغیر هایی که فقط مجموعه محدودی از مقادیر را به خود اختصاص می دهند ) از طریق نمودار چگالی ( Density Plot ) با استفاده از کتابخانه ی seaborn است.

طرح چگالی را می توان به عنوان یک هیستوگرام هموار در نظر گرفت، چرا که این طرح در واقع میزان توزیع یک متغیر واحد را نشان می دهد. ما می توانیم یکی از نمودارهای چگالی را طبق کلاس رنگ کنیم تا ببینیم چگونه یک متغیر طبقه بندی شده توزیع را تغییر می دهد. کد زیر یک نمودار چگالی بر اساس امتیاز ستاره انرژی با توجه به نوع ساختمان ها (محدود به نوعی از ساختمان ها با بیش از ۱۰۰ داده) ایجاد می کند:

نمودار مصرف انرژی بر حسب نوع ساختمان

می توانیم ببینیم که نوع ساختمان تأثیر بسزایی در امتیاز  Energy Star دارد. ساختمان های اداری تمایل دارند که نمره بالاتری داشته باشند در حالی که هتل ها بر خلاف آن ها از امتیاز کمتری برخوردار هستند. بررسی این مساله به ما می گوید که باید نوع مدل را در مدل سازی خود بگنجانیم، چرا که این کار روی هدف ما تأثیر می گذارد. به عنوان یک متغیر طبقه بندی شده ، ما باید نوع ساختمان ها را نیز رمزگذاری کنیم.

یک نقشه مشابه برای نمایش دادن امتیازهای Energy Star بر اساس تقسیمات کشوری را می توان به شکل زیر نشان داد :

نمودار مصرف انرژی بر حسب تقسیمات کشوری

به نظر نمی رسد که منطقه ی قرارگیری به اندازه ی نوع ساختمان تأثیر به سزایی در امتیاز داشته باشد. با این وجود ، ممکن است بخواهیم آن را در مدل خود بگنجانیم زیرا اختلافات جزئی بین منطقه های مختلف وجود دارد.

برای تعیین کمیت روابطی که بین متغیرها وجود دارد می توان از ضریب همبستگی پیرسون ( Pearson Correlation Coefficient ) استفاده کرد. در واقع این یک اندازه گیری از قدرت و جهت یک رابطه ی خطی موجود بین دو متغیر است. نمره ۱+ یک رابطه مثبت کاملاً خطی است و نمره -۱ یک رابطه خطی کاملاً منفی است. چندین میزان ضریب همبستگی در شکل زیر نشان داده شده است :

مقادیر ضریب همبستگی پیرسون
مقادیر ضریب همبستگی پیرسون

در حالی که ضریب همبستگی نمی تواند روابط غیرخطی را شناسایی کند ( به این دلیل که روابط غیر خطی در آن تعریف نشده اند ) ، اما روش خوبی برای تشخیص این مورد است که چگونه متغیرها با هم در ارتباط هستند. در  pandas ، ما به راحتی می توانیم ارتباط بین هر ستون را در یک چارچوب داده ( dataframe ) محاسبه کنیم:

# Find all correlations with the score and sort 
correlations_data = data.corr()['score'].sort_values()

منفی ترین (چپ) و مثبت ترین (راست) همبستگی با هدف:

همبستگی داده ها پروژه مصرف انرژی پایتون

چندین همبستگی منفی قوی بین « ویژگی ها و هدف » با « منفی ترین دسته های مختلف EUI » وجود دارد (این اقدامات در نحوه محاسبه آن ها کمی متفاوت است). EUI – شدت استفاده از انرژی – مقدار انرژی مصرف شده توسط یک ساختمان است که بر اساس میزان مصرف ساختمان ها تقسیم بر متر مربع است. نمودار یا گراف به دست آمده که به معنای اندازه گیری بهره وری از یک ساختمان است که داشتن نمره ی پایین تر در آن مصادف با عملکرد بهتر است. اگر به صورت شهودی به این قضیه نگاه کنیم ، این ارتباطات به این شکل دارای معنا می گردند که : با افزایش EUI ، نمره ی Energy Star کاهش می یابد.

نمودار های دو متغیره

برای تجسم روابط بین دو متغیر مداوم ، از scatterplots استفاده می کنیم. ما می توانیم اطلاعات اضافی ، مانند متغیر طبقه ای را در رنگ امتیازها دخیل کنیم. به عنوان مثال ، نقشه زیر امتیاز Energy Star  را در مقابل EUI ساختمان با توجه به نوع ساختمان نشان می دهد :

نمودار مصرف انرژی EUi

این طرح به ما امکان می دهد تصور کنیم که ضریب همبستگی -۰٫۷ به شکلی در می آید. با کاهش سطح EUI ، امتیاز Energy Star افزایش می یابد ، رابطه ای که در بین انواع ساختمان ها به صورت پایدار است.

طرح اکتشافی نهایی که ما خواهیم ساخت با عنوان نمودار زوجی ( pairs plot ) شناخته می شود. pairs plot یک ابزار اکتشافی عالی است ، چرا که به ما این امکان را می دهد که روابط بین چندین جفت متغیر را به خوبی توزیع متغیرهای واحد ببینیم. در اینجا ما با استفاده از کتابخانه seaborn و تابع PairGrid یک طرح زوج با طرح های پراکندگی در مثلث بالایی ، هیستوگرام روی مناطق مورب و نقشه های تراکم هسته ۲بعدی و ضرایب همبستگی در مثلث تحتانی را ایجاد خواهیم نمود.

نمودار طرح زوج مصرف انرژی

برای دیدن تعامل بین متغیرها ، به دنبال جایی هستیم که یک ردیف با یک ستون تقاطع داشته باشد. به عنوان مثال ، برای دیدن همبستگی Weather Norm EUI با score ، ما به ردیف Weather Norm EUI و ستون score نگاه می کنیم و ضریب همبستگی منفی -۰٫۶۷ را می بینیم. نکته ی جالب دیگری که وجود دارد این است که طرح هایی از این دست به ما کمک می کنند تا تصمیم بگیریم که کدام متغیرها را در مدل سازی خودمان به کار ببریم .

مهندسی ویژگی و انتخاب ویژگی

مهندسی ویژگی و انتخاب ویژگی همیشه بیشترین بازده زمانی را که برای یک حل یک مشکل یادگیری ماشین سرمایه گذاری شده است را به ارمغان می آورند . اول از همه ، بگذارید این دو مورد را برایتان تعریف کنیم :

  • مهندسی ویژگی : فرایند گرفتن داده های خام و استخراج یا ایجاد ویژگی های جدید را مهندسی ویژگی می نامند. این فرایند ممکن است به معنای تغییر و تحول در متغیرها ، از جمله لگاریتم طبیعی و ریشه دوم یا متغیرهای دسته بندی گر به روش کد بندی وان هات یا در واقع همان one hot encoding باشد تا بتوان از آن ها در یک مدل استفاده کرد. به طور کلی ، مهندسی ویژگی را می توان به عنوان یک روش برای ایجاد ویژگی های اضافی از داده های خام در نظر گرفت.
  • انتخاب ویژگی : فرایند انتخاب ویژگی عبارت است از انتخاب مناسب ترین ویژگی در داده های مختلف. در فرایند انتخاب ویژگی ، ما برخی ویژگی ها را حذف می کنیم تا به مدل کمک کنیم که بتواند داده های جدید را بهتر تعمیم دهد و مدلی قابل تفسیر تر را ایجاد کند. به طور کلی ، انتخاب ویژگی ها را به عنوان یک فرایند برای کاستن ویژگی های اضافی می توان در نظر گرفت که در انتهای آن ما فقط ویژگی های مهم را نگه می داریم.

یک مدل یادگیری ماشین فقط می تواند از داده هایی که ما در اختیارش قرار می دهیم بیاموزد ، بنابراین اطمینان از این که داده ها شامل کلیه اطلاعات مربوط به وظیفه و پروژه ی ما می باشند ، بسیار مهم و حیاتی است. اگر مدل خودمان را با داده های صحیحی تغذیه نکنیم ، خود به خود آن را تنظیم می کنیم تا خراب شود و نتیجه ی صحیحی به ما ندهد ، بنابراین با داده های اشتباه نباید انتظار داشته باشیم که ماشین ما آن ها را به درستی بیاموزد!

برای این پروژه مراحل مهندسی ویژگی های زیر را انجام خواهیم داد:

  • متغیر های طبقه بندی شده با روش کدبندی وان هات ( متغیرهای طبقه بندی شده بر اساس نوع استفاده و منطقه ی ساختمان )
  • اضافه کردن تبدیل لگاریتم طبیعی متغیرهای عددی

one-hot encoding یا کد بندی به روش وان هات برای گنجاندن متغیرهای طبقه بندی شده در یک مدل امری ضروری است. یک الگوریتم یادگیری ماشین نمی تواند نوع ساختمان در مورد یک ” دفتر کاری ” را درک کند ، بنابراین اگر ساختمان یک دفتر باشد متغیر ۱ و در غیر این صورت باید آن را به عنوان ۰ ثبت کنیم.

اضافه کردن ویژگی های تبدیل شده می تواند به مدل ما کمک کند تا روابط غیر خطی را در داده ها بیاموزد. استفاده از ریشه دوم ، لگاریتم طبیعی یا قابلیت های ویژگی های مختلف از کارهای متداول در علم داده است و می تواند مبتنی بر دانش دامنه باشد و یا به صورت عملی و تجربی به دست آمده باشد. در اینجا ما به گزارش لگاریتم طبیعی بر اساس همه ی ویژگی های عددی خواهیم پرداخت.

کد زیر ویژگی های عددی را انتخاب می کند ، تحولات ورود به سیستم یا همان تبدیل لگاریتم را از این ویژگی ها می گیرد ، دو ویژگی طبقه بندی شده را انتخاب می کند ، یک ویژگی را با روش وان هات کدگذاری می کند و این دو مجموعه را به هم پیوند می دهد. شاید به نظر برسد که کار زیاد و پیچیده ای باشد ، اما این کار در چارچوب پاندا pandas نسبتاً ساده است!

پس از این فرآیند بیش از ۱۱،۰۰۰ مشاهده ( ساختمان ها ) به همراه ۱۱۰ ستون ( ویژگی ها ) داریم. به نظر می رسد که همه ی این ویژگی ها برای پیش بینی امتیاز Energy Star مفید نخواهند بود ، بنابراین اکنون برای حذف برخی از متغیر های غیر کاربردی به انتخاب ویژگی ها روی می آوریم.

انتخاب ویژگی

بسیاری از ۱۱۰ ویژگی موجود در داده های ما اضافی هستند، چرا که با یکدیگر همبستگی زیادی دارند. به عنوان مثال ، در اینجا نقشه سایت EUI در مقابل آب و هوای ساختمان EUI که ضریب همبستگی ۰٫۹۹۷ را دارند.

نمودار ویژگی ها EUI

ویژگی هایی که به طور جدی با یکدیگر در ارتباط هستند و همبستگی بالایی دارند با عنوان هم خطی یا collinear شناخته می شوند و از بین بردن یکی از متغیرهای موجود در این ویژگی های جفتی ، اغلب می تواند به یک مدل یادگیری ماشین کمک کند تا تعمیم پیدا کند و قابل تفسیر تر باشد. ( باید اشاره کنیم که ما در مورد ارتباط ویژگی ها با سایر ویژگی ها صحبت می کنیم ، نه ارتباط با هدف ، چرا که هدف به مدل ما کمک می کند! )

روش های مختلفی برای محاسبه ی همبستگی بین ویژگی ها وجود دارد که یکی از متداول ترین آن ها به کارگیری عامل تورم واریانس ( Variance Inflation Factor ) است. در این پروژه از ضریب همبستگی برای شناسایی و حذف ویژگی های هم خطی استفاده خواهیم کرد. اگر ضریب همبستگی بین آن ها بیشتر از ۰٫۶ باشد ، یکی از دو ویژگی را کنار خواهیم گذاشت. برای اجرای بهتر این فرآیند به دفترچه نگاهی بیندازید ( البته مراجعه به این پاسخ از Stack Overflow نیز خالی از لطف نیست )

در حالی که این مقدار ۰٫۶ ممکن است در نگاه اول یک میزان دلخواه به نظر برسد ، باید آگاه باشید که من چندین آستانه ی مختلف را امتحان کردم و در بین آن ها این انتخاب بهترین مدل را به همراه آورد. یادگیری ماشین یک میدان تجربی است و غالباً در مورد آزمایش و یافتن عملکردی است که بهترین پاسخ دهی را دارد! پس از انجام فرایند انتخاب ویژگی ، ما با ۶۴ ویژگی کلی و ۱ هدف باقی مانده ایم.

# Remove any columns with all na values
features  = features.dropna(axis=1, how = 'all')
print(features.shape)
(۱۱۳۱۹, ۶۵)

ایجاد یک مبنا

اکنون تمیز کردن داده ها ، تجزیه و تحلیل داده های اکتشافی و مهندسی ویژگی ها را انجام داده ایم. آخرین مرحله قبل از شروع فرایند مدل سازی ، ایجاد یک مبنای ساده است. این کار در واقع یک حدس است که می توانیم با کمک آن نتایج خود را با یکدیگر مقایسه کنیم. اگر مدل های یادگیری ماشین نتوانند با این مبنا پیش بروند ، ممکن است مجبور شویم نتیجه بگیریم که یادگیری ماشین برای کار ما قابل قبول نیستند یا ممکن است نیاز باشد که رویکرد دیگری را امتحان کنیم.

برای مسائل رگرسیون باید یک مبنای ساده و معقول برای حدس زدن حد متوسط مقدار هدف در مجموعه ی آموزش ها برای همه مثال های موجود را پیاده سازی کنیم. این کار یک مانع نسبتاً کم را برای پیشی گرفتن داده های مفید از هر مدل را تعیین می کند.

ابزار اندازه گیری مورد استفاده ی ما میانگین خطای مطلق ( Mean Absolute Error ) است که میانگین خطای مطلق را در پیش بینی ها اندازه گیری می کند. معیارهای زیادی برای رگرسیون وجود دارند ، اما ما توصیه اندرو انگ را که انتخاب یک « ابزار اندازه گیری » واحد و بررسی آن پس از پیاده سازی روی مدل را بیشتر می پسندیم . میانگین خطای مطلق دارای محاسبات آسان و قابل تفسیر است.

قبل از محاسبه و ایجاد مبنا ، باید داده های خود را به یک مجموعه آموزش training و یک مجموعه آزمایش test تقسیم کنیم:

۱. مجموعه آموزش ویژگی ها همان چیزی است که ما در طول آموزش به همراه جواب ها به مدل خود ارائه می دهیم و هدف از آن این است که مدل نقشه برداری بین ویژگی ها و هدف را یاد بگیرد.

۲. مجموعه آزمایش ویژگی ها برای ارزیابی مدل آموزش دیده استفاده می شود. این مدل مجاز به دیدن پاسخ های مربوط به مجموعه آزمایش نیست و باید فقط با استفاده از ویژگی هایی که به آن داده شده است پیش بینی ها را انجام دهد. توجه داشته باشید که ما جواب های مجموعه آزمون را می دانیم تا بتوانیم پیش بینی ماشین را با جواب های اصلی و صحیح مقایسه کنیم.

ما از ۷۰٪ از داده ها برای آموزش و از ۳۰٪ آن ها هم برای تست استفاده خواهیم کرد:

# Split into 70% training and 30% testing set
X, X_test, y, y_test = train_test_split(features, targets, 
                                        test_size = 0.3, 
                                        random_state = 42)

اکنون می توانیم عملکرد پایه ی ساده را محاسبه کنیم:

The baseline guess is a score of 66.00
Baseline Performance on the test set: MAE = 24.5164

برآورد ساده در مجموعه ی آزمون حدود ۲۵ امتیاز است. توجه داشته باشید که نمره از ۱-۱۰۰ متغیر است ، بنابراین این یک خطای ۲۵٪ ، یک مانع کاملاً کم را برای پیشی گرفتن داده های مفید در مدل را نشان می دهد!

نتیجه گیری

 در این مقاله سه مرحله اول برای حل یک مساله یادگیری ماشین را در کنار هم طی کردیم. پس از باز کردن و شناسایی درست مساله ما :

۱. داده های خام را پاکسازی و قالب بندی کردیم

۲. تجزیه و تحلیل داده های اکتشافی را برای کسب اطلاعات در مورد مجموعه ی داده انجام دادیم

۳. مجموعه ای از ویژگی هایی را ایجاد کردیم که برای مدل های خودمان استفاده کردیم

سرانجام ، ما همچنین گام اساسی برای ایجاد یک مبنا را برداشتیم که براساس آن توانستیم در مورد الگوریتم های یادگیری ماشین خودمان قضاوت کنیم.

در قسمت دوم ما در کنار هم نحوه ارزیابی مدل های یادگیری ماشین با استفاده از Scikit-Learn ، انتخاب بهترین مدل و انجام تنظیم Hyperparameter را برای بهینه سازی مدل را بررسی خواهیم کرد.

قسمت سوم هم به تفسیر مدل و نتایج گزارش ها می پردازد.

مثل همیشه ، ما از بازخورد و انتقادات سازنده استقبال می کنیم و امیدواریم که این مطلب برای شما مفید و کاربردی باشد.

بیشتر بخوانید :

منبع Medium

درباره‌ی محمد هادی قلی پور

همچنین ببینید

آیا می خواهید در زمینه یادگیری ماشین استخدام شوید؟

آیا می خواهید در زمینه یادگیری ماشین استخدام شوید؟

مسیر های شغلی زیادی در حوزه یادگیری ماشین وجود دارد، اما از کجا بفهمیم که …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *