چگونه درخت تصمیم را بسازیم؟
بهطور کلی، درخت تصمیم یک ابزار قدرتمند است که در تحلیل دادهها و تصمیمگیریهای پیچیده استفاده میشود. در برخی موارد، درخت تصمیم بهدلیل ساختار ساده خود، عملکرد بهتری نسبت به مدلهای پیچیدهتری دارد که برای تصمیمگیری و پیشبینی استفاده میشوند. درخت تصمیم از گرهها و انشعابها (branches) تشکیل شده است. هر گره توصیفکننده حالتی است که خود به گرههای دیگری که انشعاب نام دارند متصل است. انشعابها نشاندهنده تصمیمات مختلف هستند که بر اساس شرایط مختلف اتخاذ میشوند. هنگامی که صحبت از ساخت درخت تصمیم به میان میآید، با مجموعه مراحلی روبهرو هستیم که باید بهدقت دنبال شوند تا درخت بهشکل دقیقی ترسیم شود. این مراحل بهشرح زیر هستند:
انتخاب ویژگی
انتخاب ویژگی (Feature Selection) به معنای انتخاب مجموعهای از متغیرها است که بیشترین اطلاعات برای تصمیمگیری در خصوص یک مسئله را در اختیار ما قرار میدهند. هدف اصلی انتخاب ویژگی کاهش ابعاد دادهها و افزایش کارایی و دقت مدل است. با حذف یا انتخاب تعدادی از ویژگیها، میتوانیم موارد غیرضروری را حذف کنیم و عملکرد مدل را بهبود بخشیم. روشهای مختلفی برای انتخاب ویژگیها در دسترس قرار دارند که برخی از آنها بهشرح زیر هستند:
- روشهای مبتنی بر فیلتر: در این روشها، ویژگیها بر اساس معیارهای آماری مانند ارتباط با متغیرهای هدف (اطلاعات متقابل)، واریانس یا آزمون فرضیه مورد ارزیابی قرار میگیرند. ویژگیهایی که بیشترین ارتباط و اهمیت را با متغیرهای هدف دارند انتخاب میشوند.
- روشهای Wrapper: در این روش از الگوریتمهای یادگیری ماشین برای ارزیابی کیفیت ویژگیها استفاده میشود. یک زیرمجموعه از ویژگیها انتخاب میشود و مدل با استفاده از آنها آموزش داده میشود و سپس عملکرد مدل با استفاده از معیاری مانند دقت یا خطای پیشبینی مورد ارزیابی قرار میگیرد. این فرایند بهصورت تکرارشونده انجام میشود تا بهترین زیرمجموعه از ویژگیها بهدست آید.
- روشهای Embedded: در این روش، انتخاب ویژگی بهصورت مستقیم در فرایند یادگیری مدل انجام میشود. در الگوی فوق برای هر گره از درخت تصمیم، یک ویژگی بر اساس معیاری مانند اطلاعات جینی (information gain) یا ضریب جینی (Gini coefficient) برای تقسیم بهتر دادهها، انتخاب میشود.
ساختاردهی درخت
پس از تقسیم دادهها، درخت تصمیم بهصورت سلسلهمراتبی از گرهها ساخته میشود. هر گره یک ویژگی مخصوص به خود دارد و فرزندان آن گره نشاندهنده مقادیر ممکن آن ویژگی هستند. این فرایند تا جایی ادامه مییابد که دادهها بهطور کامل جدا شوند یا شرایط مسئله برای توقف مشخص شوند (مانند عمق مشخصشده درخت).
برچسبدهی
پس از ساختاردهی درخت، برچسبها (کلاسها یا مقادیر هدف) به گرهها اختصاص داده میشوند. به این ترتیب، درخت تصمیم آموزش دیده و آماده استفاده برای پیشبینی و دستهبندی دادههای جدید است.
پیشبینی
پیشبینی به معنای استفاده از درخت ساختهشده برای پیشبینی یا دستهبندی دادههای جدید است. بعد از ساخت درخت تصمیم و برچسبدهی به گرههای برگ، میتوان از این درخت برای پیشبینی و دستهبندی نمونههای جدید استفاده کرد. بهعنوان مثال، فرض کنید یک درخت تصمیم ساخته شده است که براساس ویژگیهایی مانند سن، جنسیت و وضعیت اشتغال، افراد را به دو دسته «خریدار» و «رهگذر» تقسیم میکند. اکنون اگر یک نمونه جدید با ویژگیهایی مانند سن 30 سال، جنسیت مرد و وضعیت اشتغال «کارمند» وارد درخت شود، درخت با توجه به قوانین تصمیمگیری خود، پیشبینی میکند که این نمونه به دسته «خریدار» تعلق میگیرد.
مزایای استفاده از درخت تصمیم در علم دادهها چیست؟
درخت تصمیم یکی از مدلهای مهم در علم دادهها است که همانگونه که اشاره کردیم، در مقایسه با برخی از مدلهای رایج فهم آن سادهتر است. برخی از مزایای درخت تصمیم بهشرح زیر است:
- تفسیرپذیری: درخت تصمیم بهدلیل ساختار سلسلهمراتبی و قابل فهم بودن، تفسیرپذیری بالایی دارد. بهطوریکه میتوانید بهراحتی درک کنید که چگونه تصمیمهای درخت بر اساس ویژگیها و قوانین انجام میشوند.
- قابلیت استفاده در مسائل دستهبندی و پیشبینی: درخت تصمیم قابلیت استفاده در مسائل دستهبندی و پیشبینی را دارد. با استفاده از درخت تصمیم، میتوانیم نمونهها را به دستههای مختلف اختصاص دهیم یا برچسبهایی را به دادههای جدید بدهیم.
- پردازش سریع: درخت تصمیم بهدلیل ساختار ساده و مستقل از دادههای آموزشی، دارای زمان اجرای سریعی است. مقایسه و تصمیمگیری برای هر گره بر مبنای تعداد کمی ویژگی انجام میشود. همین مسئله باعث شده تا سرعت درخت برای پیشبینی دادههای جدید افزایش محسوسی داشته باشد.
- قابلیت کار با ویژگیهای عددی و دستهای: درخت تصمیم قابلیت کار با ویژگیهای عددی و دستهای را دارد. در ویژگیهای عددی، میتوان از معیارهایی مانند میانگین برای تقسیم دادهها استفاده کرد، در حالی که در ویژگیهای دستهای میتوان از مقادیر در دسترس برای تقسیمبندی استفاده کرد.
- پایداری در برابر دادههای ناقص و نویز: درخت تصمیم پایداری زیادی در برابر دادههای ناقص و نویزی دارد، زیرا عملکرد آن مبتنی بر تقسیم و متمایز کردن دادهها از یکدیگر است. به همین دلیل، تغییر در یک نمونه یا ویژگی تاثیر کمی بر عملکرد کلی درخت دارد.
- قابلیت تشخیص ویژگیهای مهم: درخت تصمیم، با تقسیم دادهها بر اساس ویژگیها، میتواند ویژگیهای مهم و تاثیرگذار در دادهها را شناسایی کند. با بررسی ساختار درخت و مکان قرار گرفتن ویژگیها در آن، میتوان درک کرد کدام ویژگیها در تصمیمگیری بیشترین نقش را دارند.
- تحلیل دادهها: درخت تصمیم کمک میکند تا دادهها را بهطور جامع تحلیل کنیم. با بررسی ویژگیها و شرایط مختلف درخت، میتوانیم الگوها، روابط و ویژگیهای مهم در دادهها را شناسایی و استخراج کنیم.
چه الگوریتمهایی برای ساخت درخت تصمیم در علم دادهها در دسترس قرار دارند؟
دانشمندان داده از الگوریتمهای مختلفی برای ساخت درخت تصمیم استفاده میکنند. برخی از معروفترین الگوریتمها در این زمینه بهشرح زیر هستند:
- الگوریتم ID3: الگوریتم ID3 یکی از روشهای معروف برای ساخت درخت تصمیم است. این الگوریتم برای ساخت درخت تصمیم از رویکرد اطلاعات جینی (Information Gain) استفاده میکند. عملکرد الگوریتم فوق به این صورت است که ابتدا ویژگیهایی را انتخاب میکند که شایستگی انتخاب شدن بهعنوان ریشه را دارند. برای انتخاب بهینهترین ویژگی، از معیار جینی استفاده میشود. در مرحله بعد فرآیند تقسیم دادهها انجام میشود که دادهها بر اساس مقادیر مختلف تقسیمبندی میشوند تا به زیرگرههای متناظر با هر مقدار برسیم. مراحل بالا برای هر زیرگره تکرار میشوند. برای هر زیرگره، ویژگی با بیشترین اطلاعات جینی بهعنوان ریشه آن زیرگره انتخاب میشود و دادهها بر اساس آن تقسیم میشوند. این روند تا زمانی که به یکی از شرایط پایانی برسیم ادامه مییابد؛ برای مثال تا زمانی که دادههای یک زیرگره یکسان شوند یا تمام ویژگیها استفاده شوند. در صورتی که به یکی از شرایط پایانی برسیم، یک برچسب (برچسب اکثریت در دادهها) بهعنوان برچسب درخت تصمیم تعیین میشود.
- الگوریتم C4.5: یکی دیگر از الگوریتمهای معروف برای ساخت درخت تصمیم است که نسخه بهبودیافته و تعمیمیافته ID3 است که تغییراتی در روشهای انتخاب ویژگی و هندسه درخت انجام میدهد. فرآیند ساخت درخت بر مبنای الگوریتم C4.5 تقریبا مشابه با ID3 است، به این صورت که الگوریتم فوق از معیار اطلاعات جینی برای انتخاب ویژگی که قرار است برای ریشه در نظر گرفته شود استفاده میکند، اما C4.5 از یک معیار دیگر بهنام چرخش جینی (Gain Ratio) بهره میبرد که برای مقابله با مشکل انحراف به سمت ویژگیهایی با بیشترین تعداد مقادیر استفاده میشود. در نهایت، ویژگی با بیشترین Gain Ratio بهعنوان ریشه درخت انتخاب میشود. مراحل دیگر همانند الگوریتم ID3 است.
- الگوریتم CART: این الگوریتم برای دستهبندی و رگرسیون استفاده میشود. درختهای CART به دو نوع درختهای دستهبندی و درختهای رگرسیون تقسیم میشوند. الگوریتم CART برای ساخت هر دو نوع درخت بهصورت مشابه عمل میکند؛ با این تفاوت که در درختهای دستهبندی، خروجیها برچسبهای دستهها هستند، در حالی که در درختهای رگرسیون، خروجیها مقادیر پیوسته هستند. فرآیند ساخت درخت بر مبنای CART به این صورت است که ابتدا فرآیند انتخاب ویژگی و مقدار تقسیم انجام میشود. در هر مرحله، بر اساس یک معیار بهینهسازی، یک ویژگی و مقدار تقسیم برای آن ویژگی انتخاب میشود. معیارهای معمول شامل معیار جینی (Gini Index) برای درختهای دستهبندی و میانگین مربعات خطا (Mean Squared Error) برای درختهای رگرسیون است. الگوریتم با تلاش برای کاهش خطا یا افزایش خلوص دستهها، ویژگی و مقدار تقسیم را انتخاب میکند. در مرحله بعد نوبت به تقسیم دادهها میرسد. دادهها بر اساس مقدار تقسیم انتخابشده در مرحله قبل، به زیرگرهها تقسیم میشوند. مراحل فوق برای هر گروه زیرگره تکرار میشود تا به یک شرط پایانی برسیم، مانند حداقل نمونهها در یک گروه، عمق مشخصی از درخت یا ایجاد برگهای یکنواخت. در صورتی که به یک شرط پایانی برسیم، عملیات ساخت درخت به پایان میرسد.
- الگوریتم جنگل تصادفی (Random Forest): جنگل تصادفی یک الگوریتم یادگیری ماشین با قابلیت کاربری ساده است که اغلب نتایج خوبی را حتا بدون تنظیم فراپارامترها فراهم میکند. این الگوریتم بهدلیل سادگی و قابلیت استفاده، هم برای دستهبندی و هم رگرسیون مورد استفاده قرار میگیرد. جنگل تصادفی یک مدل یادگیری ماشین نظارتشده است که در فاز آموزش (training) یا برازش مدل، دادهها را به خروجیها نگاشت میکند. در طول آموزش، دادههای تاریخی به مدل داده میشوند که مرتبط با دامنه مسئله هستند و مقدار صحیحی که مدل باید بیاموزد تا بتواند پیشبینی کند. مدل، روابط میان دادهها و مقادیری را که کاربر میخواهد آنها را پیشبینی کند میآموزد.
- الگوریتم XGBoost : الگوریتمی است که بهمنظور پیشبینی و تحلیل دادهها استفاده میشود. این الگوریتم با استفاده از گرادیان کاهشی (Gradient Boosting) و استفاده بهینه از درختان، مدلی قوی و دقیق برای مسائل پیچیده ارائه میدهد.
چگونه از درخت تصمیم در علم دادهها استفاده کنیم؟
درخت تصمیم یکی از روشهای مهم و قدرتمند در حوزه علم دادهها است و میتوان از آن بهصورت گسترده در بسیاری از مسائل استفاده کرد. برخی از کاربردهای اصلی درخت تصمیم در علم دادهها بهشرح زیر است:
- طبقهبندی دادهها: درخت تصمیم بهخوبی برای مسائل طبقهبندی دادهها قابل استفاده است. با استفاده از ویژگیهای دادهها، درخت تصمیم میتواند دادهها را به دستههای مختلف تقسیم کند و برچسبهای طبقهبندی را برای آنها پیشبینی کند. این کاربرد در مسائلی مانند تشخیص اسپم از ایمیل، تشخیص بیماریها، تصمیمگیری در مسائل مالی و طبقهبندی مشتریان استفاده میشود.
- پیشبینی و رگرسیون: با استفاده از ویژگیهای دادهها، درخت تصمیم میتواند مقادیر عددی را پیشبینی کند. بهطور مثال، میتوان از آن برای پیشبینی قیمت خانه بر اساس ویژگیهای مربوطه مانند متراژ، تعداد اتاق و موقعیت جغرافیایی استفاده کرد.
- انتخاب ویژگی: درخت تصمیم میتواند بهعنوان یک ابزار برای انتخاب ویژگیها در مسائل دادهمحور مورد استفاده قرار گیرد. با تحلیل ساختار درخت تصمیم، میتوان ویژگیهای مهم و تاثیرگذار در پیشبینی و طبقهبندی دادهها را شناسایی کرد و از آنها برای ساخت مدلهای کارآمد استفاده کرد.
- تشریح قوانین تصمیمگیری: یکی از مزایای درخت تصمیم این است که قوانین تصمیمگیری قابل فهم و تشریحپذیر را ارائه میکند. با تحلیل ساختار درخت و مسیرهای مختلف، میتوان قوانین تصمیمگیری را بهصورت قابل فهم استخراج کرده و توضیح داد.
مثالی از نحوه پیادهسازی درخت تصمیم در پایتون
اکنون اجازه دهید بهشکل عملی نحوه پیادهسازی درخت تصمیم در پایتون را برای مسئله طبقهبندی دادههای آب و هوا نشان دهیم. در این مثال، ما ویژگیهایی مانند دما، رطوبت و سرعت باد را برای پیشبینی آب و هوای روز بعد مورد استفاده قرار میدهیم.
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
# بارگیری مجموعه دادههای آب و هوا
weather_data = datasets.load_iris()
# جدا کردن ویژگیها و برچسبها
X = weather_data.data
y = weather_data.target
# تقسیم دادهها به دو مجموعه آموزشی و آزمون
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# ساخت مدل درخت تصمیم با پارامترهای پیشفرض
clf = DecisionTreeClassifier()
# آموزش مدل با دادههای آموزشی
clf.fit(X_train, y_train)
# پیشبینی برچسبها برای دادههای آزمون
y_pred = clf.predict(X_test)
# ارزیابی دقت مدل
accuracy = metrics.accuracy_score(y_test, y_pred)
print(“دقت مدل:”, accuracy)
در این مثال، از کتابخانه Scikit-learn استفاده شده است. ابتدا مجموعه دادههای آب و هوا با استفاده از datasets.load_iris بارگیری میشوند. سپس، ویژگیها (دما، رطوبت و سرعت باد) و برچسبها (نوع آب و هوا) جدا میشوند. در مرحله بعد، دادهها به دو بخش آموزشی و آزمون با استفاده از train_test_split تقسیم میشوند. در این مثال، 80 درصد از دادهها برای آموزش و 20 درصد برای آزمون استفاده میشود.
سپس، یک مدل درخت تصمیم با استفاده از DecisionTreeClassifier ساخته میشود و مدل بر مبنای دادههای آموزشی fit آموزش میبیند، برچسبهای پیشبینیشده برای دادههای آزمون با استفاده از predict محاسبه میشوند و در نهایت، دقت مدل با استفاده از accuracy_score که از شاخصههای کتابخانه Scikit-learn است محاسبه شده و نمایش داده میشود.
چگونه میتوانیم پارامترهای مختلفی را به مدل اضافه کنیم؟
در مدل درخت تصمیم بر مبنای کتابخانه Scikit-learn، میتوانید با استفاده از پارامترهای مختلف، رفتار و عملکرد مدل را تنظیم کنید. در زیر چند پارامتر مهم را بررسی میکنیم که به شما امکان میدهد مدل را با نیازهای خود و تنظیمات مسئله سازگار کنید.
- criterion: این پارامتر مشخص میکند که چه معیاری برای تقسیم گرهها استفاده شود. برای مسائل طبقهبندی معمولا از معیارهای gini و entropy استفاده میشود. بهطور پیشفرض، gini استفاده میشود.
- max_depth: این پارامتر حداکثر عمقی را که درخت میتواند داشته باشد، مشخص میکند. با تنظیم این پارامتر، میتوانید از بیشبرازش (Overfitting) جلوگیری کنید. اگر این پارامتر را برابر با None قرار دهید، درخت تصمیم با حداکثر عمق ممکن رشتهها را میسازد. بهطور پیشفرض، این پارامتر برابر با None است.
- min_samples_split: این پارامتر تعداد نمونههای حداقلی را که برای تقسیم یک گره لازم است، مشخص میکند. اگر تعداد نمونههای یک گره کمتر از این پارامتر باشد، تقسیم دیگر انجام نمیشود. این پارامتر برای جلوگیری از بیشبرازش مفید است. بهطور پیشفرض، این پارامتر برابر با 2 است.
- min_samples_leaf: این پارامتر حداقل تعداد نمونههای مورد نیاز برای وجود یک برگ درخت را مشخص میکند. اگر تعداد نمونههای یک برگ کمتر از این پارامتر باشد، عملیات تقسیم متوقف میشود. این پارامتر نیز برای جلوگیری از بیشبرازش مفید است. بهطور پیشفرض، این پارامتر برابر با 1 است.
- max_features: این پارامتر تعداد ویژگیهایی را که برای بررسی بهعنوان بهترین تقسیم استفاده میشود مشخص میکند. شما میتوانید این پارامتر را به یک عدد، نسبت یا auto تنظیم کنید. بهطور پیشفرض، این پارامتر برابر با None است.
- splitter: این پارامتر نحوه انتخاب تقسیمکننده را مشخص میکند. مقادیر ممکن برای این پارامتر شامل best (برای انتخاب بهترین تقسیمکننده) و random (برای انتخاب تقسیمکننده بهصورت تصادفی) است. بهطور پیشفرض، best استفاده میشود.
- random_state: این پارامتر برای تولید اعداد تصادفی استفاده میشود. با تنظیم یک عدد ثابت در این پارامتر، مدل هر بار با استفاده از همان ترتیب دادهها و تقسیمهای تصادفی ایجاد میشود.
- class_weight: با استفاده از این پارامتر، میتوانید وزندهی متفاوت به کلاسها را تعیین کنید. این کار برای مقابله با مشکل تعداد نمونههای نامتوازن در کلاسها مفید است.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.


























نظر شما چیست؟