重采样导致决策树中出现奇怪的非二进制阈值

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

我首先创建了一个没有重采样的决策树(DT)。 结果是例如像这样: DT BEFORE Resampling 这里,二元叶值是“<= 0.5" and therefore completely comprehensible, how to interpret the decision boundary. As a note: Binary attributes are those, which were strings/non-integers at the beginning and then converted into dummies with get_dummies.

但是当我用 SMOTE 进行重采样时,我的树看起来如下: [重采样后 DT][(https://i.stack.imgur.com/YTL0I.png)]2 决策边界不再是 0,5,但现在有奇怪的值。 似乎使用 SMOTE 新生成的数据集,底层数据集中不再有“0”和“1”。 注意:对于“值”属性,那些“连续”值是可以的,因为它们是非二进制的,因为它们从一开始就是整数。

这是我的 DT 生成代码(已更改):

X1 = dummies.drop(target1, axis="columns") #input variables
Y1 = dummies[target1] #target variable

X1_train, X1_test, Y1_train, Y1_test = train_test_split(X1, Y1, test_size= 0.3)

clf1 = DecisionTreeClassifier(max_depth = 3) 
clf1 = clf1.fit(X1_train, Y1_train)
params1 = clf1.get_params()
        
preds1 = clf1.predict(X1_train)
        
clf1.predict_proba(X1_train)

feature_names1 = X1.columns
clf1.feature_importances_

fig1 = plt.figure(figsize = (25,20))
_ = tree.plot_tree(clf1,
                  feature_names = feature_names1,
                  class_names = {0: "No Issue", 
                                 1: "Issue"},
                  filled = True,
                  fontsize = 12)

在这里您可以看到在特定情况下如何进行重采样:

sm = SMOTE(random_state=42)
X_res, Y_res = sm.fit_resample(X_train, Y_train)

然后使用“X_res”和“Y_res”代替上面的“X1_train”和“Y1_train”。

你知道有什么机制可以处理上面DT图片中所说的不便吗?

非常感谢您的帮助!非常感谢你,现在让我知道你是否需要更多信息。

我的第一个想法是将所有从 0 到 0,5 的值替换为 0,5-only,从 0,5 到 1 的所有值替换为 1-only。但我担心这可能会伪造数据。

python decision-tree
© www.soinside.com 2019 - 2024. All rights reserved.