python灰色关联度分析_python实现灰色关联分析(GRA)——以红酒质量指标为例

目录

程序简述

对红酒质量指标数据进行灰色关联分析,首先进行数据标准化,然后计算关联系数矩阵和平均综合关联度

程序输入:第一列为母序列的指标矩阵

程序输出:关联度矩阵

灰色关联分析方法(GRA),是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法。

数据集截图

图1,红酒质量指标

NZbb72a8r9vUsju7cegpgAAAABJRU5ErkJggg==

程序/数据集下载

b1guUvlC8DQAAAAASUVORK5CYII=

核心代码解析

Module/BuildModel.py(接口,可以直接运行)

建立灰色关联度模型,输入数据可选择是否需要标准化,结果保存在对象的result里,该代码可直接运行

# -*- coding: utf-8 -*-

from sklearn.preprocessing import StandardScaler

import pandas as pd

import numpy as np

import os

class GraModel():

'''灰色关联度分析模型'''

def __init__(self,inputData,p=0.5,standard=True):

'''

初始化参数

inputData:输入矩阵,纵轴为属性名,第一列为母序列

p:分辨系数,范围0~1,一般取0.5,越小,关联系数间差异越大,区分能力越强

standard:是否需要标准化

'''

self.inputData = np.array(inputData)

self.p = p

self.standard = standard

#标准化

self.standarOpt()

#建模

self.buildModel()

def standarOpt(self):

'''标准化输入数据'''

if not self.standard:

return None

self.scaler = StandardScaler().fit(self.inputData)

self.inputData = self.scaler.transform(self.inputData)

def buildModel(self):

#第一列为母列,与其他列求绝对差

momCol = self.inputData[:,0]

sonCol = self.inputData[:,0:]

for col in range(sonCol.shape[1]):

sonCol[:,col] = abs(sonCol[:,col]-momCol)

#求两级最小差和最大差

minMin = sonCol.min()

maxMax = sonCol.max()

#计算关联系数矩阵

cors = (minMin + self.p*maxMax)/(sonCol+self.p*maxMax)

#求平均综合关联度

meanCors = cors.mean(axis=0)

self.result = {'cors':{'value':cors,'desc':'关联系数矩阵'},'meanCors':{'value':meanCors,'desc':'平均综合关联系数'}}

if __name__ == "__main__":

#路径目录

curDir = os.path.dirname(os.path.abspath(__file__))#当前目录

baseDir = os.path.dirname(curDir)#根目录

staticDir = os.path.join(baseDir,'Static')#静态文件目录

resultDir = os.path.join(baseDir,'Result')#结果文件目录

#读数

data = [

[1,1.1,2,2.25,3,4],

[1,1.166,1.834,2,2.314,3],

[1,1.125,1.075,1.375,1.625,1.75],

[1,1,0.7,0.8,0.9,1.2]

]

data = np.array(data).T

#建模

model = GraModel(data,standard=True)

print(model.result)

接口调用、运行效果

Main.py

调用BuildModel.py的接口,实例分析,得到红酒质量与红酒PH等指标之间的关联度。

# -*- coding: utf-8 -*-

from Module.BuildModel import GraModel

import pandas as pd

import numpy as np

import os

import matplotlib.pyplot as plt

import seaborn as sns

#路径目录

baseDir = os.path.dirname(os.path.abspath(__file__))#当前目录

staticDir = os.path.join(baseDir,'Static')#静态文件目录

resultDir = os.path.join(baseDir,'Result')#结果文件目录

#接口要求第一列为母序列,即红酒质量

data = pd.read_csv(staticDir+'/winequality-red.csv',sep=';')

columns = ['quality','fixed acidity', 'volatile acidity',

'citric acid', 'residual sugar','chlorides',

'free sulfur dioxide', 'total sulfur dioxide',

'density','pH', 'sulphates', 'alcohol']

data = data[columns]

#建立灰色关联模型,标准化数据

model = GraModel(data,standard=True)

#模型计算结果

result = model.result

#平均关联程度

meanCors = result['meanCors']['value']

#可视化图表

#用来正常显示中文标签

plt.rcParams['font.sans-serif']=['SimHei']

#用来正常显示负号

plt.rcParams['axes.unicode_minus']=False

#可视化矩阵

plt.clf()

plt.figure(figsize=(8,12))

sns.heatmap(meanCors.reshape(1,-1), square=True, annot=True, cbar=False,

vmax=1.0,

linewidths=0.1,cmap='viridis')

plt.yticks([0,],['quality'])

plt.xticks(np.arange(0.5,12.5,1),columns,rotation=90)

plt.title('指标关联度矩阵')

plt.savefig(resultDir+'/指标关联度可视化矩阵.png',dpi=100,bbox_inches='tight')

图2,关联度矩阵热力图

f0FJSKituJIJRERdTgHBwfU1NRYrQ+tqKiATqfDjRs3BCYjIltx9zcREXWYhIQEAE1T3UlJSXBxcbE8PnDgAIKDg0XGI6I2YFFJREQdpvn8ckmSkJiYiE6dmj6GVCoVvL29kZycLDIeEbUBp7+JiKjDKak9EhE14UYdIiLqcFFRUXBychIdg4jaEUcqiYiIiKjNOFJJRERERG3GopKIiIiI2oxFJRERERG1GYtKIiIiImozFpVERERE1GYsKomIiIiozVhUEhEREVGbsagkIiIiojb7f1Smpb7EJikAAAAAAElFTkSuQmCC

标签:__,plt,为例,python,self,GRA,import,path,os

来源: https://www.cnblogs.com/boom-meal/p/12368475.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值