什麼時候用灰色關聯分析?
灰色關聯分析 是根據因素之間發展趨勢的相似或相異程度,亦即“灰色關聯度”,作爲衡量因素間關聯程度的一種方法
【若兩個因素變化的趨勢具有一致性,即同步變化程度較高,即可謂二者關聯程度較高;反之,則較低】
當樣本個數 n 較大時,用標準化迴歸(第7講學),當樣本個數 n 較少時,用灰色關聯分析
灰色關聯分析的順序
① 正向化(若已經全是極大型 則不需要)
② 預處理(每一個元素都被預處理)
③ 構造母序列和子序列(若題目本身已給出 則不需要)
④ 計算各個指標與母序列的灰色關聯度(每一列 都可以求出一個灰色關聯度)
⑤ 針對各個指標的權重 計算每一個元素的得分(若每一列的灰色關聯度都一樣 則不需要)
⑥ 對得分進行歸一化 並排序
下圖引用自 數學建模灰色關聯分析法——學習筆記(一)
使用灰色關聯分析的兩種套路
① 用於系統分析(比較母序列與哪個子序列最接近)
我們以下圖舉例,分析國內生產總值與哪一個產業的影響最大?
load gdp.mat % 導入數據
Mean = mean(gdp); % 求出每一列的均值以供後續的數據預處理
gdp = gdp ./ repmat(Mean,size(gdp,1),1); % 將矩陣進行復製爲和gdp同等大小,然後使用點除(對應元素相除)
disp('預處理後的矩陣爲:'); disp(gdp)
Y = gdp(:,1); % 母序列
X = gdp(:,2:end); % 子序列
absX0_Xi = abs(X - repmat(Y,1,size(X,2))) % 計算|Y-Xi|矩陣
a = min(min(absX0_Xi)) % 計算兩級最小差a
b = max(max(absX0_Xi)) % 計算兩級最大差b
rho = 0.5; % 分辨係數取 0.5
gamma = (a+rho*b) ./ (absX0_Xi + rho*b) % 計算子序列中各個指標與母序列的關聯繫數
disp('子序列中各個指標的灰色關聯度分別爲:')
disp(mean(gamma))
② 用於綜合評價模型(評價哪個子序列是最優解)
以下圖爲例
load data_water_quality.mat % 導入數據
... % 進行正向化(操作就省略了)
%% 對正向化後的矩陣進行預處理
Mean = mean(X); % 求出每一列的均值以供後續的數據預處理
Z = X ./ repmat(Mean,size(X,1),1);
disp('預處理後的矩陣爲:'); disp(Z)
%% 構造母序列和子序列
Y = max(Z,[],2); % 母序列爲虛擬的,用每一行的最大值構成的列向量表示母序列
X = Z; % 子序列就是預處理後的數據矩陣
%% 計算得分
absX0_Xi = abs(X - repmat(Y,1,size(X,2))) % 計算|X0-Xi|矩陣
a = min(min(absX0_Xi)) % 計算兩級最小差a
b = max(max(absX0_Xi)) % 計算兩級最大差b
rho = 0.5; % 分辨係數取0.5
gamma = (a+rho*b) ./ (absX0_Xi + rho*b) % 計算子序列中各個指標與母序列的關聯繫數
weight = mean(gamma) / sum(mean(gamma)); % 利用子序列中各個指標的灰色關聯度計算權重
score = sum(X .* repmat(weight,size(X,1),1),2); % 未歸一化的得分
stand_S = score / sum(score); % 歸一化後的得分
[sorted_S,index] = sort(stand_S ,'descend') % 進行排序
對於這題,我們需要自己構造母序列和子序列,每一行的最大值構成的列向量表示母序列,而預處理後的矩陣表示子序列,接下來,就可以比較母序列與哪個子序列最接近了
切記不能直接用於論文中,要根據題目適當的修改,避免查重
補充:
一般情況下母序列只有一個,但若母序列含有多個,則每個母序列都要與子序列算一遍,算出的灰色關聯度,再來求平均值
灰色關聯分析的評估
灰色關聯分析 的優勢:
(1)因此對樣本量的多少沒有過多的要求,也不需要典型的分佈規律,而且計算量比較小,其結果與定性分析結果會比較吻合。
(2)是系統分析中比較簡單、可靠的一種分析方法
灰色關聯分析 的缺點:
(1)隨着灰色關聯分析理論應用領域的不斷擴大,現有的一些模型存在的不足之處使得其不能很好地解決某些方面的實際問題
(2)整個理論體系目前還不是很完善,其應用受到了某些限制