我首先创建了一个没有重采样的决策树(DT)。 结果是例如像这样: 这里,二元叶值是“<= 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] 决策边界不再是 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。但我担心这可能会伪造数据。