机器学习中,训练集中的数据特征有几百个,但是大多数特征都很稀疏缺失率高达百分之80以上,该怎么处理?

关注者
54
被浏览
34,913
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

缺失率百分之80,这有点太多了吧。

你这里说的稀疏缺失率,那我猜测你应该是采集数据时,将缺失置为0了。通常来讲,缺失数据一般都是标记为NANS等,而不是直接用0,因为特征中的0的数量和位置,本身也具有重要意义。

你的缺失率达到80,那么来说,肯定不能直接删除,不然删麻了,不知道的人,还以为你贪污了实验经费。或者是插补,但是啊,像各种插补算法,有许多成熟的估算包:Amelia, mi, mice, missForest等,通过传递不同的回归函数来预测缺失的特征值,我觉得都有点近似于将每个缺失值的特征建模为其他特征的函数,并使用估计值进行估算,然后可以根据实际情况可能就是单次或者多次插补。理论上来说,都是这么处理的,但是啊,一般来说只是对少量缺失值,离群值的时候使用,还要确定带来的误差是能够容忍的。

像楼上答主说的置为其他字符,如果你要自己处理的话,说白了就是加占位符,然后将数据集转化为二进制矩阵,然后标记缺失值,再结合分类器,在sklearn库里函数名是:MissingIndicator 。

但是但是但是,以上的方法,在达到80%的缺失率时,我的经验告诉我,基本上时没用的,因为啊,你缺失不一定是较为集中的维度,可能同样类别,每个维度都有缺失,你又不能直接删,也不能随便置零,前文说了,这些东西本身就具有重要意义,如果你能明显的观察到缺失具有一定稳定的分布,你可以人为地选择维度,比如,128维特征,从维度出发,统计所有样本里,哪个维度缺失最少,从低到高排序,然后选择前面几个或者多个维度组成特征,进行一些尝试,进行特征选择。如果没有这么理想,或者特征的稀疏性和维度时序也有重要意义,那我有个灵光一闪的想法,你可以去试试,既然缺失值插补的路子大概率走不通,又不能随便人为构造,要不尝试下映射到其他维度?降维压缩一下,比人为压缩更有点说服力,不要那么稀疏(不是特征本身的稀疏,而是缺失),或者映射到更高维度(总有一个维度可分?)