在使用機器學習模型對數據進行訓練的時候,需要考慮數據量和數據維度,在很多情況下並不是需要大量的數據和大量的數據維度,這樣會造成機器學習模型運行慢,且消耗硬件設備。除此之外,在數據維度較大的情況下,還存在”維度災難“的問題。在本篇博客里不對數據質量的判定,以及數據的增刪做詳細的介紹,只介紹對於數據的降維方法。
在開展特征工程時,數據的降維方法思想上有兩種,一種是例如主成分分析方法(PCA)破壞數據原有的結構從而提取數據的主要特征,另一種是對數據進行相關性分析,按照一定的法則來對數據的屬性進行取舍達到降維的目的。
在實際的工程問題中,由儀器設備采集到的數據具有很重要的意義,如果不是萬不得已在進行建模的時候不建議破壞數據原有的結構,因為采集到的數據本身就具有很重要的物理意義與研究價值,提取出主要特征后會破壞原有數據的信息。因此在篇中介紹在實際的工程應用中使用相關性分析方法進行數據的降維。
相關性分析方法主要考量的是兩組數據之間的相關性,以一種指標來判定,看看數據中的哪些屬性與目標數據的相關性較強,從而做出保留,哪些較弱,進行剔除。
相關性分析方法也分為線性相關性分析與非線性相關性分析兩種,分別應用於不同的場合。
一、線性相關性分析
1.數據可視化方法:
數據可視化方法在某些情況下可以簡單且直觀的判定數據之間的相關性,但是無法很好的展現出數據之間的關系。
2.皮爾遜相關性分析(Pearsion)(還有斯皮爾曼,原理與皮爾遜接近)
皮爾遜相關性分析的數學公式如下:
求兩變量x和y之間的相關性:

對於結果的分析與判斷:
其中rh代表水平方向上的相關性,rv代表豎直方向上的相關性。在公式中A和B有着相同的尺寸,
是矩陣A在行方向上的平均值,
是矩陣A在列方向上的平均值,同理,
是矩陣 B在行方向上的平均值,
是矩陣B在列方向上的平均值。 rh和rv的取值范圍均是從-1到+1,並且rh和rv的絕對值越大則代表相關性越強,同時相關性的判定標准與皮爾遜相關性分析一致。
二、非線性相關性分析
1.灰色關聯分析
灰色關聯分析適用於探究非線性相關性。灰色關聯分析是指對一個系統發展變化態勢的定量描述和比較的方法,其基本思想是通過確定參考數據列和若干個比較數據列的幾何形狀相似程度來判斷其聯系是否緊密,它反映了曲線間的關聯程度。
灰色關聯分析的計算思路如下:

通常取ρ=0.5此時的分辨效果較好,按照相關性的大小可以得知關聯的程度。
2.最大信息系數(Maximal Information Coefficient,MIC)
最大信息系數是一種現代的相關性分析方法,該方法可以考察兩個變量(大量數據,通常數據量在500條以上)之間的線性關系和非線性關系。
最大信息系數的思路如下:



程序代碼:
1.皮爾遜相關性分析:
function coeff = myPearson(X , Y)
% 本函數實現了皮爾遜相關系數的計算操作
%
% 輸入:
% X:輸入的數值序列
% Y:輸入的數值序列
%
% 輸出:
% coeff:兩個輸入數值序列X,Y的相關系數
%
if length(X) ~= length(Y)
error('兩個數值數列的維數不相等');
return;
end
fenzi = sum(X .* Y) - (sum(X) * sum(Y)) / length(X);
fenmu = sqrt((sum(X .^2) - sum(X)^2 / length(X)) * (sum(Y .^2) - sum(Y)^2 / length(X)));
coeff = fenzi / fenmu;
end
2.二維相關性分析代碼:
function [ r , rh , rv ] = TwoDimensionCorrelation( A , B )
%TwoDimensionCorrelation 此處顯示有關此函數的摘要
% 此處顯示詳細說明
%% 輸入矩陣
[m,n] = size(A);
[m1,n1] = size(B);
disp('輸入矩陣特征:');
disp(m);
disp(n);
%% 判斷矩陣的維度是否相同
if m~=m1 || n~=n1
disp('Hava the wrong inputs!');
end
%% 求矩陣的平均
A1 = mean(A(:)); %全部平均
A2 = mean(A,2); %按行平均
A3 = mean(A,1); %按列平均
B1 = mean(B(:)); %全部平均
B2 = mean(B,2); %按行平均
B3 = mean(B,1); %按列平均
%% 與運算有關的部分
a = 0; %與A1和B1有關
b = 0; %與A2和B2有關
c = 0; %與A3和B3有關
d = 0; %與r分母有關
e = 0; %與r分母有關
f = 0; %與rh分母有關
g = 0; %與rh分母有關
h = 0; %與rv分母有關
k = 0; %與rv分母有關
for i = 1:m
for j = 1:n
sum1 = (A(i,j) - A1)*(B(i,j) - B1); %r分子
sum2 = (A(i,j) - A2(i,:))*(B(i,j) - B2(i,:)); %rh分子
sum3 = (A(i,j) - A3(:,j))*(B(i,j) - B3(:,j)); %rv分子
sum4 = (A(i,j) - A1)^2; %r分母
sum5 = (B(i,j) - B1)^2; %r分母
sum6 = (A(i,j) - A2(i,:))^2; %rh分母
sum7 = (B(i,j) - B2(i,:))^2; %rh分母
sum8 = (A(i,j) - A3(:,j))^2; %rv分母
sum9 = (B(i,j) - B3(:,j))^2; %rv分母
a = a + sum1;
b = b + sum2;
c = c + sum3;
d = d + sum4;
e = e + sum5;
f = f + sum6;
g = g + sum7;
h = h + sum8;
k = k + sum9;
end
end
disp('部分計算值:')
disp(a);
disp(d);
disp(e);
%% 求r、rh和rv
r = a/(sqrt(d*e)); %r
rh = b/(sqrt(f*g)); %rh
rv = c/(sqrt(h*k)); %rv
3.灰色關聯分析代碼:
clc;
close;
clear all;
x=xlsread('data.xlsx');
x=x(:,2:end)';
column_num=size(x,2);
index_num=size(x,1);
% 1、數據均值化處理
x_mean=mean(x,2);
for i = 1:index_num
x(i,:) = x(i,:)/x_mean(i,1);
end
% 2、提取參考隊列和比較隊列
ck=x(1,:)
cp=x(2:end,:)
cp_index_num=size(cp,1);
%比較隊列與參考隊列相減
for j = 1:cp_index_num
t(j,:)=cp(j,:)-ck;
end
%求最大差和最小差
mmax=max(max(abs(t)))
mmin=min(min(abs(t)))
rho=0.5;
%3、求關聯系數
ksi=((mmin+rho*mmax)./(abs(t)+rho*mmax))
%4、求關聯度
ksi_column_num=size(ksi,2);
r=sum(ksi,2)/ksi_column_num;
%5、關聯度排序
[rs,rind]=sort(r,'descend');
4.最大信息系數:
需要安裝包,參照https://minepy.readthedocs.io/en/latest/index.html#
