داده کاوی، هوش مصنوعی ۶۴۷۱ بازدید

در این مطلب، چگونگی ساخت «درخت تصمیم» (Decision Trees) در «زبان برنامه‌نویسی پایتون» (Python Programming Language) آموزش داده شده است. یک درخت تصمیم، مدلی است که برای حل وظایف «دسته‌بندی» (Classification) و «رگرسیون» (Regression) مورد استفاده قرار می‌گیرد. مدل، امکان تولید خروجی‌های گوناگون را فراهم کرده و امکان انجام تصمیم‌گیری با داده‌ها را فراهم می‌کند. در مثال بیان شده در این مطلب، تاثیر «متغیرهای توصیفی» (explanatory variables) (از جمله سن، جنسیت، صفحات وب بازدید شده در روز، ساعت ویدئوهای بازدید شده در هفته و درآمد فرد) در استفاده از اینترنت (مصرف مگابایت در هفته) تحلیل خواهد شد. شایان توجه است که مجموعه داده مورد استفاده در این مطلب، از این مسیر (+) قابل دانلود است. شایان توجه است که ورودی و خروجی ها با توجه به محل قرارگیری مجموعه داده در سیستم افراد گوناگون، تفاوت‌هایی را با کدهای موجود در این مطلب خواهد داشت.

گام ۱: بارگذاری کتابخانه‌ها

ابتدا، کتابخانه «نام‌پای» (Numpy) و train_test_split از کتابخانه «سایکیت‌لِرن» (Scikit-Learn) وارد (Import) می‌شود. با استفاده از کلاس فراخوانی شده از کتابخانه sklearn، مجموعه داده به داده‌های «آموزش» (Training) و «آزمون» (Test) شکسته می‌شود، و به موجب آن، مدل روی داده‌های آموزش ساخته و صحت این مدل در مقابل داده‌های «آزمون» (Test) آزموده می‌شود.

ورودی [1]:

import numpy as np
from sklearn.model_selection import train_test_split
import os;
path="C:/Users/michaeljgrogan/Documents/a_documents/computing/data science/datasets"
os.chdir(path)
os.getcwd()

خروجی [1]:

'C:\\Users\\michaeljgrogan\\Documents\\a_documents\\computing\\data science\\datasets'

گام ۲: بارگذاری مجموعه داده و متغیرها

اکنون از np.loadtxt برای بارگذاری داده‌ها در فرمت csv استفاده می‌شود.

ورودی [۲]:

#Variables
dataset=np.loadtxt("internetlogit.csv", delimiter=",")
x=dataset[:,0:5]
y=dataset[:,5]

گام ۳: ایمپورت کردن DecisionTreeRegressor از sklearn

در ادامه، DecisionTreeRegressor از کتابخانه سایکیت‌لِرن وارد (Import) می‌شود و داده‌ها را به مولفه‌های «آموزش» (training) و «آزمون» (test) جدا می‌کند. چنانکه پیش‌تر بیان شد، می‌توان مشاهده کرد که داده‌های  X_train و y_train برای ساخت مدل مورد استفاده قرار گرفته‌اند.

ورودی [۳]:

from sklearn.tree import DecisionTreeRegressor
X_train, X_test, y_train, y_test = train_test_split(x, y)
tree = DecisionTreeRegressor().fit(X_train,y_train)

گام ۴: تعیین صحت مجموعه آموزش و آزمون

هنگامی که صحت ارزیابی شد، می‌توان مشاهده کرد که صحت ٪۱۰۰ برای مجموعه آموزش و ٪۸۵.۱ برای مجموعه آزمون حاصل شده است.

ورودی [۴]:

print("Training set accuracy: {:.3f}".format(tree.score(X_train, y_train)))
print("Test set accuracy: {:.3f}".format(tree.score(X_test, y_test)))

خروجی [۴]:

Training set accuracy: 1.000
Test set accuracy: 0.851

گام ۵: انجام پیش‌بینی‌ها از درخت تصمیم

با استفاده از tree.predict، پیش‌بینی‌ها برای متغیرهای وابسته با استفاده از مدل انجام می‌شود.

ورودی [۵]:

dtree = tree.predict(x)

ورودی [۶]:

dtree

خروجی [۶]:

array([  875.,  1792., 27754., 28256.,  4438.,  2102.,  8520.,   500.,
       22997., 26517., 15109., 20956.,  3310.,  3197.,  1211., 18005.,
       22854., 10278.,   739.,  3724.,  4733.,   971.,  6263., 24677.,
...
        8113.,  3166.,  5332.,  2232., 21989.,  5360.,  5837.,  2509.,
        5580.,  5947., 11564.,  5888.,  9130., 16105.,  1593.,  4448.,
       12771., 28511.,  6883.])

گام ۶: محاسبه درصد خطای بین پیش‌بینی‌ها و داده‌های واقعی

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

ورودی [۷]:

percentageerror_tree=((y-dtree)/dtree)*100
percentageerror_tree

خروجی [۷]:

array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, -6.59871600e+00, 0.00000000e+00,
...
1.64641577e+02, 0.00000000e+00, 1.09477689e+01, 0.00000000e+00,
0.00000000e+00, 1.21515057e+01, 0.00000000e+00, 6.60971223e+00,
0.00000000e+00, 0.00000000e+00, -1.13177394e+01])

ورودی [۸]:

np.mean(percentageerror_tree)

خروجی [۸]:

4.116144626944652

گام ۷: ترسیم گراف درخت تصمیم

با توجه به اینکه پس از محاسبات مشخص شده که مدل درخت تصمیم مورد استفاده در اینجا دارای نرخ صحت بالایی است، در حال حاضر هدف ترسیم نمودار آن به صورت بصری است تا امکان تفسیر روابط میان متغیرها وجود داشته باشد. کتابخانه‌ای که برای انجام این کار مورد استفاده قرار گرفته «گراف‌ویز» (graphviz) نام دارند و با pip به شیوه‌ای که در ادامه بیان می‌شود قابل نصب است. شایان توجه است که با توجه به استفاده نویسنده این مطلب از پایتون ۳.۶، pip3 برای نصب مورد استفاده قرار گرفته است.

pip3 install graphviz

اکنون که graphviz نصب شد، ابتدا درخت به صورت یک فایل .dot خروجی گرفته (export) و سپس مجددا وارد می‌شود.

from sklearn.tree import export_graphviz
export_graphviz(tree,out_file="tree.dot")

import graphviz
with open("tree.dot") as f:
    dot_graph = f.read()

graphviz.Source(dot_graph)

با پایان یافتن این کار، می‌توان «شِل» (shell) را باز کرد و درخت تصمیم را در فرمت pdf خروجی گرفت.

dot -Tpdf tree.dot -o tree.pdf

درخت تصمیم

نتیجه‌گیری

همانطور که مشاهده شد، انحراف ٪۴.۱۱ بین مقادیر پیش‌بینی شده و مقادیر واقعی وجود داشت. با در نظر گرفتن این موضوع و با مقدار به دست آمده ۰.۸۵۱ برای مجموعه تست، می‌توان گفت درخت تصمیم دارای درجه بالایی از صحت در پیش‌بینی استفاده از اینترنت است. شایان توجه است که مجموعه داده مورد استفاده در این مطلب، از این مسیر (+) قابل دانلود است.

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

^^

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

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

7 نظر در “درخت تصمیم با پایتون — راهنمای کاربردی

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر