数学建模笔记(三):数据预处理


前言

数据预处理主要有四个任务:数据清洗、数据集成、数据变换及数据规约。本文主要介绍常用的数据清洗与数据变换,其中数据清洗包括异常值与缺失值的处理;数据变换指将一种格式的数据转换为另一格式的数据。


一、数据清洗

当我们得到一组数据时,这组数据可能会存在一些缺失值和异常值(噪声数据)。此时我们进行数据清洗,主要包括两个部分:缺失值处理与异常值处理。

1.1 缺失值处理

缺失值的处理方法主要有三种:删除记录、数据插补和不处理。

  • 删除记录,顾名思义,指当该组数据某一个案的数据缺省时,删除这组个案的数据,这种方法的优点是处理方便,但在数据较少时要慎重使用。\

  • 数据插补,使用不同的插补方法将缺省的数据补齐。主要插补方法有:均值/中位数/众数插补;使用固定值插补;最近邻插补;回归方法插补;插值法插补。
    最近邻插补:即在记录中找到与缺失样本最接近的样本的该属性插补,可以通过计算对象间的欧式距离衡量。
    回归方法插补:根据已有数据和与其有关的其他变量的数据建立拟合模型来预测缺失值。
    插值法:常用的插值方法有很多,这里可以阅读我的另一篇文章数学建模学习笔记(一):插值法

  • 不处理,有时我们可以将所有缺省数据的样本划分为另一组,进行特殊处理。

1.2 异常值处理

异常值的处理方法较为简单,主要方法有:删除记录、视为缺失值、平均值修正和不处理。由于处理异常值的方法简单,在此不作解释。
发现异常值是处理异常值的难点,发现异常值主要有两个方法:3 σ \sigma σ原则和画箱型图,可以查阅相关文章。

二、数据变换

在处理数据时我们会遇到各种类型的指标,大体上可分为三种类型:效益型指标、成本型指标及区间型指标。效益型指标即该指标越大越优,成本型指标即该指标越小越优,而区间型指标则是在某个区间内为最优。为了方便处理,我们通常要将数据指标统一转换为效益型指标。

2.1 线性变换

设原始的指标矩阵为 A = ( a i j ) m × n A=(a_{ij})_{m \times n} A=(aij)m×n, m m m为样本数量, n n n为指标数,变换后的指标矩阵记为 B = ( b i j ) m × n B=(b_{ij})_{m\times n} B=(bij)m×n i = 1 , … , m , j = 1 , … , n i=1,…,m,j=1,…,n i=1,m,j=1,,n。设 a j m a x a_j^{max} ajmax是指标矩阵第 j j j列中的最大值, a j m i n a_j^{min} ajmin是指标矩阵第 j j j列中的最小值。
x j x_j xj为效益型指标,则
b i j = a i j / a j m a x b_{ij}=a_{ij}/a_j^{max} bij=aij/ajmax
x j x_j xj为成本型指标,则
b i j = 1 − a i j / a j m a x b_{ij}=1-a_{ij}/a_j^{max} bij=1aij/ajmax
经过变换可以将数据全都转换为效益型指标,输出范围为0——1之间。需要注意的是,这种方法不适用于 x j x_j xj<0的情况。

2.2 向量规范化

无论 x j x_j xj为效益型指标或成本型指标,均进行如下变换
b i j = a i j / ∑ i = 1 m a i j 2 , i = 1 , … , m , j = 1 , … , n b_{ij}=a_{ij}/\sqrt{\sum_{i=1}^ma_{ij}^2},i=1,\ldots,m,j=1,\ldots,n bij=aij/i=1maij2 ,i=1,,m,j=1,,n
这种变换也是线性的,但它无法分辨属性值的优劣。它的最大特点是,规范化后各方案的同一指标的平方和为1,因此常用于计算各方案与某种虚拟方案(如理想点或负理想点)的欧氏距离的场合。经过向量规范化处理后的数据在[-1,1]区间内。

2.3 min-max归一化

在实际问题中,不同变量的测量单位往往是不一样的。为了消除变量的量纲效应,使每个变量都具有同等的表现力,通常可以通过这种方式对数据去量纲化。
x j x_j xj为效益型指标,令
b i j = a i j − a j m i n a j m a x − a j m i n b_{ij}=\frac{a_{ij}-a_j^{min}}{a_j^{max}-a_j^{min}} bij=ajmaxajminaijajmin
x j x_j xj为成本型指标,令
b i j = a j m a x − a i j a j m a x − a j m i n b_{ij}=\frac{a_j^{max}-a_{ij}}{a_j^{max}-a_j^{min}} bij=ajmaxajminajmaxaij
x j x_j xj为区间型指标(即在某个区间内最优),设给定的最优区间 [ a j 0 , a j ∗ ] [a_j^0,a_j^*] [aj0,aj], a j ’ a_j^’ aj为无法容忍下限, a j ’ ’ a_j^{’’} aj为无法容忍上限,则
b i j = { 1 − ( a j 0 − a i j ) / ( a j 0 − a j ’ ) , a j ’ ≤ a i j < a j 0 1 , a j 0 ≤ a i j ≤ a j ∗ 1 − ( a i j − a j ∗ ) / ( a j ’ ’ − a j ∗ ) , a j ∗ < a i j ≤ a j ’ ’ 0 , 其 他 . b_{ij}= \begin{cases} \begin{aligned} &1-(a_j^0-a_{ij})/(a_j^0-a_j^’),&a_j^’\le a_{ij}<a_j^0 \\ &1, &a_j^0\le a_{ij}\le a_j^*\\ &1-(a_{ij}-a_j^*)/(a_j^{’’}-a_j^*),&a_j^*<a_{ij}\le a_j^{’’}\\ &0,&其他. \end{aligned} \end{cases} bij=1(aj0aij)/(aj0aj),1,1(aijaj)/(ajaj),0,ajaij<aj0aj0aijajaj<aijaj.
经过如上转换可将所有指标转换为效益型指标,输出范围在0——1之间。该方法适用于 a j m i n , a j m a x a_j^{min},a_j^{max} ajmin,ajmax已知的情况,但如果有新数据加入,就可能会导致最小值( a j m i n a_j^{min} ajmin)和最大值( a j m a x a_j^{max} ajmax)发生变化,就需要进行重新定义。

2.4 z-score标准化

这也是另一种较为常用的数据去量纲化的处理方式,将原始数据作如下变换
b i j = a i j − a j ‾ s j , i = 1 , 2 , … , m , j = 1 , 2 , … , n b_{ij}=\frac{a_{ij}-\overline{a_j}}{s_j},i=1,2,…,m,j=1,2,…,n bij=sjaijaj,i=1,2,,m,j=1,2,,n
其中 a j ‾ = 1 m ∑ i = 1 m a i j \overline{a_j}=\frac{1}{m}\sum_{i=1}^ma_{ij} aj=m1i=1maij, s j = 1 m − 1 ∑ i = 1 m ( a i j − x j ‾ ) 2 s_j=\sqrt{\frac{1}{m-1}\sum_{i=1}^m(a_{ij}-\overline{x_j})^2} sj=m11i=1m(aijxj)2 ,
z-score标准化方法适用于属性集的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
需要注意的是,若原数据是正态分布,则经过z-score标准化输出的数据仍符合正态分布;原来不是正态分布的,经过z-score变换之后并不会转换为正态分布。

三、数据预处理案例及代码实现

如下表所示,该组数据为研究生院试评估的部分数据。
在这里插入图片描述
我们知道, x 1 , x 3 x_1,x_3 x1,x3为效益型指标, x 4 x_4 x4为成本型指标,而 x 2 x_2 x2为区间型指标。
下面我们使用Matlab分别用四种变换对数据进行预处理:

3.1 线性变换-代码实现

我们可以对指标 x 1 , x 3 , x 4 x_1,x_3,x_4 x1,x3,x4进行线性变换,结果如下:
在这里插入图片描述
附Matlab代码:

a = [0.1 5000 4.7;0.2 6000 5.6;0.4 7000 6.7;0.9 10000 2.3;1.2 400 1.8];
[m,n]=size(a)
for j=1:n
    b(:,j)=a(:,j)/sum(a(:,j));
end
b(:,3)=1-b(:,3);%成本型指标正向化

3.2 向量规范化-代码实现

我们对指标 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1x2,x3,x4进行向量规范化处理,结果如下:
在这里插入图片描述
附Matlab代码:

a = [0.1 5 5000 4.7;0.2 6 6000 5.6;0.4 7 7000 6.7;0.9 10 10000 2.3;1.2 2 400 1.8];
[m,n]=size(a)
for j=1:n
    b(:,j)=a(:,j)/norm(a(:,j));
end

3.3 min-max归一化-代码实现

这里我们假设生师比 x 2 x_2 x2为区间型指标,最佳区间为[5,6],无法容忍下限 a 2 ’ = 2 a_2^’=2 a2=2,无法容忍上限 a 2 ’ ’ = 12 a_2^{’’}=12 a2=12。归一化处理后结果如下:
在这里插入图片描述
附Matlab代码:

a = [0.1 5 5000 4.7;0.2 6 6000 5.6;0.4 7 7000 6.7;0.9 10 10000 2.3;1.2 2 400 1.8];
[m,n]=size(a)
x2=@(qujian,lb,ub,x)(1-(qujian(1)-x)./(qujian(1)-lb)).*(x>=lb&x<qujian(1))+...
    (x>=qujian(1)&x<=qujian(2))+(1-(x-qujian(2))./(ub-qujian(2))).*...
    (x>qujian(2)&x<=ub);%利用函数句柄转换区间型变量
qujian=[5,6];lb=2;ub=12;
a(:,2)=x2(qujian,lb,ub,a(:,2));
A=[a(:,1) a(:,3) a(:,4)];
A=maxmin(A);%maxmin为自定义的归一化函数
b=[A(:,1) a(:,2) A(:,2) A(:,3)];
%{
%对数据进行归一化函数
function new=maxmin(old)
%找出每列的最大最小值
maxold=max(old);
minold=min(old);
%张成与old一样大小,主要对行进行复制,列不用变
m=size(old,1);
maxnew=repmat(maxold,m,1);
minnew=repmat(minold,m,1);
new=(old-minnew)./(maxnew-minnew);
end
%}

3.4 z-score标准化-代码实现

我们使用Matlab自带的zscore函数对数据进行标准化处理,结果如下:
在这里插入图片描述
附Matlab代码:

a = [0.1 5 5000 4.7;0.2 6 6000 5.6;0.4 7 7000 6.7;0.9 10 10000 2.3;1.2 2 400 1.8];
b=zscore(a)%将每组数据按列标准化

总结

以上就是在数学建模及Matlab应用中数据预处理的一些步骤与方法,由于博主水平有限,编写过程中尽管搜集了参考资料,但可能仍存在错误,敬请大家指正。

参考资料

[1] 【【零基础教程】老哥:数学建模算法、编程、写作和获奖指南全流程培训!-哔哩哔哩】 https://b23.tv/5W2Q9Oh
[2] zscore函数的数据标准化处理及MATLAB实现
[3] 数据标准化(一) - Z-Score标准化 - 超人老爹的文章 - 知乎
[4]Z-Score - Adamas的文章 - 知乎

  • 15
    点赞
  • 211
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Matlab中进行数学建模数据预处理可以采取多种方法。一种常用的方法是对数据进行标准化处理,可以使用Matlab自带的zscore函数来实现。标准化可以使得数据的均值为0,方差为1,从而消除了不同特征值之间的量纲差异。 另外一种方法是进行线性变换,可以根据需要对数据进行线性变换,例如缩放或平移数据。这可以通过使用Matlab中的线性变换函数来实现。线性变换可以根据具体情况来调整数据的分布和取值范围。 除了标准化和线性变换,还可以使用其他方法对数据进行预处理,例如归一化、正则化、离散化等。这些方法可以根据具体问题的需求来选择和应用。在实践中,根据数据的特点和分析目标选择合适的预处理方法非常重要。 综上所述,在Matlab中进行数学建模数据预处理可以采取多种方法,包括标准化、线性变换以及其他方法。具体选择哪种方法应根据具体问题需求来确定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [数学建模笔记):数据预处理](https://blog.csdn.net/Yangtze20/article/details/126591712)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yangtze20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值