灰色关联分析

先来一段概念:

    灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。

对,我最开始读的时候也感觉很。。。

画个图:

灰色分析法就是从几何空间的角度来衡量曲线的相似度。

举个例子:

Python code

# 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])

数学原理:

X1代表一个序列,x1(k)是序列的第k个数

上面数据的一列是一个序列

参考数据列, 上面选取第一列。计算相似度

对每一列数据进行变换i是列下标(第一列除外)

计算子相似度,构成相似度矩阵

计算每一列的相似度

也可以加权平均

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值