در این نوشته به بررسی مطلب منتشر شده در سایت towardsdatascience که توسط آقای گوستاو هیدئو منتشر گردیده است می پردازیم. لازم به ذکر است متن ذیل ترجمه کلمه به کلمه نبوده اما سعی شده با انجام مثال ها توسط حقیر و توضیحات مربوط با محتوا، مفاهیم اصلی پوشش داده شود.
جهت بررسی سناریویی مناسب با این زمینه، از دیتاست معروف تایتانیک استفاده شده است.
در ابتدا دیتاست را وارد و سپس چند ویژگی را انتخاب می نماییم.
import pandas as pd data = pd.read_csv("./train.csv") data = data.loc[:,("Survived","Pclass","Sex","Age","SibSp","Parch","Fare")]
با بررسی دیتاست، متوجه خواهیم شد که در ویژگی age، مقداری داده ی Missing وجود دارد. جهت تصحیح آن، می توانیم با استفاده از تکنیک های موجود، آن را تصحیح نماییم اما هدف این نوشته نیست.
تصمیمی که در حال حاضر اتخاذ شده، حذف آن مقادیر می باشد.
data.dropna(inplace=True)
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data.Sex = le.fit_transform(data.Sex)
نتیجه :
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)
پس از فیت کردن مجموعه داده های 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 می باشد. به این معنی است که دقت مدل بدست آمده، تقریبا خوب ارزیابی می گردد. اما در ادامه به دنبال مدل بهتری خواهیم بود.
ما می توانیم درخت را ترسیم کنیم تا ریشه ، شاخه ها و گره های آن را ببینیم. جهت انجام این کار، از مجموعه ای از کتابخانه های جدید استفاده خواهیم کرد.
در نتیجه :
به نظر می رسد این درخت بسیار طولانی است.
پس چند پارامتر را تغییر می دهیم تا ببینیم آیا تأثیر گذار بر دقت و همچنین کوتاه تر شدن درخت می باشد یا خیر.
پارامتر هایی که دستخوش تغییر قرار می گیرند به شرح زیر می باشند :
توجه : چنانچه این پارامتر روی none تنظیم شده باشد، خطر overfitting وجود دارد.
براساس نتیجه ای که از این مقایسه بدست می آید، می فهمیم که استفاده از gini ، می تواند اندکی نسبت به حالت entropy بهتر عمل نماید.
اما باز هم به صورت عجله ای این دقت را نمی پذیریم!
حال می بایست بررسی نماییم که آیا با کم نمودن عمق درخت، امکان بالا بردن دقت وجود دارد یا خیر.
برای این منظور، براساس کد های زیر، عمق درخت را بین رنج 1 تا 30 تست می نماییم.
نمودار آن به شکل زیر خواهد شد :
از نمودار فوق می توان نتیجه گرفت که حالت entropy در عمق های کم، عملکرد بهتری نسبت به gini ایفا می نماید.
همانطور که مشاهده می کنید دقت روی 0.79 با عمق 6 می باشد.
ما توانستیم مدل خود را از دقت 0.72 به 0.79 افزایش دهیم. در حقیقت ما توانستیم با تست حالات مختلف، بهترین سناریو را جهت ایجاد مدل انتخاب نماییم.
از همراهیتان صمیمانه سپاس گذارم...