MATLAB實例:求相關係數、繪製熱圖並找到強相關對

MATLAB實例:求相關係數、繪製熱圖並找到強相關對

做者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/編程

用MATLAB編程,求給定數據不一樣維度之間的相關係數,並繪製熱圖,保存圖片,找到強相關的維度對。spa

數據集來自UCI中的wine:https://archive.ics.uci.edu/ml/datasets/Wine3d

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

相關文章
相關標籤/搜索