08相关分析与关联分析 您所在的位置:网站首页 pandas数据相关性分析 08相关分析与关联分析

08相关分析与关联分析

2023-03-04 08:13| 来源: 网络整理| 查看: 265

08相关分析与关联分析

目录相关分析与关联分析相关分析函数关系和相关关系简单相关分析偏相关分析点二列相关分析非参数相关分析关联分析基本概念与预处理Apriori算法FP-growth算法

相关分析与关联分析

数据之间最常见的关系是函数关系,在数据函数关系下,一些数据发生变动,与之对应的另一些数据会严格按照函数关系发生相应的变动。但实际上,数据之间的变动清咖u给你还会收到其他没有考虑到或者根本无法考虑的因素的影响,使得数据变动状况很少真正能够用函数的形式来具体表述,数据之间的关系往往体现为相互依存的非函数关系。

还有些数据数值上可能不具有上述描述的关系,但是产生这些数据的行为可能发生关联。

相关分析函数关系和相关关系

相关分析(correlation analysis)主要分析两个变量之间的相互依存关系,在学习相关分析之前,应当先区分变量或数据之间的两种主要关系

函数关系:当一个或几个变量取一定的值时,另一个变量有确定值与之具体严格相对应,则称这种关系为函数关系。

相关关系:变量之间的影响不能够用具体的函数来度量,但变量之间的关系确实存在数量上不是严格对应的相互依存关系,称之为相关关系。

函数关系时确定性的,往往把发生变动的变量称之为自变量,受自变量变动影响而发生变动的变量称之为因变量。

相关关系是不确定的,主要考察变量之间的相互影响,这种影响不存在方向性,即变量A与变量B相关和变量B与变量A相关是一致的。相关关系主要体现为变量之间的相互依存关系。相关分析不具有传递性,即A和C相关,B和C相关,A和B不一定相关。

相关分析根据其分析方法和处理对象不同,可分为:简单相关分析、偏相关分析、非参数相关分析等。根据相关关系表现形式不同,可分为:线性相关分析、非线性相关分析。

简单相关分析

简单相关分析主要分析两个变量之间相互依存的关系,可以通过主管观测和客观测度指标来衡量。

主观观测变量之间的相关关系,主要是通过两个变量之间散点图的手段来进行分析的。客观测度主要是通过统计分析的方法,计算相关系数,利用相关系数数值的符号和大小来判定相关关系的方向和强弱。

用图形描述相关关系

利用散点图可以描绘出两个变量的相互影响状况。根据散点图的不同表现情形,有如下类型:完全正线形相关、完全负线形相关、曲线相关、正线性相关、负线性相关、不相关。

用相关系数测度相关关系

相关系数是描述线性相关程度和方向的统计量,根据样本收集的数据计算的相关系数,通常用字母 \(r\) 表示。\(r\) 的正负号表示相关关系的方向,\(r\) 的绝对值大小表示相关关系的强弱程度。

设两个变量分别是 \(x,y\),根据样本数据计算相关系数的方法主要采用Pearson提出的方法,即Pearson相关系数

\[r = \frac{\sum{(x-\bar{x})(y-\bar{y})}}{\sqrt{\sum{(x-\bar{x})^2}\cdot\sum{(y-\bar{y})^2}}}=\frac{x与y的协方差}{x标准差与y标准差的乘积}\]

相关系数 \(r\) 有如下情况

r=+1表示完全正线性相关r=-1表示完全负线性相关r0表示正线性相关r=0表示不存在线性关系|r| self.minsupport].index) # 初步支持度筛选 k = 0 while len(column) > 1: k = k + 1 column = self.link(column, sign) sf = lambda i: data[i].prod(axis=1, numeric_only=True) # 支持度的计算函数 data_2 = pd.DataFrame(list(map(sf, column)), index=[sign.join(i) for i in column]).T support_series_2 = 1.0 * data_2[[sign.join(i) for i in column]].sum() / len(data) # 更新支持度 column = list(support_series_2[support_series_2 > self.minsupport].index) # 更新后支持度筛选 support_series = support_series.append(support_series_2) column2 = [] for i in column: i = i.split(sign) for j in range(len(i)): column2.append(i[:j] + i[j + 1:] + i[j:j + 1]) # 计算置信度 confidence_series = pd.Series(index=[sign.join(i) for i in column2], dtype='float64') for i in column2: confidence_series[sign.join(i)] = support_series[sign.join(sorted(i))] \ / support_series[sign.join(i[:len(i) - 1])] for i in confidence_series[confidence_series > self.minconfidence].index: # 置信度筛选 final[i] = 0.0 final[i]['confidence'] = confidence_series[i] final[i]['support'] = support_series[sign.join(sorted(i.split(sign)))] # 计算结果 final = final.T.sort_values(['confidence', 'support'], ascending=False) return final# 创建用于分析的实例对象rule = Apriori()# 调用实例对象的apriori方法对mpb数据对象进行规则挖掘res = rule.apriori(mpb)print(res)# support confidence# news-->email 0.184727 0.540640# callreminder-->email 0.100120 0.477597# 将置信度放宽rule = Apriori(minconfidence=0.2)res = rule.apriori(mpb)print(res)# support confidence# news-->email 0.184727 0.540640# callreminder-->email 0.100120 0.477597# email-->news 0.184727 0.242870FP-growth算法

FP-growth算法只需扫描原始数据2遍,将原始数据中的事务压缩到一个FP-tree中,从而达到压缩数据的目的。在FP-tree中找出每个项集的条件模式基、条件FP-tree,递归的挖掘条件FP-tree得到所有的频繁项集。

构造FP-tree主要有两个步骤:从事务数据集中构建FP-tree和从FP-tree中挖掘出规则。具体步骤如下:首先扫描数据集1次,生成 \(1-频繁项集\),然后将 \(1-频繁项集\)降序排列后放入 \(L\) 频繁项集表中;再次扫描数据集,将每个事务相应项集的关联及频数等信息记入FP-tree中。

示例

from random import randintimport pandas as pdimport statsmodels.api as smimport scipy.stats as statsimport numpy as npimport matplotlib as mplimport matplotlib.pyplot as plt# 分析业务订购之间的关联规则mpb_fpg = pd.read_csv('./data/mpb_fpgrowth.csv')res = mpb_fpg.iloc[[randint(0, 98371) for _ in range(10)]]print(res)# new email callreminder# 58375 new email NaN# 42039 NaN email callreminder# 28960 NaN email callreminder# 20923 NaN email NaN# 71076 new NaN NaN# 89245 NaN email NaN# 31867 NaN email NaN# 90654 NaN email NaN# 17114 NaN email NaN# 37505 NaN email callreminder# fp_growth支持python2,不支持python3from fp_growth import find_frequent_itemsets as ffi# find_frequent_itemsets可用于频繁项集的挖掘# 参数1:事务数据,参数2:最小支持度计数=支持度阈值*样本量for itemset in ffi(np.array(mpb_fpg), minimum_support=int(len(np.array(mpb_fpg)) * 0.1)): if nan in itemset: # 舍去含有NaN的项集 pass elif len(itemset) == 1: # 舍去1-项集 pass else: # 该算法是逆向输出结果,将列表反序即可得到结果 print(itemset[::-1]) # ['news', 'email']# ['callreminder', 'email]# 结果输出满足最小支持度0.1的结果与Apriori算法一致,且效率更高


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有