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

۳۳۶ بازدید
آخرین به‌روزرسانی: ۰۵ مهر ۱۴۰۲
زمان مطالعه: ۲ دقیقه
بصری سازی یک درخت تصمیم از جنگل تصادفی در پایتون با 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')

نتیجه نهایی درخت تصمیم کامل به صورت یک تصویر خواهد بود:

درخت تصمیم برای مجموعه داده Iris
درخت تصمیم برای مجموعه داده Iris

 

توضیح کد

ابتدا یک آموزش و استخراج مدل ایجاد می‌کنیم.

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

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) رنج می‌برد، یعنی یک تصویر منفرد نمی‌تواند مشکلی را حل کند. در هر حال نگاه کردن به یک درخت منفرد تصمیم این مدل را به ما نشان می‌دهد و یک جنگل تصادفی متدی غیر قابل توضیح نیست؛ اما توالی سؤال‌های منطقی و پاسخ‌ها به خصوص زمانی که پیش‌بینی صورت می‌گیرد یک مشکل محسوب می‌شود.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
towardsdatascience
نظر شما چیست؟

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