层次分析法之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]))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...

仓位控制不是精确的科学。它是保证资金安全、有效规避风险、长期稳定盈利的有效手段&#xff0c;有仓位控制意识和规则是股市交易者在心理和技术上成熟的表现之一&#xff0c;仓位控制是建立在市场和个股短期具有不可预测的特性、尊重市场、保证资金安全的基础上的。对于看好的…

Java Double类详解

Double 类的构造方法 Double 类中的构造方法有如下两个。 Double(double value)&#xff1a;构造一个新分配的 Double 对象&#xff0c;它表示转换为 double 类型的参数。Double(String s)&#xff1a;构造一个新分配的 Double 对象&#xff0c;它表示 String 参数所指示的 do…

解决matlab2018a安装后遇到matlab license manager error -8

安装包及教程&#xff1a;传送门 基础教程&#xff1a;传送门 在安装完成后&#xff0c;按照教程安装并将所需文件复制到相应文件中&#xff0c;然后回到桌面打开matlab显示 matlab license manager error -8 的错误 经过查找之后发现两种解决办法&#xff1a; 1&#xff1…

python以什么方式处理文件-Python文件修改和常用方法

为了更好地说明接下来的文件修改操作&#xff0c;我们有必要先来学习下文件操作的常用方法。 一、文件处理中的常用方法 #&#xff01;/usr/bin/env python3#-*- coding:utf-8 -*-#write by congcong #flush() 把文件从内存强制刷新到硬盘 f open("w_flush.txt",mod…

matlab设置工作路径

目录 暂时修改路径 永久修改路径 暂时修改路径 a)直接在页面的路径框里粘贴想进的路径然后 回车 即可 b) 如果只是想暂时将文件夹加入路径&#xff0c;防止函数名字空间污染的话&#xff0c;可采用本方法&#xff1a;用MATLAB运行目标文件夹下任意一个m文件&#xff0c;MATL…

Java System类详解

System 类位于 java.lang 包&#xff0c;代表当前 Java 程序的运行平台&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实例化该类。 System 类提供了一些类变量和类方…

linux入门_linux入门-常用命令的使用

linux入门-常用命令的使用对于命令行的接触&#xff0c;最开始是window下的cmd&#xff0c;比如查看电脑ip地址、进入某一个文件夹、下载npm模块等等window cmdwindow ipconfig对于习惯了window桌面操作系统的用户来说&#xff0c;其实是比较少接触到命令行的&#xff0c;而在l…

MATLAB遇到问题:错误使用eval,未定义与‘struct‘类型的输入参数相对应的函数‘workspacefunc‘

安装好什么也没干&#xff0c;就开始报错&#xff0c;命令行窗口输入什么都是错误 错误使用eval 未定义与’struct’类型的输入参数相对应的函数’workspacefunc’ 解决方法&#xff1a; 在命令行窗口分别输入下面语句&#xff0c;箭头可不是哦&#xff0c;只有加粗部分是 &…

广西壮族自治区直流充电桩说明书下载_鄂州便携式直流充电桩

安徽能通新能源科技有限公司坐落在一座美丽宜居的城市中。在我国东部地区、长江下游、巢湖之滨&#xff0c;横贯连接京台高速、沪蓉高速、沪陕高速、合徐高速、京合高铁、合宁高铁、合福高铁、合武高铁、京九铁路、宁西铁路并与世界有名的自然和文化遗产—黄山风景区毗邻&#…

Java多维数组

除了一维数组和二维数组外&#xff0c;Java 中还支持更多维的数组&#xff0c;如三维数组、四维数组和五维数组等&#xff0c;它们都属于多维数组。想要提高数组的维数&#xff0c;只要在声明数组时将索引与中括号再加一组即可&#xff0c;所以三维数组的声明为 int score[][][…

三大相关性分析之matlab

目录 1.简介 2.Pearson相关系数 算法详解 程序实现 3.Kendall相关系数 算法详解 程序实现 4.Spearman相关系数 算法详解 程序实现 1.简介 相关性分析是指对两个或多个具备相关性的变量元素进行分析&#xff0c;从而衡量两个变量因素的相关密切程度。相关性的元素之…

java反编译工具_Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)...

我之前推送过Java代码的编译与反编译&#xff0c;其中简单的介绍了Java编译与反编译相关的知识&#xff0c;最近给GitChat写《深入分析Java语法糖》的时候&#xff0c;又用到了很多反编译相关的知识&#xff0c;遂发现哪篇文章已有些过时。于是&#xff0c;这篇文章就这样呈现在…

Java不规则数组

多维数组被解释为是数组的数组&#xff0c;所以因此会衍生出一种不规则数组。 规则的 43 二维数组有 12 个元素&#xff0c;而不规则数组就不一定了。如下代码静态初始化了一个不规则数组。 int intArray[][] {{1,2}, {11}, {21,22,23}, {31,32,33}};**高维数组&#xff08;…

三大相关性分析之python

目录 1.简介 2.Pearson相关系数 算法详解 程序实现 3.Kendall相关系数 算法详解 程序实现 4.Spearman相关系数 算法详解 程序实现 1.简介 相关性分析是指对两个或多个具备相关性的变量元素进行分析&#xff0c;从而衡量两个变量因素的相关密切程度。相关性的元素之…

c语言实现http服务器_基于postman实现http接口测试过程解析_服务器其它

这篇文章主要介绍了基于postman实现http接口测试过程解析,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通…

Java比较数组

数组相等的条件不仅要求数组元素的个数必须相等&#xff0c;而且要求对应位置的元素也相等。Arrays 类提供了 equals() 方法比较整个数组。语法如下&#xff1a; Arrays.equals(arrayA, arrayB);其中&#xff0c;arrayA 是用于比较的第一个数组&#xff0c;arrayB 是用于比较的…

组合赋权法之matlab

目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标正向化 3.3 数据范围标准化 3.4 计算主观权重 3.5 计算客观权重 3.6 计算组合权重 3.7 计算得分 …

Java数组填充

Arrays 类提供了一个 fill() 方法&#xff0c;可以在指定位置进行数值填充。fill() 方法虽然可以填充数组&#xff0c;但是它的功能有限制&#xff0c;只能使用同一个数值进行填充。语法如下&#xff1a; Arrays.fill(array,value);其中&#xff0c;array 表示数组&#xff0c…

组合赋权法之python

目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标正向化 3.3 数据范围标准化 3.4 计算主观权重 3.5 计算客观权重 3.6 计算组合权重 3.7 计算得分…

wps分享为什么要登入_[win]为什么你需要便携应用?portableapps让你得心应手.

利益不相关:不过是一个免费软件的消费者和受益者Q: 想象一下,在你数据突然坏掉,无计可施的时候该怎么办?A:不用担心! portable apps 中有数据恢复软件 file recoveryrcvPortable (免费软件) - 文件恢复 with RecuvaWise Data Recovery Portable (免费软件) - 数据文件恢复现在…