新普金娱乐网址


天文小白的Python之路 day5 time,datatime模块详解

为精通而教——数学宗旨素养与数学建模

数学动用Apriori举行关联分析(一)

  • 三月 09, 2019
  • 数学
  • 没有评论

支持度

  怎么着有效定义频仍和关系?个中最根本的八个概念是帮助度和置信度。

  扶助度(support)从字面上掌握正是永葆的程度,二个项集的援救度(support)被定义为数量汇总包罗该项集的笔录所占的百分比。上海体育场面中{底板}的支撑度=(5/6)
* 100%。

  这些概念其实常常在现实生活中出现,翻译成辅助率就像更好驾驭,典型的例证就是投票,比如United Kingdom脱欧的辅助率为51.89%。

  用数学去解释就是,设W
中有s%的工作同时支持物品集A和B,s%称呼{A,B}的帮忙度,即:

  support({A,B}) = num(A∪B) / W =
P(A∩B)

  num(A∪B)表示含有物品集{A,B}的事务集的个数,不是数学中的并集。

Apriori算法进度

数学 1

  发现行反革命复项集的历程如上海教室所示:

  1. 由数量集生成候选项集C1(1表示各类候选项仅有一个多少项);再由C1经过支撑度过滤,生成频仍项集L1(1意味着每一个频仍项仅有2个数目项)。
  2. 将L1的数量项两两拼接成C2。
  3. 从候选项集C2早先,通过援救度过滤生成L2。L2依据Apriori原理拼接成候选项集C3;C3通过支撑度过滤生成L3……直到Lk中仅有二个或从不多少项截止。

  下边是三个百货企业的贸易记录:

数学 2

  Apriori算法发现行反革命复项集的经过如下:

数学 3  具体代码:

 1 def loadDataSet():
 2     return [[1,2,5],[2,4],[2,3],[1,2,4],[1,3],[2,3],[1,3],[1,2,3,5],[1,2,3]]
 3 #1.构建候选1项集C1
 4 def createC1(dataSet):
 5     C1 = []
 6     for transaction in dataSet:
 7         for item in transaction:
 8             if not [item] in C1:
 9                 C1.append([item])
10 
11     C1.sort()
12     return list(map(frozenset, C1))
13 
14 #将候选集Ck转换为频繁项集Lk
15 #D:原始数据集
16 #Cn: 候选集项Ck
17 #minSupport:支持度的最小值
18 def scanD(D, Ck, minSupport):
19     #候选集计数
20     ssCnt = {}
21     for tid in D:
22         for can in Ck:
23             if can.issubset(tid):
24                 if can not in ssCnt.keys(): ssCnt[can] = 1
25                 else: ssCnt[can] += 1
26 
27     numItems = float(len(D))
28     Lk= []     # 候选集项Cn生成的频繁项集Lk
29     supportData = {}    #候选集项Cn的支持度字典
30     #计算候选项集的支持度, supportData key:候选项, value:支持度
31     for key in ssCnt:
32         support = ssCnt[key] / numItems
33         if support >= minSupport:
34             Lk.append(key)
35         supportData[key] = support
36     return Lk, supportData
37 
38 #连接操作,将频繁Lk-1项集通过拼接转换为候选k项集
39 def aprioriGen(Lk_1, k):
40     Ck = []
41     lenLk = len(Lk_1)
42     for i in range(lenLk):
43         L1 = list(Lk_1[i])[:k - 2]
44         L1.sort()
45         for j in range(i + 1, lenLk):
46             #前k-2个项相同时,将两个集合合并
47             L2 = list(Lk_1[j])[:k - 2]
48             L2.sort()
49             if L1 == L2:
50                 Ck.append(Lk_1[i] | Lk_1[j])
51 
52     return Ck
53 
54 def apriori(dataSet, minSupport = 0.5):
55     C1 = createC1(dataSet)
56     L1, supportData = scanD(dataSet, C1, minSupport)
57     L = [L1]
58     k = 2
59     while (len(L[k-2]) > 0):
60         Lk_1 = L[k-2]
61         Ck = aprioriGen(Lk_1, k)
62         print("ck:",Ck)
63         Lk, supK = scanD(dataSet, Ck, minSupport)
64         supportData.update(supK)
65         print("lk:", Lk)
66         L.append(Lk)
67         k += 1
68 
69     return L, supportData
70 
71 dataset = loadDataSet()
72 L, supportData = apriori(dataset, minSupport=0.2)

   控制台音讯:

数学 4

数学,  代码中的scanD方法可作一下修改:

 1 def scanD(D, Ck, minSupport):
 2     #候选集计数
 3     ssCnt = {}
 4     #数据集过滤
 5     D2 = [item for item in D if len(item) >= len(Ck[0])]
 6     for tid in D2:
 7         for can in Ck:
 8             if can.issubset(tid):
 9                 if can not in ssCnt.keys(): ssCnt[can] = 1
10                 else: ssCnt[can] += 1
11     ……
12 
13     return Lk, supportData

   须要注意的是,在上述代码的aprioriGen方法中,假定购买商品是有各种的,能够透过反复2项集{P1,P2},{P1,P3}推导出累累项{P1,P2,P3},不过不能够通过反复2项集{P3,P4},{P1,P3}推导出累累项{P1,P3,P4}。如果去掉借使,则须求修改aprioriGen的代码:

#将频繁Lk-1项集转换为候选k项集
def aprioriGen(Lk_1, k):
    Ck = []
    lenLk = len(Lk_1)
    for i in range(lenLk):
        L1 = Lk_1[i]
        for j in range(i + 1, lenLk):
            L2 = Lk_1[j]
            if len(L1 & L2) == k - 2:
                L1_2 = L1 | L2
                if L1_2 not in Ck:
                    Ck.append(L1 | L2)
    return Ck
# print语句
>>> print('hello world!')
hello world

  大型超级市场有海量交易数额,大家得以经过聚类算法寻找购买相似物品的人群,从而为特定人群提供更具特性化的服务。可是对于超级市场来讲,更有价值的是何等找出商品的藏身关联,从而打包打折,以充实营收。在那之中最经典的案例正是关于尿不湿和干红的传说。怎么着在纷繁扬扬的多寡中搜寻到数码里面包车型地铁隐形关系?当然能够选拔穷举法,但代价高昂,所以要求接纳越来越智能的法门在成登时间内找到答案。Apriori就是内部的一种关系分析算法。

>>> import keyword
>>> print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

置信度

  置信度(confidence)揭穿了A出现时B是还是不是肯定出现,假设出现,则出现的概率是多大。假设A->B的置信度是百分之百,则表达A出现时B一定会产出(再次回到来不一定)。上海教室中底板共出现7回,当中肆遍同时购买了人力车,底板->胶皮的置信度是五分之四。

  用公式表示是,物品A->B的置信度=物品{A,B}的支撑度
/ 物品{A}的支撑度:

  Confidence(A->B) = support({A,B})
/ support({A}) = P(B|A)

  • 反省字符串是或不是为重中之重字,重临True大概False

Apriori原理

  本节摘自《机器学习实战》

  就算大家在经营一家商品类别并不多的超级市场,大家对那多少个日常在一道被购买的货物万分感兴趣。大家只有4种商品:商品0,商品1,商品2和商品3。那么富有或者被同台购买的货品组合都有如何?那么些商品组合大概唯有一种商品,比如商品0,也恐怕包蕴三种、两种可能持有三种商品。大家并不保护某人买了两件商品0以及四件商品2的景况,大家只关怀她购置了一种或各种货品。

  下图呈现了物品之间全体恐怕的结合。为了让该图更便于懂,图中使用物品的编号0来替代物品0本人。此外,图中从上往下的首先个汇聚是Ф,表示空集或不含有其余物品的聚众。物品集合之间的连线评释五个也许愈来愈多聚集能够结合形成三个更大的集纳。

数学 5

  前边说过,我们的靶子是找到日常在一齐购买的物品集合。大家应用集合的支撑度来衡量其冒出的频率。1个聚集的辅助度是指有微微比例的交易记录包含该集合。怎么着对2个加以的集结,比如{0,3},来总括其帮衬度?大家遍历毎条记录并检查该记录包涵0和3,假诺记录确实同时涵盖那两项,那么就扩大总计数值。在围观完全数数据以往,使用总计得到的总和除以总的交易记录数,就足以获得援救度。上述进程和结果只是对准单个集合{0,3}。要收获每个也许集合的补助度就必要数次重复上述进程。大家能够数一下上海体育地方中的集合数目,会发觉就算对于仅有4种物品的集聚,也亟需遍历数据1捌回。而随着物品数量的充实遍历次数会激烈增加。对于富含—
物品的数据集共有2N-1种项集组合。事实上,出售10000或更加多种物品的卖家并不少见。就算只出售100种商品的公司也会有1.26×1030种大概的项集组合。对于当代的电脑而言,须要不短的时日才能不负众望运算。

  为了降低所需的盘算时间,斟酌人士发现一种所谓的Apriori原理。Apriori原理能够帮我们减弱也许感兴趣的项集。Apriori原理是说只要某些项集是几度的,那么它的拥有子集也是一再的。上图给出的例证,那象征假设{0,1}是屡屡的,那么{0}、{1}也毫无疑问是累累的。那些原理直观上并从未什么样扶助,可是假诺反过来看就有用了,也正是说假若多少个项集是非频仍集,那么它的有所超集也是非频仍的,如下所示:

数学 6

  上海体育场地中,已知阴影项集{2,3}是非频仍的。利用这么些文化,我们就清楚项集{0,2,3}
,{1,2,3}以及{0,1,2,3}也是非频仍的。那也实属,一旦总结出了{2,3}的援救度,知道它是非频仍的之后,就不要求再总结{0,2,3}、{1,2,3}和{0,1,2,3}的帮助度,因为大家精晓那个聚集不会满足我们的渴求。使用该原理就可防止止项集数指标指数增加,从而在意料之中时间内总结出累累项集。

  • 查看python3的保有首要字(个中nonlocal是python3新增)

Apriori算法进程

  关联分析的指标包含两项:发现行反革命复项集和发现涉及规则。首先供给找到频仍项集,然后才能获取关联规则。

基本概念

  关联分析是一种在周边数据汇总寻找有趣关系的非监督学习算法。那么些关乎能够有三种样式:频繁项集也许关联规则。频仍项集(frequent
item sets)是平日出现在一块的物品的集结,关联规则(association
rules)暗示三种物品之间或然存在很强的涉嫌。

  下图是3个乒球店的贸易记录,〇表示顾客选购了商品。个中{底板,胶皮,浇水}就是三个再三项集;从中能够找到底板->胶皮那样的涉及规则:

数学 7

>>> abs(-9)
9

发现涉嫌规则

   下篇继续。

 


  参考文献:《机器学习实战》

 
作者:我是8位的

  出处:http://www.cnblogs.com/bigmonkey

  本文以读书、商讨和分享为主,如需转发,请联系自个儿,标明笔者和出处,非商业用途! 

 

 

  • python主要通过三种方法来执行命令:语句和表明式(函数、算数表明式),语句使用主要字组合命令,它能够有出口,也能够没有出口。
import keyword
>>> keyword.iskeyword('as')
True
>>> keyword.iskeyword('eval')  # eval是python的内建函数
False

  • 表明式没有重点字,一般由数学操作符组成的算术表达式和调用的函数组成,例如绝对值函数abs()。

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图