我应该使用训练数据集的函数来处理训练数据集和测试数据集的缺失值吗
Posted
技术标签:
【中文标题】我应该使用训练数据集的函数来处理训练数据集和测试数据集的缺失值吗【英文标题】:Should i handle the missing values of both train and test dataset using a function of train dataset 【发布时间】:2021-10-03 21:01:07 【问题描述】:我已将我的数据集拆分为 train 和 test 数据集。两个数据集在“年龄”列中都有缺失值。对于 training 数据集,我应用了一个函数,该函数将通过考虑“sex”和“designation”等其他列来处理具有平均值的缺失值。我通过查看 sns.boxplot 对平均值进行了硬编码
def imp_age(col):
age=col[0]
desg=col[1]
sex=col[2]
if pd.isnull(age):
if desg==1:
return 41
elif desg==2:
if sex==0:
return 33
else:
return 38
else:
if sex==0:
return 23
else:
return 22
else:
return age
现在要处理 Test 数据集的“年龄”列中的缺失值,我应该应用为训练数据集设计的相同方法,还是应该创建一个新函数并使用平均值测试数据集
【问题讨论】:
不要手动编码,你很可能会过度简化并弄错。从具有age
的条目中训练regression
算法,并在缺失时使用它来预测age
。使用 classification/regression
算法重复方法以获取其他缺失的功能(如果有),最后拆分为 training + validation + test
集,了解原因:en.wikipedia.org/wiki/Training,_validation,_and_test_sets。请注意,如果缺少多个特征,则可能存在依赖概念(例如,age
可以帮助预测一些 disease
,因此如果两者都缺失,请从 age
开始)
我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅 machine-learning
@ 中的介绍和注意事项987654323@.
【参考方案1】:
我认为最好应用为训练数据集设计的相同方法。但是,由于训练、测试数据集是来自相同数据的样本,并且您正在计算平均值,因此如果您在训练和测试中分别执行此操作,应该不会有太大差异
【讨论】:
【参考方案2】:我认为在将数据拆分为“年龄”列的训练集和测试集之前,应用一个函数来处理具有平均值或中位数的缺失值,然后拆分数据。
【讨论】:
【参考方案3】:当然,你应该只使用训练数据来处理训练和测试中的缺失数据,如果你分别应用每一个,那么你假设你会在推理时获得一些关于测试数据的信息,这是错误的,因为当模型将被发布,除了即将到来的样本,您将不会有任何统计信息。
【讨论】:
以上是关于我应该使用训练数据集的函数来处理训练数据集和测试数据集的缺失值吗的主要内容,如果未能解决你的问题,请参考以下文章
R语言plotly可视化:使用plotly可视化数据划分后的训练集和测试集使用不同的形状标签表征训练集测试集以及数据集的分类标签(Display training and test split