精华内容
下载资源
问答
  • 关联度的计算公式
    千次阅读
    2021-01-29 09:13:18

    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=1n​x(k)

    (3)归一化变换:

    f ( x ( k ) ) = x ( k ) x 0 = y ( k ) f(x(k))=\frac{x(k)}{x_{0}}=y(k)f(x(k))=x0​x(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)∣+ρmaxs​maxt​∣x0​(t)−xs​(t)∣mins​mint​∣x0​(t)−xs​(t)∣+ρmaxs​maxt​∣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)\midmaxs​maxt​∣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)\midmins​mint​∣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项专项素质和身体素质的时间序列资料,试对此铅球运动员的专项成绩进行因素分析。

    38385daffefee8c944ed70d4b795567b.png

    首先对原始数据进行初始化处理:

    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)

    程序运行结果如下:

    df51c956092ddd2a48e3f2750fa829dc.png

    对比Matlab结果:

    d3149415aea39ea43ae4d98efd6a238e.png

    参考文献

    司守奎, 徐珂文, 李日华. 数学建模算法与程序[J]. 海军航空工程学院, 2007, 9: 95-98.

    更多相关内容
  • 论文研究-一种相似性关联度公式.pdf, ... 构造了一种新的关联度计算公式 ,其基本思想与斜率关联度相同 ,它克服了斜率关联度的缺点 ,而保持了其优点 ,它适用于进行因素分析.
  • 灰色关联分析法通过研究数据关联性大小(母序列与特征序列之间的关联程度),通过关联度(即关联性大小)进行度量数据之间的关联程度,从而辅助决策的一种研究方法。 二、操作 SPSSAU操作 (1)点击SPSSAU综合...

    一、应用

    灰色关联分析法通过研究数据关联性大小(母序列与特征序列之间的关联程度),通过关联度(即关联性大小)进行度量数据之间的关联程度,从而辅助决策的一种研究方法。

    二、操作

    SPSSAU操作

    (1)点击SPSSAU综合评价里面的‘灰色关联分析’按钮。如下图

    (2)拖拽数据后选择标准化方式最后点击开始分析

    PS:若有需要拖拽数据时,不要忘记下方的参考值。

    三、SPSSAU分析步骤

    四、案例

    背景

    当前公司研究国内生产总值分别与第一产业,第二产业或者第三产业之间的灰色关联性情况,以研究出国内生产总值受哪个行业的影响更大。一共为2000~2005共6年的数据,国内生产总值为‘母序列’,第一产业,第二产业或者第三产业为‘特征序列’,本例子中已经确认好母序列和特征序列,并且准备好数据,标准化方式采用‘初值化’。部分数据如图所示:

    五、分析

    将数据放入分析框中,SPSSAU系统自动生成分析结果,如下:

    计算公式

    1.关联系数

    (1)求初值化结果如下图所示:

    简单来说就是一组数据中每个数据要除以第一个。例:2061/1988=1.037;以此类推。

    (2)求差序列

    结果如下:

    (PS:简单来说对于初值化后的表格第一列减第二列对应的数,第一列减第三列对应的数,以此类推,注意绝对值)

    (3)求两极差

    (4)求关联系数

    一般取分辨系数 \xi=0.5 ,代入计算,最终得到关联系数结果。

    2.关联度

    例: \gamma_{12}=\frac{1}{6} \sum_{k=1}^{6} \gamma_{12}(k)=0.668

    六、总结

      结合上述关联系数结果进行加权处理,最终得出关联度值,使用关联度值针对6个评价对象进行评价排序;
      关联度值介于0~1之间,该值越大代表其与“参考值”(母序列)之间的相关性越强,也即意味着其评价越高。从上表可以看出:针对本次3个评价项,第三产业的综合评价最高(关联度为:0.830),其次是第二产业(关联度为:0.731)。

    展开全文
  • 灰色关联度

    千次阅读 2019-09-02 16:52:31
    利用灰色关联度对 10 个学生进行评价排序。 灰色关联度分析具体步骤如下: 1. 确定比较对象(评价对象)和参考数列(评价标准) 这里评价对象的个数为 m = 10 , 评价指标变量有 8 个 比较数列为 这里是第 i 个...

    利用灰色关联度对 10 个学生进行评价排序。

    灰色关联度分析具体步骤如下:

    1.  确定比较对象(评价对象)和参考数列(评价标准)

     这里评价对象的个数为 m = 10 , 评价指标变量有 8 个

    比较数列为  a_{i} = \left \{a_{i}(k) | k = 1,2,...,8 \right \} , i= 1,2,..,10  这里 a_{i}(k) 是第 i 个评价对象关于第 k 个指标变量 x_{k}  的取值 。

    参考数列为  a_{0} = \left \{a_{0}(k) | k = 1,2,...,8 \right \} , 这里 a_{0}(k) = 100 , k = 1,2,...,8 。参考数列是一个最好评价对象的各指标中值。

    2.对指标数据进行无量纲化(归一化处理)

    由于系统中各因素的物理意义不同,导致数据的量纲也不一定相同,不便于比较,或在比较时难以得到正确的结论。因此在进行灰色关联度分析时,一般都要进行无量纲化的数据处理。

    3.逐个计算每个被评价对象指标序列(比较序列)与参考序列对应元素的绝对差值

     即  |a_{0}(k) - a_{i}(k)|  i = 1,2,...,10    k = 1 ,2 ,...,8

     4.  计算灰色关联系数

     

    图片是引用其他地方, x_{0} ,x_{i} 就是 a_{0} ,a_{i} 。

    为比较数列 a_{i} 对参考数列 a_{0} 在 第 k 个指标上的关联系数,其中 \rho \in [0,1]  为分辨系数,min_{s}min_{k} |x_0(k) - x_{i}(k) |  ,max_{s}max_{k} |x_{0}(k) -x_{i}(k)|  分别为两级最小极差  , 两级最大极差 。

    一般来讲,分辨系数  \rho越大,分辨率越大; \rho越小,分辨率越小。

    5.  计算灰色关联度

    灰色关联度的计算公式为 

                                                r_{i} = \sum_{k=1}^{8} w_{k}\xi _{i}(k) i = 1 ,2 ,...,10

    其中 w_{k} 为第 k 个指标变量 x_{k} 的权重, 这里取等权重 即 1/m = 1/8 。 r_{i} 为第 i 个评价对象对理想对象的灰色关联度。

    6.  评价分析

    根据灰色关联度的大小,对各评价对象进行排序,可建立评价对象的关联序,关联度越大其评价结果越好 。

    clc, clear
     4
    a=textread('data101.txt');
    t=ones(size(a))*100-a; %计算参考序列与每个序列的差
    mmin=min(min(t)); %计算最小差
    mmax=max(max(t)); %计算最大差
    rho=0.5; %分辨系数
    xs=(mmin+rho*mmax)./(t+rho*mmax) %计算灰色关联系数
    gd=mean(xs,2) %取等权重,计算关联度
    [sgd,ind2]=sort(gd,'descend') %对关联度按照从大到小排序
    xlswrite('data103.xls',[xs,gd]) %把关联系数和关联度写到 Excel 文件中,便于做表
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    a = pd.read_excel("data1.xlsx").values[:,1:]
    # print(a,type(a))
    m,n = a.shape
    t = np.ones((m,n))*100 - a # 计算差值
    print(t)
    mmin = min(np.min(t,axis=0)) #计算最小差
    mmax = max(np.max(t,axis=0)) #计算最大差
    print(mmin ,mmax)
    rho = 0.5  # 分辨系数
    xs = (mmin + rho*mmax) /(t+rho*mmax)
    print(xs)
    gd = np.mean(xs,axis=1)
    print("gd")
    gd.resize((gd.shape[0],1))
    # print(gd.shape)
    # print(xs.shape)
    
    result = np.hstack((xs,gd))
    print(gd)
    # 从 0 开始的
    print(gd.argsort(axis=0)) # 从小到大
    df = pd.DataFrame(result)
    
    df.to_excel('result.xlsx',sheet_name='表1')
    print("写入完成")
    
    

     

    展开全文
  • 灰色关联度矩阵

    2018-11-02 20:46:42
    MATLAB灰色关联度矩阵计算模型,用于计算参考数列和比较数列相互影响的成都
  • Apriori算法--关联分析算法(一)

    万次阅读 多人点赞 2017-10-16 15:49:49
    在实际生产生活我们经常会遇到一些“关联分析”(Association Analyse)的任务。举几个实际例子。1.人们的购物清单里面的各个商品有没有什么关联呢?就像下面这个购物清单写的那样子,右边是各个顾客所买的东西。 有...

    在实际生产生活我们经常会遇到一些“关联分析”(Association Analyse)的任务。举几个实际例子。

    1.人们的购物清单里面的各个商品有没有什么关联呢?就像下面这个购物清单写的那样子,右边是各个顾客所买的东西。

    这里写图片描述

    有的时候我们想问,顾客购买商品的时候会不会多个商品组合起来买呢?顾客会不会倾向于豆奶和尿布这两样商品一起买?我们怎么从一份购物清单里面发现这种往往会一起出现的商品组合呢?


    2.现在几乎人人都有自己的PC,都会在自己的电脑上安装自己喜欢的软件。现在给出不同工作领域的用户的软件列表,我们能不能发现同种身份的人一般都会按照那些共性的软件呢?这样或许我们就可以给用户推荐他所在领域的受欢迎的软件。
    这里写图片描述

    能不能通过计算得到学生群体的共性软件呢?


    3.总结疾病的特征。给我们一些疾病的特征,我们如何从这些数据总结出某种疾病的普遍特征呢?比如,给一些患流行性感冒的病人的生理特征数据,我们如何从这些数据发现患流行性感冒的普遍症状呢?

    以上这些问题都是关系分析的问题,这些问题希望在数据集中发现其中蕴含的关系,企图发现里面存在的频繁出现的组合(比如学生会经常按照那些软件)或者项与项之间的关系(比如一般安装微信的人也会顺带安装QQ)。发现频繁出现的组合叫做发现频繁项集(frequent item set),而找出项与项之间的相关关系叫做关联规则学习(association rule analyse)

    这里写图片描述


    #如何量化?
    我们如何衡量一个组合是不是频繁出现的呢?频繁是中文含义就是出现的次数多,那么频繁的衡量标准肯定和出现的频数有关。如何计算某个组合的频数?例如:

    这里写图片描述

    那么{豆奶,尿布}的频数就是3,因为这个组合出现在第2,3,4条样本出现过。

    但是,我们也知道频数这个指标是和样本数量的有关的。假如我们规定频数大于5的组合就是频繁的。那这样子假如某个组合在10条随机数据集中的频数为1,这个组合是不频繁的;但是在100条随机数据集中频数为10,该组合变的频繁了。这就会导致频繁性的判断不稳定。因此实际上我们使用频率这个指标。

    实际上一个组合A的频率又叫组合A在这个数据集T上的支持度(support degree),意思就是组合A在数据集T上出现的概率。

    那么我们如何定义关联规则可信呢?已知一个人已经买了豆奶,那么他有多大概率也买尿布嘞?这个就要使用到条件概率了。

    这里写图片描述

    这个条件概率的直观解释就是:在所有出现豆奶的样本里,有多少个还出现了尿布。如果这个条件概率特别大,那么我们可以认为**“买了 豆奶 一般也会买 尿布 ”**这条规则是可信任的。规则 “买了 豆奶 一般也会买 尿布” 记作:豆奶——>尿布。但是这条关联规则不具备自反性。也就是说 豆奶——>尿布,并不能推出 尿布——>豆奶,本质上是因为他们的条件概率都不同:
    这里写图片描述

    直观上的理解也是一样的。比如 人们一般上完厕所就会洗手,规则:上厕所——>洗手 是可信的;但是并不意味着 洗了手就一定是在上厕所,因为也可能是吃了饭再洗手。

    同样的,在关联分析中,与某条规则相对应的条件概率也有另外一个名称:置信度

    规则A->B的置信度计算公式为:
    这里写图片描述

    有了这两个量化指标,那我们就可以在一个数据集上寻找频繁项集和关联规则啦。
    最原始的做法就是,生成所有可能的组合方式,然后我们枚举计算这些所有的组合方式的支持度(频率),那些达到支持度指标的就是我们想到找到的频繁项集啦。这种枚举法当然可以解决问题,但是我们想也想的到这个复杂度特别高!

    比如上面购物的例子中基础元素共有6个,这6个元素可以一个一个组合,也可以两个两个组合,也可以三个三个来•••那么这6个基本元素组合起来就一共有:
    这里写图片描述种可能的组合方式。如此,我们需要计算63种组合出现的频率,每次计算需要遍历整个数据集。emmmmm…这个时间复杂度O(2^N)要GG。那么一个自然的思路就是剪枝。

    #使用Apriori 原理进行剪枝

    Apriori原理特别简单!有一些公理化概率论基础都会轻松理解

    设A,B是两个事件,则

    这里写图片描述

    积事件的概率小于等于各个因子的概率。直观的解释就是A和B同时发生的概率当然要小于等于他们单独分别发生的概率。

    这里写图片描述

    ok.我们来使用这个性质对上面寻找频繁项集的过程进行剪枝。

    这里写图片描述

    上图显示了基础元素集为{0,1,2,3}时,所有可能的组合。这实际显示了一种生成所有组合的层次化的方法:先一一组合,然后再二二组合,再三三组合•••每一层的组合都可以在上一层的基础上进行。具体方法为:

    设第i层是所有含i个元素的组合,每个组合都有i+1个不同的元素。现在需要生成所有含i+1个元素的组合。

    i+1个元素的组合就是每个组合含有i+1个不同的元素;那么只要在原来第i层的基础上进行两两合并,生成含且只含i+1个元素的组合。

    为了让第i层两个组合CA,CB组合后生成只含i+1个元素,需要CA,CB有且只有一个元素不同。否则合并后的组合将不只i个元素。

    所以我们可以让所有组合按基础元素升序的方式排列,比较CA,CB前i-1个元素.如果CA和CB的前i-1个元素相同的话,CA和CB就只有第i个元素不同了(如01和02),这样合并后才能只含有i+1个元素。如果CA和CB的前i-1个元素不等,那至少CA与CB会有两个元素不一致(如01 和23 组合生成0123 就包含4个基本元素)。 (此方法存在问题,感谢@weixin_39799208指正)
    正确的做法应该是对CA和CB内的各元素做交集,看交集内的元素个数是否为i-1。

    现在 我们假设{23}组合的支持度为P({23}),它小于容许的最小支持度p’,即P(23) < p’,此时{23}这种组合就是不频繁的了。

    由图可知,{23}参与了组合{023}和{123}的生成,那么:

    这里写图片描述
    这里写图片描述

    #Apriori的实现代码:

    __author__ = 'jmh081701'
    import  numpy as np
    
    def loadDataset():
        return [{1,3,4},{2,3,5},{1,2,3,5},{2,5}]
    def createC1(dataset,minsupport=0.6):
        C1=[]
        for t in dataset:
            for s in t:
                if({s} in C1):
                    continue
                else:
                    C1.append({s})
        C1.sort()
        return map(frozenset,C1)
    
    def scan(dataset,minisupport=0.6,Ck=None):
        rst=[]
        cutset=[]
        supportData={}
        for c in Ck:
            for t in dataset:
                if c.issubset(t):
                    if c in supportData:
                        supportData[c]+=1
                    else:
                        supportData[c]=1
        lenD=float(len(dataset))
    
        for key in supportData:
            supportData[key]=supportData[key]/lenD
            if(supportData[key]>=minisupport):
                rst.append(key)
            else:
                cutset.append(key)
        return rst,supportData,cutset
    
    def genCj(Ck,k,Cutset={}):
    	#2019年04.10 此实现有问题,应该是取l1,l2交集然后判断交集元素个数是否符合要求。
        lenCk=len(Ck)
        Cj=set()
        for i in  range(lenCk):
            for j in range(i+1,lenCk):
                l1=list(Ck[i])[:k-1]
                l2=list(Ck[j])[:k-1]
                l1.sort()
                l2.sort()
                if(l1==l2):
                    t=Ck[i]|Ck[j]
                    f=0
                    for each in Cutset:
                        if set(each).issubset(t):
                            f=1
                            break
                    if(f==0):
                        Cj.add(t)
        return Cj
        
    def apriori(dataset,minisupport=0.6):
        #from number i layer frequent item set generate i+1 th frequent item set.
        C1=createC1(dataset)
        Ck=C1
        k=1
        supportData={}
        CutSet=[]
        rstC=[]
        while Ck!=set():
            rst,support,cutset=scan(dataset,minisupport,Ck)
            rstC.append([rst])
            supportData.update(support)
            CutSet.append(cutset)
            Cj=genCj(rst,k,CutSet)
            k+=1
            Ck=Cj
    
        return rstC,supportData
    data=loadDataset()
    rstC,supportData=apriori(data)
    print(rstC)
    print(supportData)
    

    运行结果:

    [[[frozenset({3}), frozenset({2}), frozenset({5})]], [[frozenset({2, 5})]]]
    {frozenset({1}): 0.5, frozenset({3}): 0.75, frozenset({4}): 0.25, frozenset({2}): 0.75, frozenset({5}): 0.75, frozenset({2, 3}): 0.5, frozenset({3, 5}): 0.5, frozenset({2, 5}): 0.75}
    

    #代码解释

    def loadDataset():
        return [{1,3,4},{2,3,5},{1,2,3,5},{2,5}]
    

    该函数用于生成数据集。输入数据集是一个list of set.列表里面的每一个元素都是集合。在关联分析中,需要将原始数据转化为这种数据形式。尤其是每个样本的特征向量其实是一个无序的集合。

    def createC1(dataset,minsupport=0.6):
        C1=[]
        for t in dataset:
            for s in t:
                if({s} in C1):
                    continue
                else:
                    C1.append({s})
        C1.sort()
        return map(frozenset,C1)
    

    该函数遍历整个数据集,将各个基础元素抽离出来。注意最后的map{frozenset,C1}

    map(func, seq1[, seq2,…]) 
    第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。 Python函数编程中的map()函数是将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回。
    

    map(frozenset,C1)其实就是将C1的每一个元素都转化为frozenset类型。这么做是为了让元素组合能够做字典的key.

    def scan(dataset,minisupport=0.6,Ck=None):
        rst=[]
        cutset=[]
        supportData={}
        for c in Ck:
            for t in dataset:
                if c.issubset(t):
                    if c in supportData:
                        supportData[c]+=1
                    else:
                        supportData[c]=1
        lenD=float(len(dataset))
    
        for key in supportData:
            supportData[key]=supportData[key]/lenD
            if(supportData[key]>=minisupport):
                rst.append(key)
            else:
                cutset.append(key)
        return rst,supportData,cutset
    

    上述代码在计算各个组合的频率。
    对于Ck里面的每一个组合c,遍历整个数据集,看这个c在数据集中出现了多少次。按照定义,c是t的子集说明 c在t出现了。

    rst是满足Ck内所有满足最小支持度要求的组合;同时supportData返回了Ck内所有组合的支持度,supportData是一个字典,key是基本元素的组合,而value是这个组合出现的频率。cutset用于返回Ck内那些被剪枝的组合。

    def genCj(Ck,k,Cutset={}):
        lenCk=len(Ck)
        Cj=set()
        for i in  range(lenCk):
            for j in range(i+1,lenCk):
                l1=list(Ck[i])[:k-1]
                l2=list(Ck[j])[:k-1]
                l1.sort()
                l2.sort()
                if(l1==l2):
                    t=Ck[i]|Ck[j]
                    f=0
                    for each in Cutset:
                        if set(each).issubset(t):
                            f=1
                            break
                    if(f==0):
                        Cj.add(t)
        return Cj
    

    genCj用于输入只含k个元素的若干组合Ck,以及已确定被剪枝的组合列表Cutset,输出含k+1个元素的所有可能的组合Cj。注意要先把前k-1个元素提取出来,然后排序,比较、如果相等后t不含有cutset的元素 再把合并后的加入。

    def apriori(dataset,minisupport=0.6):
        #from number i layer frequent item set generate i+1 th frequent item set.
        C1=createC1(dataset)
        Ck=C1
        k=1
        supportData={}
        CutSet=[]
        rstC=[]
        while Ck!=set():
            rst,support,cutset=scan(dataset,minisupport,Ck)
            rstC.append([rst])
            supportData.update(support)
            CutSet.append(cutset)
            Cj=genCj(rst,k,CutSet)
            k+=1
            Ck=Cj
    
        return rstC,supportData
    

    当第k层一直不空的时候,不断寻找新的组合。

    注意:关联分析的输入数据集中,每个样本的特征向量是一个集合,是无序的、确定的、互斥的。

    展开全文
  • 4、计算灰色加权关联度; 5、评价分析。 演奏开始 灰色关联分析的前奏 1、确定比较对象(评价对象)和参考数列(评价标准)。设评价对象有mmm个,评价指标有nnn个,参考数列为x0=[x0(k)∣k=1,2,...,n]x_0=[x_0(k)|k=...
  • 综合评价与决策方法04——灰色关联分析法 顶!!! 数学建模综合评价与决策方法04——灰色关联分析法前言一、灰色关联分析法总结 肝!!! 前言 评价方法大体上可分为两类,其主要区别在确定权重的方法上。一类是...
  • 统计相关性公式

    千次阅读 2020-05-19 16:20:22
    统计学里面的相关性公式比较多,这几天因为客户突然提出需要提供三四级手术和DRG能力之间的相关性的研究,所以经过查阅统计学里面的概念,相关性有很多公式,我...关联(r) = N∑XY - (∑X)(∑Y) / Sqrt([N∑X2 - (∑...
  • matlab灰色关联度代码这段代码在matlab中,我使用了一个包含210张图像的数据集。 这些图像列出了10个categoris.list。 为了理解我的代码,您可以按照以下步骤操作:1)从目录中读取所有图像(当前)2)将它们调整为...
  • 为了准确地找出影响煤炭自燃程度最大的因素,以改进了的灰色斜率关联度模型为计算公式,分别计算了自燃高温段和低温段内煤炭的灰分、水分、挥发分以及温度、氧浓度、平均粒径与耗氧速率的斜率关联度,计算结果表明:在...
  • 原始数据表格如下所示,其中t1、t2、t3、t4表示四个不同的时刻,参考序列为Industry,分别计算后三者与Industry的关联度,代码最终返回的是关联度经过排序后的department的相应取值,排序采用逆序排序 import numpy...
  • 一、 置信、 二、 置信 示例
  • GRA灰色关联度分析学习 附python代码

    千次阅读 2021-03-06 15:57:54
    灰色关联度分析,听名字很高大上,实际上就是算关联度的一个方法.就是想看看某几个因素中,哪个因素对事情的影响更大.比如 这个例子就算想看,其他这么一堆因子中,对旅游总收入的影响,哪个更大一些.个人从结果上看,还挺...
  • 目录项集(Itemset)事务的宽度支持、...一般我们使用三个指标来度量一个关联规则,这三个指标分别是:支持、置信和提升。 Support(支持) Support(支持):表示同时包含A和B的事务占所有事务的比...
  • MATLAB热图绘制及灰色关联度分析代码实现
  • 指出绝对关联度定义的不严格之处以及所给出的绝对关联度公式的不合理性 ,在此基础上 ,给出平移关联度的定义以及两个平移关联度计算公式 .最后给出在证券市场中的应用 .
  • 对承受疲劳荷载反复作用的钢筋混凝土结构而言,疲劳是一种重要的损伤形式,如何...根据刚度退化规律对试验数据进行拟合,得到可用于计算钢筋混凝土梁刚度退化程度的公式,该公式与10根试验梁的试验结果吻合较好,能够
  • 灰色关联度分析(Grey Relation Analysis,GRA)原理详解

    万次阅读 多人点赞 2018-12-29 02:22:18
    灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们...
  • 关联度分析法-灰色关联分析

    万次阅读 多人点赞 2020-09-14 16:50:14
    本文介绍了利用灰色关联度分析方法分析了数据之间的关联度
  • 置信的局限——错估某个关联规则的重要性 提升和零事务的关系 先验原则 实际案例 代码实战 频繁项集和支持 置信调用 文末资源推荐 每文一语 走进关联规则 什么是关联规则? 情景引入:啤酒与尿布...
  • 假如某药物有疗效的比例为p1,则无效的比为1-p1,则odds的计算公式为:对于如下表所示的四格表,患病组的中暴露的概率(以实测频率估计)p1=a/C1,非暴露的概率为1-p1=b/C1,故患病组的odds计算公式为:odds1=p1/(1-p1)...
  • 灰色关联度分析

    万次阅读 多人点赞 2019-11-13 14:46:07
    灰色关联度分析 灰色关联度分析方法步骤及原理; 另附例题及代码。
  • 灰色关联度分析法(GRA)_python

    千次阅读 2022-03-18 10:04:13
    灰色关联度分析法(GRA) 参考博客:GRA 定义 灰色关联度分析,是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,...
  • 灰色关联分析法

    万次阅读 多人点赞 2018-01-27 21:18:52
    与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用。层次分析用在确定权重上面 【1】确定比较对象(评价...【3】计算灰色关联系数    这是一个比较复杂的公式,给出的代码可以直接
  • 关联规则的强度用支持(support)和自信(confidence)来描述,关联规则是否可用,使用提升(Lift)来描述。 挖掘定义 给定一个数据集,找出其中所有支持support>=min_support,自信confidence>=min_...
  • MATLAB灰色关联度分析

    千次阅读 多人点赞 2019-12-08 10:06:29
    灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们...
  • 2. 灰色关联度分析 背景: 通过对某健将级女子铅球运动员的跟踪调查,获得其 1982 年至 1986 年每年最好成绩及 16 项专项素质和身体素质的时间序列资料,见下表 ,试对此铅球运动员的专项成绩进行因素分析。 数据...
  • 灰色关联度和灰色预测Matlab代码和实例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,291
精华内容 16,516
热门标签
关键字:

关联度的计算公式