Привет, ребята, ниже приведен фрагмент дерева решений, так как оно довольно большое.
Как сделать так, чтобы дерево перестало расти, когда самое низкое значение в узле меньше 5. Вот код для создания дерева решений. В SciKit - Дереве решений мы видим единственный способ сделать это - min_impurity_decrease, но я не уверен, как это конкретно работает.
import numpy as np
import pandas as pd
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
X, y = make_classification(n_samples=1000,
n_features=6,
n_informative=3,
n_classes=2,
random_state=0,
shuffle=False)
# Creating a dataFrame
df = pd.DataFrame({'Feature 1':X[:,0],
'Feature 2':X[:,1],
'Feature 3':X[:,2],
'Feature 4':X[:,3],
'Feature 5':X[:,4],
'Feature 6':X[:,5],
'Class':y})
y_train = df['Class']
X_train = df.drop('Class',axis = 1)
dt = DecisionTreeClassifier( random_state=42)
dt.fit(X_train, y_train)
from IPython.display import display, Image
import pydotplus
from sklearn import tree
from sklearn.tree import _tree
from sklearn import tree
import collections
import drawtree
import os
os.environ["PATH"] += os.pathsep + 'C:\\Anaconda3\\Library\\bin\\graphviz'
dot_data = tree.export_graphviz(dt, out_file = 'thisIsTheImagetree.dot',
feature_names=X_train.columns, filled = True
, rounded = True
, special_characters = True)
graph = pydotplus.graph_from_dot_file('thisIsTheImagetree.dot')
thisIsTheImage = Image(graph.create_png())
display(thisIsTheImage)
#print(dt.tree_.feature)
from subprocess import check_call
check_call(['dot','-Tpng','thisIsTheImagetree.dot','-o','thisIsTheImagetree.png'])
Обновление
Я думаю, что min_impurity_decrease
может помочь достичь цели. Поскольку настройка min_impurity_decrease
действительно обрезает дерево. Может кто-нибудь любезно объяснить min_impurity_decrease.
Я пытаюсь понять уравнение в scikit learn, но я не уверен, каково значение right_impurity и left_impurity.
N = 256
N_t = 256
impurity = ??
N_t_R = 242
N_t_L = 14
right_impurity = ??
left_impurity = ??
New_Value = N_t / N * (impurity - ((N_t_R / N_t) * right_impurity)
- ((N_t_L / N_t) * left_impurity))
New_Value
Обновление 2
Вместо того, чтобы обрезать по определенному значению, мы обрезаем при определенных условиях. такие как Мы делим на 6/4 и 5/5, но не на 6000/4 или 5000/5. Допустим, что одно значение меньше определенного процента по сравнению с соседним значением в узле, а не определенным значением.
11/9
/ \
6/4 5/5
/ \ / \
6/0 0/4 2/2 3/3