gpt4 book ai didi

matlab - MatLab分类数据中缺少数据处理

转载 作者:行者123 更新时间:2023-12-04 18:31:22 24 4
gpt4 key购买 nike

我试图将数据集放入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)还是在统计上用对应的特征列向量(如下所示)的模式替换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)还是对“分类”数据有意义的任何其他明智方式?

附言: This link提供了处理丢失数据的可能方法。

最佳答案

我建议使用表格而不是矩阵。
然后,您具有诸如ismissing(针对整个表)和undefined的功能,以处理分类变量的缺失值。

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);

关于matlab - MatLab分类数据中缺少数据处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9569886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com