SMOTE重采样导致决策树出现非二元异常阈值的解决咨询
问题:SMOTE重采样后决策树二元特征阈值异常的解决方法
问题背景
- 未进行重采样时,基于哑变量(由原字符串/非整数的二元特征经
get_dummies转换而来)训练的决策树,二元叶节点的阈值为<= 0.5,决策边界解释清晰。 - 使用SMOTE重采样后,决策树的二元特征出现了非0.5的奇怪阈值,观察发现SMOTE生成的新数据集中,原二元特征不再只有0和1两个取值(非二元的整数特征出现连续数值属于正常情况)。
相关代码
决策树训练代码
X1 = dummies.drop(target1, axis="columns") # 输入变量 Y1 = dummies[target1] # 目标变量 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)
SMOTE重采样代码
sm = SMOTE(random_state=42) X_res, Y_res = sm.fit_resample(X_train, Y_train)
重采样完成后,用X_res和Y_res替代上述决策树代码中的X1_train和Y1_train进行模型训练。
疑问与初步想法
想知道是否有办法解决决策树中二元特征阈值异常的问题?
我自己的初步思路是:把0到0.5之间的所有值替换为0.5,0.5到1之间的所有值替换为1,但担心这样操作会导致数据失真。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

