灰色关联法 —— python
目錄
1.簡介
2.算法詳解
2.1 數據標準化
2.2?計算灰色相關系數
2.3 計算灰色關聯度系數?
3.實例分析
3.1 讀取數據
?3.2 數據標準化
3.3?繪制 x1,x4,x5,x6,x7 的折線圖
3.4?計算灰色相關系數
?完整代碼
1.簡介
????????對于兩個系統之間的因素,其隨時間或不同對象而變化的關聯性大小的量度,稱為關聯度。在系統發展過程中,若兩個因素變化的趨勢具有一致性,即同步變化程度較高,即可謂二者關聯程度較高;反之,則較低。因此,灰色關聯分析方法,是根據因素之間發展趨勢的相似或相異程度,亦即“灰色關聯度”,作為衡量因素間關聯程度的一種方法。
????????灰色關聯分析可以用于衡量因素相關程度的同時,也有論文將其用于綜合評價,其原理思想和TOPSIS法是比較相似的。?
2.算法詳解
2.1 數據標準化
?因為每個指標的數量級不一樣,需要把它們化到同一個范圍內再比較。標準化的方法比較多,這里僅用最大最小值標準化方法。
????????設標準化后的數據矩陣元素為rij,由上可得指標正向化后數據矩陣元素為?(Xij)'
2.2?計算灰色相關系數
我們常見的灰色相關系數表達式如下:
? ?Xo(k)為參考列,p為分辨系數。它的范圍為(0~1),它的作用為控制區分度,它的值越小,區分度越大,它的值越大,區分度越小。??常常取0.5。乍一看這個公式還是有些難懂,接下來詳細介紹一下它的原理。
2.3 計算灰色關聯度系數?
- 參考向量的選擇
????????例如研究x2指標與x1指標之間的灰色關聯度。所以將x1列作為參考向量,即要研究與誰的關系,就將誰作為參考。設參考向量為Y1=x1,生成新的數據矩陣 X1=x2.
- 生成絕對值矩陣?
設生成的絕對值矩陣為A
A=[X1-Y1],亦是A=[x2-x1]
設dmax為絕對值矩陣A的最大值,dmin為絕對值矩陣A的最小值。
-
計算灰色關聯矩陣
設灰色關聯矩陣為B
- 計算灰色關聯度
3.實例分析
其中指標,x1:貨物運輸量;x2:港口貨物吞吐量;x3:貨物周轉量;x4:GDP;x5:財政收入x6:城市居民人均可支配收入;x7:農村居民人均凈收入。現研究x4-x7指標與x1指標之間的灰色關聯度。數據表格如下:
| 年份 | x1 | x2 | x3 | x4 | x5 | x6 | x7 |
| 2007 | 22578 | 27569 | 4987 | 2567.7 | 267.98 | 1.5429 | 1.172 |
| 2008 | 25698 | 29484 | 5048 | 3131 | 348.51 | 1.8546 | 1.2514 |
| 2009 | 27896 | 31589 | 5129 | 3858.2 | 429.1 | 2.0369 | 1.0254 |
| 2010 | 29540 | 34894 | 5569 | 4417.7 | 541.29 | 2.2589 | 1.189 |
| 2011 | 31058 | 36478 | 5783 | 5158.1 | 647.25 | 2.4276 | 1.4213 |
| 2012 | 35980 | 38695 | 6045 | 6150.1 | 736.45 | 2.5678 | 1.5304 |
| 2013 | 39483 | 40746 | 6259 | 7002.8 | 850 | 2.8546 | 1.7421 |
3.1 讀取數據
#導入數據 data=pd.read_excel('D:\桌面\huiseguanlian.xlsx') print(data) #提取變量名 x1 -- x7 label_need=data.keys()[1:] print(label_need) #提取上面變量名下的數據 data1=data[label_need].values print(data1)返回:
?3.2 數據標準化
#0.002~1區間歸一化 [m,n]=data1.shape #得到行數和列數 data2=data1.astype('float') data3=data2 ymin=0.002 ymax=1 for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin print(data3)?返回:
?3.3?繪制 x1,x4,x5,x6,x7 的折線圖
t=range(2007,2014) plt.plot(t,data3[:,0],'*-',c='red') for i in range(4):plt.plot(t,data3[:,2+i],'.-') plt.xlabel('year') plt.legend(['x1','x4','x5','x6','x7']) plt.title('灰色關聯分析')返回:
?從圖中可以看出,這幾個指標的趨勢大致相同
3.4?計算灰色相關系數
3.4.1?得到其他列和參考列相等的絕對值
# 得到其他列和參考列相等的絕對值 for i in range(3,7):data3[:,i]=np.abs(data3[:,i]-data3[:,0])3.4.2?得到絕對值矩陣的全局最大值和最小值
#得到絕對值矩陣的全局最大值和最小值 data4=data3[:,3:7] d_max=np.max(data2) d_min=np.min(data2)3.4.3 定義分辨系數
a=0.53.4.4 計算灰色關聯矩陣
data4=(d_min+a*d_max)/(data4+a*d_max) xishu=np.mean(data4, axis=0) print(' x4,x5,x6,x7 與 x1之間的灰色關聯度分別為:') print(xishu)返回:
?完整代碼
#導入相關庫 import pandas as pd import numpy as np import matplotlib.pyplot as plt # 解決圖標題中文亂碼問題 import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 #導入數據 data=pd.read_excel('D:\桌面\huiseguanlian.xlsx') # print(data) #提取變量名 x1 -- x7 label_need=data.keys()[1:] # print(label_need) #提取上面變量名下的數據 data1=data[label_need].values print(data1) #0.002~1區間歸一化 [m,n]=data1.shape #得到行數和列數 data2=data1.astype('float') data3=data2 ymin=0.002 ymax=1 for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin print(data3) # 繪制 x1,x4,x5,x6,x7 的折線圖 t=range(2007,2014) plt.plot(t,data3[:,0],'*-',c='red') for i in range(4):plt.plot(t,data3[:,2+i],'.-') plt.xlabel('year') plt.legend(['x1','x4','x5','x6','x7']) plt.title('灰色關聯分析') # 得到其他列和參考列相等的絕對值 for i in range(3,7):data3[:,i]=np.abs(data3[:,i]-data3[:,0]) #得到絕對值矩陣的全局最大值和最小值 data4=data3[:,3:7] d_max=np.max(data2) d_min=np.min(data2) a=0.5 #定義分辨系數 # 計算灰色關聯矩陣 data4=(d_min+a*d_max)/(data4+a*d_max) xishu=np.mean(data4, axis=0) print(' x4,x5,x6,x7 與 x1之間的灰色關聯度分別為:') print(xishu)總結
以上是生活随笔為你收集整理的灰色关联法 —— python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB教程(1) MATLAB 基
- 下一篇: 阿联酋esma认证怎么做_百度爱采购企业