该方法是对原始数据进行线性变换,将其映射到[0,1]之间,该方法也被称为离差标准化(但是请注意,网上更多人喜欢把z-score称为标准化方法,把min-max称为归一化方法,然后在此基础上,强行给标准化(z-score)与归一化(min-max)划条界线,以显示二者之间的相异性。对!二者之间确实有很大的不同,这个我们后面会有介绍,但是这两个方法说到底还都是用来去除量纲的,都是无量纲化技术中的一员而已,所以,请不要纠结标准化与归一化这两个概念了)。
上式中,min是样本的最小值,max是样本的最大值。由于最大值与最小值敬轮含可能是动态变化的,同时也非常容易受噪声(异常点亮笑、离群点)影响,因此一般适合小数据的场景。此外,该方法还有两点好处:
1) 如果某属性/特征的方差很小,如身高:np.array([[1.70],[1.71],[1.72],[1.70],[1.73]]),实际5条数据在身高这个特征上是有差异的,但是却很微弱,这样不利于模型的学习,进行min-max归一化后为:array([[ 0. ], [ 0.33333333], [ 0.66666667], [ 0. ], [ 1. ]]),相当于放大了差异;
2) 维持稀疏矩阵中为0的条目。
使用桐毁方法如下:
from sklearn.preprocessing import MinMaxScaler
x = np.array([[1,-1,2],[2,0,0],[0,1,-1]])
x1 = MinMaxScaler().fit_transform(x)
在对实际问题建模过程中,特别是在建立指标评价体系时,常常会面临不同类型的数据处理及融合。而各个指标之悄数间由于计量单位和数量级的不尽相同,从而使得各指标间不具有可比性。在数据分析之前,通常需要先将数据标准化,利用标准化后的数据进行分析。数据标准化处理主要包括同趋化处理和无量纲化处理两个方面。数据的同趋化启猜首处理主要解决不同性质的数据问题,对不同性质指标直接累加不能正确反应不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对评价体系的作用力同趋化。数据无量纲化主要解决数据的不可比性,在此处主要介绍几种数据的无量纲化的处理方式。
可以选择如下的三种方式:
即每一个变量除以该变量取值的全距,标准化后的每个变量的取值范围限于[-1,1]。
即每一个变量与变量最小值之差除以该变量取值的全距,标准化后各变量的取值范围限于[0,1]。
,即每一个变量值除以该变量取值的最大值,标准化后使变量的最大取值为1。
采用极值化方法对变量数据无量纲化是通过变量取值的最大值和最小值将原始数据转换为界于某一特定范围的数据,从而消除量纲和数量级的影响。由于极值化方法对变量无量纲化过程中仅仅对该变量的最大值和最小值这两个极端值有关,而与其他取值无关,这使得该方法在改变兆判各变量权重时过分依赖两个极端取值。
来计算,即每一个变量值与其平均值之差除以该变量的标准差,无量纲化后各变量的平均值为0,标准差为1,从而消除量纲和数量级的影响。虽然该方法在无量纲化过程中利用了所有的数据信息,但是该方法在无量纲化后不仅使得转换后的各变量均值相同,且标准差也相同,即无量纲化的同时还消除了各变量在变异程度上的差异。
,该方法在消除量纲和数量级影响的同时,保留了各变量取值差异程度上的信息。
(4)标准差化方法
。该方法是标准化方法的基础上的一种变形,两者的差别仅在无量纲化后各变量的均值上,标准化方法处理后各变量的均值为0,而标准差化方法处理后各变量均值为原始变量均值与标准差的比值。
综上所述,针对不同类型的数据,可以选择相应的无量纲化方法。如下的示例就是一个典型的评价体系中无量纲化的范例。
近年来我国淡水湖水质富营养化的污染日益严重,如何对湖泊水质的富营养化进行综合评价与治理是摆在我们面前的任务,下面两个表格分别为我国5个湖泊的实测数据和湖泊水质评价标准。
表1 全国五个主要湖泊评价参数的实测数据
表2 湖泊水质评价标准
(1)试用以上数据,分析总磷,耗氧量,透明度,总氨这4个指标对湖泊水质评价富营养化的作用。
(2)对这5个湖泊的水质综合评价,确定水质等级。
在进行综合评价之前,首先要对评价的指标进行分析。通常评价指标分成效益型,成本型和固定型指标。效益型指标是指那些数值越大影响力越大的统计指标(也称正向型指标);成本型指标是指数值越小越好的指标(也称逆向型指标);而固定型指标是指数值越接近于某个常数越好的指标(也称适度型指标)。如果每个评价指标的属性不一样,则在综合评价时就容易发生偏差,必须先对各评价指标统一属性。
(ⅰ)建立无量纲化实测数据矩阵和评价标准矩阵,其中实测数据矩阵和等级标准矩阵如下,
然后建立无量纲化实测数据矩阵和无量纲化等级标准矩阵,其中
得到
(ⅱ)计算各评价指标的权重
计算矩阵B的各行向量的均值和标准差,
最后对变异系数归一化得到各指标的权重为
(ⅲ)建立各湖泊水质的综合评价模型
通常可以利用向量之间的距离来衡量两个向量之间的接近程度,在Matlab中,有以下的函数命令来计算向量之间的距离;
dist(w,p): 计算中的每个行向量和中每个列向量之间的欧式距离;
mandist(w,p): 绝对值距离。
计算中各行向量到中各列向量之间的欧氏距离,
,则第个湖泊属于第级。
这说明杭州西湖,武汉东湖都属于极富营养水质,青海湖属于中营养水质,而巢湖和滇池属于富营养水质。
,则第个湖泊属于第级。
其评价结果与利用欧氏距离得到的评价结果完全一样。
所以,从上面的计算可以看出,尽管欧氏距离和绝对值距离的意义完全不一样,但对湖泊水质的评价等级是一样的,这表明了方法的稳定性。
各位老铁养成习惯,看完点个赞呗,随便也来个关注!!!
各位老铁养成习惯,看完点个赞呗,随便也来个关注!!!
各位老铁养成习惯,看完点个赞呗,随便也来个关注!!!
这是我曾经写过的一个灰色预测的程序:第一个文件为函数,需要在调用时输入原始数据x0和预测周期T, 第二个文件用于计算灰色关联度,使用时直接修改相关参数和原始数据。
--------------------------------------------------------------------------
第一个文件(用于灰色建模):grymdl.m
--------------------------------------------------------------------------
function GM=grymdl(x0,T)% 输入原始数据x0
% T为从最后一个历史数据算起的第T时点
x1=zeros(1,length(x0))B=zeros(length(x0)-1,2)
yn=zeros(length(x0)-1,1)Hatx0=zeros(1,length(x0)+T)
Hatx00=zeros(1,length(x0))Hatx1=zeros(1,length(x0)+T)
epsilon=zeros(length(x0),1)omega=zeros(length(x0),1)
for i=1:length(x0)
for j=1:i
激好搭 x1(i)=x1(i)+x0(j)
end
end
for i=1:length(x0)-1
B(i,1)=(-1/2)*(x1(i)+x1(i+1))
B(i,2)=1
yn(i)=x0(i+1)
end
HatA=(inv(B'*B))*B'*yn %GM(1,1)模型参数估计
for k=1:length(x0)+T
Hatx1(k)=(x0(1)-HatA(2)/HatA(1))*exp(-HatA(1)*(k-1))+HatA(2)/HatA(1)
end
Hatx0(1)=Hatx1(1)
for k=2:length(x0)+T
Hatx0(k)=Hatx1(k)-Hatx1(k-1)%累计还原得到历史数据的模拟值
end
for i=1:length(x0) %开始模型检验
epsilon(i)=x0(i)-Hatx0(i)
omega(i)=(epsilon(i)/x0(i))*100
end
x0
HatA
Hatx0
epsilon
omega
c=std(epsilon)/std(x0)
p=0
for i=1:length(x0)
if abs(epsilon(i)-mean(epsilon))<0.6745*std(x0)
p=p+1
明拿 end
end
p=p/length(x0)
if p>=0.95
M1=1
elseif p>=0.8
M1=2
elseif p>=0.7
M1=3
else
M1=4
end
if c<=0.35
M2=1
elseif c<=0.5
M2=2
elseif c<=0.65
M2=3
else
M2=4
end
M=max(M1,M2)
if M==1
disp('The model is good,and the forecast is:'),
disp(Hatx0(length(x0)+T))
elseif M==2
disp('The model is eligibility,and the forecast is:'),
disp(Hatx0(length(x0)+T))
elseif M==3
disp('The model is not good,and the forecast is:'),
disp(Hatx0(length(x0)+T))
else
disp('The model is bad and try again')
disp(Hatx0(length(x0)+T))
end
for i=1:length(x0)
袜凯 Hatx00(i)=Hatx0(i)
end
z=1:length(x0)
plot(z,x0,'-',z,Hatx00,'*:') %将原始数据和模拟值画在一个图上帮助观察
text(2,x0(2),'History data: real line')
text(length(x0)/2,Hatx00(length(x0))/2,'Simulation data:broken line')
GM=Hatx0(length(x0)+T)
--------------------------------------------------------------------------------
第二个文件(用于计算灰色关联度):grydgr.m
--------------------------------------------------------------------------------
x=[26.4,40.83,5,18.5,27,4.932.56,50.36,6.5,23.8,34.9,5.97
41.16,63.66,7.9,30.6,45,6.83
51.82,80.15,9.6,39.43,60.76,8.21
70.58,109.16,11.3,52.1,81.8,9.78
111.47,136.12,15,73.92,118.12,12.3
127.16,166.7,18,118.17,184.51,16.75
165.99,196.91,20.66,156.65,240.83,21.49
246.76,257.56,24.15,218.3,333.4,27.1] %原始数据
delta=zeros(size(x,1),size(x,2)-1) %初始化绝对差
yita=zeros(size(delta,1),size(delta,2)) %初始化关联系数
for i=1:size(x,2)
x(:,i)=x(:,i)./x(1,i) %无量纲化处理
end
for i=1:(size(x,2)-1)
delta(:,i)=abs(x(:,1)-x(:,i+1)) %求解delta
end
delta_min=min(min(delta,[],1)) %求解最小二级差
delta_max=max(max(delta,[],1)) %求解最大二级差
rou=0.5 %设定分辨系数为0.5
for i=1:size(delta,1)
for j=1:size(delta,2)
yita(i,j)=(delta_min+rou*delta_max)/(delta(i,j)+rou*delta_max) %计算关联系数
end
end
r=sum(yita)./size(yita,1) %计算灰色关联
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)