آموزش درخت تصمیم در یادگیری ماشین با پایتون
آموزش درخت تصمیم در یادگیری ماشین با پایتون
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش درخت تصمیم در یادگیری ماشین با پایتون خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون
مقدمه ای بر درخت تصمیم در یادگیری ماشین با پایتون
به طور کلی ، تجزیه و تحلیل درخت تصمیم ابزاری برای مدل سازی پیش بینی است که می تواند در بسیاری از مناطق استفاده شود. درختان تصمیم را می توان با رویکرد الگوریتمی ساخت که می تواند مجموعه داده را به روش های مختلف بر اساس شرایط مختلف تقسیم کند. درخت تصمیم قدرتمندترین الگوریتم هایی هستند که در گروه الگوریتم های تحت نظارت قرار می گیرند.
آنها می توانند برای کارهای طبقه بندی و رگرسیون استفاده شوند. دو موجودیت اصلی یک درخت گره های تصمیم گیری هستند ، جایی که داده ها تقسیم شده و خارج می شوند، جایی که نتیجه می گیریم. نمونه ای از یک درخت باینری برای پیش بینی تناسب یا نامناسب بودن فرد با ارائه اطلاعات مختلف مانند سن، عادات غذایی و عادات ورزشی ، در زیر آورده شده است –
در درخت تصمیم فوق، سوال از گره های تصمیم گیری و نتایج نهایی برگ است. ما دو نوع درخت تصمیم زیر داریم:
- درخت تصمیم گیری طبقه بندی – در این نوع درخت تصمیم، متغیر تصمیم گیری طبقه بندی می شود. درخت تصمیم فوق نمونه ای از درخت تصمیم گیری طبقه بندی است.
- درخت تصمیم گیری رگرسیون – در این نوع درخت تصمیم، متغیر تصمیم مداوم است.
اجرای الگوریتم درخت تصمیم
شاخص جینی
این نام تابع هزینه است که برای ارزیابی تقسیمات باینری در مجموعه داده استفاده می شود و با متغیر هدف دسته ای “موفقیت” یا “شکست” کار می کند.
هر چه مقدار شاخص جینی بالاتر باشد ، همگنی بالاتر است. مقدار کامل شاخص جینی 0 و بدترین آن 0/0 است (برای مسئله 2 کلاس). شاخص جینی برای تقسیم را می توان با کمک مراحل زیر محاسبه کرد –
ابتدا، شاخص جینی را برای گره های فرعی با استفاده از فرمول p ^ 2 + q ^ 2 محاسبه کنید ، که حاصل جمع مربع احتمال موفقیت و شکست است.
بعد، شاخص جینی را برای تقسیم با استفاده از نمره جینی وزنی هر گره از آن تقسیم محاسبه کنید.
الگوریتم طبقه بندی و رگرسیون درخت (CART) از روش جینی برای تولید تقسیمات باینری استفاده می کند.
Split Creation
تقسیم اساساً شامل یک ویژگی در مجموعه داده و یک مقدار است. ما می توانیم با کمک سه قسمت زیر ، مجموعه ای از مجموعه داده ها ایجاد کنیم –
قسمت 1: محاسبه امتیاز جینی – ما در بخش قبلی به بحث در مورد این بخش پرداختیم.
قسمت 2: تقسیم یک مجموعه داده – ممکن است اینگونه تعریف شود که یک مجموعه داده را به دو لیست از ردیف ها جدا کنید که دارای یک شاخص از یک ویژگی و یک مقدار تقسیم شده از آن ویژگی باشد. پس از گرفتن دو گروه راست و چپ از مجموعه داده ها ، می توانیم مقدار تقسیم را با استفاده از امتیاز جینی محاسبه شده در قسمت اول محاسبه کنیم. مقدار تقسیم تعیین خواهد کرد که این ویژگی در کدام گروه قرار داشته باشد.
قسمت 3: ارزیابی همه تقسیم ها – قسمت بعدی پس از پیدا کردن نمره جینی و تقسیم داده ها ، ارزیابی همه تقسیم ها است. برای این منظور ، ابتدا باید هر مقداری را که با هر ویژگی مرتبط است به عنوان تقسیم نامزد بررسی کنیم. سپس باید با ارزیابی هزینه انشعاب بهترین تقسیم ممکن را پیدا کنیم. بهترین تقسیم به عنوان گره در درخت تصمیم استفاده خواهد شد.
ساختن درخت
همانطور که می دانیم یک درخت دارای گره های ریشه ای و گره های انتهایی است. پس از ایجاد گره ریشه، می توانیم درخت را با دنبال کردن دو قسمت ایجاد کنیم –
قسمت 1: ایجاد گره ترمینال
هنگام ایجاد گره های انتهایی درخت تصمیم ، یک نکته مهم این است که تصمیم بگیرید چه موقع رشد درخت را متوقف کنید یا گره های انتهایی دیگری ایجاد کنید. این کار با استفاده از دو معیار یعنی حداکثر عمق درخت و حداقل سوابق گره به شرح زیر انجام می شود –
حداکثر عمق درخت – همانطور که از نامش پیداست ، این حداکثر تعداد گره های یک درخت بعد از گره ریشه است. هنگامی که درخت در حداکثر عمق رسید ، باید اضافه کردن گره های انتهایی را متوقف کنیم ، به عنوان مثال یک درخت حداکثر تعداد گره های نهایی را بدست آورد.
حداقل گره – ممکن است به عنوان حداقل تعداد الگوهای آموزشی که یک گره داده شده مسئول آن است ، تعریف شود. وقتی درخت به این رکوردهای حداقل گره یا زیر این حداقل رسید ، باید اضافه کردن گره های ترمینال را متوقف کنیم.
گره ترمینال برای پیش بینی نهایی استفاده می شود.
قسمت 2: تقسیم بازگشتی
همانطور که در مورد زمان ایجاد گره های انتهایی فهمیدیم ، اکنون می توانیم ساخت درخت خود را شروع کنیم. تقسیم بازگشتی روشی برای ساختن درخت است. در این روش ، هنگامی که یک گره ایجاد شد ، می توانیم گره های کودک (گره هایی که به گره موجود اضافه می شوند) را به صورت بازگشتی روی هر گروه از داده ها ، ایجاد شده با تقسیم مجموعه داده ، با فراخوانی مجدد همان عملکرد ، ایجاد کنیم.
پیش بینی
پس از ساختن درخت تصمیم ، باید پیش بینی آن را انجام دهیم. اساساً ، پیش بینی شامل پیمایش درخت تصمیم با ردیف داده های خاص ارائه شده است.
همانطور که در بالا گفتیم می توانیم با کمک عملکرد بازگشتی پیش بینی کنیم. همان روال پیش بینی مجدداً با گره های سمت چپ یا کودک راست فراخوانی می شود.
فرضیات
موارد زیر برخی از فرضیاتی است که ما هنگام ایجاد درخت تصمیم ارائه می دهیم –
- هنگام تهیه درخت تصمیم، مجموعه آموزش به عنوان گره ریشه است.
- طبقه بندی کننده درخت تصمیم ، مقادیر ویژگی ها را دسته بندی می کند. درصورتی که بخواهید از مقادیر پیوسته استفاده کنید ، باید قبل از ساخت مدل به صورت گسسته انجام شود.
- بر اساس مقادیر صفت ، رکوردها به صورت بازگشتی توزیع می شوند.
- از روش آماری برای قرار دادن صفات در هر موقعیت گره ، به عنوان گره ریشه یا گره داخلی استفاده خواهد شد.
پیاده سازی در پایتون
مثال
در مثال زیر ما می خواهیم طبقه بندی درخت تصمیم را بر روی Pima Indian Diabetes پیاده کنیم –
ابتدا با وارد کردن بسته های لازم پایتون شروع کنید –
1 2 3 |
import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split |
سپس ، مجموعه داده iris را از لینک وب خود به شرح زیر بارگیری کنید –
1 2 3 |
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label'] pima = pd.read_csv(r"C:\pima-indians-diabetes.csv", header=None, names=col_names) pima.head() |
1 2 3 4 5 6 |
pregnant glucose bp skin insulin bmi pedigree age label 0 6 148 72 35 0 33.6 0.627 50 1 1 1 85 66 29 0 26.6 0.351 31 0 2 8 183 64 0 0 23.3 0.672 32 1 3 1 89 66 23 94 28.1 0.167 21 0 4 0 137 40 35 168 43.1 2.288 33 1 |
اکنون ، مجموعه داده را به شرح زیر به ویژگی ها و متغیر هدف تقسیم کنید –
1 2 3 |
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree'] X = pima[feature_cols] # Features y = pima.label # Target variable |
بعد، ما داده ها را به تقسیم قطار و آزمون تقسیم می کنیم. کد زیر مجموعه داده را به 70٪ داده های آموزشی و 30٪ داده های آزمایش تقسیم می کند –
1 |
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) |
بعد ، مدل را با کمک کلاس DecisionTreeClassifier از sklearn به شرح زیر آموزش دهید –
1 2 |
clf = DecisionTreeClassifier() clf = clf.fit(X_train,y_train) |
بالاخره ما باید پیش بینی کنیم. این را می توان با کمک اسکریپت زیر انجام داد –
1 |
y_pred = clf.predict(X_test) |
بعد ، ما می توانیم نمره دقت ، ماتریس سردرگمی و گزارش طبقه بندی را به شرح زیر بدست آوریم –
1 2 3 4 5 6 7 8 9 |
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score result = confusion_matrix(y_test, y_pred) print("Confusion Matrix:") print(result) result1 = classification_report(y_test, y_pred) print("Classification Report:",) print (result1) result2 = accuracy_score(y_test,y_pred) print("Accuracy:",result2) |
خروجی
1 2 3 4 5 6 7 8 9 10 11 12 |
Confusion Matrix: [[116 30] [ 46 39]] Classification Report: precision recall f1-score support 0 0.72 0.79 0.75 146 1 0.57 0.46 0.51 85 micro avg 0.67 0.67 0.67 231 macro avg 0.64 0.63 0.63 231 weighted avg 0.66 0.67 0.66 231 Accuracy: 0.670995670995671 |
تجسم درخت تصمیم
درخت تصمیم فوق را می توان با کمک کد زیر تجسم کرد –
1 2 3 4 5 6 7 8 9 10 11 12 |
Confusion Matrix: [[116 30] [ 46 39]] Classification Report: precision recall f1-score support 0 0.72 0.79 0.75 146 1 0.57 0.46 0.51 85 micro avg 0.67 0.67 0.67 231 macro avg 0.64 0.63 0.63 231 weighted avg 0.66 0.67 0.66 231 Accuracy: 0.670995670995671 |
لیست جلسات قبل آموزش یادگیری ماشین با پایتون
- آموزش یادگیری ماشین با پایتون
- مبانی یادگیری ماشین با پایتون
- آموزش اکوسیستم یادگیری ماشین با پایتون
- آموزش متدها در یادگیری ماشین با پایتون
- آموزش بارگیری داده ها برای پروژه های یادگیری ماشین
- آموزش درک داده ها با آمار در یادگیری ماشین
- آموزش آماده سازی داده ها در یادگیری ماشین با پایتون
- آموزش انتخاب ویژگی داده ها در یادگیری ماشین با پایتون
- آموزش طبقه بندی در یادگیری ماشین با پایتون
- آموزش رگرسیون لجستیک در یادگیری ماشین با پایتون
- آموزش ماشین بردار پشتیبان در یادگیری ماشین با پایتون
دیدگاه شما