Wednesday, July 20, 2022

Post-Pruning in Decision Tree

 Сокращение дерева решений помогает предотвратить переобучение модели, чтобы наша модель хорошо обобщала невидимые данные. Сокращение дерева решений означает удаление избыточного и бесполезного разделения поддерева и замену его конечным узлом.

Post Pruning :

Этот метод используется после построения дерева решений.

Этот метод используется, когда дерево решений будет иметь очень большую глубину и будет показывать переоснащение модели.

Это также известно как обратная обрезка.

Этот метод используется, когда у нас есть бесконечно растущее дерево решений.

Здесь мы будем контролировать ветви дерева решений max_depth и min_samples_split, используя cost_complexity_prunin

(.env) boris@boris-All-Series:~/PostPruning$ cat  PostPruning3.py

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn import tree

from sklearn.metrics import accuracy_score

from sklearn.datasets import load_breast_cancer

from sklearn.model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier


X,y=load_breast_cancer(return_X_y=True)

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)

clf=DecisionTreeClassifier(random_state=0)

clf.fit(X_train,y_train)

y_train_predicted=clf.predict(X_train)

y_test_predicted=clf.predict(X_test)

accuracy_score(y_train,y_train_predicted)

accuracy_score(y_test,y_test_predicted)

# мы видим, что разница между оценкой точности тренинга и теста слишком высока, 

# что означает, что модель переобучена (поскольку она точна для обучающего набора, 

# но дает большую ошибку, когда мы предоставляем тестовый набор модели)

plt.figure(figsize=(16,8))

tree.plot_tree(clf)

plt.show()

# ccp_alphas дает минимальное значение листа дерева решений, 

# и каждый ccp_aphas создаст разные классификаторы и выберет лучший из них. 

# ccp_alphas будет добавлен в качестве параметра в DecisionTreeClassifier()

path=clf.cost_complexity_pruning_path(X_train,y_train)

#path variable gives two things ccp_alphas and impurities

ccp_alphas,impurities=path.ccp_alphas,path.impurities

print("ccp alpha wil give list of values :",ccp_alphas)

print("***********************************************************")

print("Impurities in Decision Tree :",impurities)

clfs=[]   #will store all the models here

for ccp_alpha in ccp_alphas:

               clf=DecisionTreeClassifier(random_state=0, ccp_alpha=ccp_alpha)

              clf.fit(X_train,y_train)

              clfs.append(clf)

print("Last node in Decision tree is {} and ccp_alpha for last node is {}".format(clfs[-1].tree_.node_count,ccp_alphas[-1]))


train_scores = [clf.score(X_train, y_train) for clf in clfs]

test_scores = [clf.score(X_test, y_test) for clf in clfs]

fig, ax = plt.subplots()

ax.set_xlabel("alpha")

ax.set_ylabel("accuracy")

ax.set_title("Accuracy vs alpha for training and testing sets")

ax.plot(ccp_alphas, train_scores, marker='o', label="train",drawstyle="steps-post")

ax.plot(ccp_alphas, test_scores, marker='o', label="test",drawstyle="steps-post")

ax.legend()

plt.draw()

clf=DecisionTreeClassifier(random_state=0,ccp_alpha=0.02)

clf.fit(X_train,y_train)

plt.figure(figsize=(12,8))

tree.plot_tree(clf,rounded=True,filled=True)

plt.show()























































































No comments:

Post a Comment