بصری سازی یک درخت تصمیم از جنگل تصادفی در پایتون با Scikit–Learn – از صفر تا صد


در این نوشته به معرفی یک ابزار مفید در پایتون جهت بصریسازی درخت تصمیم میپردازیم که برای درک مدل بسیار به کار میآید. کد کامل این مقاله را میتوانید در این ریپوی گیتهاب (+) مشاهده کنید. کافی است آن را به نتبوک ژوپیتر یا اسکریپت پایتون کپی کنید و با جایگزینی دادهها به اجرای آن با استفاده از Scikit-Learn بپردازید.
from sklearn.datasets import load_iris iris = load_iris() # Model (can also use single decision tree) from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=10) # Train model.fit(iris.data, iris.target) # Extract single tree estimator = model.estimators_[5] from sklearn.tree import export_graphviz # Export as dot file export_graphviz(estimator, out_file='tree.dot', feature_names = iris.feature_names, class_names = iris.target_names, rounded = True, proportion = False, precision = 2, filled = True) # Convert to png using system command (requires Graphviz) from subprocess import call call(['dot', '-Tpng', 'tree.dot', '-o', 'tree.png', '-Gdpi=600']) # Display in jupyter notebook from IPython.display import Image Image(filename = 'tree.png')
نتیجه نهایی درخت تصمیم کامل به صورت یک تصویر خواهد بود:

توضیح کد
ابتدا یک آموزش و استخراج مدل ایجاد میکنیم.
میتوان از یک درخت تصمیم منفرد نیز استفاده کرد؛ اما از آنجا که از جنگل تصادفی برای مدلسازی استفاده شده است، در این مثال از آن بهره میگیریم. در واقع درختها تا حدودی متفاوت از هم هستند.
from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=10) # Train model.fit(iris.data, iris.target) # Extract single tree estimator = model.estimators_[5]
اکسپورت درخت به صورت یک فایل dot. – این امر به کمک بهرهگیری از تابع export_graphviz در Scikit-Learn صورت میگیرد. در اینجا پارامترهای زیادی هستند که ظاهر و اطلاعات نمایش یافته را کنترل میکنند. برای دیدن خصوصیات بیشتر نگاهی به مستندات (+) بیندازید.
from sklearn.tree import export_graphviz # Export as dot file export_graphviz(estimator_limited, out_file='tree.dot', feature_names = iris.feature_names, class_names = iris.target_names, rounded = True, proportion = False, precision = 2, filled = True)
با استفاده از دستور سیستمی dot را به png تبدیل کنید. با اجرای دستورهای سیستمی در پایتون میتوان برخی وظایف ساده را به سهولت اجرا کرد. این امر نیازمند نصب بسته graphviz است که شامل ابزار dot است. برای مشاهده گزینههای کامل میتوانید مستندات این بسته را بررسی کنید.
# Convert to png from subprocess import call call(['dot', '-Tpng', 'tree.dot', '-o', 'tree.png', '-Gdpi=600'])
بصریسازی. بهترین بصریسازیها در نتبوک ژوپیتر ظاهر میشوند. به طور معادل میتوان از matplotlib برای نمایش تصاویر استفاده کرد.
# Display in jupyter notebook from IPython.display import Image Image(filename = 'tree.png')
ملاحظات
به کمک جنگل تصادفی، هر درخت به صورت مجزایی ساخته میشود. از این تصاویر برای نمایش استدلالی که در پس درخت تصمیم قرار دارد استفاده میکنید و متعاقباً منطق جنگل تصادفی مشخص میشود و دیگر نیازی به مشاهده جزییات خاص نیست.
محدودسازی بیشینه عمق در مواردی که ویژگیهای زیادی وجود دارند مفید خواهد بود، چون در غیر این صورت با درختان بزرگی مواجه میشوید که درهمتنیده هستند و هیچ تفسیری نمیتوان از آن داشت. در تصویر زیر نمونه کاملی با 50 ویژگی را مشاهده میکنید.
سخن پایانی
یادگیری ماشین از مسئله «جعبه سیاه» (Black Box) رنج میبرد، یعنی یک تصویر منفرد نمیتواند مشکلی را حل کند. در هر حال نگاه کردن به یک درخت منفرد تصمیم این مدل را به ما نشان میدهد و یک جنگل تصادفی متدی غیر قابل توضیح نیست؛ اما توالی سؤالهای منطقی و پاسخها به خصوص زمانی که پیشبینی صورت میگیرد یک مشکل محسوب میشود.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- مجموعه آموزش های داده کاوی یا Data Mining در متلب
- مجموعه آموزشهای هوش محاسباتی
- الگوریتم جنگل تصادفی (Random Forest) — راهنمای جامع و کاربردی
- آموزش ساختمان داده ها
- پیش بینی ریزش مشتریان با داده کاوی و R — راهنمای جامع
==