处理逻辑回归的 NaN(缺失)值 - 最佳实践?

数据挖掘 机器学习 数据清理 逻辑回归 缺失数据
2021-10-14 06:46:53

我正在处理患者信息数据集,并尝试使用 MATLAB 从数据中计算倾向得分。删除具有许多缺失值的特征后,我仍然留下了几个缺失 (NaN) 值。当我尝试使用以下 Matlab 代码(来自 Andrew Ng 的 Coursera 机器学习课程)执行逻辑回归时,由于这些缺失值而出现错误,因为我的成本函数和梯度向量的值变为 NaN:

[m, n] = size(X);
X = [ones(m, 1) X];    
initial_theta = ones(n+1, 1);
[cost, grad] = costFunction(initial_theta, X, y);
options = optimset('GradObj', 'on', 'MaxIter', 400);

[theta, cost] = ...
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

注意:sigmoid 和 costfunction 是我为整体易用性而创建的工作函数。

如果我用 1 或 0 替换所有 NaN 值,则可以顺利执行计算。但是我不确定这是否是处理这个问题的最佳方法,我也想知道我应该(通常)选择什么替换值获得对缺失数据执行逻辑回归的最佳结果。使用特定数字(0 或 1 或其他数字)来替换我的数据中的上述缺失值是否有任何好处/缺点?

注意:我还将所有特征值标准化为 0-1 范围内。

对此问题的任何见解都将受到高度赞赏。谢谢

1个回答

删除具有缺失值的特征时要小心。有时,特征缺失值这一事实本身就是有价值的数据。

你问的是什么叫做插补。谷歌搜索将为您提供有关各种插补方法的大量文献。以下是一些最常见的:

-Mean imputation:用其他值的平均值替换所有缺失值

- 模式插补:同上,带模式

- 中值估算:明白了吗?全部替换为中位数

- 链式方程的多重插补(MICE):基本上是做线性回归来根据其他变量预测缺失值。这是一个高方差的解决方案,因此可能需要一些领域知识。这也可能需要很长时间。在 R 和 Python 中有可用的包来执行此操作。

- 用 0 或 1 替换缺失值(看起来你已经尝试过了)

尝试不同的方法,看看哪些方法能给你最好的结果!