<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              變異系數法計算權重及得分步驟詳解

              來源:CSDN 時間:2022-12-23 10:17:48

              目錄


              (相關資料圖)

              1.原理簡介

              2.步驟詳解

              2.1 原始數據收集

              2.2 指標數據正向化

              2.3 數據標準化(消除量綱)

              2.4 計算變異系數

              2.5 計算權重及得分

              3.案例分析

              3.1 獲取原始數據

              3.2 指標正向化

              3.3 數據標準化

              3.4 計算變異系數

              3.5 計算權重

              4.完整代碼(Java)

              4.1 方法類CoV.java

              4.2 主類CoVmain.java

              1.原理簡介

              變異系數法是根據統計學方法計算得出系統各指標變化程度的方法,是直接利用各項指標所包含的信息,通過計算得到指標的權重,因此是一種客觀賦權的方法。

              變異系數法根據各評價指標當前值與目標值的變異程度來對各指標進行賦權,若某項指標的數值差異較大,能明確區分開各被評價對象,說明該指標的分辨信息豐富,因而應給該指標以較大的權重;反之,若各個被評價對象在某項指標上的數值差異較小,那么這項指標區分各評價對象的能力較弱,因而應給該指標較小的權重。

              2.步驟詳解

              2.1 原始數據收集

              假設一組數據中有m個指標,n條待評價樣本,即一個n*m的矩陣,令其為X。其中xij表示第i行第j列的數據。

              2.2 指標數據正向化

              指標正向化的目的就是把所有的指標都轉換為正向指標。

              正向指標:又叫越大越優型指標,即該指標下的數據數值越大越好,例如成績。

              負向指標:又叫越小越優型指標,即該指標下的數據數值越小越好,例如排名。

              對于正向指標:保持其原數據不變。

              對于負向指標:采用如下方法。

              其中k為指定的任意系數,其值可為0.1,0.2等; max|xj|表示第 j 列數據(指標)絕對值的最大值。

              2.3 數據標準化(消除量綱)

              由于不同的指標數據的單位不同,因此無法直接對其進行計算,而數據標準化的目的就是消除單位的影響,使所有數據都能夠用同一種方法對其進行計算。令標準化后的數據矩陣為R.

              2.4 計算變異系數

              計算每個指標的均值:

              計算每個指標的標準差(均方差):

              因為標準差可以描述取值的離散程度,即某指標的方差反映了該指標的的分辨能力, 所以可用標準差定義指標的權重。

              計算每個指標的變異系數:

              2.5 計算權重及得分

              權重:

              得分:

              3.案例分析

              假設有以下數據,x1~x7為指標,ABC為三條待評價對象,其中x1和x4為負向指標,其余為正向指標。

              x1x2x3x4x5x6x7

              A0.7430.82670.8324120.86370.07430.0409

              B0.75670.80330.8736-100.8538-0.06650.0716

              C0.81040.76670.8539160.90380.08810.0657

              3.1 獲取原始數據

              這里采用jxl包讀取Excel。

              //讀取數據public double[][] read(String filepath) throws IOException, BiffException,WriteException {//創建輸入流InputStream stream = new FileInputStream(filepath);//獲取Excel文件對象Workbook  rwb = Workbook.getWorkbook(stream);//獲取文件的指定工作表 默認的第一個    Sheet sheet = rwb.getSheet("Sheet1");    rows = sheet.getRows();    cols = sheet.getColumns();    orig = new double[rows][cols];    pos = new double[rows][cols];    stand = new double[rows][cols];//row為行for(int i=0;i<SHEET.GETROWS();I++) {for(int="" j="0;j<sheet.getColumns();j++)" {string[]="" str="new" string[sheet.getcolumns()];="" cell="" str[j]="cell.getContents();" orig[i][j]="Double.valueOf(str[j]);" uniform[i][j]="Double.valueOf(str[j]);}" }return="" orig;}

              輸出:

              3.2 指標正向化

              在此只需要對負向指標進行處理,正向指標保持原數據不變。

              //指標正向化public double[][] positive(double[][] or){double k=0.1;pos=or;Listneg=new ArrayList();//存儲逆向指標所在列System.out.println("是否有逆向指標(越小越優型指標)?是:1否:2");int a=input.nextInt();double[] max=getMax(or);if(a==1) {System.out.println("輸入逆向指標所在列(以“/”結尾):");while(!input.hasNext("/")) {neg.add(Integer.valueOf(input.nextInt()));}for(int i=0;i<ORIG.LENGTH;I++) {for(int="" j="0;j<neg.size();j++)" code="" {pos[i][neg.get(j)]="1/(k+max[neg.get(j)]+or[i][neg.get(j)]);}}}return" pos;}

              輸出:

              3.3 數據標準化

              //數據標準化public double[][] standar(double[][] p){double[] sum=new double[p[0].length];for(int i=0;i<P.LENGTH;I++) {for(int="" j="0;j<p[0].length;j++)" code="" {sum[j]="" +="p[i][j]*p[i][j];}}for(int" i="0;i<p.length;i++)" {stand[i][j]="p[i][j]/(Math.sqrt(sum[j]));}}return" stand;}

              輸出;

              3.4 計算變異系數

              //均值double[] sum=new double[st[0].length];for(int j=0;j

              輸出:

              3.5 計算權重

              //各指標權重double sumv=0;for(int j=0;j

              輸出:

              4.完整代碼(Java)

              4.1 方法類CoV.java

              /* * 假設有m個方案,n個指標,憨憨為方案,列為指標 * 變異系數法(Coefficient of variation method)計算步驟 * 1.指標正向化:都轉換為正向指標(越大越優型指標) * 2.數據標準化:消除負數和量綱影響 * 3.計算變異系數:Aj(指標均值),Sj(指標標準差),則變異系數Vj=Sj/Aj * 4.計算權重:Wj=Vj/sum(Vj) */package CoV;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;import jxl.write.WriteException;public class CoV {private double[][] orig; //原始矩陣private double[][] pos;//正向化矩陣private double[][] stand;//標準化后的矩陣 int rows,cols;//存儲Excel的行和列數Scanner input = new Scanner(System.in);//矩陣每列絕對值最大值public double[] getMax(double[][] m) {double max[] = new double[m[0].length];for(int j=0;j < m[0].length;j++) {max[j] = Math.abs(m[0][j]);for(int i=0;i < m.length;i++) {if(Math.abs(m[i][j]) >= max[j]) {max[j] = Math.abs(m[i][j]);}}}return max;}//輸出二維矩陣public void matrixoutput(double[][] x) {for(int i=0;ineg=new ArrayList();//存儲逆向指標所在列System.out.println("是否有逆向指標(越小越優型指標)?是:1否:2");int a=input.nextInt();double[] max=getMax(or);if(a==1) {System.out.println("輸入逆向指標所在列(以“/”結尾):");while(!input.hasNext("/")) {neg.add(Integer.valueOf(input.nextInt()));}for(int i=0;i<ORIG.LENGTH;I++) {for(int="" j="0;j<neg.size();j++)" code="" {pos[i][neg.get(j)]="1/(k+max[neg.get(j)]+or[i][neg.get(j)]);}}}return" {sum[j]="" +="p[i][j]*p[i][j];}}for(int" i="0;i<p.length;i++)" {stand[i][j]="p[i][j]/(Math.sqrt(sum[j]));}}return" sum1="new" double[st[0].length];for(int="" {sum1[j]="" {v[j]="S[j]/A[j];}//各指標權重double" {sumv="" {wi[j]="V[j]/sumv;}for(int" double[][]="" pos;}="" 數據標準化public="" standar(double[][]="" p){double[]="" double[p[0].length];for(int="" stand;}="" 計算變異系數、權重和得分public="" weigth(double[][]="" st)="" {double[]="" a="new" s="new" v="new" double[st[0].length];double[]="" wi="new" double[st[0].length];double[][]="" w="new" double[4][st[0].length];="" 均值double[]="" sum="new" sumv="0;for(int" {w[0][j]="A[j];W[1][j]" s[j];w[2][j]="V[j];W[3][j]" ="=""" wi[j];}return="" w;}}

              4.2 主類CoVmain.java

              package CoV;import java.io.IOException;import jxl.read.biff.BiffException;import jxl.write.WriteException;public class CoVmain {public static void main(String args[]) throws BiffException, WriteException, IOException {CoV cov=new CoV();double[][] orig = cov.read("cov.xls");//輸出原始矩陣,行為評價對象,列為評價指標System.out.println("原始矩陣為:");cov.matrixoutput(orig);double[][] pos = cov.positive(orig);System.out.println("正向化矩陣為:");cov.matrixoutput(pos);double[][] stand = cov.standar(pos);System.out.println("標準化矩陣為:");cov.matrixoutput(stand);double[][] W = cov.weigth(stand);//輸出每個指標的均值、標準差、變異系數和權重,依次按行排列System.out.println("均值矩陣為:");cov.matrixoutput1(W[0]);System.out.println("標準差矩陣為:");cov.matrixoutput1(W[1]);System.out.println("變異系數矩陣為:");cov.matrixoutput1(W[2]);System.out.println("權重矩陣為:");cov.matrixoutput1(W[3]);}}

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩