我正在尝试将我的数据集放入 MATLAB[ranked,weights] = relieff(X,Ylogical,10, 'categoricalx', 'on')
函数对我的预测特征的重要性进行排名。这dataset<double n*m>
has n
观察和m
离散(即分类)特征。碰巧我的数据集中的每个观察值(行)都至少有一个 NaN 值。这些 NaN 表示数据集中未观察到的预测变量值,即缺失或为空的预测变量值。 (数据集没有损坏,只是不完整。)
救济()使用下面的此函数删除任何包含 NaN 的行:
function [X,Y] = removeNaNs(X,Y)
% Remove observations with missing data
NaNidx = bsxfun(@or,isnan(Y),any(isnan(X),2));
X(NaNidx,:) = [];
Y(NaNidx,:) = [];
这并不理想,尤其是对于我的情况,因为它让我X=[]
and Y=[]
(即没有观察结果!)
在这种情况下:
1)将用随机值替换所有 NaN,例如99999,帮忙吗?通过这样做,我为所有预测器特征引入了新的特征状态,所以我认为它并不理想。
2)或者用相应特征列向量的模式(如下)替换 NaN 在统计上更合理? (为了清楚起见,我没有进行矢量化)
function [matrixdata] = replaceNaNswithModes(matrixdata)
for i=1: size(matrixdata,2)
cv= matrixdata(:,i);
modevalue= mode(cv);
cv(find(isnan(cv))) = modevalue;
matrixdata(:,i) = cv;
end
3)或者任何其他对“分类”数据有意义的合理方式?
P.S: 这个链接 http://www.dtreg.com/MissingValues.htm给出了处理缺失数据的可能方法。