做者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/編程
用MATLAB編程,求給定數據不一樣維度之間的相關係數,並繪製熱圖,保存圖片,找到強相關的維度對。spa
數據集來自UCI中的wine:https://archive.ics.uci.edu/ml/datasets/Wine3d
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
>> demo 強線性相關的兩個維度是: 第7個維度: Flavanoids與第6個維度: Total phenols, 二者的相關係數爲:0.864564