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

使用NN插值填充泰坦尼克号数据集年龄时仍存在两个NaN值的原因

泰坦尼克号数据集最近邻填充年龄仍有缺失的原因分析
  • 你用的不是基于特征的最近邻填充:pandas的interpolate(method='nearest')是按数据的索引顺序找最近的非缺失值,不是根据样本的pclass、sex等特征匹配相似样本。它只看当前NaN在序列中的位置,找前后最近的有值的行来填充,和机器学习里的KNN完全是两回事。

  • 这两个缺失值处于无有效邻居的位置:索引416、417的age没被填充,大概率是因为它们属于连续的缺失段,且前后都没有非NaN的age值。比如如果测试集的age列从某一行开始全是NaN,那最后这两个就找不到可填充的邻居,只能保留缺失。你可以执行print(titanic_Test['age'].notna().tail(10)),看看这两个样本前后的age是否都是缺失的。

  • 如果要做特征匹配的近邻填充:应该用sklearn的KNNImputer,它会根据样本的特征相似度找邻居来填充缺失值,示例代码如下:

    from sklearn.impute import KNNImputer
    from sklearn.preprocessing import StandardScaler
    
    # 选取用于匹配的特征(包含age,因为要填充它)
    cols = ['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare']
    df_for_impute = titanic_Test[cols].copy()
    
    # KNN对特征尺度敏感,先标准化
    scaler = StandardScaler()
    df_scaled = scaler.fit_transform(df_for_impute)
    
    # 初始化填充器,设置邻居数
    imputer = KNNImputer(n_neighbors=3)
    df_imputed = imputer.fit_transform(df_scaled)
    
    # 将填充后的数据转换回原尺度,更新age列
    titanic_Test['age'] = scaler.inverse_transform(df_imputed)[:, cols.index('age')]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:35:24