Сокращение дерева решений помогает предотвратить переобучение модели, чтобы наша модель хорошо обобщала невидимые данные. Сокращение дерева решений означает удаление избыточного и бесполезного разделения поддерева и замену его конечным узлом.
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