درخت تصمیم: وقتی ماشین مانند انسان تصمیمگیری میکند قسمت دوم
مقدمه
در ادامهی مقالهی قسمت اول تصمیم، در این قسمت به ادامهی معیارهای تقسیم متغیرها میپردازیم. سپس راههای جلوگیری از بیشبرازش مدل را بیان میکنیم و در نهایت با دو مثال عملی از درخت تصمیم در محیط پایتون مبحث را به پایان میرسانیم.
شاخص جینی
راه دیگر ایجاد تقسیمبندیها در درخت تصمیم شاخص جینی است. آنتروپی و معیار کسب اطلاعات بر میزان ناخالصی یک گره تمرکز دارند اما شاخص جینی احتمال دستهبندی اشتباه یک نمونهی تصادفی را اندازهگیری میکند. هرچه شاخص جینی کمتر باشد، احتمال دستهبندی اشتباه نیز کمتر است.
شاخص جینی با استفاده از رابطهی زیر به دست میآید:
در رابطهی بالا نشاندهندهی تعداد کلاسهای متغیر پاسخ است (در مثال ما موفقیت و شکست). عبارت
نشاندهندهی نسبت مشاهدات مربوط به کلاس مربوطه به کل مشاهدات است.
بیایید با گره ریشه شروع کنیم و شاخص جینی را برای هر یک از گرههای فرعی محاسبه کنیم.
به طور کلی شاخص جینی دارای حداقل مقدار (بالاترین سطح خلوص) 0 و حداکثر مقدار 0.5 است. اگر شاخص جینی 0.5 باشد، نشاندهندهی انتساب تصادفی کلاسها است.
حال شاخص جینی را برای گره ریشه و برای ویژگی سابقهی تحصیلی دانشجو محاسبه میکنیم. در این حالت ما 3 گره فرعی داریم. فرمول جینی شاخص جینی را برای هر گره فرعی محاسبه میکند و سپس میانگین وزنی آنها به عنوان شاخص کلی جینی در نظر میگیرد.
گره فرعی سابقهی تحصیلی ریاضی (4 موفقیت و 3 شکست):
گره فرعی سابقهی تحصیلی علوم کامپیوتر (4 موفقیت و 0 شکست):
گره فرعی سابقهی تحصیلی سایر رشتهها (0 موفقیت و 4 شکست):
همانطور که میبینیم احتمال دستهبندی نادرست در گره علوم کامپیوتر 0 است، زیرا همهی نمونهی این گروه در آزمون موفق شدهاند. به طور مشابه احتمال دستهبندی اشتباه در سایر رشتهها نیز 0 است، زیرا همهی نمونهها در امتحان رد شدهاند. فقط گره مربوط به رشتهی ریاضی است که در آن امکان دستهبندی اشتباه وجود دارد اتفاقا مقدار آن نیز با توجه به اینکه حداکثر مقدار شاخص جینی 0.5 است، بسیار زیاد است.
شاخص کلی جینی برای این افراز، مشابه آنتروپی به صورت میانگین وزنی گرههای فرعی محاسبه میشود:
به صورت مشابه میتوانیم شاخص جینی را برای وضعیت اشتغال و وضعیت شرکت در دورههای آنلاین محاسبه کنیم. محاسبات آنها در زیر آورده شده است:
وضعیت اشتغال:
وضعیت شرکت در دورههای آنلاین:
شاخص جینی برای متغیر سابقهی تحصیلی دانشجویان دارای کمترین مقدار است. از این رو، مشابه معیارهای آنتروپی و معیار کسب اطلاعات این متغیر را برای گره ریشه در نظر میگیریم.
به طور مشابه، مجدد به سمت پایین درخت حرکت میکنیم و در جاهایی که خلوص گره کمتر است، افراز مطلوب را براساس مقدار شاخص جینی ایجاد میکنیم.
شاخص جینی در مقابل معیار کسب اطلاعات
بسته به اینکه کدام معیار برای اندازهگیری ناخالصی استفاده شود، نتایج دستهبندی درخت میتواند متفاوت باشد. این موضوع میتواند تأثیر کوچک (یا گاهی اوقات بزرگی) روی مدل شما بگذارد.
به طور کلی هیچکدام از رویکردها ترجیحی بر دیگری ندارد. به عنوان مثال، درخت CART از شاخص جینی استفاده میکند اما درختهای ID3 و C4.5 از آنتروپی استفاده میکنند.
شاخص جینی دارای حداکثر ناخالصی 0.5 و حداکثر خلوص 0 است، در حالی که آنتروپی به حداکثر ناخالصی 1 و به حداکثر خلوص 0 را نظیر میکند.
پیشبینی چگونه در درخت تصمیم انجام میشود؟
حالا که جزییات و اجزای درخت تصمیم را مطالعه کردیم و فهمیدیم که مدل درخت تصمیم چگونه تقسیمبندیها و انتخاب متغیرها را انجام میدهد، میتوانیم به سراغ نحوهی انجام پیشبینی در این مدل برویم.
در واقع هنگامی که یک درخت تصمیم آموزش و آزمون میشود و از کارایی آن مطمئن میشویم، مرحلهی پیشبینی کاملا آسان است.
درخت تصمیم اساساً یک نمودار از انشعابات را بر اساس متغیرهای مستقل مختلف ارائه میدهد. فرض کنید یک نمونهی جدید به همراه مقادیر متغیرهای مستقل مختلف آن وارد مدل میشود. این نمونهی جدید برخلاف دادههای آموزشی و آزمونی، کلاس متغیر هدف را ندارد و ما سعی میکنیم که این کلاس را با حرکت به سمت پایین روی درخت، و بررسی شروط متغیرهای مستقل مختلف در شاخههای مختلف، پیشبینی کنیم.
در نهایت، نمونهی جدید در یک گره برگ قرار میگیرد و کلاس آن بر اساس کلاس غالب در گره برگ تعیین میشود.
فرض کنید نمونهی جدید به صورت زیر است:
شکل 1: نمونهی آزمونی فرضی جدید
بر اساس درخت خود، ابتدا شاخه سابقهی تحصیلی ریاضی و سپس شاخهی شاغلان را بررسی میکنیم. همانطور که در شکل 7 قسمت اول دیدیم بعد از چک کردن این دو شرط به یک گره برگ میرسیم و مشاهده جدید بر اساس کلاس اکثریت در این گره تعیین میشود. از آنجایی که کلاس اکثریت در این گره، موفقیت است، وضعیت مشاهدهی جدید در امتحان نیز "موفقیت در آزمون" پیشبینی میشود.
زمانی که الگوریتم در حال ارزیابی یک نمونهی جدید است و به یک گره برگ میرسد، پیشبینی بر اساس مقدار اکثریت نمونههای موجود در گره برگ انجام میشود. همانطور که در مورد بالا مشاهده شد، گره شاغلان کاملا خالص نیست؛ با این حال، ما با در نظر گرفتن این که اکثر نمونههای این برگ در امتحان موفق شدهاند پیشبینی میکنیم که نمونهی جدید نیز در امتحان موفق خواهد بود.
به طور کلی، بیشتر گرههای برگ خالص نیستند و از این رو برای پیشبینی کلاس نمونهها، از مقدار اکثریت نمونهها در برگ برای پیشبینی استفاده میکنیم.
اگر هدفمان پیشبینی به صورت عددی (درخت رگرسیونی) باشد، مقدار میانگین مقادیر متغیر هدف در گره برگ را به عنوان پیشبینی در نظر میگیریم.
مدلهای درخت تصمیم و موضوع بیشبرازش
بیشبرازش میتواند چالش بزرگی در مدلهای درخت تصمیم باشد. حتی در مثال سادهی ما، میتوانیم ببینیم که الگوریتم آنقدر به تقسیم شدن ادامه میدهد تا زمانی که به یک گره برگ برسد. اغلب گرههای برگ ممکن است فقط یک یا دو نمونه داشته باشند. این موضوع به وضوح منجر به یک ساختار درختی پیچیده میگردد که ممکن است باعث شود که مدل به خوبی به نمونههای آزمونی تعمیمپذیر نباشد؛ زیرا هر برگ مجموعهی بسیار خاصی از ترکیبهای متغیرها که در دادههای آموزشی دیده میشوند را نمایندگی میکند. بنابراین درخت نمیتواند ترکیبهایی از متغیرها که در دادههای آموزشی دیده نمیشوند را به درستی دستهبندی کند.
چند روش وجود دارد که به کمک آنها میتوانیم از بیشبرازش مدل درخت تصمیم جلوگیری کنیم. در اینجا به 3 رویکرد کلی اشاره میکنیم:
- توقف زودهنگام: جلوگیری از رشد بیش از حد (بزرگ یا عمیق شدن درخت).
- هرس کردن درخت: اجازه دادن به درخت برای رشد کامل و سپس حذف شاخههای اضافه بر اساس معیارهای مختلف.
- یادگیری گروهی: استفاده از برآیند درختهای متعدد مانند جنگل تصادفی.
ما در این پست فقط به طور خلاصه به تکنیکهای شماره 1 و 2 میپردازیم.
تکنیک های یادگیری گروهی مانند جنگل تصادفی نیاز به توضیح بیشتری دارند و از این رو در مقالهای جداگانه به آن خواهیم پرداخت.
توقف زودهنگام
تکنیک توقف زودهنگام به متوقف کردن رشد درخت تصمیم اشاره دارد. این تکنیک شامل تنظیم ابرپارامترهای مدل درخت تصمیم قبل از شروع فرایند آموزش است. ابرپارامترهای درخت تصمیم در کتابخانهی sklearn پایتون شامل max_depth، min_samples_leaf، و min_samples_split هستند که به ترتیب حداکثر عمق درخت، حداقل نمونهی لازم برای تشکیل برگ، و حداقل نمونهی لازم برای ایجاد یک افراز را کنترل میکنند و میتوانند برای توقف زودهنگام رشد درخت و جلوگیری از بیشبرازش مدل به کار برده شوند.
بهترین راه برای تعیین ابرپارامترها در کتابخانهی sklearn، تکنیک GridSearchCV است که به کمک آن میتوان بهترین مجموعهی مقادیر را برای ابرپارامترهای یک مدل درخت تصمیم یافت.
اساس این روش بر این مبنا است که مجموعهای از مقادیر را برای هر ابرپارامتر در نظر میگیرد و به وسیلهی اعتبارسنجی متقابل بهترین آن مقادیر را در راستای بهبود عملکرد مدل پیدا میکند.
چالشی که در رویکرد توقف زودهنگام وجود دارد این است که گاهی با مشکل «افق دید» همراه است؛ زیرا توقف زودهنگام ممکن است از ایجاد برخی انشعابات مفید جلوگیری کند.
هرس کردن درخت
در این تکنیک به درخت اجازهی رشد تا حداکثر عمق را میدهیم. سپس قسمتهایی از درخت را برای جلوگیری از بروز بیشبرازش مدل حذف میکنیم. در واقع زیردرختهایی از درخت کامل که بر اساس یک معیار ارزیابی، کارایی لازم را ندارند را از درخت حذف میکنیم. بنابراین به طور موثر روی درخت به سمت بالا (ریشه) حرکت میکنیم و به حذف زیردرختهای غیرمفید ادامه میدهیم. معیاری که برای حذف زیردرختها در نظر گرفته میشود معمولا برای درختان رگرسیونی MSE و برای درختان دستهبندی، خطای دستهبندی کلاسها است.
یک چالش که در هرس کردن درخت تصمیم با آن مواجه میشویم این است که درخت تصمیم میتواند بسیار عمیق و بزرگ باشد و از این رو ارزیابی هر شاخه می تواند از نظر محاسباتی گران و زمانبر باشد.
یک تکنیک مهم برای اجرای هرس درخت تصمیم، هرس پیچیدگی هزینه (ccp) است که راهحل کارآمدی در این زمینه ارائه میدهد.CCP یک تکنیک پیچیده و پیشرفته است که توسط پارامتر α در پیادهسازی درخت تصمیم sklearn اجرا میشود.
الگوریتم CCP چگونه کار میکند؟
مسالهی اساسی که CCP به آن میپردازد این است:
چگونه بهترین راه برای هرس درخت را تعیین کنیم؟ به طور شهودی، زیردرختی را برای هرس انتخاب میکنیم که حذف آن منجر به کاهش خطای مدل روی دادههای آزمونی شود. این کار را میتوان با استفاده از اعتبارسنجی متقابل یا در صورت داشتن نمونهی کافی، با استفاده از مجموعه دادهی اعتبارسنجی انجام داد.
با این حال، با توجه به تعداد بالای زیردرختها در یک درخت کاملا رشد یافته
_ حتی برای یک مجموعه دادهی کوچیک _ این فرآیند با احتمال زیاد کاملا محاسباتی و زمانبر خواهد بود.
هرس پیچیدگی هزینه، که همچنین با عنوان هرس ضعیفترین پیوند نیز شناخته میشود راهی برای انجام این کار به ما میدهد. این الگوریتم بهجای در نظر گرفتن هر زیردرخت ممکن، دنبالهای از درختها را در نظر میگیرد که با پارامتر غیرمنفی تنظیم α مشخص شدهاند.
اساساً پارامتر α مشابه عبارت اضافه شده به تابع زیان در رگرسیون لاسو است. معادلهی اصلی الگوریتم CCP در زیر آورده شده است:
این یک معادلهی نسبتا پیچیده است. بیایید سعی کنیم آن را کمی بیشتر درک کنیم.
برخی از تعاریف لازم:
:مجموعهی متغیرهای مستقل مرتبط با گره پایانیmام
: متغیر پاسخ پیشبینیشده مرتبط با گره انتهاییmام
: خطای زیردرخت مرتبط با گره پایانیmام
(ما از رویکرد درخت رگرسیونی برای این معادله استفاده میکنیم. برای درخت دستهبندی نیز فرایند مشابه است.)
: تعداد گرههای پایانی در درخت T
حال بیایید ببینیم در معادلهی بالا چه اتفاقی افتاده است. معادله سعی میکند خطای مدل را در تمام گرههای پایانی درخت به حداقل برساند.
پارامتر α عبارتی است که در تعداد کل گرههای پایانی هر زیردرخت ضرب میشود. اگر باشد، در این صورت صرفا خطای آموزش مدل را به حداقل میرسانیم؛ در نتیجه درخت نهایی دقیقا همان درخت اصلی خواهد بود و هرس نخواهد شد.
به ازای ، یک عبارت جریمهی اضافه به تابع خطا افزوده میشود که با افزایش تعداد گرههای پایانی (|T|) افزایش مییابد. این بدان معناست که هزینهی کلی برای یک زیردرخت کوچکتر، کمتر از هزینهی زیردرختهای بزرگتر است(به شرط داشتن MSE مشابه.)
برای یافتن مقادیر مناسب برای اعمال جریمه، تابع ccp_alpha از کتابخانهی sklearn میتواند مناسب باشد.
متد DecisionTreeClassifier.cost_complexity_pruning_path آلفاهای مناسب را مییابد و ناخالصی برگهای مربوطه را در هر مرحله از فرایند هرس برمیگرداند.
با افزایش α ، قسمتهای بیشتری از درخت هرس میشوند. در واقع در انتخاب مقدار بهینهی آلفا، با موازنهی بین واریانس و بایاس مدل مواجه هستیم.
منظور از واریانس، خطای مدل بر روی دادهی آزمونی است و منظور از بایاس، خطای مدل روی دادهی آموزشی است. میدانیم که صرف کاهش بایاس نباید مورد توجه ما باشد بلکه باید همزمان به عملکرد مدل روی دادهی آزمونی نیز توجه کنیم. زیرا بیتوجهی به این موضوع میتواند به بیشبرازش مدل منجر شود.
با افزایش ccp_alpha به طرز معنیدار و آگاهانهای بایاس مدل را افزایش میدهیم؛ یعنی مدل را ساده میکنیم. با این حال اگر بخواهیم به جنبهی منفی این موضوع اشاره کنیم، این کار مستلزم آن است که ما باید سطوح ناخالصی بیشتری را در گرههای پایانی درخت تحمل کنیم. با افزایش α هم تعداد گرهها و هم عمق درخت کاهش مییابد.
نحوهی تعیین α بهینه
با ترسیم مقادیر ccp_alpha در مقابل بایاس و واریانس میبینیم که وقتی و سایر ابرپارامترها ثابت نگه داشته شدهاند، درخت دچار بیشبرازش میشود که منجر به دقت 100% روی دادههای آموزشی و دقت 88% روی دادهی آزمون میشود.
با افزایش مقدار آلفا تعداد قسمت بیشتری از درخت هرس میشود. بنابراین یک درخت تصمیم ایجاد میشود که تعمیمپذیرتر است. با این حال در برخی موارد، افزایش بیشتر α در واقع منجر به کاهش دقت مدل روی دادهی آزمون میشود زیرا که مدل بیش از حد ساده میشود. در این مثال، تنظیم ccp_alpha=0.015 دقت مدل روی دادهی آزمونی را به حداکثر میرساند.
فرایند تنظیم در پایتون در شکل 2 نمایش داده شده است.
شکل 2: تنظیم ابرپارامتر در پایتون
مزایا و معایب درختهای تصمیم
مزایا
- درخت تصمیم یک نمودار بصری از رابطهی متغیرهای مورد استفاده در مدل را ارائه میدهد و از این رو دارای توضیحپذیری بالایی هستند. سلسله مراتب درخت، بینش مفیدی را در مورد اهمیت متغیرها فراهم میکند.
- گاهی اوقات درختهای تصمیم واقعا میتوانند فرایندهای تصمیمگیری انسانی را منعکس کنند.
- درخت تصمیم یک مدل اصطلاحا جعبه سفید است؛ یعنی قابلیت توضیح دارد و میتوانیم نتایج مدل را به سادگی بیان کنیم. این برخلاف مدلهای جعبه سیاه مانند شبکههای عصبی است که از تفسیرپذیری خوبی برخوردار نیستند و نمیتوان آن را به سادگی به افراد غیرمتخصص توضیح داد.
- به طور کلی نسبت به مدلهای دیگر نیاز کمتری به آمادهسازی و پاکسازی دادههای ورودی (مانند نرمالسازی و کدگذاری متغیرهای گسسته) دارد.
توجه داشته باشید که پیادهسازی sklearn در حال حاضر از متغیرهای گسسته و گمشده پشتیبانی نمیکند، بنابراین ما نیاز به ایجاد متغیرهای مصنوعی به ازای آنها داریم. اما هر دو را میتوان در تئوری و روی کاغذ وارد مدل کرد.
- مدل را میتوان به سادگی از لحاظ آماری ارزیابی کرد.
معایب
- مستعد بیشبرازش و در نتیجه دقت پیشبینی پایینتر است.
- درختهای تصمیم میتوانند کاملا ناپایدار باشند زیرا بروز تغییرات کوچک در دادهها ممکن است منجر به تولید درختی کاملا متفاوت شود. میتوان این مشکل را با استفاده از مجموعهای از درختهای تصمیم به جای اکتفا به یک درخت تصمیم کاهش داد (یادگیری گروهی).
- میتواند غیراستوار باشد یعنی ایجاد یک تغییر کوچک در دادهها میتواند باعث تغییرات بزرگی در درخت تخمینی نهایی شود.
- پیشبینیها تقریبی و بر اساس گرههای پایانی مربوطه هستند؛ از این رو ممکن است این روش، بهترین روش برای تعمیم نتایج مدل به موارد مشاهدهنشده نباشد.
- در صورت تسلط و غالب بودن تعداد نمونههای یک کلاس بر کلاسهای دیگر الگوریتم درخت تصمیم، درختهای مغرضانه و با سوگیری به نفع کلاس بزرگتر ایجاد میکند. قبل از آموزش الگوریتم درخت تصمیم باید مجموعه داده را از لحاظ ترکیب کلاسهای مختلف، متعادل کرد.
مثال عملی
بیایید تا مدل درخت تصمیم را بر روی مجموعه دادهی iris که در مقالات قبلی با آن آشنا شدیم اجرا کنیم. از آنجا که در مقالات مربوط به رگرسیون با این مجموعه داده آشنا شدیم، از معرفی دوبارهی آن خودداری میکنیم.
میخواهیم به کمک طول و عرض کاسبرگ و طول گلبرگ گلهای زنبق، عرض گلبرگشان را پیشبینی کنیم. پس با یک مسالهی رگرسیونی طرف هستیم.
80 درصد داده را برای آموزش و 20 درصد آن را برای آزمون مدل در نظر میگیریم.
شکل 3: فراخوانی و آمادهسازی مجموعه داده
به صورت زیر مدل را بر روی دادهی آموزشی، آموزش میدهیم:
شکل 4: آموزش مدل درخت تصمیم
مقدار MSE را بر روی دادهی آموزشی و آزمایشی چاپ میکنیم:
شکل 5: ارزیابی مدل روی مجموعه دادهی آموزشی و آزمونی
براساس مقادیر گزارششده، اگر چه مقدار خطا روی دادهی آزمونی کوچک است اما مقدار خطا روی دادهی آموزشی خیلی کوچکتر است. این نشاندهندهی وقوع بیشبرازش در مدل درخت تصمیم است که پیشتر نسبت به احتمال بالای وقوع آن هشدار داده بودیم.
ساختار کلی درخت تصمیم را به صورت زیر میتوانیم مشاهده کنیم:
شکل 6: کد نمایش ساختار کلی درخت تصمیم برازشدادهشده
شکل 7: ساختار کلی درخت تصمیم برازشدادهشده
همانطور که در شکل بالا ملاحظه میکنید، با وجود اینکه تنها 3 متغیر پیشگو داریم، به درخت نسبتاً بزرگی رسیدهایم.
ساختار با جزییات درخت را به صورت زیر در یک فایل ذخیره میکنیم و با کمک وبسایت http://webgraphviz.com، آن را به صورت کامل چاپ میکنیم.
شکل 8: کد مربوط به ذخیرهی ساختار درخت تصمیم
درخت چاپشده بزرگ است و در شکل 9 تنها بخشی از آن را نمایش دادهایم. بزرگ و عمیق بودن درخت، عامل اصلی بیشبرازش مدل است.
در شکل 9 در هر گره تصمیم شروط تصمیمگیری نمایش داده شده است.
شکل 9: نمودار بخشی از درخت تصمیم خروجی
حال میخواهیم به کمک الگوریتم CCP را که در این مقاله با آن آشنا شدیم را برای هرس کردن درخت به کار بگیریم.
شکل 10: کد مربوط به هرس درخت تصمیم
در قطعه کد بالا بین چند مقدار کاندید برای آلفا به کمک اعتبارسنجی متقابل بهترین مقدار را مییابیم که با توجه به مقدار خروجی، بهترین مقدار برابر آلفا بین مقادیر پیشنهادی برابر 0.001 است.
در قطعه کد پایین درخت هرس شده را آموزش میدهیم و خطای آن را روی مجموعه دادهی آموزشی و آزمونی محاسبه و چاپ میکنیم.
همانطور که مشاهده میکنید این بار اختلاف بین خطای مدل روی دادهی آزمایشی و آزمونی بسیار کمتر از حالت قبلی است.
بنابراین در مورد وقوع بیشبرازش حدسمان درست بود و توانستیم به کمک هرس کردن درخت تا حد خوبی از وقوع آن جلوگیری کنیم.
شکل 11: آموزش و آزمون درخت تصمیم هرسشده
در قطعه کد زیر ساختار درخت را چاپ میکنیم. همانطور که مشاهده میکنید نسبت به حالت قبلی درخت بسیار کوچکتر شده است.
شکل 12: کد مربوط به چاپ درخت تصمیم
در این مثال ما از درخت رگرسیونی استفاده کردیم اما فرایند انجام کار برای درختهای دستهبندی نیز مشابه است.
شکل 13: ساختار درخت تصمیم هرسشده
امیدواریم این پست دو قسمتی در مورد درختهای تصمیم را دوست داشته باشید و برایتان مفید واقع شده باشد.
منبع
نظرات