目录
3.2 MAD(Median Absolute Deviation,中位数绝对偏差)
3.3 四分位距(Interquartile Range, IQR)
这个笔记主要是针对一次练习题写的,还是比较简陋的,以后再补充。
1.初步数据检查:
这里需要用到一些画图的方法,我常用的就是:
1.散点图,2.直方图,看其是是正态分布
了解数据的整体情况,检查数据格式和类型,确认缺失值和异常值的大致分布。
1.散点图
%% 画数据的散点图
X=randn(1,1000);%这里导入需要的数据
data=X;
n=numel(data);数据的个数
plot(1:n,data)
2.直方图
%
X = randn(1000, 1); % 导入需要的数据
data=X;
% 绘制直方图
figure;
histogram(data);
title('直方图');
xlabel('数值');
ylabel('频率');
这些图可以直接在matlab的图像库中直接生成:
2.缺失值填充:
选择适当的方法填充缺失值,确保数据的完整性。方法包括均值(mean)、中位数(median)、众数填充,插值法,回归法等。这里选用matlab中的清洗数据工具箱直接进行操作:具体如下
缺失值填充通常应在异常值检验之前进行,以确保数据的完整性和一致性。但是,根据具体的数据情况和问题需求,也可以适当调整步骤。关键是要确保数据预处理过程中的每一步都能提高数据的质量,为后续的建模和分析提供可靠的基础。
3异常值检验与处理:
统计的方法:
3.1 3σ准则
原理
根据正态分布的特性,大约99.7%的数据会落在均值的3倍标准差范围内。因此,任何超过这个范围的数据点都可以被视为异常值。具体步骤如下:
计算数据的均值(μ)和标准差(σ)。
确定异常值的阈值范围:[μ - 3σ, μ + 3σ]。
超出这个范围的点即被标记为异常值。
适用范围:
数据接近正态分布。
适用于中小规模数据集。
优缺点:
a优点:简单易懂,计算量小。
b缺点:假设数据符合正态分布,对非正态分布数据效果不佳;对极端异常值不敏感。
% 计算均值和标准差
X=randn(1,1000);%导入数据
data=X;
n=numel(data);
mu = mean(data);
sigma = std(data);
% 确定异常值的阈值
lu = mu - 3 * sigma;
up = mu + 3 * sigma;
% 标记异常值
outliers = data(data < lu | data > up);%异常值,
[~,index]=find(data < lu | data > up);%异常值下标
%绘图将异常值显示出来
plot([1:n],data)
hold on
plot(index,outliers,'*r')
legend('原始数据','异常值')
3.2 MAD(Median Absolute Deviation,中位数绝对偏差)
原理
MAD 方法是通过计算每个数据点相对于中位数的绝对偏差,并使用这些偏差的中位数作为测量标准。这种方法对非正态分布和极端值更为稳健。具体步骤如下:
计算数据集的中位数(Median)。
计算每个数据点与中位数的绝对偏差(|X_i - Median|)。
计算这些绝对偏差的中位数,即 MAD。
使用常数因子(通常为1.4826,对于正态分布数据)对 MAD 进行调整,得到调整后的 MAD(Adjusted MAD)。
根据调整后的 MAD 计算异常值的阈值范围:
下限:Median - k * Adjusted MAD
上限:Median + k * Adjusted MAD
超出这个范围的点即被标记为异常值。
适用范围:
数据分布不一定是正态分布。
数据集中包含极端值或异常值,且这些异常值可能会显著影响均值和标准差。
优缺点:
a优点:对非正态分布数据有效,不受极端值影响;适用于数据集中存在多个异常值的情况。
b缺点:对数据量较大或维度较高的数据集计算量较大。
%%
X=randn(1,100);%导入数据
data=X;
% 计算中位数和MAD
median_data = median(data);
MAD = median(abs(data - median_data));
% 确定异常值的阈值
k = 1.4826; % 常数
lu = median_data - 3 * k * MAD;
up = median_data + 3 * k * MAD;
% 标记异常值
outliers = data(data < lu | data > up);%异常值,
[~,index]=find(data < lu | data > up);%异常值下标
%绘图将异常值显示出来
plot([1:n],data)
hold on
plot(index,outliers,'*r')
legend('原始数据','异常值')
3.3 四分位距(Interquartile Range, IQR)
原理:
利用数据的四分位数(Q1, Q3)和四分位距(IQR),通过计算数据分布的中间部分,识别分布两端的异常值。具体步骤如下:
计算第一四分位数(Q1)和第三四分位数(Q3)。
计算四分位距:IQR = Q3 - Q1。
确定异常值的阈值范围:[Q1 - 1.5IQR, Q3 + 1.5IQR]。
超出这个范围的点即被标记为异常值。
适用范围:
适用于大部分分布类型的数据。
适用于小到中等规模的数据集。
优缺点:
优点:对非正态分布数据有效,不受极端值影响。
缺点:对数据量较大或维度较高的数据集计算量较大。
这里可以直接用一个箱线图去分析,以下是箱线图的说明:
-
分布特征:
- 中位数位置:中位数的位置表示数据的中心趋势。如果中位数在箱体中间,数据大致对称;如果中位数靠近箱体一端,数据偏斜。
- 箱体宽度:箱体的宽度(IQR)表示数据的离散程度。宽箱体表示数据分散,窄箱体表示数据集中。
-
数据对称性和偏斜性:
- 对称性:如果箱体两端的胡须长度相等或相近,数据大致对称。
- 偏斜性:如果一端的胡须明显长于另一端,数据呈偏斜分布。长上胡须表示正偏(右偏),长下胡须表示负偏(左偏)。
-
异常值:
- 异常值显示为箱线图之外的独立点,表示可能的极端值或数据异常。需要进一步检查这些点,以确定它们是否是数据录入错误、噪声或有意义的异常。
X=randn(1,1000);%导入数据
data=X;
% 绘制箱线图
figure;
boxplot(data);
title('箱线图');
3.4异常值处理
这里介绍两种常用的方法
a. 删除异常值
适用场景:
异常值是由于数据录入错误、传感器故障等外部原因造成的。
异常值数量较少,不会对整体数据产生显著影响。
方法:
直接从数据集中移除检测到的异常值。
b. 替换异常值
适用场景:
异常值的数量较多,删除可能会导致数据量不足。
异常值并非完全无效,而是可以用其他合理的值替代。
方法:
用中位数(median)、均值(mean)或插值方法(就说明是删除之后再使用插值)替换异常值。
4 数据转换与特征工程:
进行归一化、无量纲化数据转换操作,并进行特征选择和特征提取。
如果要采取评价需要先对数据正向化,(其他问题不需要这一步)
4.1 数据正向化
- 极大型指标:不需要进行转换
- 极小型指标:数据越小越好
,或者为
- 中间型指标:取某一特定值最好,
公式为:
%%
X=[1,2,3,4,5,6,7,8,9,10,11,12,13,14];%数据
best_value=7;
M=max(X-best_value);
x=1-abs(X-best_value)./M;%得到转换之后的数据
- 区间型指标:数据在某一个区间中最好
公式为:其中最好的区间为 [a,b]
X=[32,33,34,35,36,37,38,39,40];%数据
data=X;
n=length(data);
a=36; b=37;
M=max(a-min(data),max(data)-b);
x=zeros(1,n);
for i=1:n
if data(i)<a
x(i)=1-(a-data(i))/M;
elseif data(i)<=b
x(i)=1;
else
x(i)=1-(data(i)-b)/M;%转换后的数
end
end
4.2 无量纲化:
4.2.1 Z标准化
Z标准化也叫标准差标准化,经过处理的数据符合标准正态分布,均值为0,标准差为1,也就是最为常用的标准化方法,公式为:
X=randn(100,100); %导入数据
data=X;
s=std(data);
m=mean(data);
x=(data-m)./s;%标准化矩阵
4.2.2 0-1标准化
0-1标准化也叫离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间
公式为:
X=randn(1,100); %导入数据
data=X;
Min=min(data);
Max=max(data);
x=(X-Min)./(Max-Min);
5.参考资料
[1].卓金武,王鸿钧.MATLAB数学建模方法与实践[M].第3版.北京:北京航空航天大学出版社,2018.
[2].参考清风老师数学建模教程 https://b23.tv/av20238704/p1
这个其实就是相当于一个清风老师数学建模课程的笔记,