Единственная разница между следующими кодами состоит в том, что у каждого есть 'особенности', определенные в функции show_tree, тогда как у другого нет. И то, и другое отображает другое дерево решений. Мой вопрос заключается в том, что код, для которого не определены «функции», не должен отображать одно и то же дерево, потому что функции уже определены в x dt = c.fit (x_train, y_train), а этот dt является переменной show_tree
КОД 1:
data = pd.read_csv('soundcloud.csv')
print(data)
features = ['danceability','loudness','valence','energy','instrumentalness','acousticness','key','speechiness','duration_ms']
y = data['target']
x = data[features]
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.15)
c = DecisionTreeClassifier(min_samples_split=100)
dt = c.fit(x_train,y_train)
def show_tree(dt,path):
f = io.StringIO()
export_graphviz(dt, out_file=f)
pydotplus.graph_from_dot_data(f.getvalue()).write_png(path)
img = misc.imread(path)
plt.rcParams['figure.figsize'] = (20,20)
plt.imshow(img)
show_tree(dt,'dec_tree_01.png')
КОД 2:
data = pd.read_csv('data.csv')
print(data)
train,test = train_test_split(data, test_size = 0.15)
c = DecisionTreeClassifier(min_samples_split=100)
features = ['danceability','loudness','valence','energy','instrumentalness','acousticness','key','speechiness','duration_ms']
x_train = train[features]
y_train = train['target']
x_test = test[features]
y_test = test['target']
dt = c.fit(x_train,y_train)
def show_tree(tree, features, path):
f = io.StringIO()
export_graphviz(tree, out_file=f, feature_names=features)
pydotplus.graph_from_dot_data(f.getvalue()).write_png(path)
img = misc.imread(path)
plt.rcParams['figure.figsize'] = (20,20)
plt.imshow(img)
show_tree(dt,features,'dec_tree_01.png')