ابوالفضل وکیلی
ابوالفضل وکیلی
خواندن ۴ دقیقه·۵ سال پیش

مصور سازی، هرس کردن و ساخت Decision Tree

در این نوشته به بررسی مطلب منتشر شده در سایت towardsdatascience که توسط آقای گوستاو هیدئو منتشر گردیده است می پردازیم. لازم به ذکر است متن ذیل ترجمه کلمه به کلمه نبوده اما سعی شده با انجام مثال ها توسط حقیر و توضیحات مربوط با محتوا، مفاهیم اصلی پوشش داده شود.

جهت بررسی سناریویی مناسب با این زمینه، از دیتاست معروف تایتانیک استفاده شده است.

در ابتدا دیتاست را وارد و سپس چند ویژگی را انتخاب می نماییم.

import pandas as pd data = pd.read_csv(&quot./train.csv&quot) data = data.loc[:,(&quotSurvived&quot,&quotPclass&quot,&quotSex&quot,&quotAge&quot,&quotSibSp&quot,&quotParch&quot,&quotFare&quot)]

با بررسی دیتاست، متوجه خواهیم شد که در ویژگی age، مقداری داده ی Missing وجود دارد. جهت تصحیح آن، می توانیم با استفاده از تکنیک های موجود، آن را تصحیح نماییم اما هدف این نوشته نیست.

تصمیمی که در حال حاضر اتخاذ شده، حذف آن مقادیر می باشد.

data.dropna(inplace=True)

داده های categorical را با اعداد تعویض نمایید.

from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data.Sex = le.fit_transform(data.Sex)

نتیجه :

دیتاست های train و test را ایجاد نمایید.

30 درصد داده ها را مجموعه ی داده ی test در نظر می گیریم.

x = data.iloc[:,1:] y = data.iloc[:,0] from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.3)

ایجاد Decision Tree

پس از فیت کردن مجموعه داده های train، با استفاده از متد predict و پاس دادن x_test به عنوان پارامتر به آن، می توانیم دیتاست مربوط به تست را در متغیر pred بریزیم.

from sklearn.tree import DecisionTreeClassifier dtree = DecisionTreeClassifier() dtree.fit(x_train, y_train) pred = dtree.predict(x_test)

براساس کد های بالا، متغیر pred حاوی مجموعه ای از پیش بینی های صورت گرفته براساس مدلی که از دیتاست train بدست آمده است، می باشد.

دقت مدل بدست آمده را ارزیابی نمایید.

به دین منظور کافی است از میان Sub Package های موجود در sklearn ، از accuracy_score استفاده نماییم و در نهایت متغیر pred را به انضمام y_test که داده تست target ما محسوب می گردد، به عنوان پارامتر های ورودی، وارد نماییم.

نتیجه عدد 0.72 می باشد. به این معنی است که دقت مدل بدست آمده، تقریبا خوب ارزیابی می گردد. اما در ادامه به دنبال مدل بهتری خواهیم بود.

مصور سازی tree

ما می توانیم درخت را ترسیم کنیم تا ریشه ، شاخه ها و گره های آن را ببینیم. جهت انجام این کار، از مجموعه ای از کتابخانه های جدید استفاده خواهیم کرد.

در نتیجه :

به نظر می رسد این درخت بسیار طولانی است.
پس چند پارامتر را تغییر می دهیم تا ببینیم آیا تأثیر گذار بر دقت و همچنین کوتاه تر شدن درخت می باشد یا خیر.

پارامتر هایی که دستخوش تغییر قرار می گیرند به شرح زیر می باشند :

  • پارامتر Criterion :
    توسط این پارامتر می توانید معیار اصلی برای محاسبه را انتخاب نمایید. این معیار شامل دو حالت gini و entropy می باشد.
  • پارامتر Max_depth :
    توسط این پارامتر می توانید عمق درخت را تعیین نمایید.
توجه : چنانچه این پارامتر روی none تنظیم شده باشد، خطر overfitting وجود دارد.

براساس نتیجه ای که از این مقایسه بدست می آید، می فهمیم که استفاده از gini ، می تواند اندکی نسبت به حالت entropy بهتر عمل نماید.
اما باز هم به صورت عجله ای این دقت را نمی پذیریم!

حال می بایست بررسی نماییم که آیا با کم نمودن عمق درخت، امکان بالا بردن دقت وجود دارد یا خیر.
برای این منظور، براساس کد های زیر، عمق درخت را بین رنج 1 تا 30 تست می نماییم.

نمودار آن به شکل زیر خواهد شد :

از نمودار فوق می توان نتیجه گرفت که حالت entropy در عمق های کم، عملکرد بهتری نسبت به gini ایفا می نماید.

همانطور که مشاهده می کنید دقت روی 0.79 با عمق 6 می باشد.

نتیجه :

ما توانستیم مدل خود را از دقت 0.72 به 0.79 افزایش دهیم. در حقیقت ما توانستیم با تست حالات مختلف، بهترین سناریو را جهت ایجاد مدل انتخاب نماییم.

از همراهیتان صمیمانه سپاس گذارم...


decision treeدرخت تصمیمپایتونpythonتحلیل داده
instagram : @a_vakily7
شاید از این پست‌ها خوشتان بیاید