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

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;横贯连接京台高速、沪蓉高速、沪陕高速、合徐高速、京合高铁、合宁高铁、合福高铁、合武高铁、京九铁路、宁西铁路并与世界有名的自然和文化遗产—黄山风景区毗邻&#…

三大相关性分析之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;通…

组合赋权法之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 计算得分 …

组合赋权法之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 计算得分…

蒙特卡罗模拟法 —— matlab

目录 1.简介 2.实例分析 2.1 模拟求近似圆周率 2.2 估算定积分 2.3 求解整数规划 1.简介 蒙特卡洛又称随机抽样或统计试验&#xff0c;就是产生随机变量&#xff0c;带入模型算的结果&#xff0c;寻优方面&#xff0c;只要模拟次数够多&#xff0c;最终是可以找到最优解或…

浏览器打开出现证书错误_2分钟轻松解决ie证书错误

我们日常在用IE上网的时候&#xff0c;可能会出现IE证书错误的提示&#xff0c;对于电脑小白来说会很痛苦&#xff0c;不妨跟小编一起学习&#xff0c;学会了下次就知道怎么解决了&#xff0c;下面就告诉大家&#xff0c;如何解决显示IE网页证书错误最基本的方法&#xff01;其…

蒙特卡罗模拟法 —— python

目录 1.简介 2.实例分析 2.1 模拟求近似圆周率 2.2 估算定积分 2.3 求解整数规划 1.简介 蒙特卡洛又称随机抽样或统计试验&#xff0c;就是产生随机变量&#xff0c;带入模型算的结果&#xff0c;寻优方面&#xff0c;只要模拟次数够多&#xff0c;最终是可以找到最优解或…

win10推送_Win10推送更新升级Edge浏览器:用户发现电脑速度因此变慢

新Win10让电脑变慢&#xff1f;如果你有类似感觉&#xff0c;那并非首例。据外媒报道&#xff0c;不完全汇总发现&#xff0c;在打上Windows 10补丁KB4559309, KB4541301或者KB4541302(视Windows版本不同)后&#xff0c;部分用户报告了启动速度以及日常运行程序变慢的情况。上述…

java人民币读法转换

实现浮点数转换成人民币读法字符串 将浮点数转换成人民币读法字符串&#xff0c; 例如&#xff1a; 将1006.333转换为壹千零陆元叁角叁分。 整体解析&#xff1a; 将浮点数分成整数部分和小数部分&#xff0c;分开处理整数部分和小数部分。 小数部分的处理比较简单&#xff…

博弈论 —— matlab

目录 1.简介 2.算法原理 3.实例分析 1.各参数初始化 2.计算期望与实际期望 3.博弈过程 4.绘图 完整代码 1.简介 博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支&#xff0c;也是运筹学的一个重要学科。 博弈论主要研究公式化了的激励结构间的相互作用。是研…