درخت تصمیم (Decision Tree) با پایتون — راهنمای کاربردی

«درخت تصمیم» (Decision Tree) از جمله الگوریتم‌های «یادگیری ماشین» (Machine Learning) است که هم برای مسائل «دسته‌بندی» (Classification) و هم مسائل «رگرسیون» (Regression) مورد استفاده قرار می‌گیرد. البته، الگوریتم درخت تصمیم بیشتر در مسائل دسته‌بندی استفاده می‌شود. 

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

درخت تصمیم، یک الگوریتم «یادگیری ماشین» (Machine Learning) است که هم روی متغیرهای وابسته «پیوسته» (Continuous) و هم «طبقه‌ای» (Categorical) قابل اعمال است. در اینجا، جمعیت به دو یا تعداد بیشتری مجموعه همگن تقسیم می‌شود. در ادامه، کد پیاده‌سازی این الگوریتم در پایتون ارائه شده است.

قطعه کد ۱:

>>> from sklearn.cross_validation import train_test_split
>>> from sklearn.tree import DecisionTreeClassifier
>>> from sklearn.metrics import accuracy_score
>>> from sklearn.metrics import classification_report
>>> def importdata(): #Importing data
balance_data=pd.read_csv(‘https://archive.ics.uci.edu/ml/machine-learning-‘+
‘databases/balance-scale/balance-scale.data’,
sep= ‘,’, header = None)
print(len(balance_data))
print(balance_data.shape)
print(balance_data.head())
return balance_data
>>> def splitdataset(balance_data): #Splitting data
x=balance_data.values[:,1:5]
y=balance_data.values[:,0]
x_train,x_test,y_train,y_test=train_test_split(
x,y,test_size=0.3,random_state=100)
return x,y,x_train,x_test,y_train,y_test
>>> def train_using_gini(x_train,x_test,y_train): #Training with giniIndex
clf_gini = DecisionTreeClassifier(criterion = “gini”,
random_state = 100,max_depth=3, min_samples_leaf=5)
clf_gini.fit(x_train,y_train)
return clf_gini
>>> def train_using_entropy(x_train,x_test,y_train): #Training with entropy
clf_entropy=DecisionTreeClassifier(
criterion = “entropy”, random_state = 100,
max_depth = 3, min_samples_leaf = 5)
clf_entropy.fit(x_train,y_train)
return clf_entropy
>>> def prediction(x_test,clf_object): #Making predictions
y_pred=clf_object.predict(x_test)
print(f”Predicted values: {y_pred}”)
return y_pred
>>> def cal_accuracy(y_test,y_pred): #Calculating accuracy
print(confusion_matrix(y_test,y_pred))
print(accuracy_score(y_test,y_pred)*100)
print(classification_report(y_test,y_pred))
>>> data=importdata()

خروجی ۱:

۶۲۵
(۶۲۵, ۵)
۰ ۱ ۲ ۳ ۴
۰ B 1 1 1 1
۱ R 1 1 1 2
۲ R 1 1 1 3
۳ R 1 1 1 4
۴ R 1 1 1 5

قطعه کد ۲:

>>> x,y,x_train,x_test,y_train,y_test=splitdataset(data)
>>> clf_gini=train_using_gini(x_train,x_test,y_train)
>>> clf_entropy=train_using_entropy(x_train,x_test,y_train)
>>> y_pred_gini=prediction(x_test,clf_gini)

درخت تصمیم

قطعه کد ۳:

>>> cal_accuracy(y_test,y_pred_gini)

خروجی ۳:

[[ ۰ ۶ ۷] [ ۰ ۶۷ ۱۸] [ ۰ ۱۹ ۷۱]] ۷۳٫۴۰۴۲۵۵۳۱۹۱۴۸۹۳

درخت تصمیم

قطعه کد ۴:

>>> y_pred_entropy=prediction(x_test,clf_entropy)

درخت تصمیم

قطعه کد ۵:

>>> cal_accuracy(y_test,y_pred_entropy)

 

[[ ۰ ۶ ۷] [ ۰ ۶۳ ۲۲] [ ۰ ۲۰ ۷۰]] ۷۰٫۷۴۴۶۸۰۸۵۱۰۶۳۸۳

درخت تصمیم

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

منبع [+]

پاسخی بگذارید

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