MATLAB实例:求相关系数、绘制热图并找到强相关对
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
用MATLAB编程,求给定数据不同维度之间的相关系数,并绘制热图,保存图片,找到强相关的维度对。
数据集来自UCI中的wine:https://archive.ics.uci.edu/ml/datasets/Wine
1. demo.m
1clear 2clc 3etea=0.8; %阈值 4% 加载数据 5data_load=dlmread('E:\scanplot\wine.data'); 6data=data_load(:,2:14); 7[N, D]=size(data); 8% 求维度之间的相关系数 9rho = corr(data, 'type','pearson'); 10% 绘制热图 11string_name={'Alcohol','Malic acid','Ash','Alcalinity of ash','Magnesium','Total phenols','Flavanoids','Nonflavanoid phenols','Proanthocyanins','Color intensity','Hue','Diluted wines','Proline'}; 12xvalues = string_name; 13yvalues = string_name; 14h = heatmap(xvalues,yvalues,rho, 'FontSize',10, 'FontName','Times New Roman'); 15h.Title = 'Correlation Coefficient'; 16colormap(jet) 17saveas(gcf,sprintf('wine相关系数热图.jpg'),'bmp'); %保存图片 18% 绝对值 19rho=abs(rho); 20rho_1=rho.*tril(ones(D,D),-1); %下三角 21[row, col]=find(rho_1>etea); %找>etea的两个维度 22[Num, ~]=size(row); 23% A:存放相关系数>etea的两个维度及相关系数值 24A=zeros(Num, 3); 25for i=1:Num 26 A(i,:)=[row(i), col(i), rho_1(row(i), col(i))]; 27 fprintf('强线性相关的两个维度是: 第%d个维度: %s与第%d个维度: %s, 两者的相关系数为:%f\n', row(i), string_name{row(i)}, col(i), string_name{col(i)}, rho_1(row(i), col(i))); 28end
2. 结果
1>> demo 2强线性相关的两个维度是: 第7个维度: Flavanoids与第6个维度: Total phenols, 两者的相关系数为:0.864564

MATLAB查看并设置当前颜色图:colormap