相关疑难解决方法(0)

为什么该决策树每一步的值之和不等于样本数?

我正在阅读有关决策树和装袋分类器的内容,并且我试图展示装袋分类器中使用的第一个决策树。我对输出感到困惑。

from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
from sklearn.ensemble import BaggingClassifier
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from graphviz import Source

X, y = make_moons(n_samples=500, noise=0.30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

bag_clf = BaggingClassifier(
    DecisionTreeClassifier(), 
    n_estimators=500,
    max_samples=100, 
    bootstrap=True, 
    n_jobs=-1)
bag_clf.fit(X_train, y_train)

Source(tree.export_graphviz(bag_clf.estimators_[0], out_file=None))
Run Code Online (Sandbox Code Playgroud)

这是输出的一个片段

在此输入图像描述

据我了解,value应该显示有多少样本被分类为每个类别。那么,value字段中的数字不应该加到字段中吗samples?为什么这里的情况不是这样呢?

python machine-learning decision-tree scikit-learn

5
推荐指数
1
解决办法
1786
查看次数

为什么“值”之和不等于 scikit-learn RandomForestClassifier 中“样本”的数量?

我通过 RandomForestClassifier 构建了一个随机森林并绘制了决策树。参数“值”(红色箭头所指)是什么意思?为什么[]中两个数字的总和不等于“样本”的数量?我看到了其他一些例子,[]中的两个数字之和等于“样本”的数量。为什么我的情况没有?

df = pd.read_csv("Dataset.csv")
df.drop(['Flow ID', 'Inbound'], axis=1, inplace=True)
df.replace([np.inf, -np.inf], np.nan, inplace=True)
df.dropna(inplace = True)
df.Label[df.Label == 'BENIGN'] = 0
df.Label[df.Label == 'DrDoS_LDAP'] = 1
Y = df["Label"].values
Y = Y.astype('int')
X = df.drop(labels = ["Label"], axis=1)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.5)
model = RandomForestClassifier(n_estimators = 20)
model.fit(X_train, Y_train)
Accuracy = model.score(X_test, Y_test)
        
for i in range(len(model.estimators_)):
    fig = plt.figure(figsize=(15,15))
    tree.plot_tree(model.estimators_[i], feature_names = df.columns, class_names = ['Benign', 'DDoS'])
    plt.savefig('.\\TheForest\\T'+str(i))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python machine-learning decision-tree random-forest scikit-learn

4
推荐指数
1
解决办法
958
查看次数