You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RWeka中ReplaceMissingValues过滤器失效:处理后仅返回27条记录

问题:RWeka处理缺失值后数据行数骤减的原因?

我正在用R语言的RWeka包探索Weka功能,步骤是:

  1. 用ReplaceWithMissingValue过滤器给iris数据集故意添加缺失值(缺失概率设为0.3)
  2. 尝试用ReplaceMissingValues无监督过滤器填补缺失值

但处理后的数据框只返回27条记录,原数据集和添加缺失值后的数据集行数都是正常的。以下是我用的代码:

data<-select(iris,Species,everything()) 
# ADDING THE MISSING VALUES 
miss<-make_Weka_filter("weka.filters.unsupervised.attribute.ReplaceWithMissingValue") 
data.miss<-miss(data,control=Weka_control(P=.3)) %>% select(Species,everything()) 
# REPLACING BY MEAN 
found<-make_Weka_filter("weka.filters.unsupervised.attribute.ReplaceMissingValues") 
data.found<-found(data.miss) 
nrow(data) 
nrow(data.miss) 
nrow(data.found)

问题原因与解决办法

嘿,我知道你为啥踩这个坑了!问题的核心是你直接用dplyr的select()去操作RWeka返回的特殊对象了!

RWeka的过滤器(比如你用的miss())返回的不是咱们平时用的标准R数据框,而是Weka_instances类的对象——这个东西不仅存着数据,还带着Weka运行必须的元数据:比如哪一列是分类标签(Class属性)、每列的数据类型是数值还是分类等等。你直接用dplyr::select()去改这个对象,会把这些元数据搞乱,导致后面的ReplaceMissingValues过滤器根本没法正确识别你的数据,最后就出现了莫名其妙的行数截断。

另外还有个Weka的默认规则得提一下:ReplaceMissingValues是无监督过滤器,它只会填补特征列的缺失值,如果它认定的Class属性(标签列)有缺失,会直接删掉整行。要是因为元数据乱了,它把某列特征误当成了Class,那缺失值多的话,删完剩下的行数自然就少得离谱了。

给你两个解决办法:

  1. 先转成数据框再调列顺序:用完ReplaceWithMissingValue之后,先把返回的Weka_instances转成标准数据框,再用dplyr调整列顺序,这样就不会破坏元数据了:
data<-select(iris,Species,everything()) 
# ADDING THE MISSING VALUES 
miss<-make_Weka_filter("weka.filters.unsupervised.attribute.ReplaceWithMissingValue") 
# 先转成data.frame再select
data.miss<-miss(data,control=Weka_control(P=.3)) %>% as.data.frame() %>% select(Species,everything()) 
# REPLACING BY MEAN 
found<-make_Weka_filter("weka.filters.unsupervised.attribute.ReplaceMissingValues") 
data.found<-found(data.miss) 
# 查看行数
nrow(data) 
nrow(data.miss) 
nrow(data.found)
  1. 明确指定Class属性(更稳妥):为了避免Weka瞎猜哪列是Class,你可以在调用ReplaceMissingValues时,手动指定Class列的位置(比如Species是第1列):
# 填补时指定第1列(Species)为Class
data.found<-found(data.miss, control=Weka_control(classIndex=1))

这样过滤器就只会删掉Species列有缺失的行,其他列的缺失值会自动用均值(数值型列)或众数(分类列)填补,行数就正常了——大概会剩下105左右,毕竟每个Species值有30%的概率缺失嘛。


内容的提问来源于stack exchange,提问作者Fernando Menendez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:37:34