日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

层次分析法之python

發布時間:2025/3/15 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 层次分析法之python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.簡介

2.算法解析

3.實例分析

3.1 構造矩陣

3.2 查看行數和列數

3.3 求特征向量

3.4 找到最大特征值和最大特征向量

3.5 計算權重

3.6 一致性檢驗

3.7 計算評分

完整代碼


1.簡介

? ? ? ? 一種主觀賦權的方法,在數據集比較小,實在不好比較的時候可以用這個方法,如果有別的選擇還是盡量不要用這個算法比較好。

????????層次分析法的特點是在對復雜的決策問題的本質、影響因素及其內在關系等進行深入分析的基礎上,利用較少的定量信息使決策的思維過程數學化,從而為多目標、多準則或無結構特性的復雜決策問題提供簡便的決策方法。尤其適合于對決策結果難于直接準確計量的場合。

????????層次分析法是將決策問題按總目標、各層子目標、評價準則直至具體的備投方案的順序分解為不同的層次結構,然后得用求解判斷矩陣特征向量的辦法,求得每一層次的各元素對上一層次某元素的優先權重,最后再加權和的方法遞階歸并各備擇方案對總目標的最終權重,此最終權重最大者即為最優方案。這里所謂“優先權重”是一種相對的量度,它表明各備擇方案在某一特點的評價準則或子目標,標下優越程度的相對量度,以及各子目標對上一層目標而言重要程度的相對量度。層次分析法比較適合于具有分層交錯評價指標的目標系統,而且目標值又難于定量描述的決策問題。其用法是構造判斷矩陣,求出其最大特征值。及其所對應的特征向量W,歸一化后,即為某一層次指標對于上一層次某相關指標的相對重要性權值。

2.算法解析

例如某研究對象的指標集

然后通過以下表格復制指標n對指標m的重要性

判斷矩陣匯總指標n對指標m滿足公式

然后通過eig函數求取矩陣的特征向量

一致性檢驗

其中RI根據指標個數通過下表選擇對應的RI值

如果CR<0.10時,則建立的判斷矩陣的一致性認為是可接受的,否則應對其進行修正。

3.實例分析

????????小美要選男朋友了,現有小明、小李兩個人選,到底該選誰呢?現在小美要從四個指標去選擇,分別是身高、顏值、學歷、性格。小美對他們各個指標的評分如下:

由于兩者各有其優點,實在令人難以抉擇,于是小美根據自己的主觀判斷,認為如下:

  • 1.身高與顏值比較,身高稍重要
  • 2.身高與學歷相比,同樣重要
  • 3.身高和性格相比,性格稍重要
  • 4.顏值和學歷相比,學歷介于相同重要和稍微重要之間
  • 5.顏值和性格相比,性格明顯重要
  • 6.性格和學歷相比,性格稍重
身高顏值學歷性格
身高1311/3
顏值1/311/21/5
學歷1211/3
性格3531

由此,可得到判斷矩陣

3.1 構造矩陣

p = np.mat('8 7 6 8;7 8 8 7') #每一行代表一個對象的指標評分 print(p) #A為自己構造的輸入判別矩陣 A = np.array([[1,3,1,1/3],[1/3,1,1/2,1/5],[1,2,1,1/3],[3,5,3,1]]) print(A)

返回:

3.2 查看行數和列數

#查看行數和列數 [m,n] = A.shape print(m,n)

返回:

3.3 求特征向量

#求特征值和特征向量 V,D = np.linalg.eig(A) print('特征值:') print(V) print('特征向量:') print(D)

返回:

3.4 找到最大特征值和最大特征向量

#最大特征值 tzz = np.max(V) print(tzz) #最大特征向量 k=[i for i in range(len(V)) if V[i] == np.max(V)] tzx = -D[:,k] print(tzx)

返回:

3.5 計算權重

# #賦權重 quan=np.zeros((n,1)) for i in range(0,n):quan[i]=tzx[i]/np.sum(tzx) Q=quan print(Q)

返回:

3.6 一致性檢驗

#一致性檢驗 CI=(tzz-n)/(n-1) RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59] #判斷是否通過一致性檢驗 CR=CI/RI[n-1] if CR>=0.1:print('沒有通過一致性檢驗\n') else:print('通過一致性檢驗\n')

返回:

3.7 計算評分

#顯示出所有評分對象的評分值 score=p*Q for i in range(len(score)):print('object_score {}:'.format(i),float(score[i]))

返回:

完整代碼

#導入相關庫 import numpy as np import pandas as pd p = np.mat('8 7 6 8;7 8 8 7') #每一行代表一個對象的指標評分 #A為自己構造的輸入判別矩陣 A = np.array([[1,3,1,1/3],[1/3,1,1/2,1/5],[1,2,1,1/3],[3,5,3,1]]) #查看行數和列數 [m,n] = A.shape#求特征值和特征向量 V,D = np.linalg.eig(A) print('特征值:') print(V) print('特征向量:') print(D) #最大特征值 tzz = np.max(V) # print(tzz) #最大特征向量 k=[i for i in range(len(V)) if V[i] == np.max(V)] tzx = -D[:,k] # print(tzx)# #賦權重 quan=np.zeros((n,1)) for i in range(0,n):quan[i]=tzx[i]/np.sum(tzx) Q=quan # print(Q)#一致性檢驗 CI=(tzz-n)/(n-1) RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59] #判斷是否通過一致性檢驗 CR=CI/RI[n-1] if CR>=0.1:print('沒有通過一致性檢驗\n') else:print('通過一致性檢驗\n')#顯示出所有評分對象的評分值 score=p*Q for i in range(len(score)):print('object_score {}:'.format(i),float(score[i]))

總結

以上是生活随笔為你收集整理的层次分析法之python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。