论文阅读——《A new combination method based on( 二 )


2、计算两个BBA之间的证据距离,并构造D(证据距离矩阵) 。
def d_(a,b,Distance):return np.sqrt(0.5 * (a-b) @ Distance @ (a-b).T)for i in range(D.shape[0]):for j in range(D.shape[1]):value = http://www.kingceram.com/post/round(d_(mat[i],mat[j],Distance=np.array([[1,0,0,0.5],[0,1,0,0],[0,0,1,0.5],[0.5,0,0.5,1]])),4) # 填充的值# print(value)D[i, j] = valueD[j, i] = value
3、计算证据m i m_{i} mi?和其他证据之间的距离
# 考虑到D的主对角元素全部为0,因此直接按列元素求和即可distance_m = np.sum(D,axis=1)print(distance_m)>>>array([1.5449, 2.9284, 1.2311, 1.1761, 1.1945])
论文中给出的结果中d 5 d_{5} d5?的数值为1.1944,应该是写错了 。如果个人理解有误 。欢迎指正 。
4、计算证据m i m_{i} mi? 的可信度水平C r d Crd Crd,并作归一化C r d ~ \{Crd} Crd
## 计算crdCrd = list(range(S.shape[0]))Crd_ = []bbb = 0for i in range(S.shape[0]):bbb += np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2) for i in range(S.shape[0]):aaa = np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2)Crd[i] = aaa / bbb / distance_m[i]for i in range(len(Crd)):Crd_.append(round(Crd[i] / sum(Crd),4))print(Crd_)
5、计算证据m i m_{i} mi? 的信息熵Q Q Q

论文阅读——《A new combination method based on

文章插图
当∣ A ∣ = 1 |A|=1 ∣A∣=1时,可写成:
## 计算QQ = []count_elements = [1,1,1,2]#包含在子集A中的元素的个数 for i in range(S.shape[0]):qqq = 0index = 0for j in mat[i]:if j == 0:logj = 0else:logj = np.log2(j * np.exp((count_elements[index] - 1)/ 3) / (2**count_elements[index] - 1))qqq += j * logjindex+=1Q.append(round(-qqq, 4))print(Q)
6、计算证据m i m_{i} mi? 的信息量I V IV IV,并做归一化I V ~ \{IV} IV
IV_ = []IV = np.exp(Q)for i in IV:IV_.append(round(i/sum(IV),4))print(IV_)
7、计算证据m i m_{i} mi? 的权重因子W W W,并做归一化W ~ \{W} W
## 计算W_W = []W_ = []for i in range(len(Crd_)):W.append(float(Crd_[i] * float(IV_[i])))for i in W:W_.append(round(i/sum(W),4))print(W_)
8、得到(加权平均证据)
## 计算WAE(m)M = []for i in range(mat.shape[1]):M.append(round((sum((mat[:,i]) * np.array(W_))),4))print(M)
9、替换成新的加权平均证据,按照前文的DS融合规则进行融合 。
mat = np.array([[0.5401, 0.1356, 0.0499, 0.2744], [0.5401, 0.1356, 0.0499, 0.2744], [0.5401, 0.1356, 0.0499, 0.2744],[0.5401, 0.1356, 0.0499, 0.2744],[0.5401, 0.1356, 0.0499, 0.2744]],dtype=np.float64)mat = mat.Tprint(np.round(DS_cal(mat),4))
完整代码:写成函数的形式
import numpy as npdef r_(x):return1/ (1+np.exp(-5*x)) def d_(a,b,Distance):return np.sqrt(0.5 * (a-b) @ Distance @ (a-b).T)def Weight_average_evidence(mat,Distance):S = np.zeros((mat.shape[0],mat.shape[0]))D = np.zeros((mat.shape[0],mat.shape[0]))for i in range(S.shape[0]):for j in range(S.shape[1]):value = http://www.kingceram.com/post/round(r_(np.corrcoef(mat[i],mat[j])[0][1]) ,4) # 填充的值S[i, j] = valueS[j, i] = valuefor i in range(D.shape[0]):for j in range(D.shape[1]):value = round(d_(mat[i],mat[j],Distance=Distance),4) # 填充的值# print(value)D[i, j] = valueD[j, i] = valuedistance_m = np.sum(D,axis=1)## 计算crdCrd = list(range(S.shape[0]))Crd_ = []bbb = 0for i in range(S.shape[0]):bbb += np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2) for i in range(S.shape[0]):aaa = np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2)Crd[i] = aaa / bbb / distance_m[i]for i in range(len(Crd)):Crd_.append(round(Crd[i] / sum(Crd),4))## 计算QQ = []count_elements = [1,1,1,2]#包含在子集A中的元素的个数 for i in range(S.shape[0]):qqq = 0index = 0for j in mat[i]:if j == 0:logj = 0else:logj = np.log2(j * np.exp((count_elements[index] - 1)/ 3) / (2**count_elements[index] - 1))qqq += j * logjindex+=1Q.append(round(-qqq, 4))## 计算IV_IV_ = []IV = np.exp(Q)for i in IV:IV_.append(round(i/sum(IV),4))## 计算W_W = []W_ = []for i in range(len(Crd_)):W.append(float(Crd_[i] * float(IV_[i])))for i in W:W_.append(round(i/sum(W),4))## 计算WAE(m)M = []for i in range(mat.shape[1]):M.append(round((sum((mat[:,i]) * np.array(W_))),4))return MWeight_average_evidence(mat=np.array([[0.41,0.29,0.3,0], [0,0.9,0.1,0], [0.58,0.07,0,0.35],[0.55,0.1,0,0.35],[0.6,0.1,0,0.3]]),Distance=np.array([[1,0,0,0.5],[0,1,0,0],[0,0,1,0.5],[0.5,0,0.5,1]]))