min_samples_leaf 有奇怪的行为

问题描述 投票:0回答:1

尝试调整 GradientBoostedClassifer() 中的 min_samples_leaf。我看到了偏差/方差权衡的预期结果。然而,只是为了测试边界,我在训练数据集中设置了 min_samples_leaf > n_samples,预计会出现错误或其他情况,但我仍然得到与模型调整时类似的结果:

df = df_a # number of samples = 347
df=df.sample(frac=1) 
train_proportion = 0.8 
n = len(df)
t = int(train_proportion * n)

# separate training and test sets
y = df['detected']
X = df.loc[:, ~df.columns.isin(['detected'])]

# samples in training set
train_x = X.iloc[:t,:].reset_index().iloc[:,1:]
# samples in test set
test_x = X.iloc[t:,:].reset_index().iloc[:,1:]
#targets in train set
train_y = pd.Series(y[:t].reset_index().iloc[:,1:].iloc[:,0])
#targets in test set
test_y = pd.Series(y[t:].reset_index().iloc[:,1:].iloc[:,0])

clf = GradientBoostingClassifier(n_estimators = 100, max_depth = 10, random_state= 0, min_samples_leaf=500)
clf.fit(train_x,train_y)
print(clf.score(train_x,train_y))
print(clf.score(test_x,test_y))

output:
0.924187725631769
0.9142857142857143

为什么会这样呢?我预计会出现错误或者不会进行拆分。文档中似乎没有说明如果 min_samples_leaf > n_samples 会发生什么。对 int 的唯一要求是范围 [1,inf]。对此也没有额外的注释。

我在想也许它会将 min_samples_leaf 重置为一些可用值,但是子树都没有深度并且没有进行分割:subtree

python machine-learning scikit-learn tree
1个回答
0
投票

我预计[...]不会出现任何分裂。

[...]

子树都没有深度,也没有进行分割

所以你已经证实了你的怀疑之一。为什么

score
看起来这么好,这是留给你的唯一问题吗?这可能是因为
score
是准确性指标,如果您的数据集不平衡并且始终预测多数类,那么准确性就是多数的流行率。

© www.soinside.com 2019 - 2024. All rights reserved.