用Python解决综合评价问题_模糊综合评价,决策树与灰色关联分析

一:模糊综合评价

模糊综合评价是一种有效的处理不确定性和模糊性的评价方法,特别是在人才评价等领域。它允许我们综合考虑多个评价指标,并给出一个综合的评价结果。以下是利用模糊综合评价对人才进行评价的步骤:

  1. 确定评价指标:首先,我们需要确定用于评价人才的各种指标,例如专业技能、团队合作能力、创新能力等。

  2. 建立评价集:评价集是对人才评价结果的集合,例如“优秀”、“良好”、“一般”、“较差”等。

  3. 确定权重:每个评价指标对人才评价的影响程度不同,因此需要为每个指标分配一个权重,表示其重要性。

  4. 构建模糊关系矩阵:通过专家打分或其他方法,对每个指标进行评价,构建一个模糊关系矩阵,表示评价指标与评价集之间的关系。

  5. 模糊合成:使用合适的合成方法(如最大-最小合成法),将模糊关系矩阵与权重相结合,得到一个综合评价结果。

  6. 结果分析:对综合评价结果进行分析,得出对人才的最终评价。

现在,我们可以通过一个示例来演示这个过程。假设我们有三个评价指标:专业技能、团队合作能力和创新能力,每个指标的权重分别为0.6、0.3 和 0.1。评价集为{ 优秀,良好,一般,较差 }。我们可以构建一个模糊关系矩阵,并计算出一个综合评价结果。

为了简化计算,我们可以假设模糊关系矩阵已经通过专家打分得到。接下来,我将使用Python来计算这个模糊综合评价。首先,我们需要定义权重和模糊关系矩阵。然后,我们将使用模糊合成方法来计算最终的评价结果。

import numpy as np# 定义权重
weights = np.array([0.6, 0.3, 0.1])# 每一行代表一个评价指标,每一列代表一个评价等级(优秀,良好,一般,较差)
fuzzy_relation_matrix = np.array([[0.7, 0.2, 0.1, 0],[0.6, 0.3, 0.1, 0],[0.2, 0.5, 0.3, 0]
])# 计算综合评价结果
# 使用最大-最小合成法
def fuzzy_composite_evaluation(weights, fuzzy_relation_matrix):# 将权重扩展到与模糊关系矩阵相同的维度weighted_matrix = np.tile(weights, (fuzzy_relation_matrix.shape[1], 1)).T * fuzzy_relation_matrix# 计算每个评价等级的综合得分composite_scores = np.max(weighted_matrix, axis=0)return composite_scorescomposite_scores = fuzzy_composite_evaluation(weights, fuzzy_relation_matrix)
composite_scores

通过计算,我们得到了每个评价等级的综合得分:优秀为0.42,良好为0.12,一般为0.06,较差为0。这意味着根据给定的权重和模糊关系矩阵,这位人才在“优秀”这一评价等级上的得分最高,因此可以认为这位人才的整体表现是优秀的。

以下是对这段代码中模糊综合评价所用数学原理的解释:

一、权重的作用

给定的权重 weights = np.array([0.6, 0.3, 0.1]),表示各个评价指标在综合评价中的重要程度。权重值越大,对应的评价指标对最终结果的影响就越大。

二、模糊关系矩阵

模糊关系矩阵 fuzzy_relation_matrix 每一行代表一个评价指标,每一列代表一个评价等级(优秀,良好,一般,较差)。矩阵中的元素表示某个评价指标对于特定评价等级的隶属度。例如,fuzzy_relation_matrix[0][0]=0.7 表示第一个评价指标对于 “优秀” 这个评价等级的隶属度为 0.7,即有70%的可能性认为该人才在专业技能方面是优秀的。具体来说:

  • 第一行代表“专业技能”这一评价指标在不同评价等级上的隶属度。
  • 第二行代表“团队合作能力”这一评价指标在不同评价等级上的隶属度。
  • 第三行代表“创新能力”这一评价指标在不同评价等级上的隶属度。

三、最大 - 最小合成法

1:扩展权重:将权重扩展到与模糊关系矩阵相同的维度,通过 np.tile(weights, (fuzzy_relation_matrix.shape[1], 1)).T 操作,将权重在列方向上进行重复,使其维度与模糊关系矩阵一致。然后与模糊关系矩阵相乘,得到 weighted_matrix。这个过程实际上是将每个评价指标的权重与对应的隶属度进行结合,得到加权后的隶属度。

2:计算综合得分composite_scores = np.max(weighted_matrix, axis=0),对加权后的矩阵在列方向上取最大值。这是基于最大 - 最小合成法的原理,即对于每个评价等级,取所有评价指标在该等级上的加权隶属度的最大值作为该等级的综合得分。这种方法体现了在模糊综合评价中,综合考虑各个评价指标的影响,以最具优势的情况来确定最终的评价结果。

总的来说,这段代码通过给定的权重和模糊关系矩阵,利用最大 - 最小合成法计算出每个评价等级的综合得分,从而实现对评价对象的模糊综合评价。这种方法适用于处理具有模糊性和不确定性的评价问题,能够更全面地反映评价对象的特点。

二:决策树

决策树是一种在机器学习和数据分析中广泛使用的模型,它通过学习样本数据的特征和决策规则,构建一个树状的决策流程,以此来预测新样本的类别或数值。在人才评价指标的应用中,决策树可以根据一系列预定义的评价指标,如工作经验、教育背景、技能水平等,来对人才进行分类或评分。

构建决策树模型通常包括以下几个步骤:

  1. 特征选择:选择最能代表人才特征的评价指标,这些指标应该是对人才评价最具预测力的。特征选择的方法包括信息增益、信息增益比和基尼指数等。

  2. 决策树生成:使用训练数据集来构建决策树。这个过程通常是一个递归过程,通过不断地选择最优的特征进行数据集的分割,直到满足停止条件,如达到最大树深、节点包含的样本数量低于阈值或信息增益小于某个值。

  3. 决策树剪枝:为了防止过拟合,决策树可能需要剪枝。剪枝过程包括预剪枝和后剪枝,预剪枝是在树生长过程中提前停止树的生长,后剪枝是在树完全生长后,从底向上评估是否合并决策节点。

  4. 模型评估:使用测试数据集对构建的决策树模型进行评估,常用的评估指标包括准确率、召回率、精确度和F1分数等。

在实际应用中,决策树算法如ID3、C4.5和CART等,可以处理分类和回归问题。ID3和C4.5主要用于分类问题,而CART可以同时处理分类和回归问题。这些算法在选择分裂节点时使用不同的准则,如ID3使用信息增益,C4.5使用信息增益比,CART使用基尼指数。

假设我们有一个人才评价数据集,包含了 10 个人才的评价指标和评价结果。评价指标包括:学历、工作经验、专业技能、沟通能力、团队合作能力、创新能力、领导力、责任心、工作态度和绩效表现。评价结果分为优秀、良好、一般和差四个等级。

我们可以将这个数据集表示为一个决策表,其中每一行表示一个人才,每一列表示一个评价指标或评价结果。决策表的形式如下:

人才编号学历工作经验专业技能沟通能力团队合作能力创新能力领导力责任心工作态度绩效表现评价结果
1硕士5 年优秀
2本科3 年良好
3本科2 年一般
4硕士4 年优秀
5本科3 年良好
6本科2 年一般
7硕士5 年优秀
8本科3 年良好
9本科2 年一般
10硕士4 年优秀

下面是一个利用决策树根据一些人才评价指标对人才进行评价的例子:

import pandas as pd
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
  • pandas 是一个数据分析库,用于处理和操作结构化数据。
  • SelectKBest 是 scikit-learn 库中的一个类,用于选择 K 个最佳特征。
  • chi2 是卡方检验,用于 SelectKBest 的得分函数,以评估特征与目标变量之间的关系。
  • DecisionTreeClassifier 是 scikit-learn 中的决策树分类器。
  • tree 模块用于导出决策树的规则。
# 假设的人才评价数据
data = {'人才编号': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],'学历': ['硕士', '本科', '本科', '硕士', '本科', '本科', '硕士', '本科', '本科', '硕士'],'工作经验': [5, 3, 2, 4, 3, 2, 5, 3, 2, 4],'专业技能': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'沟通能力': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'团队合作能力': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'创新能力': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'领导力': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'责任心': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'工作态度': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'绩效表现': ['高', '中', '低', '高', '中', '低', '高', '中', '低', '高'],'评价结果': ['优秀', '良好', '一般', '优秀', '良好', '一般', '优秀', '良好', '一般', '优秀']
}df = pd.DataFrame(data)

这里定义了一个名为 data 的字典,其中包含了假设的人才评价数据。这些数据被转换成了 pandas DataFrame 对象 df

# 数据预处理:将类别型数据进行数值编码
df['学历'] = df['学历'].map({'本科': 0, '硕士': 1})
df['专业技能'] = df['专业技能'].map({'低': 0, '中': 1, '高': 2})
df['沟通能力'] = df['沟通能力'].map({'低': 0, '中': 1, '高': 2})
df['团队合作能力'] = df['团队合作能力'].map({'低': 0, '中': 1, '高': 2})
df['创新能力'] = df['创新能力'].map({'低': 0, '中': 1, '高': 2})
df['领导力'] = df['领导力'].map({'低': 0, '中': 1, '高': 2})
df['责任心'] = df['责任心'].map({'低': 0, '中': 1, '高': 2})
df['工作态度'] = df['工作态度'].map({'低': 0, '中': 1, '高': 2})
df['绩效表现'] = df['绩效表现'].map({'低': 0, '中': 1, '高': 2})
df['评价结果'] = df['评价结果'].map({'一般': 0, '良好': 1, '优秀': 2})

数据预处理阶段,将类别型数据(如学历、专业技能等)转换为数值型数据,以便机器学习模型可以处理。这里使用了 pandas 的 map 函数,将原始的文本标签映射为数值。

X = df.iloc[:, :-1]  # 特征
y = df.iloc[:, -1]   # 标签
selector = SelectKBest(score_func=chi2, k='all')
selector.fit(X, y)
scores = selector.scores_
  • X 包含了除最后一列(评价结果)之外的所有列,即特征。
  • y 是最后一列,即目标变量(评价结果)。
  • SelectKBest 实例化时使用了卡方检验作为得分函数,并且设置为选择所有特征(k='all')。
  • fit 方法用于计算每个特征的得分。
  • scores_ 属性包含了每个特征的得分。
selected_features = X.columns[(-scores).argsort()[:3]]
print("选择的属性:", selected_features)

这里选择了得分最高的三个特征。argsort 方法返回了得分从小到大的索引,取负数后变成了从大到小,然后取前三个索引。

clf = DecisionTreeClassifier()
clf.fit(X[selected_features], y)
tree_rules = tree.export_text(clf, feature_names=selected_features.tolist())
print(tree_rules)
  • 实例化一个决策树分类器 clf
  • 使用选定的特征 X[selected_features] 和目标变量 y 来训练决策树。
  • 使用 export_text 方法导出决策树的规则,以文本形式展示。
# 人才评价示例
new_talent = {'学历': 1, '工作经验': 4, '专业技能': 2, '沟通能力': 2, '团队合作能力': 2,'创新能力': 2, '领导力': 2, '责任心': 2, '工作态度': 2, '绩效表现': 2}
new_talent_df = pd.DataFrame([new_talent])
new_talent_df = new_talent_df[selected_features]
prediction = clf.predict(new_talent_df)
print(f"根据决策树模型,新人才的评价结果为:{'一般' if prediction[0] == 0 else '良好' if prediction[0] == 1 else '优秀'}")
  • 创建一个新的 DataFrame 对象 new_talent_df,包含一个新人才的数据。
  • 使用决策树模型对新的数据进行预测。
  • 打印预测结果,将数值标签映射回原始的文本标签。

决策树的规则与预测结果如下:

三:灰色关联分析

灰色关联分析是一种多因素统计分析方法,它以各因素的样本数据为依据,用灰色关联度来描述因素间关系的强弱、大小和次序。下面是一个利用灰色关联分析根据一些人才评价指标对人才进行评价的示例。

假设我们要评价三位候选人(A、B、C)的综合素质,选取了以下五个评价指标:

  1. 教育背景(X1):学历水平,博士为 5 分,硕士为 4 分,本科为 3 分,大专为 2 分,高中及以下为 1 分。
  2. 工作经验(X2):工作年限,每满一年得 1 分。
  3. 专业技能(X3):通过相关专业技能考试的数量,每通过一项得 2 分。
  4. 创新能力(X4):过去三年发表的论文数量,每篇得 3 分。
  5. 团队协作能力(X5):由同事和上级进行评价,满分 10 分。

三位候选人的各项指标得分如下表所示:

候选人教育背景(X1)工作经验(X2)专业技能(X3)创新能力(X4)团队协作能力(X5)
A45638
B37427
C53846

接下来,我们使用灰色关联分析对这三位候选人进行评价。

步骤一:确定参考序列和比较序列

参考序列(X0)是理想的人才评价指标值,我们可以取各项指标的最大值作为参考序列:

X0 = [5, 7, 8, 4, 8]

比较序列(Xi)是三位候选人的各项指标得分:

X1 = [4, 5, 6, 3, 8]
X2 = [3, 7, 4, 2, 7]
X3 = [5, 3, 8, 4, 6]

步骤二:数据无量纲化处理

为了消除不同指标量纲的影响,我们对数据进行无量纲化处理。这里采用初值化方法,即将每个序列的第一个数据作为基准,其他数据除以该基准值。

无量纲化后的参考序列和比较序列如下:

X0' = [1, 1, 1, 1, 1]

X1' = [4/5, 5/5, 6/5, 3/5, 8/5] = [0.8, 1, 1.2, 0.6, 1.6]
X2' = [3/5, 7/5, 4/5, 2/5, 7/5] = [0.6, 1.4, 0.8, 0.4, 1.4]
X3' = [5/5, 3/5, 8/5, 4/5, 6/5] = [1, 0.6, 1.6, 0.8, 1.2]

步骤三:计算关联系数

对于候选人 A:

对于候选人 B:

对于候选人 C:

步骤四:计算关联度

步骤五:评价结果分析

根据关联度的大小对候选人进行评价,关联度越大,说明该候选人与理想人才的匹配程度越高。

从计算结果可以看出,候选人 A 和候选人 C 的关联度相同且大于候选人 B 的关联度。因此,候选人 A 和候选人 C 的综合素质相对较高,候选人 B 的综合素质相对较低。

以上过程用可以用以下代码表示:

import numpy as np# 原始数据
data = np.array([[4, 5, 6, 3, 8], [3, 7, 4, 2, 7], [5, 3, 8, 4, 6]])# 确定参考序列(取各项指标最大值)
ref_seq = np.max(data, axis=0)# 数据无量纲化处理(初值化方法)
normalized_data = data / ref_seq# 计算关联系数
def calculate_correlation_coefficient(ref_seq, compared_seq, rho=0.5):min_diff = np.min(np.abs(ref_seq - compared_seq))max_diff = np.max(np.abs(ref_seq - compared_seq))return (min_diff + rho * max_diff) / (np.abs(ref_seq - compared_seq) + rho * max_diff)correlation_coefficients = []
for candidate in normalized_data:correlation_coefficients.append(calculate_correlation_coefficient(ref_seq, candidate))# 计算关联度(关联系数的平均值)
correlation_degrees = [np.mean(candidate_correlation) for candidate_correlation in correlation_coefficients]print("关联度:", correlation_degrees)

想要探索更多元化的数据分析视角,可以关注之前发布的相关内容。

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

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

相关文章

Git常用指令整理【新手入门级】【by慕羽】

Git 是一个分布式版本控制系统,主要用于跟踪和管理源代码的更改。它允许多名开发者协作,同时提供了强大的功能来管理项目的历史记录和不同版本。本文主要记录和整理,个人理解的Git相关的一些指令和用法 文章目录 一、git安装 & 创建git仓…

【AI大模型】ChatGPT模型原理介绍(上)

目录 🍔 什么是ChatGPT? 🍔 GPT-1介绍 2.1 GPT-1模型架构 2.2 GPT-1训练过程 2.2.1 无监督的预训练语言模型 2.2.2 有监督的下游任务fine-tunning 2.2.3 整体训练过程架构图 2.3 GPT-1数据集 2.4 GPT-1模型的特点 2.5 GPT-1模型总结…

深度学习-神经网络

文章目录 一、基本组成单元:神经元二、神经网络层三、偏置与权重四、激活函数1.激活函数的作用2.常见的激活函数1).Sigmoid2).Tanh函数3).ReLU函数 五、优点与缺点六、总结 神经网络(Neural Network, NN)是一种模拟人类大脑工作方式的计算模型…

Debian11.9镜像基于jre1.8的Dockerfile

Debian11.9基于jre1.8的Dockerfile编写 # 使用Debian 11.9作为基础镜像 FROM debian:11.9 # 维护者信息(建议使用LABEL而不是MAINTAINER,因为MAINTAINER已被弃用) LABEL maintainer"caibingsen" # 创建一个目录来存放jre …

LabVIEW提高开发效率技巧----VI服务器和动态调用

VI服务器(VI Server)和动态调用是LabVIEW中的两个重要功能,可以有效提升程序的灵活性、模块化和可扩展性。通过这两者的结合,开发者可以在运行时动态加载和调用VI(虚拟仪器),实现更为复杂的应用…

【我的 PWN 学习手札】Unsortedbin Attack

前言 Unsortedbin Attack不能说是一种getshell的方式,而只能说是一种利用手法。在glibc2.28之前有效,条件是存在uaf,效果是能在某一地址写一个大数(glibc上的一个地址)。 一、Unsortedbin的unlink过程 unsortedbin …

Android Framework(六)WMS-窗口显示流程——窗口内容绘制与显示

文章目录 窗口显示流程明确目标 窗户内容绘制与显示流程窗口Surface状态完整流程图 应用端处理finishDrawingWindow 的触发 system_service处理WindowState状态 -- COMMIT_DRAW_PENDING本次layout 流程简述 窗口显示流程 目前窗口的显示到了最后一步。 在 addWindow 流程中&…

C语言中数据类型

一、C 语言中数据类型 基本数据类型: 整型(int):用于存储整数,如:1、2、3等。字符型(char):用于存储单个字符,如:‘a’、‘b’、c’等。浮点型&a…

中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测

中秋献礼!2024年中科院一区极光优化算法分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测 目录 中秋献礼!2024年中科院一区极光优化算法分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介…

一种多策略改进小龙虾智能优化算法MSCOA 改进策略:种群混沌映射初始化+透镜成像反向学习+黄金正弦变异策略

一种多策略改进小龙虾智能优化算法MSCOA 改进策略:种群初始化精英反向透镜成像反向学习黄金正弦变异策略 文章目录 一、小龙虾COA基本原理二、改进策略2.1种群初始化 映射2.2 透镜成像反向学习2.3 黄金正弦变异策略 三、实验结果四、核心代码五、代码获取六、总结 一…

每日一个数据结构-跳表

文章目录 什么是跳表?示意图跳表的基本原理跳表的操作跳表与其他数据结构的比较 跳表构造过程 什么是跳表? 跳表(Skip List)是一种随机化的数据结构,它通过在有序链表上增加多级索引来实现快速查找、插入和删除操作。…

react hooks--useState

概述 useState 可以使函数组件像类组件一样拥有 state,也就说明函数组件可以通过 useState 改变 UI 视图。那么 useState 到底应该如何使用,底层又是怎么运作的呢,首先一起看一下 useState 。 问题:Hook 是什么? 一个 Hook 就是…

TensorRT-LLM——优化大型语言模型推理以实现最大性能的综合指南

引言 随着对大型语言模型 (LLM) 的需求不断增长,确保快速、高效和可扩展的推理变得比以往任何时候都更加重要。NVIDIA 的 TensorRT-LLM 通过提供一套专为 LLM 推理设计的强大工具和优化,TensorRT-LLM 可以应对这一挑战。TensorRT-LLM 提供了一系列令人印…

Double Write

优质博文:IT-BLOG-CN 一、存在的问题 为什么需要Double Write: InnoDB的PageSize是16kb,其数据校验也是针对这16KB来计算的,将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统,写文件是以4KB作为基…

Python基础语法(1)上

常量和表达式 我们可以把 Python 当成一个计算器,来进行一些算术运算。 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) 这里我们可能会有疑问,为什么不是1.6666666666666667呢? 其实在编程中,一般没有“四舍五入”这样的规则…

基于Python DoIPClient库的DoIP上位机开发手顺

代码 address, announcement DoIPClient.await_vehicle_announcement()logical_address announcement.logical_addressip, port addressprint(ip, port, logical_address) 效果 代码 address, announcement DoIPClient.get_entity(ecu_ip_addresssIp, protocol_version3…

二叉树OJ题——相同的树

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 相同的树 二、解题思路 时间复杂度:O(min(n,m)) 三、解题代码

解决IDEA每次创建新项目时都要指定Maven仓库和Maven配置文件的问题

文章目录 0. 前言1. 打开新项目的设置2. 搜索 Maven 相关的配置3. 更改Maven主路径、配置文件、本地仓库4. 更改新项目的Maven配置后没生效 0. 前言 在 IDEA 中每次创建新项目时,使用的都是默认的 Maven 仓库和默认的配置文件,需要我们手动修改&#xf…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(三)

简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产力。…

SpringSecurity原理解析(八):CSRF防御解析

一、CsrfFilter CsrfFilter 主要功能是用来防止csrf攻击 一、什么是CSRF攻击 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF&#xff0c…