can reliefF() function deal with NaNs in my matrix?

1 view (last 30 days)
Hello,
I have an (n*m double) matrix, where n (rows) is the number of my samples and m (columns) is the number of my features, which are all discrete (i.e. categorical). The mth column in the data represents my binary outcome. I have tried using relieff() function to return the importance of my predictor features based on my outcome feature.
This is what my data looks like (let's say for simplicity's sake: I have 4 predictor and 1 outcome feature for 3 samples):
matrixdata = [1, 2, 3, NaN, 2; 5, 1, NaN, 2, 1; NaN, 3, NaN, 2, 1];
This is how I call the relieff() on my data:
X = matrixdata(:,1:(end-1));
Ylogical = matrixdata(:,end)== 1;
[ranked,weights] = relieff(X,Ylogical,10, 'categoricalx', 'on');
In this case, does relieff() disregard the NaNs in the data or does it treat NaNs as a separate category of that predictor feature column? Obviously, the former is what I would prefer.
Many thanks, Berkan

Accepted Answer

Wayne King
Wayne King on 4 Mar 2012
Hi Berkan, relieff() removes NaNs in both your predictor and response variables. So your preference is the way it is implemented.

More Answers (1)

Berkan Sesen
Berkan Sesen on 5 Mar 2012
Hi, apparently the reliefF function has a sub function removeNaNs(X,Y) as below:
function [X,Y] = removeNaNs(X,Y)
% Remove observations with missing data
NaNidx = bsxfun(@or,isnan(Y),any(isnan(X),2));
X(NaNidx,:) = [];
Y(NaNidx,:) = [];
This effectively gets rid of all rows that contain any NaNs and is not ideal, especially for my case, since it leaves me with X=[] and Y=[] (i.e. no observations!)
How can I tackle this? Would replacing all NaN's with a random category, e.g. 99999, help? By doing this, I am introducing a new node state for all the predictor features so I guess it is not ideal.
Thanks, Berkan

Categories

Find more on Data Distribution Plots in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!