python做灰色关联度分析_【数学建模】通过python实现灰色关联度计算
1.关联分析
关联分析主要作用为对系统的因素进行分析,其主要作用为分辨因素中哪些因素对系统的影响是显著的,哪些影响是次要的。通常而言因素分析的主要方式为回归分析等,但其存在数据量要求大,计算量大等诸多问题,为克服以上问题,可采用关联分析进行系统分析。
数据变换方法
在进行系统分析之前,应对原始数据进行数据变换处理,以消除量纲。
数据变换的定义:
设有序列
x = ( x ( 1 ) , x ( 2 ) , ⋯ , x ( n ) ) x=(x(1), x(2), \cdots, x(n))x=(x(1),x(2),⋯,x(n))
则称映射:
f : x → y f: x \rightarrow yf:x→y
f ( x ( k ) ) = y ( k ) , k = 1 , 2 , ⋯ , n f(x(k))=y(k), \quad k=1,2, \cdots, nf(x(k))=y(k),k=1,2,⋯,n
为序列x xx到序列y yy的数据变换。
常见的数据变换方法有:
(1)初始化变换:
f ( x ( k ) ) = x ( k ) x ( 1 ) = y ( k ) , x ( 1 ) ≠ 0 f(x(k))=\frac{x(k)}{x(1)}=y(k), \quad x(1) \neq 0f(x(k))=x(1)x(k)=y(k),x(1)=0
(2)均值化变换:
f ( x ( k ) ) = x ( k ) x ˉ = y ( k ) , x ˉ = 1 n ∑ k = 1 n x ( k ) f(x(k))=\frac{x(k)}{\bar{x}}=y(k), \quad \bar{x}=\frac{1}{n} \sum_{k=1}^{n} x(k)f(x(k))=xˉx(k)=y(k),xˉ=n1∑k=1nx(k)
(3)归一化变换:
f ( x ( k ) ) = x ( k ) x 0 = y ( k ) f(x(k))=\frac{x(k)}{x_{0}}=y(k)f(x(k))=x0x(k)=y(k) 等。
关联分析
选取参考数列,一般为时间序列:
x 0 = { x 0 ( k ) ∣ k = 1 , 2 , ⋯ , n } = ( x 0 ( 1 ) , x 0 ( 2 ) , ⋯ , x 0 ( n ) ) x_{0}=\left\{x_{0}(k) \mid k=1,2, \cdots, n\right\}=\left(x_{0}(1), x_{0}(2), \cdots, x_{0}(n)\right)x0={x0(k)∣k=1,2,⋯,n}=(x0(1),x0(2),⋯,x0(n))
设有m mm个比较数列:
x i = { x i ( k ) ∣ k = 1 , 2 , ⋯ , n } = ( x i ( 1 ) , x i ( 2 ) , ⋯ , x i ( n ) ) , i = 1 , 2 , ⋯ , m x_{i}=\left\{x_{i}(k) \mid k=1,2, \cdots, n\right\}=\left(x_{i}(1), x_{i}(2), \cdots, x_{i}(n)\right), \quad i=1,2, \cdots, mxi={xi(k)∣k=1,2,⋯,n}=(xi(1),xi(2),⋯,xi(n)),i=1,2,⋯,m
则比较数列x i x_{i}xi对参考数列x 0 x_{0}x0在k kk时刻的关联系数为:
ξ i ( k ) = min s min t ∣ x 0 ( t ) − x s ( t ) ∣ + ρ max s max t ∣ x 0 ( t ) − x s ( t ) ∣ ∣ x 0 ( k ) − x i ( k ) ∣ + ρ max s max t ∣ x 0 ( t ) − x s ( t ) ∣ \xi_{i}(k)=\frac{\min _{s} \min _{t}\left|x_{0}(t)-x_{s}(t)\right|+\rho \max _{s} \max _{t}\left|x_{0}(t)-x_{s}(t)\right|}{\left|x_{0}(k)-x_{i}(k)\right|+\rho \max _{s} \max _{t}\left|x_{0}(t)-x_{s}(t)\right|}ξi(k)=∣x0(k)−xi(k)∣+ρmaxsmaxt∣x0(t)−xs(t)∣minsmint∣x0(t)−xs(t)∣+ρmaxsmaxt∣x0(t)−xs(t)∣
其中,ρ \rhoρ为分辨系数,max s max t ∣ x 0 ( t ) − x s ( t ) ∣ \max _{s} \max _{t} \mid x_{0}(t)-x_{s}(t)\midmaxsmaxt∣x0(t)−xs(t)∣与min s min t ∣ x 0 ( t ) − x s ( t ) ∣ \min _{s} \min _{t} \mid x_{0}(t)-x_{s}(t)\midminsmint∣x0(t)−xs(t)∣分别为两数列之间的两级最小差与两级最大差。
由于通过上述公式每个数列的每个时刻都能求出一个关联数,为防止信息过于分散,定义比较数列x i x_{i}xi对参考数列x 0 x_{0}x0的关联度r i r_{i}ri:
r i = 1 n ∑ k = 1 n ξ i ( k ) r_{i}=\frac{1}{n} \sum_{k=1}^{n} \xi_{i}(k)ri=n1∑k=1nξi(k)
2.实例
通过对某健将级女子铅球运动员的跟踪调查,获得其1982-1986年每年最好成绩以及16项专项素质和身体素质的时间序列资料,试对此铅球运动员的专项成绩进行因素分析。
首先对原始数据进行初始化处理:
y = ( 1 , x ( 2 ) x ( 1 ) , ⋯ , x ( n ) x ( 1 ) ) y=\left(1, \frac{x(2)}{x(1)}, \cdots, \frac{x(n)}{x(1)}\right)y=(1,x(1)x(2),⋯,x(1)x(n))
同时注意到最后两个数列为跑步时间,数值减少时意味着运动员水平的进步,因此应采取公式:
y i = ( 1 , x i ( 1 ) x i ( 2 ) , x i ( 1 ) x i ( 3 ) , x i ( 1 ) x i ( 4 ) , x i ( 1 ) x i ( 5 ) ) , i = 15 , 16 y_{i}=\left(1, \frac{x_{i}(1)}{x_{i}(2)}, \frac{x_{i}(1)}{x_{i}(3)}, \frac{x_{i}(1)}{x_{i}(4)}, \frac{x_{i}(1)}{x_{i}(5)}\right), i=15,16yi=(1,xi(2)xi(1),xi(3)xi(1),xi(4)xi(1),xi(5)xi(1)),i=15,16
取分辨系数ρ = 0.5 \rho=0.5ρ=0.5,计算各数列关联度Matlab程序如下:
clc,clear
load x.txt %把原始数据存放在纯文本文件 x.txt 中
for i=1:15
x(i,:)=x(i,:)/x(i,1); %标准化数据
end
for i=16:17
x(i,:)=x(i,1)./x(i,:); %标准化数据
end
data=x;
n=size(data,2); %求矩阵的列数,即观测时刻的个数
ck=data(1,:); %提出参考数列
bj=data(2:end,:); %提出比较数列
m2=size(bj,1); %求比较数列的个数
for j=1:m2
t(j,:)=bj(j,:)-ck;
end
mn=min(min(abs(t'))); %求小差
mx=max(max(abs(t'))); %求大差
rho=0.5; %分辨系数设置
ksi=(mn+rho*mx)./(abs(t)+rho*mx); %求关联系数
r=sum(ksi')/n %求关联度
[rs,rind]=sort(r,'descend') %对关联度进行排序
利用python解决:
import numpy as np
#进行关联度分析
data = open('athlete score.txt').readlines()
#数据初始化处理
for lines in range(15):
data[lines] = list(eval(data[lines]))
for i in range(1,len(data[lines])+1):
data[lines][-i] = data[lines][-i] / data[lines][0]
for lines in range(1,3):
data[-lines] = data[-lines].replace(",,",'.')
data[-lines] = list(eval(data[-lines]))
for i in range(1,len(data[-lines])+1):
data[-lines][-i] = data[-lines][0] / data[-lines][-i]
#提出参考数列、比较数列
x0 = np.array(data[0])
xi = np.array(data[1:])
t = xi - x0
#求两级最大差、两极最小差
maxi,mini = np.max(np.abs(t)),np.min(np.abs(t))
rho = 0.5
#求关联系数、关联度
kesi = ((mini + rho*maxi) / (np.abs(t) + rho*maxi)) / np.size(x0)
ri = kesi.sum(axis=1)
print(ri)
程序运行结果如下:
对比Matlab结果:
参考文献
司守奎, 徐珂文, 李日华. 数学建模算法与程序[J]. 海军航空工程学院, 2007, 9: 95-98.
python做灰色关联度分析_【数学建模】通过python实现灰色关联度计算相关推荐
- 灰色关联度分析_数学建模|关联分析之术|灰度预测模型预备知识
关联分析 作者:PureFFFmennory 联系方式:ProdigyYanng@gmail.com 1. 目的 现实客观事物的每个现象非常复杂,影响因素繁多.对某一个系统而言,需要对该系统进行因素分 ...
- 数学建模灵敏度分析_数学建模中的灵敏度分析,到底在分析什么?
-2019/6/13- 概念 在数学建模中使用最优化方法时,我们常常会忽略对模型进行灵敏度分析,若缺少这一个步骤,会使得模型的可靠度受到质疑,那到底什么是灵敏度分析? 参考百度:灵敏度分析,是研究与分 ...
- python做学生管理系统数据库模型_数据库建模:学生信息系统搭建实验
首先必须理清学生信息系统有哪些实体,这些实体之间的关系又是如何的,他们之间是怎么进行关联的 实体有哪些: 学生表(student) 专业表(major) 课程表(course) 成绩表(grade) ...
- python做一个星座分析_利用python输出星座的方法
利用python输出星座的方法 发布时间:2020-09-23 12:12:36 来源:亿速云 阅读:84 作者:小新 这篇文章将为大家详细讲解有关利用python输出星座的方法,小编觉得挺实用的,因 ...
- python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归
版权说明:本公号转载文章旨在学习交流,不用于任何商业用途,版权归原作者所有,如有异议,敬请后台联络我们,议定合作或删除,我们将第一时间按版权法规定妥善处理,非常感谢! Python机器学习算法实现 A ...
- 用python做视觉检测系统_教你用 Python 做一个物体检测系统
在本文中,我们将了解物体检测技术是什么以及可以用来解决此领域问题的几种不同方法,接着深入研究在Python中如何构建我们自己的对象检测系统.在本文结束时,您将拥有足够的知识来独自迎接不同的物体检测挑战 ...
- python做的项目管理软件_幽雅的使用Python之软件管理
优雅的使用Python之软件管理 上篇<>,如何管理python环境,有了一个干净的python环境之后,就不可避免的安装python软件包(python软件包丰富也是它的优点之一,不用重 ...
- pow在python中是什么意思_数学.pow在Python中是十进制的?
所以我写了一个简单的脚本来演示几何级数的收敛性.在from decimal import * import math initial = int(input("a1? ")) r ...
- python股票量化交易入门到实践_量化资料学习《Python与量化投资从基础到实战》+《量化交易之路用Python做股票量化分析》+《组织与管理研究的实证方法第2版》...
我们需要利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,重点学习如何高效地利用Python解决投资策略问题,推荐学习<Python与量化投资从基础到实战>等电子资料. ...
- 图书销量时间序列预测_数学建模_Prophet实现
图书销量时间序列预测_数学建模_Prophet实现 前言 主要参考 代码 库导入与函数设置 导库 展示函数 取数据函数 训练函数 评估函数 数据预处理 数据集划分 数据分布查看 销售曲线查看 销售预测 ...
最新文章
- python excel操作单元格_python 操作excel表格的方法
- 《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-13 ClientBuilderManager类别的编译功能...
- robotframework常见问题解决汇总
- docker fig mysql_docker管理工具 Fig 配置文件fig.yml的详解
- 不用临时变量交换两个变量的值
- k8s 命令 重启_k8s 常用命令
- php cdi_Quarkus的其他(非标准)CDI功能
- 入门机器学习(二十)--编程作业-异常检测和推荐系统(Python实现)
- This is probably not a problem with npm. There is likely additional logging
- 数据分箱4——卡方最优分箱 ChiMerge算法使用(有监督)
- Wide-Baseline Image Matching Using Line Signatures
- linux 下配置jdk
- 如何将PDF文档转换成JPG格式
- 城市天际线伊甸园39W人口存档
- 真的会有大牛市吗老大?前提条件是破2万美刀,差一刀都不行!
- Layui同一个表单中放置两个按钮,提交问题
- Mysql基础篇(6)—— 视图
- 用hidusb.sys还是winusb.sys读写一个只有In/Out Interrupt Endpoints的STM32 USB设备?
- 算法题:1到4位编码推下标
- 15分钟详解 Python 安全认证的那些事儿~
热门文章
- Processing 入门教程(二十四) lerp函数
- [转]刨根问底!曲面细分技术到底是个啥?
- 2021CodePen炫酷无比的作品
- 从0到10万,产品冷启动时怎样找到并留住种子用户?
- win7 win10系统 安装虚拟机VMware教程
- 如何使用cmd进入打印机选项_怎么用cmd运行功能添加WiFi打印机
- sdp ddp内存怎么分_映众iCHILL DDR4 RGB内存开箱测试,时序和频率同样重要
- 通过最后更新物流分析多家快递的重点路向时限并导出表格
- 开放申请 | 2022腾讯AI Lab犀牛鸟专项研究计划
- C++排序算法:归并排序详解