我有一个简单的数据集,其中包含平衡的目标 y(0 或 1)和不平衡的特征(很多 0,少数 1)
我的目标是获得高精度(不关心召回)
如果我只分配 y=1 if x=1 但是当我训练 DecisionTree、xgboost、randomforest 时,我可以获得 0.53 的高精度,它们都生成模型,只为任何特征值输出 1,即他们找不到那个简单的规则(y =1 if x=1) (使用这些算法我得到的精度仅为 0.38)。
我应该使用什么算法以及如何让一些 ML 算法学习该简单规则以最大化精度,并且不会退化为始终输出 1。
请注意,实际问题将涉及许多功能,因此需要强大的 ML 算法。
# sample synthetic data, DecisionTree fails to find the simple rule
df=pd.DataFrame({'x':np.random.choice([0, 1], size=10000, p=[.99, .01])})
df['y']=np.random.randint(0,2,10000)
df.loc[df.x==1,'y']=1
#precision by using rule y=1 if x==1 else y=0
df.query('x==1')['y'].mean() # = 1.0