数学建模数据预处理

目录

1.初步数据检查:

2.缺失值填充:

3异常值检验与处理:

 3.1  3σ准则

3.2  MAD(Median Absolute Deviation,中位数绝对偏差)

3.3  四分位距(Interquartile Range, IQR)

3.4异常值处理

a. 删除异常值

b. 替换异常值

4 数据转换与特征工程:

4.1  数据正向化

4.2  无量纲化:

4.2.1  Z标准化

4.2.2  0-1标准化

5.参考资料


这个笔记主要是针对一次练习题写的,还是比较简陋的,以后再补充。

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]。

超出这个范围的点即被标记为异常值。

适用范围:

适用于大部分分布类型的数据。

适用于小到中等规模的数据集。

优缺点:

优点:对非正态分布数据有效,不受极端值影响。

缺点:对数据量较大或维度较高的数据集计算量较大。

这里可以直接用一个箱线图去分析,以下是箱线图的说明:


  1. 分布特征

    • 中位数位置:中位数的位置表示数据的中心趋势。如果中位数在箱体中间,数据大致对称;如果中位数靠近箱体一端,数据偏斜。
    • 箱体宽度:箱体的宽度(IQR)表示数据的离散程度。宽箱体表示数据分散,窄箱体表示数据集中。
  2. 数据对称性和偏斜性

    • 对称性:如果箱体两端的胡须长度相等或相近,数据大致对称。
    • 偏斜性:如果一端的胡须明显长于另一端,数据呈偏斜分布。长上胡须表示正偏(右偏),长下胡须表示负偏(左偏)。
  3. 异常值

    • 异常值显示为箱线图之外的独立点,表示可能的极端值或数据异常。需要进一步检查这些点,以确定它们是否是数据录入错误、噪声或有意义的异常。

X=randn(1,1000);%导入数据
data=X;
% 绘制箱线图
figure;
boxplot(data);
title('箱线图');

3.4异常值处理

这里介绍两种常用的方法

a. 删除异常值

适用场景:

异常值是由于数据录入错误、传感器故障等外部原因造成的。

异常值数量较少,不会对整体数据产生显著影响。

方法:

直接从数据集中移除检测到的异常值。

b. 替换异常值

适用场景:

异常值的数量较多,删除可能会导致数据量不足。

异常值并非完全无效,而是可以用其他合理的值替代。

方法:

中位数(median)、均值(mean)或插值方法(就说明是删除之后再使用插值)替换异常值。

数据转换与特征工程:

进行归一化、无量纲化数据转换操作,并进行特征选择和特征提取。

如果要采取评价需要先对数据正向化,(其他问题不需要这一步)

4.1  数据正向化

  • 极大型指标:不需要进行转换
  • 极小型指标:数据越小越好
    $ M=\max \left( x_i \right) ,\tilde{x}_i=M-x_i $,或者为$ \tilde{x}_i=\frac{1}{x_i} $
  • 中间型指标:取某一特定值最好,

公式为:M=\max \left\{ |x_i-x_{best}| \right\} ,\ \tilde{x}_i=1-\frac{|x_i-x_{best}|}{M}

%%
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]

M=\max \left\{ a-\min \left\{ x_i \right\} ,\max \left\{ x_i \right\} -b \right\} ,\,\,\tilde{x}_i=\left\{ \begin{array}{l} 1-\frac{a-x}{M},x<a\\ 1\ \ \ \ \ \ \ \ \ \ ,a\le x\le b\\ 1-\frac{x-b}{M},x>b\\ \end{array} \right.

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

这个其实就是相当于一个清风老师数学建模课程的笔记,

  • 30
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值