Matlab多变量间相关性分析和选取相关性强的变量
Matlab多变量间相关性分析和选取相关性强的变量方法属于“属性约减”范畴。即进行各变量间的相关性分析,选取相关性强的变量。可以使用皮尔逊Pearson相关性系数r进行衡量,如果其绝对值越接近1,则变量X,Y的相关性越强。对相关性系数进行排序,保留相关性强的变量,剔除相关性差的变量。
操作方法
- 01
首先,将样本数据表格读入到MATLAB中矩阵中保存,便于后续处理,注意表格样本数据的第一列建议放因变量。接着为自变量。 读取表格MATLAB程序如下: ys_data=xlsread('样本数据.xlsx'); 读入的样本数据可以在工作区查看,如下图所示。
- 02
然后计算读入的样本数据表格矩阵的大小。 计算表格矩阵大小(维数即n行×p列)的程序如下: [n,p]=size(ys_data); % n行,p列 计算结果如下图所示。
- 03
接下来将因变量赋值给Y,逐个将自变量赋值给X,将相关性系数数组的第一行添加变量所在列位置标记1:p。逐个计算自变量与因变量间的Pearson相关性,保存至xs数组第二行。 具体用MATLAB编写的程序如下: for i=2:p Y=ys_data(:,1); % 将因变量赋值给Y X=ys_data(:,i); % 逐个将自变量赋值给X xs(1,i-1)=i; % 将相关性系数数组的第一行添加变量所在列位置标记1:p xs(2,i-1)=corr(X,Y,'type','Pearson'); %逐个计算自变量与因变量间的Pearson相关性,保存至xs数组第二行 end 计算结果如下图所示。
- 04
再将变量间相关性系数按大到小降序排列,存储在n_xs矩阵中。是后续重要变量挑选的依据。 程序如下: [n_xs,id]=sort(xs(2,:),'descend'); 运算结果如下图所示。
- 05
然后将相关性系数降序排列的id存储于nid_xs中,即保存变量所在位置随着相关性系数降序排列保存。 程序如下: nid_xs=xs(1,id); 运算结果如下图所示。
- 06
接下来保存相关性系数位于前10的变量,并和因变量组成新的样本数据表。 程序如下: for i=1:10 xyb(:,i+1)=ys_data(:,nid_xs(i)); end xyb(:,1)=Y; 运算结果如下图所示。
- 07
然后将新样本数据(共11个变量,第一列为因变量,接下来10个变量为与因变量相关性最强的10个自变量)xyb写到新样本数据表格。 程序如下: xlswrite('新样本数据.xlsx',xyb); 运算结果如下图所示。 这样Matlab多变量间相关性分析和选取相关性强的变量程序就编写完成了。
- 08
下面是完整程序及截图: ys_data=xlsread('原始数据.xlsx'); %读入原始数据,第一列放因变量 [n,p]=size(ys_data); % n行,p列 for i=2:p Y=ys_data(:,1); % 将因变量赋值给Y X=ys_data(:,i); % 逐个将自变量赋值给X xs(1,i-1)=i; % 将相关性系数数组的第一行添加变量所在列位置标记1:p xs(2,i-1)=corr(X,Y,'type','Pearson'); %逐个计算自变量与因变量间的Pearson相关性,保存至xs数组第二行 end [n_xs,id]=sort(xs(2,:),'descend'); %将变量间相关性系数按大到小降序排列,存储在n_xs矩阵中 nid_xs=xs(1,id); %将相关性系数降序排列的id存储于nid_xs中,即保存变量所在位置随着相关性系数降序排列保存。 for i=1:10 xyb(:,i+1)=ys_data(:,nid_xs(i)); %保存相关性系数位于前10的变量,并和因变量组成新的样本数据表 end xyb(:,1)=Y; xlswrite('新样本数据.xlsx',xyb); %将新样本数据(共11个变量,第一列为因变量,接下来10个变量为与因变量相关性最强的10个自变量)xyb写到新样本数据表格。