python实现CRITIC方法

一个很简单的CRITIC方法python实现,通常用来确定属性权重的标准重要性。除了不要求属性的独立性外,CRITIC方法还反映了属性之间的相关系数。主要步骤为
1、标准化决策矩阵,可以有很多种方法。对于一个标准矩阵W,有

\begin{aligned} y_{ij}=\frac{x_{ij}-\underset{i}{\min}(x_{ij})}{\underset{i}{\min}(x_{ij})-\underset{i}{\min}(y_{ij})},i=1,2,\cdots,m, j=1,2,\cdots,n \end{aligned}

2、计算属性间j,k的相关系数。

\begin{aligned} \eta_{jk}=\frac{\sum_{i=1}^m(y_{ij}-\bar{y}_j)(y_{ik}-\bar{y}_k)}{\sqrt {\sum_{i=1}^m(y_{ij}-\bar{y}_j)^2\sum_{i=1}^m(y_{ik}-\bar{y}_k)^2}} \end{aligned}
3、计算每个属性的标准偏差。

\begin{aligned} s_j=\sqrt {\frac{1}{m-1}\sum_{i=1}^m(y_{ij}-\bar{y}_j)^2}, j=1,2,\cdots,n \end{aligned}

4、计算属性的偏离度

\begin{aligned} C_j=s_j \sum_{k=1}^n(1-\eta_{jk}), j=1,2,\cdots,n \end{aligned}

5、获得属性权重

 
  

代码如下

# coding=gbk
import pandas as pd
import numpy as np

if __name__ == '__main__':
    df = pd.DataFrame([[1, 0.875, 0.625, 0.75, 0.625],
          [0.571, 0.857, 0.714, 0.857, 1],
          [1, 0.4, 0.6, 0.7, 0.6],
          [0.25, 0.75, 0.875, 1, 0.75]])
    std_d=np.std(df,axis=1)
    mean_d=np.mean(df,axis=1)
    cor_d=np.corrcoef(df)
    w_j=(1-cor_d).sum(0) *std_d
    print(w_j)
    w=(mean_d/(1-mean_d)*w_j)/sum(mean_d/(1-mean_d)*w_j)
    print(w)


 

你可能感兴趣的:(决策,python)