数据建模及MATLAB实现(一)
随着信息技术的发展和成熟,各行业积累的数据越来越多,因此需要通过数据建模的方法,从看似杂乱的海量数据中找到有用的信息。
云模型
云模型由我国李德毅院士首创,属于不确定性人工智能范畴,主要用于定性和定量之间的相互转换。
云模型的基本单元被称为“云”或者“云滴”。“云”是指其在论域上的一个分布,可以用联合概率的形式(x,μ)(x,\mu)(x,μ)类比。
云模型通过三个数据来表示其特征:
- 期望:云滴在论域空间分布的期望,用Ex表示。
- 熵:不确定性程度,由离群程度和模糊程度共同决定,用En表示。
- 超熵:度量熵的不确定性,即熵的熵,用He表示
云有两种发生器:正向云发生器和逆向云发生器,
分别生成足够的云滴和计算云滴的云数字特征(Ex,En,HeEx,En,HeEx,En,He)。
正向云发生器的触发机制:
- 生成以EnEnEn为期望,以He2He^2He2为方差的正态随机数En′En^{'}En′。
- 生成以ExExEx为期望,以En′2En^{'2}En′2为方差的正态随机数xxx。
- 计算隶属度也就是确定度μ=exp(−(x−Ex)22En′2)\mu=exp(-\frac{(x-Ex)^2}{2En^{'2}})μ=exp(−2En′2(x−Ex)2),则(x,μ)(x,\mu)(x,μ)便是相对于论域UUU的一个云滴。
逆向云发生器的触发机制:
- 计算样本均值X‾\overline{X}X和方差S2S^{2}S2。
- Ex=X‾Ex=\overline{X}Ex=X
- En=π2×1nΣ∣x−Ex∣En=\sqrt{\frac{\pi}{2}} \times \frac{1}{n}\Sigma |x-Ex|En=2π×n1Σ∣x−Ex∣
- He=S2−En2He=\sqrt{S^2-En^2}He=S2−En2
云模型的MATLAB程序设计
云模型生成程序 cloud_model.m 如下
function [x,y,Ex,En,He]=cloud_model(y,n)
Ex=mean(y);
En=mean(abs(y-Ex))*sqrt(pi/2);
He=sqrt(var(y)-En^2);%var()返回方差值
for q = 1:n
Enn=randn(1)*He+En;%生成方差为He^2,期望为En的正态随机数
x(q)=randn(1)*Enn+Ex;
y(q)=exp(-(x(q)-Ex)^2/(2*Enn^2));
end
云模型图像显示程序 DrawCloud.m 如下
function DrawCloud(Y,n)
[x,y,Ex,En,He] = cloud_model(Y,n);
plot(x,y,'r.');
xlabel('X/单位');
ylabel('Y/单位');
disp(['Ex = ',num2str(Ex)]);
disp(['En = ',num2str(En)]);
disp(['He = ',num2str(He)]);
在评价时通过云模型的数字特征(Ex,En,HeEx,En,HeEx,En,He)来比较判断
Logistic回归
在回归分析中,因变量yyy存在两种情况,当yyy是一个定量的变量时,这时就用regress函数进行回归分析;而当yyy是一个定性的变量时,就需要使用LogisticLogisticLogistic回归。
LogisticLogisticLogistic回归主要用于研究现象发生的概率PPP,比如股票的涨跌,公司成功或者失败的概率,以及概率与哪些因素相关。
LogisticLogisticLogistic回归的一般形式为:
P(Y=1∣x1,x2,⋅⋅⋅,xk)=exp(β0+β1x1+⋅⋅⋅+βkxk)1+exp(β0+β1x1+⋅⋅⋅+βkxk)P(Y=1|x_1,x_2,···,x_k)=\frac{exp(\beta_0+\beta_1x_1+···+\beta_kx_k)}{1+exp(\beta_0+\beta_1x_1+···+\beta_kx_k)}P(Y=1∣x1,x2,⋅⋅⋅,xk)=1+exp(β0+β1x1+⋅⋅⋅+βkxk)exp(β0+β1x1+⋅⋅⋅+βkxk)
其中,β0,β1,⋅⋅⋅,βk\beta_0,\beta_1,···,\beta_kβ0,β1,⋅⋅⋅,βk为类似多元线性回归模型中的回归系数。对该式进行对数变换,可得:
lnP1−P=β0+β1x1+⋅⋅⋅+βkxkln\frac{P}{1-P}=\beta_0+\beta_1x_1+···+\beta_kx_kln1−PP=β0+β1x1+⋅⋅⋅+βkxk
就可以将LogisticLogisticLogistic回归问题转换为线性回归问题。
但在实际问题中,存在P的取值仅有0和1两个值,而导致了取对数后无意义的情况。因此定义一个单调连续的概率函数π\piπ,使得
π=P(Y=1∣x1,x2,⋅⋅⋅,xk)\pi=P(Y=1|x_1,x_2,···,x_k)π=P(Y=1∣x1,x2,⋅⋅⋅,xk)
将π\piπ代入,此时的式子虽然形式相同,但π\piπ是连续函数,只要对原始数据进行合理映射,就可以用线性回归方法得到回归系数。
Logistic回归MATLAB程序设计
function [b,val]=Logistic(X,Y,XE)
n=size(Y,1);
Y1=zeros(sizeof(Y,1),1);
%% 将P映射为pi
for i=1:n
if Y(i)==0
Y1(i,1)=0.25;
else
Y1(i,1)=0.75;
end
end
%% 多元线性回归
X1=ones(size(X,1),1);
X0=[X1,X];
Y0=log(Y1./(1-Y1));
b = regress(Y0,X0);
%% 模型验证
%带回原来的表达式进行计算