变异系数法之matlab
目錄
1.簡介
2.算法原理
2.1?指標正向化
2.2 數據標準化
2.3?計算變異系數
2.4?計算權重以及得分
3.實例分析
3.1 讀取數據
3.2 指標正向化
3.3 數據標準化
3.4 計算變異系數
3.5 計算權重
3.6 計算得分?
完整代碼?
1.簡介
????????變異系數法(Coefficient of variation method)又稱"標準差率"(標準差與平均數的比值)是直接利用各項指標所包含的信息,通過計算得到指標的權重。是一種客觀賦權的方法。此方法的基本做法是:在評價指標體系中,指標取值差異越大的指標,也就是越難以實現的指標,這樣的指標更能反映被評價單位的差距。例如,在評價各個國家的經濟發展狀況時,選擇人均國民生產總值(人均GNP)作為評價的標準指標之一,是因為人均GNP不僅能反映各個國家的經濟發展水平,還能反映一個國家的現代化程度。如果各個國家的人均GNP沒有多大的差別,則這個指標用來衡量現代化程度、經濟發展水平就失去了意義。
2.算法原理
2.1?指標正向化
????????和熵權法的指標正向化類似,正向指標越大越好,負向指標越小越好。把指標都轉化成正向指標處理。此篇采用新的正向化形式,采用上一篇建模算法熵權法的處理形式也可,基本思想不變就行。這個數據集有正向指標(越大越優型指標)和負向指標(越小越優型指標)兩種。
????????設有m個待評對象,n個評價指標,可以構成數據矩陣X=(xij)m*n,設數據矩陣內元素,經過指標正向化處理過后的元素為xij'
負向指標:并網點電壓偏差越限次數D、有功控制能力F、功率因數越限G屬于此類指標
正向指標:其余所有指標屬于此類,可以不用處理
2.2 數據標準化
????????每個指標的數量級不一樣,需要把它們化到同一個范圍內比較。上一篇建模算法用到了最大最小值標準化方法。此篇可以用一個新的標準化方法,處理如下:
????????設標準化后的數據矩陣元素為rij,由上可得指標正向化后數據矩陣元素為xij'
2.3?計算變異系數
處理過后可以構成數據矩陣R=(rij)m*n
- 計算指標的均值:
- ?計算指標的標準差:
- ?計算變異系數:
2.4?計算權重以及得分
- 權重為:
- 得分為:
3.實例分析
| 風場名 | 風場1 | 風場2 | 風場3 |
| A(高頻率穿越能力) | 0.743 | 0.7567 | 0.8104 |
| B(低頻率穿越能力) | 0.8267 | 0.8033 | 0.7667 |
| C(低壓穿越能力) | 0.8324 | 0.8736 | 0.8539 |
| D(并網點電壓偏差越限次數?) | 12 | 10 | 16 |
| E(SVC/SVG響應性能指標) | 0.8637 | 0.8538 | 0.9038 |
| F(有功控制能力) | 0.0743 | 0.0665 | 0.0881 |
| G(功率因素越限) | 0.0409 | 0.0716 | 0.0657 |
3.1 讀取數據
data=xlsread('D:\桌面\變異系數.xlsx')返回:
3.2 指標正向化
%指標正向 化處理后數據為data1 data1=data; %%負向指標(越小越優型指標)處理 index=[4,6,7];%負向指標位置 k=0.1; for i=1:length(index)data1(:,index(i))=1./(k+max(abs(data(:,index(i))))+data(:,index(i))) end返回:
3.3 數據標準化
%數據標準化 data2=data1; for j=1:size(data1,2)data2(:,j)= data1(:,j)./sqrt(sum(data1(:,j).^2)); end data2返回:
3.4 計算變異系數
%計算變異系數 A=mean(data2) %求每列平均值 S=std(data2) %求每列方差 V=S./A %變異系數返回:
3.5 計算權重
%計算權重 w=V./sum(V)返回:
3.6 計算得分?
%計算得分 s=data2*w'; Score=100*s/max(s); for i=1:length(Score)%A(i,:)=[row(i), col(i), rho_1(row(i), col(i))];fprintf('第%d個風場百分制評分為:%d\n',i,Score(i)); end返回:
完整代碼?
clc;clear; data=xlsread('D:\桌面\變異系數.xlsx'); %指標正向 化處理后數據為data1 data1=data; %%負向指標(越小越優型指標)處理 index=[4,6,7];%負向指標位置 k=0.1; for i=1:length(index)data1(:,index(i))=1./(k+max(abs(data(:,index(i))))+data(:,index(i))); end %數據標準化 data2=data1; for j=1:size(data1,2)data2(:,j)= data1(:,j)./sqrt(sum(data1(:,j).^2)); end data2; %計算變異系數 A=mean(data2); %求每列平均值 S=std(data2); %求每列方差 V=S./A; %變異系數 %計算權重 w=V./sum(V); %計算得分 s=data2*w'; Score=100*s/max(s); for i=1:length(Score)%A(i,:)=[row(i), col(i), rho_1(row(i), col(i))];fprintf('第%d個風場百分制評分為:%d\n',i,Score(i)); end總結
以上是生活随笔為你收集整理的变异系数法之matlab的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unicode解码php,PHP解码un
- 下一篇: matlab人脸追踪,求大神帮助我这个菜