我有一个维度的数据(13961,48)最初,经过一次热编码和数据的基本按摩,观察到的维度(13961,862)。
在运行logistic、knn、决策树、随机森林等算法时,即使不执行任何特征选择过程,数据也会产生非常高的精度,并且精度超过94%,但“朴素偏差分类器”除外。
这似乎是奇数和偶数的任意两个功能也随机--
同时应用SMOTE,即使对于上述任何算法的基线模型,如logistic、knn、决策树、随机森林、,
在删除前20个特征后,这将使良好结果的准确性超过94%(检查以了解真实性)
g = data[Target_col_Y_name]
df = pd.concat([g.value_counts(),
g.value_counts(normalize=True).mul(100)],axis=1, keys=('counts','percentage'))
print('The % distribution between the retention and non-retention flag\n')
print (df)
# The code o/p to show the imbalance is
The % distribution between the retention and non-retention flag
counts percentage
Non Retained 13105 93.868634
Retained 856 6.131366
我的数据有7个数字变量,例如月份、金额、利率和所有其他变量(大约855个),作为一个热编码转换的分类变量。
有什么方法可以在基线、特征选择或不平衡优化技术上处理此类数据?请通过查看每个级别的维度和不平衡计数进行指导。
除了Elias的回答,我想补充一点。
首先,您必须了解,即使您创建了“哑分类器”,它总是预测“未保留”,但您仍然有94%的正确率。因此,在这种情况下,准确度显然是弱指标。
你绝对应该了解混乱矩阵和随之而来的指标(如AUC)。
其中一个指标是F1分数,这是准召的谐波平均值。在不平衡的类设置中,准确性更好,但是...它不一定是最好的。F1会偏爱那些有相似准召的。但这对你来说并不重要。
例如,如果您要构建sfw内容过滤器,您可以将一些sfw内容标记为nsfw(阴性类),这将增加误报率(并降低召回率),但您希望确保只保留安全的内容(高精度)。
在你的情况下,你可以推理什么是更糟糕的:保留不好的东西或放弃好的东西,并以这种方式选择指标。
就策略而言:有很多方法可以处理类不平衡:抽样技术(除了SMOTE或ROSE之外,尝试向下抽样、向上抽样),并检查您的验证分数(仅培训指标几乎没有用)是否有所提高。一些模型具有特殊的超参数,以便更关注稀有类(例如,在xgboost中有scale\u pos\u weight参数)。
祝你好运
准确度通常不是一个很好的衡量标准,特别是对于不平衡的类。我会推荐另一个stackoverflow答案,它解释了何时使用F1分数以及何时使用AUROC,这两种方法都比准确度好得多;在这种情况下,F1更好。
有几点需要澄清:
>
决策树的性能几乎总是比随机林差,因为随机林是许多聚合决策树。