繁体   English   中英

MatLab缺少分类数据中的数据处理

[英]MatLab Missing data handling in categorical data

我试图将我的数据集放入MATLAB [ranked,weights] = relieff(X,Ylogical,10, 'categoricalx', 'on')函数中,以对我的预测器功能的重要性进行排名。 dataset<double n*m>具有n观察值和m离散(即分类)特征。 我的数据集中的每个观察(行)都至少有一个NaN值。 这些NaN表示数据集中未观察到的,即缺失或空的预测值。 (数据集中没有损坏,它只是不完整。)

relieff()使用下面的函数删除包含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=[]Y=[] (即没有观察!)

在这种情况下:

1)用随机值替换所有NaN,例如99999,有帮助吗? 通过这样做,我为所有预测器功能引入了一个新的功能状态,所以我猜它并不理想。

2)或者用相应特征列向量的模式替换NaNs(如下所示)统计上更有声音? (为了清晰起见,我不是为了矢量化)

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)或对“分类”数据有意义的任何其他合理方式?

PS: 此链接提供了处理缺失数据的可能方法。

我建议使用表而不是矩阵。 然后你有一些函数,如ismissing(对于整个表),并且isundefined来处理分类变量的缺失值。

T = array2table(matrix);
T = standardizeMissing(T);  % NaN is standard for double but this 
                            % can be useful for other data type
var1 = categorical(T.var1);
missing = isundefined(var1);
T = T(missing,:);           % removes lines with NaN
matrix = table2array(T);

你可以看看这个页面http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html第一个a1a,它说分类转换为二进制。 可能会工作。 (:

首先,解决方案(1)和(2)都不能帮助您更正确地处理数据,因为NaN实际上是由Matlab正确处理的标签; 将发出警告。 你应该做的是:

  1. 处理每个案例的NaN
  2. 使用try catch块

NaN就像一个数字,并没有什么不好的。 即使你被NaN划分,matlab也会正确对待并给你一个NaN。

如果你仍然想要替换它们,那么你需要一个假设。 例如,如果您的数据是由引擎操作员输入的时间序列中的引擎速度,但是尚未指定某些时间实例,那么有多种方法可以处理将出现在矩阵中的NaN。

  1. 替换为0
  2. 替换为先前的值
  3. 替换为下一个值
  4. 替换为上一个和下一个值的平均值以及更多值。

正如您所看到的,您的问题是不适合的,并且取决于预测器和数据源。

在分类数据的情况下,例如三个类别{0,1,2}并且假设NaN出现在Y中。

for k=1:size(Y,2)
  [ id ]=isnan(Y(:,k);
  m(k)=median(Y(~id),k);
  Y(id,k)=round(m(k));
end

我觉得我不得不写一个for循环,但我看不到任何其他方式。 正如你所看到的,我通过使用medianround做了一些假设。 您可能希望根据您对数据的了解使用阈值。

我认为这个问题的答案是gd047尺寸减少 - 分类 - 数据 - 缺失值中给出的

我将调查一下,如果有人有任何其他建议或特定的MatLab实现,那么听起来会很棒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM