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

为何使用Fare与Family_Size异常值训练RandomForestRegressor填充Age缺失值?

疑问:为何用异常值训练模型填充Age缺失值?

相关代码

dataAgeNull = data[data["Age"].isnull()]
dataAgeNotNull = data[data["Age"].notnull()]
remove_outlier = dataAgeNotNull[(np.abs(dataAgeNotNull["Fare"]-dataAgeNotNull["Fare"].mean())>(4*dataAgeNotNull["Fare"].std()))|
                      (np.abs(dataAgeNotNull["Family_Size"]-dataAgeNotNull["Family_Size"].mean())>(4*dataAgeNotNull["Family_Size"].std()))                     
                     ]
rfModel_age = RandomForestRegressor(n_estimators=2000,random_state=42)
ageColumns = ['Embarked', 'Fare', 'Pclass', 'Sex', 'Family_Size', 'Title1', 'Title2','Cabin','Ticket_info']
rfModel_age.fit(remove_outlier[ageColumns], remove_outlier["Age"])

ageNullValues = rfModel_age.predict(X= dataAgeNull[ageColumns])
dataAgeNull.loc[:,"Age"] = ageNullValues
data = dataAgeNull.append(dataAgeNotNull)
data.reset_index(inplace=True, drop=True)

用户疑问

为何要使用Fare和Family_Size的异常值数据来训练RandomForestRegressor,以填充Age字段的缺失值?
我尝试理解这段代码,但仍无法弄明白其中的逻辑。


解答

首先要明确:这段代码的逻辑完全不合理,大概率是写代码时的失误,尤其是变量名和筛选逻辑搞反了。

正常填充缺失值的思路是用有代表性的正常样本训练模型,因为异常值本身偏离数据整体分布,用它训练出的模型会被带偏,预测结果会脱离实际范围:

  • 代码里的remove_outlier变量名起错了——它实际筛选的是Fare或Family_Size超出4倍标准差的异常样本,而非移除异常值。
  • 用这些极端样本训练回归模型,等于让模型只学习“极端票价/极端家庭规模对应的年龄”,但这类样本不具备普遍代表性,用它预测普通样本的Age,结果会严重失真。

正确的做法

  • 从dataAgeNotNull中剔除异常值,用剩下的正常样本训练模型
  • 若异常值占比极低(比如不到1%),也可以直接用全部非缺失值样本训练,异常值的影响可以忽略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:10