MATLAB实例:求相关系数、绘制热图并找到强相关对
用MATLAB编程,求给定数据不同维度之间的相关系数,并绘制热图,保存图片,找到强相关的维度对。
1. demo.m
clear
clc
etea=0.8; %阈值
% 加载数据
data_load=dlmread("E:scanplotwine.data");
data=data_load(:,2:14);
[N, D]=size(data);
% 求维度之间的相关系数
rho = corr(data, "type","pearson");
% 绘制热图
string_name={"Alcohol","Malic acid","Ash","Alcalinity of ash","Magnesium","Total phenols","Flavanoids","Nonflavanoid phenols","Proanthocyanins","Color intensity","Hue","Diluted wines","Proline"};
xvalues = string_name;
yvalues = string_name;
h = heatmap(xvalues,yvalues,rho, "FontSize",10, "FontName","Times New Roman");
h.Title = "Correlation Coefficient";
colormap(jet)
saveas(gcf,sprintf("wine相关系数热图.jpg"),"bmp"); %保存图片
% 绝对值
rho=abs(rho);
rho_1=rho.*tril(ones(D,D),-1); %下三角
[row, col]=find(rho_1>etea); %找>etea的两个维度
[Num, ~]=size(row);
% A:存放相关系数>etea的两个维度及相关系数值
A=zeros(Num, 3);
for i=1:Num
A(i,:)=[row(i), col(i), rho_1(row(i), col(i))];
fprintf("强线性相关的两个维度是: 第%d个维度: %s与第%d个维度: %s, 两者的相关系数为:%f
", row(i), string_name{row(i)}, col(i), string_name{col(i)}, rho_1(row(i), col(i)));
end
2. 结果
>> demo
强线性相关的两个维度是: 第7个维度: Flavanoids与第6个维度: Total phenols, 两者的相关系数为:0.864564