数学建模(灰色关联度 python代码 案例)

目录

介绍:

模板:

案例:哪些原因影响结婚率

 数据标准化:

灰色关联度系数:

完整代码:

结果: 

介绍:

灰色关联度是一种多指标综合评价方法,用于分析和评价不同指标之间的关联程度。它可以用于确定多个因素之间的相关性,以及它们对某个问题或现象的影响程度。

灰色关联度根据数据的相对大小和发展趋势,将指标划分为灰色数列,然后通过计算各指标之间的相对关联度来确定其关联程度。

灰色关联度的计算过程包括以下几个步骤:
1. 数据标准化:将各指标的原始数据进行标准化处理,将其转化为无量纲的数据。
2. 累积生成:将各指标数据按照一定顺序进行累积生成,得到灰色数列。
3. 关联系数计算:计算各指标与问题或现象之间的关联度,得到关联系数。
4. 排序和评价:根据关联系数对指标进行排序,评价其对问题或现象的影响程度。

通过灰色关联度分析,可以帮助人们理解指标之间的关系,并进一步确定影响问题或现象的主要因素。这种方法常用于战略决策、经济发展、工程管理等领域,具有较高的应用价值。

模板:

import numpy as np

def gray_relation_coefficient(x, y):
    '''
    计算两个序列的灰色关联度
    参数:
        x: 序列x(一维数组)
        y: 序列y(一维数组)
    返回值:
        关联度值(float)
    '''
    n = len(x)
    # 数据标准化
    x_mean = np.mean(x)
    y_mean = np.mean(y)
    x_std = np.std(x)
    y_std = np.std(y)
    x_normalized = (x - x_mean) / x_std
    y_normalized = (y - y_mean) / y_std
    
    # 构造灰色数列
    x_cumulative = np.cumsum(x_normalized)
    y_cumulative = np.cumsum(y_normalized)
    
    # 计算关联系数
    d = np.abs(x_cumulative - y_cumulative)
    delta = np.max(d)
    rho = 0.5
    relation_coefficient = (rho * delta + 1) / (d + rho * delta + 1)
    
    return relation_coefficient

# 测试示例
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 5, 7, 9, 11])

relation_coefficient = gray_relation_coefficient(x, y)
print("关联度值:", relation_coefficient)
 

案例:哪些原因影响结婚率

 数据标准化:

def normalization(data1):
    [m, n] = data1.shape  # 得到行数和列数
    data2 = data1.astype('float')
    data3 = data2
    ymin = 0.001
    ymax = 1
    for j in range(0, n):
        d_max = max(data2[:, j])
        d_min = min(data2[:, j])
        data3[:, j] = (ymax - ymin) * (data2[:, j] - d_min) / (d_max - d_min) + ymin
    #print(data3)
    return data3

灰色关联度系数:

 

 

def Score(data):
    # 得到其他列和参考列相等的绝对值
    data3=data
    [n, m] = data3.shape
    #print(n)
    for i in range(1, m):
        data3[:, i] = np.abs(data3[:, i] - data3[:, 0])

    # 得到绝对值矩阵的全局最大值和最小值
    data4 = data3[:, 1:m]
    d_max = np.max(data4)
    d_min = np.min(data4)
    a = 0.5  # 定义分辨系数

    # 计算灰色关联矩阵
    data4 = (d_min + a * d_max) / (data4 + a * d_max)
    score = np.mean(data4, axis=0)
    return score

 完整代码:

# coding=gbk
import pandas as pd
import numpy as np
def normalization(data1):
    [m, n] = data1.shape  # 得到行数和列数
    data2 = data1.astype('float')
    data3 = data2
    ymin = 0
    ymax = 1
    for j in range(0, n):
        d_max = max(data2[:, j])
        d_min = min(data2[:, j])
        data3[:, j] = (ymax - ymin) * (data2[:, j] - d_min) / (d_max - d_min) + ymin
    #print(data3)
    return data3

def Score(data):
    # 得到其他列和参考列相等的绝对值
    data3=data
    [n, m] = data3.shape
    #print(n)
    for i in range(1, m):
        data3[:, i] = np.abs(data3[:, i] - data3[:, 0])

    # 得到绝对值矩阵的全局最大值和最小值
    data4 = data3[:, 1:m]
    d_max = np.max(data4)
    d_min = np.min(data4)
    a = 0.5  # 定义分辨系数

    # 计算灰色关联矩阵
    data4 = (d_min + a * d_max) / (data4 + a * d_max)
    print("灰色关联矩阵:")
    print(data4)
    score = np.mean(data4, axis=0)
    return score

if __name__ == '__main__':
    # 导入数据
    data = pd.read_excel('D:\\桌面\\建模\\6\\代码\\marry.xlsx')
    # print(data)
    # 提取变量名
    label_need = data.keys()[1:]
    # print(label_need)
    # 提取上面变量名下的数据
    data1 = data[label_need].values
    #print(data1)

    data3=normalization(data1)#标准化

    scores=Score(data3)#算灰色关联度

    [m, n] = data1.shape  # 得到行数和列数

    #print(data)
    print()
    for i in range(1, n):
        print(label_need[0], "与", label_need[i], "的灰色关联度", scores[i - 1])

结果: 

上一篇:【机器学习】基于蝴蝶算法优化的BP神经网络分类预测(BOA-BP)


下一篇:雷池 WAF 社区版:下一代 Web 应用防火墙的革新