我必须使用决策树对不平衡数据集(50000:0、1000:1)进行二元分类。为了获得良好的召回率(0.92),我使用了模块 Imblearn 中的 RandomOversampling 函数,并使用 max_depth 参数进行了修剪。问题是精度非常低(0.44),我有太多误报。
我试图训练一个特定的分类器来处理产生误报的边界实例。首先,我将数据集拆分为训练集和测试集(80%-20%)。然后我将 train2 和 test2 集(66%,33%)分开训练。我使用 dtc(#1) 来预测 test2,并且我只将预测为真的实例。然后我在所有这些数据上训练了一个 dtc(#2),目的是建立一个能够区分边缘情况的分类器。我使用在第一个过采样训练集上训练的 dtc(#3) 来预测官方测试集,并得到 Recall=0.92 和 Precision=0.44。最后,我只在 dtc(#3) 预测为真的数据上使用了 dtc(#2),希望能区分 TP 和 FP,但效果不太好。我得到 Rec=0.79 和 Prec=0.69。
x_train, X_test, y_train, Y_test =train_test_split(df2.drop('k',axis=1), df2['k'], test_size=test_size, random_state=0.2)
x_res, y_res=ros.fit_resample(x_train,y_train)
df_to_trick=df2.iloc[x_train.index.tolist(),:]
#....split in 0.33-0.66, trained and tested
confusion_matrix(y_test,predicted1) #dtc1
array([[13282, 266],
[ 18, 289]])
#training #dtc2 only on (266+289) datas
confusion_matrix(Y_test,predicted3) #dtc3 on official test set
array([[9950, 294],
[ 20, 232]])
confusion_matrix(true,predicted4)#here i used dtc2 on (294+232) datas
array([[204, 90],
[ 34, 198]])
我必须在 dtc3 (Recall=0.92, Prec=0.44) 或整个颈椎过程 (Recall=0.79, Prec=0.69) 之间进行选择。您对改进这些指标有什么想法吗?我的目标大约是(0.8/0.9)。