MATLAB实例:求相关系数、绘制热图并找到强相关对
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
用MATLAB编程,求给定数据不同维度之间的相关系数,并绘制热图,保存图片,找到强相关的维度对。
数据集来自UCI中的wine:https://archive.ics.uci.edu/ml/datasets/Wine
1. demo.m
clear clc etea=0.8; %阈值 % 加载数据 data_load=dlmread('E:\scanplot\wine.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\n', 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