精华内容
下载资源
问答
  • 监督学习是指对已经打好标签训练样本进行学习,目标是对训练样本集之外数据进行预测学习方式。 比如我们高考做考试题,标准答案已经有了,我们只需要记住这些答案,下次碰到了,知道1+1应该是...

    他们的区别,无监督是训练集没有标准答案;监督学习是训练集都有标准答案;半监督学习是一小部分训练集有标准答案,大部分训练集没有标准答案;强化学习是给到奖励或惩罚的刺激,通过试错和反馈来进行学习。

    一、监督学习

    监督学习是指对已经打好标签的训练样本进行学习,目标是对训练样本集之外的数据进行预测的学习方式。

    比如我们高考做考试题,标准答案已经有了,我们只需要记住这些答案,下次碰到了,知道1+1应该是等于2,就可以了。

    常见的监督学习算法有:支持向量机(SVM),KNN,决策树,朴素贝叶斯,逻辑回归。

    监督学习
    常见的应用场景:

    • 1)垃圾邮件的识别。给到一个邮件,分辨出来这个邮件的类别:1 垃圾邮件,2 正常邮件

    • 2)文本情感分析。给出一条评论,分辨出来这条评论的倾向:1 褒,2 贬

    • 3)图像内容识别。给出一个图片,分辨出来这个图片是一个什么物体:猫、狗、人、车子等等

    • 4)票房预测。给出一个电影相关的数据,运行出来结果数值:具体的数字

    • 5)房价预测。给出一套房产相关的运行出来结果数值:具体的数字

    二、无监督学习

    无监督学习是指对没有打标签的样本进行学习,目标是发现训练样本的中的结构性知识。在这里,学习的样本是没有标记的。

    比如我们去看画展,虽然对绘画流派一无所知,但我们也会根据自己的感受,去把画分成不同种类,即使我们不知道什么是抽象派,什么是写实派,也能根据画的特点把这两种类别的画进行区分。

    常见的无监督学习算法有:聚类,PCA、生成对抗网络。

    无监督学习

    常见的应用场景:

    • 1)新闻的聚类。给出一批新闻,把这些新闻划分出不同的类别。

    • 2)类似用户的挖掘。给出一批用户,分析出哪些用户比较相似。

    三、半监督学习

    半监督学习是指训练数据的一部分是有标签的,另一部分没有标签。这里是基于这样一个规律:通过一些有标签的局部特征和更多没有标签的整体分布就能得到比较好的识别效果。

    这主要是因为对数据进行标记的代价有时很高,比如在生物学中,对某种蛋白质的结构分析或者功能鉴定,可能会花上生物学家很多年的工作,而大量的未标记的数据却很容易得到。

    常见的半监督学习算法:TSVM,S3VM,生成式方法,半监督聚类。

    半监督学习

    常见的应用场景:

    • 1)医疗影像

    • 2)金融风控

    四、强化学习

    强化学习是指没有任何的标签,但有一系列的奖励和惩罚规则,计算机通过不断尝试,从错误中学习,最后找到规律。

    比如我们小时候玩的一个捉迷藏游戏,你的朋友会事先藏好一个东西,当你离这个东西越来越近的时候,你朋友就说热,越来越远的时候,你朋友会说冷。冷或者热就是一个奖惩函数。我们通过这个函数反馈的信息,不断调整自己的策略,最后赢得我们的游戏。

    常见的强化学习算法有:Q-learning、Sarsa、Deep Q Network、Policy Gradient

    强化学习

    常见的应用场景有:

    • 1)著名的 AlphaGo下围棋

    • 2)优化跨渠道营销和实时投标在线广告系统

    • 3)工业机器人产品

    展开全文
  • 显著水平和p值理解

    千次阅读 2020-03-07 18:37:20
    显著水平是指假设H0为真情况下,发生H1概率, 其实我们抽取到的样本就是H1。显著水平可以描述为: 假设总体均值为10,我们抽取到的样本均值为6概率即是显著水平; 假设总体是100个,如果根据样本计算出...

    统计分析的核心是以随机样本推断整体;

    以H0代表原假设,H1代表它的相反面;

    p值是指假设H0为真的情况下,发生H1的概率,

    其实我们抽取到的样本就是H1。p值可以描述为:

    假设总体均值为10,我们抽取到的样本均值为6的概率;

    假设总体是100个,如果根据样本计算出的
    p值等于0.05,也就是说:
    假设原假设成立,我们抽取到的样本必须是来自于这5个,才有可能发生
    “抽取到的样本均值是6”的情况,这显然概率很低,所以原假设就不成立了。

    如果p=0.02,
    也就是说:
    假设原假设成立,我们抽取到的样本必须是来自于这2个,才有可能发生
    “抽取到的样本均值是6”的情况,这显然概率很低,所以原假设就不成立了。

    但是每个人认为“不太可能发生”的标准都不一样:
    有的人认为从100个当中抽中指定5个不太可能或者概率很低,就将这个标准定为0.05,0.05即为显著性水平;
    有的人认为从100个当中抽中指定1个才是不太可能或者概率很低(这些人认为抽到指的5个仍有很大概率发生),就将显著性水平定为0.01。

    引申:

    假设是根据样本情况定的,比如
    如果样本的均值为6,备择假设必须是:总体均值小于10;
    如果样本的均值为11,备择假设必须是:总体均值大于10;

    展开全文
  • 股权质押合同样本.txt

    2021-04-27 13:53:56
    2.委托相关拍卖行将质押股份予以拍卖,质权人/拍卖行应于拍卖前 个月内,至少在一种全国报纸上发布 次拍卖公告,以尽可能地吸引潜在竞买人,从而充分保障出质人权益。但相关公告及拍卖费用应由出质人承担。3...
  • stigmergic 一词是指 SRF 内部逻辑,其灵感来自昆虫协调机制 stigmergy。 Stigmergy 是基于输入样本通过称为轨迹功能结构时空聚合。 轨迹由输入维度中每个样本释放标记生成,并随着时间推移而消失。 在...
  • 什么抽样误差?

    千次阅读 2020-04-22 01:36:53
    抽样误差仅仅是指后一种由于抽样的随机性而带来的偶然的代表性误差,而不是指前一种因不遵循随机性原则而造成的系统性误差。 总的说来,抽样误差是指样本指标与全及总体指标之间的绝对误差。在进行抽样检查时不可...

    什么是抽样误差?

    在抽样检查中,由于用样本指标代替全及指标所产生的误差可分为两种:一种是由于主观因素破坏了随机原则而产生的误差,称为系统性误差;另一种是由于抽样的随机性引起的偶然的代表性误差。抽样误差仅仅是指后一种由于抽样的随机性而带来的偶然的代表性误差,而不是指前一种因不遵循随机性原则而造成的系统性误差。

    总的说来,抽样误差是指样本指标与全及总体指标之间的绝对误差。在进行抽样检查时不可避免会产生抽样误差,因为从总体中随机抽取的样本,其结构不可能和总体完全一致。例如样本平均数与总体平均数之差|\bar{x}-\bar{X}|,样本成数与总体成数之差 | p − P | 。虽然抽样误差不可避免,但可以运用大数定律的数学公式加以精确地计算,确定它具体的数量界限,并可通过抽样设计加以控制。

    抽样误差也是衡量抽样检查准确程度的指标。抽样误差越大,表明抽样总体对全及总体的代表性越小,抽样检查的结果越不可靠。反之,抽样误差越小,说明抽样总体对全及总体的代表性越大,抽样检查的结果越准确可靠。在统计学中把抽样误差分为抽样平均误差和抽样极限误差,下面就这两种误差分别进行阐释。为使推理过程简化,这里不对属性总体进行分析,而仅对变量总体进行分析计算。


    样误差的计算

    1、表现形式:平均数指标抽样误差;成数(比重)抽样误差。

    2、平均数指标的抽样误差

     1)重复抽样的条件下:

      \hat{\mu}_{\bar{x}}=\sqrt{\frac{\sum(x_i-\bar{x})^2}{n}}=\frac{\hat{\sigma}}{\sqrt{n}}

     2)不重复抽样的条件下:

      \mu_{\bar{x}}=\sqrt{\frac{\hat{\sigma}^2}{n}(\frac{N-n}{N-1})}

    3、成数指标的抽样误差

     1)重复抽样的条件下:

      \hat{\mu_p}=\sqrt{\frac{P(1-P)}{n}}

     2)不重复抽样的条件下:

      \hat{\mu_p}=\sqrt{\frac{P(1-P)}{n}(\frac{N-n}{N-1})}


    影响抽样误差的因素

    1、总体各单位标志值的差异程度。差异程度愈大则抽样误差愈大,差异程度愈小则则抽样误差愈小。

    2、样本单位数。在其他条件相同的情况下,样本的单位数愈多,则抽样误差愈小。

    3、抽样方法。抽样方法不同,抽样误差也不同。一般情况下重复抽样误差比不重复抽样误差要大一些。

    4、抽样调查的组织形式。不同的抽样组织形式就有不同的抽样误差。


    抽样误差的控制措施

    抽样误差则是不可避免的,但可以减少,其措施有:

    1、增加样本个案数。

    2、适应选择抽样方式。

    例如,在同样条件下,又重复抽样比重复抽样的抽样误差小,又如在总体现象分类比较明显时,采用分层随机抽样比其它方法的抽样误差小。由于总体真正的参数值未知,真正的抽样误差也未知,所以抽样误差的计算一般都以抽样平均误差来代表真正的抽样误差。

    展开全文
  • 置信度:置信度代表的是规则准确如何。(既买A商品又买B商品数量除以买A商品数量) 首先,我们使用Pandas读取数据集: import pandas as pd from itertools import combinations features = ["bre

    商品亲和性分析

    亲和性分析根据样本个体之间的关系,确定它们关系的亲疏。它主要根据两个指标统计商品之间的亲和性:

    • 支持度:支持度指的是数据集中规则应验的次数。(商品交易中同时买A商品和B商品的交易数量【支持度也可以为次数/交易总量】)
    • 置信度:置信度代表的是规则的准确性如何。(既买A商品又买B商品的数量除以买A商品的数量)

    首先,我们使用Pandas读取数据集:

    import pandas as pd
    from itertools import combinations
    
    features = ["bread", "milk", "cheese", "apple", "banana"]
    df = pd.read_csv("affinity_dataset.txt", sep="\s+",
                     header=None, names=features)
    df.head()
    


    数据集下载链接:https://pan.baidu.com/s/1rmgqvXeo8kCA-G89Cck7fw 密码:t3bu

    也可以通过以下代码生成随机数据:

    import numpy as np
    
    X = np.c_[np.random.random(100) < 0.3, np.random.random(100) < 0.5,
              np.random.random(100) < 0.2, np.random.random(100) < 0.25,
              np.random.random(100) < 0.5]
    X[X.sum(axis=1) == 0, 4] = 1
    print(X[:5])
    np.savetxt("affinity_dataset.txt", X, fmt="%d")
    

    每一行代表每一条交易包含的商品,0代表没有购买,1代表购买。

    下面我们首先计算出所有商品A和商品B之间的支持度(同时买A商品和B商品的交易数量):

    data = []
    
    for i, j in combinations(range(df.shape[1]), 2):
        support = df.iloc[:, [i, j]].all(axis=1).sum()
        data.append((i, j, support))
        data.append((j, i, support))
    data = pd.DataFrame(data, columns=["A", "B", "support"])
    data.A = pd.Categorical.from_codes(data.A, features)
    data.B = pd.Categorical.from_codes(data.B, features)
    data.head()
    

    支持度也可以为次数/交易总量:

    data['support2'] = data.support/df.shape[0]
    data.head()
    

    下面计算置信度(既买A商品又买B商品的数量除以买A商品的数量)。

    首先我们计算出每个商品被购买的总次数:

    num_occurances = df.sum()
    num_occurances
    
    bread     27
    milk      46
    cheese    41
    apple     36
    banana    59
    dtype: int64
    

    然后再来计算置信度:

    data["confidence"] = data.support/num_occurances[data.A].values
    data.head()
    
    A B support support2 confidence
    0 bread milk 14 0.14 0.518519
    1 milk bread 14 0.14 0.304348
    2 bread cheese 4 0.04 0.148148
    3 cheese bread 4 0.04 0.097561
    4 bread apple 5 0.05 0.185185

    下面我们排序获取支持度前5的数据:

    data.sort_values(["support", "confidence"], ascending=False, inplace=True)
    data.head()
    
    A B support support2 confidence
    16 cheese banana 27 0.27 0.658537
    17 banana cheese 27 0.27 0.457627
    15 apple cheese 25 0.25 0.694444
    14 cheese apple 25 0.25 0.609756
    18 apple banana 21 0.21 0.583333

    这就是商品的亲和性分析,对于分析商品两两之间的关系非常简单高效,但也很有局限性,例如不能挖掘出关联度很高的三个以上的商品,这时我们就可以使用相对复杂的关联规则模型来处理。

    基于关联规则的Apriori算法

    Agrawal等人在1993年提出关联规则的概念后,又在1994年提出了基于关联规则的 Apriori 算法,至今 Apriori 仍是关联规则挖掘的重要算法。

    关联规则挖掘用于发现项与项(item 与 item)之间的关系,例如从消费者交易记录中发掘商品与商品之间的关联关系,进而通过商品捆绑销售或者相关推荐的方式带来更多的销售量。

    Apriori算法的三个基本指标是:

    • 支持度:1个或多个商品组合出现的次数,或与总次数之间的比例。
    • 置信度: 购买A商品的订单中,同时购买B商品的订单比例。
    • 提升度:提升度 (A→B)= 置信度 (A→B)/ 支持度 (B)

    注意:Apriori算法中支持度和置信度的概念与亲和性分析中支持度和置信度的概念含义几乎相同。

    关联规则中的支持度、置信度和提升度

    下面是5名客户购买的商品列表,我们以以下数据为例来说明这三个指标的具体概念:

    data = [('牛奶', '面包', '尿布'),
            ('可乐', '面包', '尿布', '啤酒'),
            ('牛奶', '尿布', '啤酒', '鸡蛋'),
            ('面包', '牛奶', '尿布', '啤酒'),
            ('面包', '牛奶', '尿布', '可乐')]
    

    将其转换为与前面商品亲和性分析时一致的数据形式:

    import pandas as pd
    import numpy as np
    from itertools import chain,combinations
    
    columns = pd.Index(chain(*data)).unique()
    zero_matrix = np.zeros((len(data), len(columns)), dtype='int8')
    for i, rows in enumerate(data):
        t = columns.get_indexer(rows)
        zero_matrix[i, t] = 1
    df = pd.DataFrame(zero_matrix, columns=columns)
    df
    

    支持度

    支持度指的是某个商品组合出现的次数,或与总次数之间的比例。支持度越高,代表这个组合出现的频率越大。

    在亲和性分析中,我们只计算K=2的情况,在关联规则挖掘中,k=N的情况都需要计算。

    下面我们一次性计算K=N各种情况下的支持度:

    rule = []
    for k in range(1, len(columns)+1):
        for keys in combinations(columns, k):
            value = df.loc[:, keys].all(axis=1).sum()
            if value > 0:
                rule.append((k, keys, value))
    rule = pd.DataFrame(rule, columns=["k", "rule", "support"])
    rule['support2'] = rule.support/df.shape[0]
    rule.sample(7)
    

    获取支持度查询字典,方便后面计算:

    support = rule.set_index("rule").support2
    

    置信度

    置信度是个条件概念,即在 A 发生的情况下,B 发生的概率是多少。

    即购买了商品A的订单中,同时购买商品B的订单比例。

    置信度(A→B)=支持度(A,B)/支持度(A)

    例如,置信度(牛奶→啤酒)= 支持度(牛奶,啤酒)/支持度(牛奶):

    support[('牛奶', '啤酒')]/support[('牛奶',)]
    
    0.5
    

    置信度(啤酒→牛奶)= 支持度(牛奶,啤酒)/支持度(啤酒):

    support[('牛奶', '啤酒')]/support[('啤酒',)]
    
    0.6666666666666667
    

    提升度

    提升度代表的是“商品 A 的出现,对商品 B 的出现概率提升的”程度。

    提升度 (A→B)= 置信度 (A→B)/ 支持度 (B)=支持度(A,B)/支持度(A)/支持度(B)

    提升度 (B→A)= 置信度 (B→A)/ 支持度 (A)=支持度(A,B)/支持度(B)/支持度(A)

    因此,提升度 (A→B)=提升度 (B→A)=支持度(A,B)/支持度(A)/支持度(B)

    这个公式是用来衡量 A 出现的情况下,是否会对 B 出现的概率有所提升:

    1. 提升度 (A→B)>1:代表有提升;
    2. 提升度 (A→B)=1:代表有没有提升,也没有下降;
    3. 提升度 (A→B)<1:代表有下降。

    例如,提升度(牛奶→啤酒)=提升度(啤酒→牛奶)=支持度(牛奶,啤酒) / 支持度(牛奶)/ 支持度(啤酒):

    support[('牛奶', '啤酒')]/support[('牛奶',)]/support[('啤酒',)]
    
    0.8333333333333334
    

    提升度(可乐→尿布)=支持度(可乐,尿布)/支持度(可乐)/支持度(尿布):

    support[('尿布', '可乐')]/support[('可乐',)]/support[('尿布',)]
    
    1.0
    

    Apriori 算法的简介与工具使用

    项集叫做itemset,它可以是单个的商品,也可以是商品的组合。

    频繁项集是支持度大于等于最小支持度 (Min Support) 阈值的项集,非频繁项集就是支持度小于最小支持度阈值的项集。

    Apriori 算法就是查找频繁项集 (frequent itemset) 的过程。

    Apriori 算法的递归流程:

    1. K=1,计算 K 项集的支持度;
    2. 筛选掉小于最小支持度的项集;
    3. 如果项集为空,则对应 K-1 项集的结果为最终结果。
      如果项集不为空,K=K+1,回到第一步重复执行。

    假设指定最小支持度是 50%,最终得到的全部频繁项集为:

    itemset = rule.query("support2>=0.5")
    itemset
    

    efficient-apriori工具包可以很方便的使用Apriori 算法,使用如下命令安装:

    pip install efficient-apriori

    下面使用efficient-apriori计算最小支持度是50%的频繁集项:

    from efficient_apriori.itemsets import itemsets_from_transactions
    
    itemsets, num_trans = itemsets_from_transactions(data, min_support=0.5)
    print("总条数:",num_trans)
    itemsets
    
    总条数: 5
    {1: {('牛奶',): 4, ('面包',): 4, ('尿布',): 5, ('啤酒',): 3},
     2: {('尿布', '牛奶'): 4, ('尿布', '面包'): 4, ('牛奶', '面包'): 3, ('啤酒', '尿布'): 3},
     3: {('尿布', '牛奶', '面包'): 3}}
    

    下面根据频繁集项和最低置信度要求生成频繁规则:

    from efficient_apriori.rules import generate_rules_apriori
    
    rules = list(generate_rules_apriori(
        itemsets, min_confidence=0.5, num_transactions=num_trans))
    rules
    
    [{牛奶} -> {尿布},
     {尿布} -> {牛奶},
     {面包} -> {尿布},
     {尿布} -> {面包},
     {面包} -> {牛奶},
     {牛奶} -> {面包},
     {尿布} -> {啤酒},
     {啤酒} -> {尿布},
     {牛奶, 面包} -> {尿布},
     {尿布, 面包} -> {牛奶},
     {尿布, 牛奶} -> {面包},
     {面包} -> {尿布, 牛奶},
     {牛奶} -> {尿布, 面包},
     {尿布} -> {牛奶, 面包}]
    

    当然也可以一次性将频繁项集和频繁规则都计算出来:

    from efficient_apriori import apriori
    
    itemsets, rules = apriori(data, min_support=0.5,  min_confidence=0.5)
    print(itemsets)
    print("-----")
    print(rules)
    
    {1: {('牛奶',): 4, ('面包',): 4, ('尿布',): 5, ('啤酒',): 3}, 2: {('尿布', '牛奶'): 4, ('尿布', '面包'): 4, ('牛奶', '面包'): 3, ('啤酒', '尿布'): 3}, 3: {('尿布', '牛奶', '面包'): 3}}
    -----
    [{牛奶} -> {尿布}, {尿布} -> {牛奶}, {面包} -> {尿布}, {尿布} -> {面包}, {面包} -> {牛奶}, {牛奶} -> {面包}, {尿布} -> {啤酒}, {啤酒} -> {尿布}, {牛奶, 面包} -> {尿布}, {尿布, 面包} -> {牛奶}, {尿布, 牛奶} -> {面包}, {面包} -> {尿布, 牛奶}, {牛奶} -> {尿布, 面包}, {尿布} -> {牛奶, 面包}]
    

    不过efficient_apriori包对数据形式有特殊要求,假如我们需要将文章开头商品亲和性分析所用到的数据集进行关联规则挖掘,需要对数据进行一定的转化:

    features = ["bread", "milk", "cheese", "apple", "banana"]
    df = pd.read_csv("affinity_dataset.txt", sep="\s+",
                     header=None, names=features)
    df.head()
    

    mask = df.columns
    data = [tuple(mask[rows == 1]) for rows in df.values]
    data[:5]
    
    [('cheese', 'apple', 'banana'),
     ('bread', 'milk', 'apple'),
     ('bread', 'cheese', 'apple'),
     ('cheese', 'apple', 'banana'),
     ('milk', 'banana')]
    

    然后就可以通过efficient-apriori包计算频繁项集和频繁规则:

    itemsets, rules = apriori(data, min_support=0.2,  min_confidence=0.1)
    print(itemsets)
    print("-----")
    print(rules)
    
    {1: {('banana',): 59, ('apple',): 36, ('cheese',): 41, ('milk',): 46, ('bread',): 27}, 2: {('apple', 'banana'): 21, ('apple', 'cheese'): 25, ('banana', 'cheese'): 27}}
    -----
    [{banana} -> {apple}, {apple} -> {banana}, {cheese} -> {apple}, {apple} -> {cheese}, {cheese} -> {banana}, {banana} -> {cheese}]
    

    FP-Growth算法

    简介与工具包使用

    FP-Growth算法是基于Apriori改进的关联挖掘的算法,Apriori 在计算的过程有哪些缺点呢?

    1. 采用排列组合的方式,可能产生大量的候选集。
    2. 每次计算每个项集的支持度都需要重新扫描数据集。

    FP-Growth算法的特点是:

    1. 创建了一棵 FP 树来存储频繁项集,在创建前对不满足最小支持度的项进行删除。
    2. 整个生成过程只遍历数据集 2 次。

    当然 Apriori 的改进算法除了 FP-Growth 算法以外,还有 CBA 算法、GSP 算法,本文只介绍FP-Growth算法。

    FP-Growth算法的原理较为复杂,下面我们先直接使用现有的包pyfpgrowth,直接使用FP-GROWTH算法进行关联规则挖掘。

    安装:pip install pyfpgrowth

    pyfpgrowth计算最小支持度是20%的频繁集项(pyfpgrowth的支持度用的是数量):

    import pyfpgrowth as fp
    
    patterns = fp.find_frequent_patterns(data, int(0.2*df.shape[0]))
    patterns
    
    {('bread',): 27,
     ('apple', 'banana'): 21,
     ('apple', 'cheese'): 25,
     ('cheese',): 41,
     ('banana', 'cheese'): 27,
     ('milk',): 46,
     ('banana',): 59}
    

    pyfpgrowth计算最小支持度是10%的频繁规则:

    fp.generate_association_rules(patterns, 0.1)
    
    {('banana',): (('cheese',), 0.4576271186440678),
     ('cheese',): (('banana',), 0.6585365853658537)}
    

    再计算另一个基础示例:

    data = [('牛奶', '面包', '尿布'),
            ('可乐', '面包', '尿布', '啤酒'),
            ('牛奶', '尿布', '啤酒', '鸡蛋'),
            ('面包', '牛奶', '尿布', '啤酒'),
            ('面包', '牛奶', '尿布', '可乐')]
    patterns = fp.find_frequent_patterns(data, int(0.5*len(data)))
    patterns
    
    {('可乐',): 2,
     ('可乐', '面包'): 2,
     ('可乐', '尿布'): 2,
     ('可乐', '尿布', '面包'): 2,
     ('啤酒', '面包'): 2,
     ('啤酒', '尿布', '面包'): 2,
     ('啤酒', '牛奶'): 2,
     ('啤酒', '尿布', '牛奶'): 2,
     ('啤酒', '尿布'): 3,
     ('牛奶',): 4,
     ('尿布', '牛奶'): 4,
     ('牛奶', '面包'): 2,
     ('尿布', '牛奶', '面包'): 2,
     ('面包',): 4,
     ('尿布', '面包'): 4,
     ('尿布',): 5}
    
    fp.generate_association_rules(patterns, 0.5)
    
    {('可乐',): (('尿布', '面包'), 1.0),
     ('面包',): (('尿布',), 1.0),
     ('可乐', '尿布'): (('面包',), 1.0),
     ('可乐', '面包'): (('尿布',), 1.0),
     ('尿布', '面包'): (('牛奶',), 0.5),
     ('啤酒', '尿布'): (('牛奶',), 0.6666666666666666),
     ('啤酒', '面包'): (('尿布',), 1.0),
     ('牛奶',): (('尿布', '面包'), 0.5),
     ('啤酒', '牛奶'): (('尿布',), 1.0),
     ('尿布', '牛奶'): (('面包',), 0.5),
     ('尿布',): (('面包',), 0.8),
     ('牛奶', '面包'): (('尿布',), 1.0)}
    

    FP-Growth算法的原理

    整体过程如下:

    1. 创建项头表,对于满足最小支持度的单个项(K=1项集)按照支持度从高到低进行排序,同时删除不满足最小支持度的项。
    2. 构造 FP 树,根节点记为NULL节点,再次扫描数据集,对于每一条数据,按照支持度从高到低的顺序进行创建节点(项头表中的排序结果),并更新节点计数和项头表的链表。
    3. 通过 FP 树挖掘频繁项集,具体的操作运用“条件模式基”

    FP Tree数据结构

    FP-Growth 算法涉及的数据结构包括三部分:

    1. 项头表:

      里面记录了所有的1项频繁集出现的次数,按照次数降序排列。比如上图中B在所有10组数据中出现了8次,因此排在第一位。

    2. FP Tree:

      它将原始数据集映射到了内存中的一颗FP树

    3. 节点链表:

      所有项头表里的1项频繁集都是一个节点链表的头,它依次指向FP树中该1项频繁集出现的位置。这样做主要是方便项头表和FP Tree之间的联系查找和更新。

    项头表的建立

    假设有10条数据,设置支持度为20%,第一次扫描数据并对1项集计数,发现F,O,I,L,J,P,M, N都只出现一次,支持度低于20%的阈值,直接删除。剩下的A,C,E,G,B,D,F按照支持度的大小降序排列,组成了项头表。

    接着第二次扫描数据,对于每条数据剔除非频繁1项集,并按照支持度降序排列。比如数据项ABCEFO,里面O是非频繁1项集,因此被剔除,只剩下了ABCEF。按照支持度的顺序排序,它变成了ACEBF。

    整体步骤:第一次扫描数据,得到所有频繁一项集的的计数。然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。第二次扫描数据,将读到的原始数据剔除非频繁1项集,并按照支持度降序排列。

    FP Tree的建立

    首先将FP树的根节点设置为null,然后读入第一条数据ACEBF作为一条独立的路径插入到FP树中,所有节点计数为1, 项头表通过节点链表链接上对应的新增节点:

    接着插入数据ACG,由于ACG和现有的FP树可以有共有的祖先节点序列AC,因此只需要增加一个新节点G,将新节点G的计数记为1。同时A和C的计数加1成为2。对应的G节点的节点链表也要更新:

    用同样的办法更新后面8条数据:

    至此,FP树的建立完成。

    整体步骤:逐条读入排序后的数据集,按照排序后的顺序插入FP树中,排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到FP树后,FP树的建立完成。

    FP Tree的挖掘

    整体步骤:得到了FP树和项头表以及节点链表,首先要从项头表的底部项依次向上挖掘。对于项头表对应于FP树的每一项,要找到它的条件模式基。所谓条件模式基是以要挖掘的节点作为叶子节点所对应的FP子树。得到这个FP子树,将子树中每个节点的的计数设置为叶子节点的计数,并删除计数低于支持度的节点。通过条件模式基就可以递归挖掘得到频繁项集。

    先从最底下的F节点开始,寻找F节点的条件模式基,由于F在FP树中只有一个节点,因此候选就只有下图左所示的一条路径,对应{A:8,C:8,E:6,B:2, F:2}。接着将所有的祖先节点计数设置为叶子节点的计数,即FP子树变成{A:2,C:2,E:2,B:2, F:2}。一般条件模式基可以不写叶子节点,因此最终的F的条件模式基如下图右所示:

    通过这个条件模式基很容易得到F的频繁2项集为{A:2,F:2}, {C:2,F:2}, {E:2,F:2}, {B:2,F:2}。递归合并二项集,得到频繁三项集为{A:2,C:2,F:2},{A:2,E:2,F:2},…还有一些频繁三项集。最大的频繁项集为频繁5项集,为{A:2,C:2,E:2,B:2,F:2}

    D节点有两个叶子节点比F节点复杂一些。首先得到的FP子树如下图左,接着将所有的祖先节点计数设置为叶子节点的计数,即变成{A:2, C:2,E:1 G:1,D:1, D:1},此时E节点和G节点由于在条件模式基里面的支持度低于阈值被删除掉,最终在去除低支持度节点并不包括叶子节点后D的条件模式基为{A:2, C:2}。通过它,可得到F的频繁2项集为{A:2,D:2}, {C:2,D:2}。递归合并二项集,得到频繁三项集为{A:2,C:2,D:2}。D对应的最大的频繁项集为频繁3项集。

    同样的方法可以得到B的条件模式基如下图右边,递归挖掘到B的最大频繁项集为频繁4项集{A:2, C:2, E:2,B:2}:

    G的条件模式基如下图右边,递归挖掘到G的最大频繁项集为频繁4项集{A:5, C:5, E:4,G:4}:

    E的条件模式基如下图右边,递归挖掘到E的最大频繁项集为频繁3项集{A:6, C:6, E:6}。

    C的条件模式基如下图右边,递归挖掘到C的最大频繁项集为频繁2项集{A:8, C:8}。

    A的条件模式基为空,因此不用去挖掘。

    至此得到了所有的频繁项集,从上面的分析可以看到,最大的频繁项集为5项集。包括{A:2, C:2, E:2,B:2,F:2}。

    案例:挖掘导演是如何选择演员的

    接下来我们打算通过关联规则挖掘,分析导演选择演员的规律。

    下面以张黎导演为例,首先在豆瓣爬取所需的数据:

    豆瓣爬虫

    打开https://search.douban.com/movie/subject_search?search_text=%E5%BC%A0%E9%BB%8E&cat=1002 ,爬取张黎导演的演员信息。

    每条数据的最后一行是电影的演出人员的信息,第一个人员是导演,其余为演员姓名。姓名之间用“/”分割。显然不是演出人员的信息不是以张黎开头的,都不是张黎导演的电影,应该直接跳过。

    由于 https://search.douban.com/movie/subject_search
    页面使用了动态加载的方式,常规的Js分析很难一口气找到规律,这里直接用 selenium,比较方便。

    selenium需要pip安装,我当前电脑未安装谷歌游览器,所以使用了PhantomJS。

    Selenium和相应驱动的安装方法详见:https://blog.csdn.net/as604049322/article/details/114157526

    from selenium import webdriver
    from urllib.parse import quote
    import time
    from lxml import etree
    import pandas as pd
    from efficient_apriori import apriori
    
    director = '张黎'
    start = 0
    url_template = 'https://search.douban.com/movie/subject_search?search_text={}&cat=1002&start={}'
    driver = webdriver.PhantomJS()
    
    result = []
    while start < 1000:
        url = url_template.format(quote(director), start)
        print(url)
        start += 15
        driver.get(url)
        time.sleep(1)
        html = driver.find_element_by_xpath("//*").get_attribute("outerHTML")
        html = etree.HTML(html)
        movie_list = html.xpath("//div[@class='item-root']//div[@class='detail']")
        for movie in movie_list:
            name = movie.xpath(".//a[@class='title-text']/text()")
            actors = movie.xpath("./div[@class='meta abstract_2']/text()")
            # 不是目标导演导演的电影则跳过
            if len(actors) == 0 or not actors[0].startswith(director):
                continue
            result.append((name[0].replace("\u200e ", ""),
                          actors[0].replace(" ", "")[len(director)+1:]))
        if len(movie_list) < 14:
            break
    df = pd.DataFrame(result, columns=["name", "actors"])
    # 清空演员为空的
    df = df.query("actors!=''")
    df
    
    https://search.douban.com/movie/subject_search?search_text=%E5%BC%A0%E9%BB%8E&cat=1002&start=0
    https://search.douban.com/movie/subject_search?search_text=%E5%BC%A0%E9%BB%8E&cat=1002&start=15
    https://search.douban.com/movie/subject_search?search_text=%E5%BC%A0%E9%BB%8E&cat=1002&start=30
    

    这样就爬到了张黎导演的电影,所选的演员有哪些,豆瓣的数据或许不全,但基本是够用了。

    data = df.actors.str.split("/").to_list()
    print(data)
    
    [['陈宝国', '黄志忠', '王庆祥', '倪大红', '祝希娟', '徐光明', '张志坚', '郭广平'], ['王冰', '吕中', '马少骅', '孙淳', '李光洁', '孙宁', '徐敏', '郑天庸'], ['韩晓军', '沈严', '刘海波', '滕华涛', '林妍', '曹盾', '刘江', '姚晓峰', '李宁', '汪俊', '程源海', '彭三源', '杨文军', '杨阳', '张嘉益', '周一围', '谭卓', '张天爱', '何蓝逗', '梅婷', '雷佳音', '倪妮'], ['孙红雷', '黄志忠', '吕中', '孙淳', '张恒', '杨雪', '郑玉', '柯蓝'], ['成龙', '赵文瑄', '李冰冰', '胡歌', '孙淳', '姜武', '陈冲', '余少群'], ['杨洋', '张天爱', '吴尊', '王丽坤', '释小龙', '柳岩', '索笑坤', '董晴'], ['文章', '李雪健', '宋佳', '张歆怡', '刘韦伯', '矢野浩二', '汤晶媚', '柳岩'], ['张嘉益', '宋佳', '胡歌', '张歆怡', '黄志忠', '张可佳', '马浩博', '吕聿来'], ['姜文'], ['陈坤', '辛芷蕾', '王学圻', '吕中', '张宥浩', '芦芳生', '张子健', '包文婧'], ['杨洋', '张天爱', '吴尊', '王丽坤', '释小龙', '柳岩', '索笑坤', '董晴'], ['张国立', '宋佳', '张铮', '朱雨辰', '白庆琳', '周恒乐', '杨婷婷', '吴越'], ['黄伟', '罗晋', '焦俊艳', '李宗翰', '李光洁'], ['王学圻', '刘蓓', '王彤', '李光洁', '薛山', '李易祥', '张岩', '吴秀波'], ['刘淼淼', '朱刚日尧', '宋佳', '陈兵', '周一围', '孙淳', '王学圻', '衣珊', '党浩予'], ['刘淼淼', '段奕宏', '宋佳', '黄志忠', '袁文康', '柯蓝', '刘立伟', '练练', '程枫'], ['马伊琍', '王茂蕾', '文章', '谭凯', '刘文治', '黄志忠', '李强', '王劲松'], ['王雷'], ['刘淼淼', '宋佳', '谷智鑫', '郭涛', '耿乐', '张志坚'], ['牛犇', '纪玲', '魏伟', '封顺', '颜彼得'], ['王学圻', '刘仲元', '辛明', '王建成', '唐棣'], ['王丽萍', '黄志忠', '柏寒', '范伟', '王珞丹', '林雨申'], ['张博涵', '穆克代斯', '买政尧', '李东鹏']]
    

    关联规则挖掘

    爬到了演员列表信息后,我就可以通过FP-Growth算法挖掘张黎导演选择演员的规律。

    # 挖掘频繁项集和关联规则
    itemsets = fp.find_frequent_patterns(data, 3)
    rules = fp.generate_association_rules(itemsets, 1)
    print(itemsets)
    print("--------")
    print(rules)
    
    {('吕中',): 3, ('李光洁',): 3, ('张天爱',): 3, ('柳岩',): 3, ('刘淼淼',): 3, ('刘淼淼', '宋佳'): 3, ('孙淳',): 4, ('王学圻',): 4, ('黄志忠',): 6, ('宋佳',): 6}
    --------
    {('刘淼淼',): (('宋佳',), 1.0)}
    

    说明张黎导演在使用刘淼淼时,一般都会用宋佳。

    展开全文
  • 统计学术语及关系——显著检验

    千次阅读 2016-12-21 11:22:48
    包括参数估计与假设检验,事先对总体参数或者总体分布形式做出一个假设,然后利用样本信息来判断这个假设是否合理。即分为两个步骤:第一步需说明样本是否能代表总体,第二步用样本判定假设。   1.参数估计概念...
  • 统计的应用可以分为描述统计(即报表)和推断统计(即预测建模) 样本来源于总体,试验的产物,变量每个试验单元的特征或属性 推断统计的五要素:... 获取有代表性样本的方法有: 简单随机抽样 分层随...
  • 分布偏度是指分布不对称方向和程度,这种离散偏差用偏度来衡量。分为正偏、负偏和无偏(对称)三种情况。 衡量偏度指标有:偏斜度、矩偏度系数、四分位数偏度系数和Spearman偏度系数。 偏斜度及矩偏度系数...
  • 代表性指的是样本与总体接近程度;随机性反映样本被抽中纯属偶然 例如:在对总体质量状况一无所知情况下,采用简单随机抽样最为合理;在对总体质量有一定了解情况下,采用分层随机或系统随机抽样可提高其代表...
  • 召回率和精度问题UTA7统计分析 该存储库旨在为我们对中问题统计... 精确度是指相关结果百分比。 另一方面,召回指是您算法正确分类所有相关结果百分比。 毫无疑问,这是一开始就很难理解概念。 所以
  • 主成分分析(PCA)数学原理理解

    千次阅读 2017-09-05 22:18:20
    以前草草地看过主成分分析的原理,一直没能好好从根上过一遍PCA的数学原理,最近...这里的“最具代表性“即最能表征所有样本的独特性的、最具区分度的特征,即特征内样本点的方差尽可能大。通过主成分分析进行数据降
  • 注意: 以下所说“大多数”是指在我们测试过机型中,发生此类状况手机占比达50%及以上,“部分”为 20%到50%;“少数”为20%及以下。而这个概率也仅仅只限于我们所测试过机型,虽然我们采集的样本尽量覆盖...
  • 持续学习是指获得和转移知识而不会灾难地忘记先前学到知识能力。 在这项工作中,我们考虑在分类任务中进行几次连续学习,并提出了一种新颖方法,即“变异原型重放”,该方法可以有效地合并和回忆以前知识...
  • 注意:以下所说“大多数”是指在我们测试过机型中,发生此类状况手机占比达50%及以上,“部分”为 20%到50%;“少数”为20%及以下。而这个概率也仅仅只限于我们所测试过机型,虽然我们采集的样本尽量覆盖...
  • 注意: 以下所说“大多数”是指在我们测试过机型中,发生此类状况手机占比达50%及以上,“部分”为 20%到50%;“少数”为20%及以下。而这个概率也仅仅只限于我们所测试过机型,虽然我们采集的样本尽量覆盖...
  • 偏差指的是样本输出与真实值之间差距,即模型本身拟合程度。 代表了模型本身精确度 Variance 方差指的是模型每一次输出结果与真实值之间差距,即模型泛化能力。 代表了模型稳定。 欠拟合对应了高...
  • 两个质量变量的代表性和准确性指标均较差。 在服务交互质量变量中,两个良好的质量指标信任和响应度指标,而一个质量的不好指标共情指标。 根据这些测试的结果,作者针对相关期刊或科学文章引用的质量较差的...
  • 1.首先介绍下卡方公式 ...(次数不是t次数,均指样本数) 2.扩展过程 a.首先,既然扩展,那么就一定有原始种子,这个可以人工挑出来。种子词不必很多,但要有强烈类别代表性。 b.假设有n个类别,...
  • 抽样类型详细说明

    2016-03-24 10:41:11
    概率抽样依据概率论的基本原理,按照随机原则进行的抽样,因而它能够避免抽样过程中的人为误差,保证样本的代表性;而非概率抽样则主要依据研究者的主观意愿、判断或是否方便等因素来抽取对象,它不考虑抽样中的...
  • 这里抽象成数学问题,指的明确我们可以获得什么样数据,抽象出问题,一个分类还是回归或者聚类问题。 2 获取数据 数据决定了机器学习结果上限,而算法只是尽可能逼近这个上限。 数据要有代表性,否则...
  • BN+LN+GN

    2020-07-06 19:20:33
    Normalization为解决数据间独立同分布问题而提出,独立指的是去除特征之间关联,同分布指的是使所有特征具有相同均值和方差,Internal Covariate Shift 指的是源空间和目标空间条件概率一致,但边缘概率不...
  • sklearn中svc与逻辑回归正则化系数

    千次阅读 2019-06-30 11:17:54
    参数C代表目标函数惩罚系数,惩罚系数指的是分错样本惩罚程度,默认情况下为1.0。当C越大时候,分类器准确越高,但同样容错率会越低,泛化能力会变差。相反,C越小,泛化能力越强,但是准确会降低。 ...
  • 聚类——总结

    2018-12-11 11:42:56
    原型聚类:原型聚类是指聚类结构能通过一组原型刻画,原型是指样本空间中具有代表性的点。通常情况下,算法先对原型进行初始化,然后对原型进行迭代更新求解。 密度聚类:从样本密度角度来考察样本之间可连接性...

空空如也

空空如也

1 2 3 4 5
收藏数 95
精华内容 38
关键字:

样本的代表性是指