我是MATLAB的初学者,我正在努力完成这项任务。任何人都可以指导我完成它吗?
考虑下面给出的数据:
x = [ 1 , 48 , 81 , 2 , 10 , 25 , ,14 , 18 , 53 , 41, 56, 89,0, 1000, , ...
34, 47, 455, 21, , 22, 100 ];
加载数据后,看看是否可以找到:
使用中值,模式和噪声数据,使用中值分级,平均分级和bin边界来纠正缺失值。
答案 0 :(得分:2)
这不是那么糟糕。首先,看看您的数据分布。您可以看到大多数数据都有两位数。异常值是具有单个数字的异常值,或者是大于两位数的异常值。请注意,这完全是主观的,所以其他人可能会告诉您单个数字也是数据的一部分。此外,缺失的数据是逗号之间的空格数。让我们编写一些MATLAB代码并将它们更改为NaN
(或非数字),因为如果您尝试将此代码直接复制并粘贴到MATLAB中,它会给您一个语法错误,因为如果您明确定义数字这样,你必须确保所有这些都在那里。
要执行此操作,请使用regexprep
,以便此字符串中包含逗号,空格和另一个逗号的任何部分在其间放置NaN
。为此,我们需要首先将此语句作为字符串。然后我们使用eval
将此字符串转换为实际的MATLAB语句:
x = '[ 1 , 48 , 81 , 2 , 10 , 25 , ,14 , 18 , 53 , 41, 56, 89,0, 1000, , 34, 47, 455, 21, , 22, 100 ];'
y = eval(regexprep(x, ', ,', ', NaN, '));
如果我们显示这些数据,我们会得到:
y =
Columns 1 through 6
1 48 81 2 10 25
Columns 7 through 12
NaN 14 18 53 41 56
Columns 13 through 18
89 0 1000 NaN 34 47
Columns 19 through 23
455 21 NaN 22 100
因此,要回答我们的第一个问题,任何缺失的值都表示为NaN
,那些大于两位数的数字都是异常值。
对于下一个问题,我们只需提取不缺失的值,计算未丢失的值的均值和中位数,并用均值填写NaN
个值。中位数。对于bin边界,这与使用左边的值(或右边...取决于你的定义,但让我们使用左边)的缺失值相同,并填入其中。如下:
yMissing = isnan(y); %// Which values are missing?
y_noNaN = y(~yMissing); %// Extract the non-missing values
meanY = mean(y_noNaN); %// Get the mean
medianY = median(y_noNaN); %// Get the median
%// Output - Fill in missing values with median
yMedian = y;
yMedian(yMissing) = medianY;
%// Same for mean
yMean = y;
yMean(yMissing) = meanY;
%// Bin boundaries
yBinBound = y;
yBinBound(yMissing) = y(find(yMissing)-1);
非缺失值数据的均值和中位数为:
meanY =
105.8500
medianY =
37.5000
除了具有缺失值的原始数据之外,每个输出的输出如下:
format bank; %// Do this to show just the first two decimal places for compact output
format compact;
y =
Columns 1 through 5
1 48 81 2 10
Columns 6 through 10
25 NaN 14 18 53
Columns 11 through 15
41 56 89 0 1000
Columns 16 through 20
NaN 34 47 455 21
Columns 21 through 23
NaN 22 100
yMean =
Columns 1 through 5
1.00 48.00 81.00 2.00 10.00
Columns 6 through 10
25.00 105.85 14.00 18.00 53.00
Columns 11 through 15
41.00 56.00 89.00 0 1000.00
Columns 16 through 20
105.85 34.00 47.00 455.00 21.00
Columns 21 through 23
105.85 22.00 100.00
yMedian =
Columns 1 through 5
1.00 48.00 81.00 2.00 10.00
Columns 6 through 10
25.00 37.50 14.00 18.00 53.00
Columns 11 through 15
41.00 56.00 89.00 0 1000.00
Columns 16 through 20
37.50 34.00 47.00 455.00 21.00
Columns 21 through 23
37.50 22.00 100.00
yBinBound =
Columns 1 through 5
1.00 48.00 81.00 2.00 10.00
Columns 6 through 10
25.00 25.00 14.00 18.00 53.00
Columns 11 through 15
41.00 56.00 89.00 0 1000.00
Columns 16 through 20
1000.00 34.00 47.00 455.00 21.00
Columns 21 through 23
21.00 22.00 100.00
如果您查看每个输出值,则会根据问题用平均值,中位数以及bin边界填充数据。