Matlab 代码:识别数据分布域外的异常值
假设数据存储在矩阵 A 中,代码如下:
[m,n] = size(A); % 获取矩阵 A 的行数 m 和列数 n
for j = 1:n % 循环遍历每一列数据
col_data = A(:,j); % 获取第 j 列数据
sorted_data = sort(col_data); % 对第 j 列数据进行排序
lower_bound = sorted_data(round(0.005*m)); % 计算下界
upper_bound = sorted_data(round(0.995*m)); % 计算上界
% 找到不在数据分布域的 99% 区域内的异常值的行数
outlier_rows = find(col_data < lower_bound | col_data > upper_bound);
fprintf('第 %d 列数据中不在数据分布域的 99%% 区域内异常值的行数为:%d\n', j, length(outlier_rows));
end
解释一下代码的思路:
- 获取矩阵 A 的行数 m 和列数 n。
- 循环遍历每一列数据,获取第 j 列数据。
- 对第 j 列数据进行排序,计算下界和上界。这里假设数据分布是正态分布,所以下界和上界分别为第 0.5% 和第 99.5% 个数据。
- 找到不在数据分布域的 99% 区域内的异常值的行数,即小于下界或大于上界的数据行数。
- 输出每一列中不在数据分布域的 99% 区域内异常值的行数。
原文地址: http://www.cveoy.top/t/topic/jC17 著作权归作者所有。请勿转载和采集!