精华内容
下载资源
问答
  • Python变量数据类型

    千次阅读 2018-10-29 12:38:45
    数据类型 数字 整数 浮点数 复数 序列 字符串str 列表List 元组tuple 序列的访问(切片) 数据的嵌套 非序列 字典dict 集合set 布尔型 空值 变量 变量是计算机内存的一块区域,变量可以存储任何...

    目录

    变量

    全局变量和局部变量

    数据类型

    数字

    整数

    浮点数

    复数

    序列

    字符串str

    列表List

    元组tuple

    序列的访问(切片)

    数据的嵌套 

    非序列

    字典dict

    集合set

    布尔型

    空值


    变量

    变量是计算机内存中的一块区域,变量可以存储任何值(也称指向),而且值可以改变。变量是存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符串等。

    变量命名规则:变量名的长度不受限制,必须是字母、数字或下划线(_)的组合,不能使用空格、连字符、标点符号、引号或其他字符, 变量名的第一个字符不能是数字,必须是字母或下划线,变量名区分大小写

    • 正常变量:正常变量名是公开的(public),可以被直接引用,比如:a,name,等;
    • 特殊变量:类似 __xxx__ 这样,可以被直接引用,但是有特殊用途,比如 __author__ ,__name__ 就是特殊变量,hello模块定义的文档注释也可以用特殊变量 __doc__ 访问,我们自己的变量一般不要用这种变量名;
    • 私有变量:类似 _xxx 和 __ xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如 _abc,__abc 等
    • 常量:通常全部用大写的字母表示:如   PI = 3.14159265359   ,但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。

    python自带的变量,我们不能用下面的变量名:

    全局变量和局部变量

    全局变量是在整个py文件中声明,全局范围内都可以访问的变量。

    局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了。

    如果我们在全局申明了一个变量,我们想要在函数内部使用这个变量时,我们需要用 global 指定这个变量。

    如下,我们在函数式内部使用全局变量时,没用global指定,所以发生了报错!

    a="hello"
    def test():
        a=a+"world!"
        print(a)
    test()

    当我们用global指定后

    a="hello"
    def test():
        global a
        a=a+"world!"
        print(a)
    test()

    我们再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。

    在一个返回函数中,我们在内部的函数中调用外部的函数的变量,这时,我们就需要用nonlocal指定了。

    def test():
        a="hello"
        def test2():
            a=a+"world"
            print(a)
        return test2()
    test()

    def test():
        a="hello"
        def test2():
            nonlocal a
            a=a+"world"
            print(a)
        return test2()
    test()

    数据类型

    数字

    整数

    Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用 0 x前缀和 0-9,a-f 表示,例如:0xff00,0xa5b4c3d2,等等。

    • 整数的除法:5/2       # 2.5
    • 整数的整除:5//2      # 2
    • 整数的取余:   5%2    # 1
       

    浮点数

    浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^9和12.3x10^8是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
    整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差

    复数

    a=5+6j

    序列

    序列是Python中最基本的数据结构。序列中的每个元素都分配一个索引,第一个索引是0,第二个索引是1,依此类推。每个索引对应一个元素。序列类似于其他语言的数组,可以通过索引查找或者通过索引修改值

    字符串str

    a="hello,word!"

    字符串是 Python 中最常用的数据类型。我们可以使用引号 ( ' 或 " )来创建字符串。

    创建字符串很简单,只要为变量分配一个值即可。例如:

    a='hello'
    b="hello"
    c="let's go" 

    原始字符串

     a=r"hello,\nworld"        这里是 \n 不进行转义

    字符串转换为字节 

    a=b"root"         a的type是bytes

    字符串的切片

    >>a="hello,word!"
    >>print(a[0:5])
    hello
    >>print(a[0::2])
    hlowr!
    >>print(a[-3:-1])
    rd

    字符串的格式化 

    a="hel{},{}rd!"
    i="lo"
    j="wo"
    a=a.format(i,j)
    print(a)
    
    >> hello,word!

    转义字符串

    \(在行尾时) \n \v \t \r \f \e \0000 \b
    续行符 换行 纵向制表符 横向制表符 回车 换页 转义 退

    字符串的常用方法

    • len("hello"):               返回字符串的长度
    • str.capitalize()  :  将原来的字符串的首字母大写,并返回,返回值为str类型
    • str.lower():             将字符串所有字母小写,并返回,返回值为str类型
    • str.upper():            将字符串所有字母大写,并返回,返回值为str类型
    • str.count('a'):              判断字符串存在几个字符a, 返回值为int类型
    • str.find('a'):         判断字符a在字符串中的位置,返回字符a的索引
    • str.split('.'):           将字符串中的 . 分隔开 ,返回一个列表对象
    • str.strip()         该方法用于移除字符串头尾指定的字符(默认为空格)(只能移除头尾的,不能移除中间的字符)。
    • “--".join(a)           将分隔的字符用--连接起来
    • str.replace("aa","bb")    将字符串中所有的aa字符替换为bb字符
    • str.startswith("aa")   判断字符串是否以aa开头,返回True或者False
    • str.format()         格式化字符串
    • str.encode("utf-8"):  对字符串进行utf-8编码

    字符串的排序

    列表List

    元组tuple

     a=(1,2,3,"hello")         

    元组是一种不可变序列,即创建之后不能再做任何修改。 元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至元组、列表。 元组通常代表一行数据,而元组中的元素代表不同的数据项
     
    当元组中的数据包含可变元素的数据类型,例如列表时,该数据类型的元素是可以改变的

    >>a=[1,2,3]
    >>b=(4,a,6)
    b=(4,[1,2,3],6)
    >>a[1]=10
    b=(4,[1,10,3],6)

    元组支持相加和乘以一个数,元组不支持相减和相除

    元组的相加
    >>t1=(1,'two',3)
    >>t2=(2,'three',5)
    >>print(t1+t2)
    >>print(t1*2)
    (1, 'two', 3, 2, 'three', 5)
    (1, 'two', 3, 1, 'two', 3)

    序列的访问(切片)

    字符串、列表和元组均支持索引访问,也就是切片。

    下面以列表为例

    设 L=[1 , 2, 3, 4, 5, 6]
    
    L[0:3] = [ 1, 2, 3]     从索引0开始取,直到索引3为止,但不包括索引3
    L[:3]   = [ 1, 2, 3]       第一个参数不写默认是0
    L[3:5]=[4,5]                  从索引3开始取,直到索引5为止,但不包括索引5
    L[2:5:2]=[3,5]            从索引2开始取,直到索引5为止,但不包括索引5,步长为2
    L[-2:] = [5,6]           从倒数第二个开始取,知道结束
    L[::2]=[1,3,5]           取所有的数,指定步长为2

    数据的嵌套 

    非序列

    字典dict

    集合set

    b={ 1 , 2 , 4 }

    在Python中,集合是一系列不重复的元素。集合类似于字典,但只包含键,而没有相关联的值。 在Python中,集合是相对较新的功能,在其还不支持集合时,一般使用字典模拟集合。 集合分两类:可变集合(set)和 不可变集合(frozenset)。对于可变集合,可添加和删除元素,而不可变集合一旦创建就不能更改。 与字典一样,集合的元素排列顺序也是不确定的。集合没有特殊的表示方法,而是通过一个set函数转换成集合,集合不能通过索引取值

    >>a="abcbsgacbt"
    >>b=set(a)
    >>print(b)
    {'t', 's', 'c', 'g', 'a', 'b'}


    集合中的函数:  add、clear、copy、difference、difference_update、discard、intersection、intersection_update、isdisjoint、issubset、issuberset、pop、remove、symmetric_difference、symmetric_difference_update、union、update

    布尔型

    True    False

    任何一个非0的值都是True,0的值都是False

    空值

    空值是Python里一个特殊的值,用None表示。None不能理解为0,也不能理解为"",None是一个特殊的空值。

    >>a=None
    >>print(a,type(a))
    None <class 'NoneType'>
    
    
    a=""
    b=0
    if a==None:
        print(True)
    elif b==None:
        print("Middle")
    else:
        print(False)
    ##################
    False

     

    展开全文
  • Python机器学习&数据分析-关联规则

    千次阅读 2019-08-04 09:10:23
    数据分析-关联规则 机器学习课程的笔记整理 一、关联规则前置知识 关联规则 在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,超市也因此发现了一个规律,在购买婴儿尿布的年轻父亲们,有30%~40%的人同时...

    Python机器学习&数据分析-关联规则

    机器学习课程的笔记整理

    一、关联规则前置知识

    关联规则

    • 在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,超市也因此发现了一个规律,在购买婴儿尿布的年轻父亲们中,有30%~40%的人同时要买一些啤酒。超市随后调整了货架的摆放,把尿布和啤酒放在一起,明显增加了销售额。

    在这里插入图片描述

    • 若两个或多个变量的取值之间存在某种规律性,就称为关联

    • 关联规则是寻找在同一个事件中出现的不同项的相关性,比如在一次购买活动中所买不同商品的相关性。

    • “在购买计算机的顾客中,有30%的人也同时购买了打印机”

    支持度(support):一个项集或者规则在所有事务中出现的频率,σ(X):表示项集X的支持度计数

    • 项集X的支持度:s(X)=σ(X)/N
    • 规则X==>Y表示物品集X对物品集Y的支持度,也就是物品集X和物品集Y同时出现的概率
    • 某天共有100个顾客到商场购买物品,其中有30个顾客同时购买了啤酒和尿布,那么上述的关联规则的支持度就是30%

    置信度(confidence):确定Y在包含X的事务中出现的频繁程度。c(X → Y) = σ(X∪Y)/σ(X)

    • p(Y│X)=p(XY)/p(X)。
    • 置信度反应了关联规则的可信度—购买了项目集X中的商品的顾客同时也购买了Y中商品的可能性有多大
    • 购买薯片的顾客中有50%的人购买了可乐,则置信度为50%

    提升度(lift):物品集A的出现对物品集B的出现概率发生了多大的变化

    • lift(A==>B)=confidence(A==>B)/support(B)=p(B|A)/p(B)
    • 现在有** 1000 ** 个消费者,有** 500** 人购买了茶叶,其中有** 450人同时** 购买了咖啡,另** 50人** 没有。由于** confidence(茶叶=>咖啡)=450/500=90%** ,由此可能会认为喜欢喝茶的人往往喜欢喝咖啡。但如果另外没有购买茶叶的** 500人** ,其中同样有** 450人** 购买了咖啡,同样是很高的** 置信度90%** ,由此,得到不爱喝茶的也爱喝咖啡。这样看来,其实是否购买咖啡,与有没有购买茶叶并没有关联,两者是相互独立的,其** 提升度90%/[(450+450)/1000]=1** 。

    由此可见,lift正是弥补了confidence的这一缺陷,if lift=1,X与Y独立,X对Y出现的可能性没有提升作用,其值越大(lift>1),则表明X对Y的提升程度越大,也表明关联性越强。

    二、自定义购物数据集的例子

    在anaconda命令行下通过

    conda install -c conda-forge mlxtend

    import pandas as pd
    from mlxtend.frequent_patterns import apriori
    from mlxtend.frequent_patterns import association_rules
    

    自定义一份购物数据集

    data = {"ID":[1,2,3,4,5,6],
           "Onion":[1,0,0,1,1,1],
           "Potato":[1,1,0,1,1,1],
           "Burger":[1,1,0,0,1,1],
           "Milk":[0,1,1,1,0,1],
           "Beer":[0,0,1,0,1,0]}
    
    df = pd.DataFrame(data)
    
    df = df[['ID', 'Onion', 'Potato', 'Burger', 'Milk', 'Beer' ]]
    
    df
    
    ID Onion Potato Burger Milk Beer
    0 1 1 1 1 0 0
    1 2 0 1 1 1 0
    2 3 0 0 0 1 1
    3 4 1 1 0 1 0
    4 5 1 1 1 0 1
    5 6 1 1 1 1 0

    设置支持度 (support) 来选择频繁项集.

    • 选择最小支持度为50%

    • apriori(df, min_support=0.5, use_colnames=True)

    frequent_itemsets = apriori(df[['Onion', 'Potato', 'Burger', 'Milk', 'Beer' ]],min_support=0.5, use_colnames=True)
    
    frequent_itemsets
    
    support itemsets
    0 0.666667 (Onion)
    1 0.833333 (Potato)
    2 0.666667 (Burger)
    3 0.666667 (Milk)
    4 0.666667 (Onion, Potato)
    5 0.500000 (Onion, Burger)
    6 0.666667 (Potato, Burger)
    7 0.500000 (Milk, Potato)
    8 0.500000 (Onion, Potato, Burger)

    计算规则

    • association_rules(df, metric='lift', min_threshold=1)
    • 可以指定不同的衡量标准与最小阈值
    rules = association_rules(frequent_itemsets,metric="lift",min_threshold=1)
    
    rules
    
    antecedents consequents antecedent support consequent support support confidence lift leverage conviction
    0 (Onion) (Potato) 0.666667 0.833333 0.666667 1.00 1.200 0.111111 inf
    1 (Potato) (Onion) 0.833333 0.666667 0.666667 0.80 1.200 0.111111 1.666667
    2 (Onion) (Burger) 0.666667 0.666667 0.500000 0.75 1.125 0.055556 1.333333
    3 (Burger) (Onion) 0.666667 0.666667 0.500000 0.75 1.125 0.055556 1.333333
    4 (Potato) (Burger) 0.833333 0.666667 0.666667 0.80 1.200 0.111111 1.666667
    5 (Burger) (Potato) 0.666667 0.833333 0.666667 1.00 1.200 0.111111 inf
    6 (Onion, Potato) (Burger) 0.666667 0.666667 0.500000 0.75 1.125 0.055556 1.333333
    7 (Onion, Burger) (Potato) 0.500000 0.833333 0.500000 1.00 1.200 0.083333 inf
    8 (Potato, Burger) (Onion) 0.666667 0.666667 0.500000 0.75 1.125 0.055556 1.333333
    9 (Onion) (Potato, Burger) 0.666667 0.666667 0.500000 0.75 1.125 0.055556 1.333333
    10 (Potato) (Onion, Burger) 0.833333 0.500000 0.500000 0.60 1.200 0.083333 1.250000
    11 (Burger) (Onion, Potato) 0.666667 0.666667 0.500000 0.75 1.125 0.055556 1.333333
    rules[ ( rules["lift"] > 1.125) & (rules["confidence"] > 0.8) ]
    
    antecedents consequents antecedent support consequent support support confidence lift leverage conviction
    0 (Onion) (Potato) 0.666667 0.833333 0.666667 1.0 1.2 0.111111 inf
    5 (Burger) (Potato) 0.666667 0.833333 0.666667 1.0 1.2 0.111111 inf
    7 (Onion, Burger) (Potato) 0.500000 0.833333 0.500000 1.0 1.2 0.083333 inf

    这几条结果就比较有价值了:

    • (洋葱和马铃薯)(汉堡和马铃薯)可以搭配着来卖
    • 如果洋葱和汉堡都在购物篮中, 顾客买马铃薯的可能性也比较高,如果他篮子里面没有,可以推荐一下.

    三、模拟实际购物的例子

    retail_shopping_basket = {'ID':[1,2,3,4,5,6],
                             'Basket':[['Beer', 'Diaper', 'Pretzels', 'Chips', 'Aspirin'],
                                       ['Diaper', 'Beer', 'Chips', 'Lotion', 'Juice', 'BabyFood', 'Milk'],
                                       ['Soda', 'Chips', 'Milk'],
                                       ['Soup', 'Beer', 'Diaper', 'Milk', 'IceCream'],
                                       ['Soda', 'Coffee', 'Milk', 'Bread'],
                                       ['Beer', 'Chips']
                                      ]
                             }
    
    retail = pd.DataFrame(retail_shopping_basket)
    
    retail = retail[["ID","Basket"]]
    
    pd.options.display.max_colwidth=100
    
    retail
    
    ID Basket
    0 1 [Beer, Diaper, Pretzels, Chips, Aspirin]
    1 2 [Diaper, Beer, Chips, Lotion, Juice, BabyFood, Milk]
    2 3 [Soda, Chips, Milk]
    3 4 [Soup, Beer, Diaper, Milk, IceCream]
    4 5 [Soda, Coffee, Milk, Bread]
    5 6 [Beer, Chips]

    注意:

    数据集中都是字符串组成的,需要转换成数值编码

    retail_id = retail.drop("Basket",1)
    retail_id
    
    ID
    0 1
    1 2
    2 3
    3 4
    4 5
    5 6
    retail_Basket = retail.Basket.str.join(",")
    retail_Basket
    
    0              Beer,Diaper,Pretzels,Chips,Aspirin
    1    Diaper,Beer,Chips,Lotion,Juice,BabyFood,Milk
    2                                 Soda,Chips,Milk
    3                  Soup,Beer,Diaper,Milk,IceCream
    4                          Soda,Coffee,Milk,Bread
    5                                      Beer,Chips
    Name: Basket, dtype: object
    
    retail_Basket = retail_Basket.str.get_dummies(",")
    retail_Basket
    
    Aspirin BabyFood Beer Bread Chips Coffee Diaper IceCream Juice Lotion Milk Pretzels Soda Soup
    0 1 0 1 0 1 0 1 0 0 0 0 1 0 0
    1 0 1 1 0 1 0 1 0 1 1 1 0 0 0
    2 0 0 0 0 1 0 0 0 0 0 1 0 1 0
    3 0 0 1 0 0 0 1 1 0 0 1 0 0 1
    4 0 0 0 1 0 1 0 0 0 0 1 0 1 0
    5 0 0 1 0 1 0 0 0 0 0 0 0 0 0
    retail = retail_id.join(retail_Basket)
    retail
    
    ID Aspirin BabyFood Beer Bread Chips Coffee Diaper IceCream Juice Lotion Milk Pretzels Soda Soup
    0 1 1 0 1 0 1 0 1 0 0 0 0 1 0 0
    1 2 0 1 1 0 1 0 1 0 1 1 1 0 0 0
    2 3 0 0 0 0 1 0 0 0 0 0 1 0 1 0
    3 4 0 0 1 0 0 0 1 1 0 0 1 0 0 1
    4 5 0 0 0 1 0 1 0 0 0 0 1 0 1 0
    5 6 0 0 1 0 1 0 0 0 0 0 0 0 0 0
    frequent_items_2 = apriori(retail.drop("ID",1),use_colnames=True)
    
    frequent_items_2
    
    support itemsets
    0 0.666667 (Beer)
    1 0.666667 (Chips)
    2 0.500000 (Diaper)
    3 0.666667 (Milk)
    4 0.500000 (Chips, Beer)
    5 0.500000 (Diaper, Beer)

    如果光考虑支持度support(X>Y), [Beer, Chips] 和 [Beer, Diaper] 都是很频繁的,哪一种组合更相关呢?

    association_rules(frequent_items_2,metric="lift")
    
    antecedents consequents antecedent support consequent support support confidence lift leverage conviction
    0 (Chips) (Beer) 0.666667 0.666667 0.5 0.75 1.125 0.055556 1.333333
    1 (Beer) (Chips) 0.666667 0.666667 0.5 0.75 1.125 0.055556 1.333333
    2 (Diaper) (Beer) 0.500000 0.666667 0.5 1.00 1.500 0.166667 inf
    3 (Beer) (Diaper) 0.666667 0.500000 0.5 0.75 1.500 0.166667 2.000000

    显然{Diaper, Beer}更相关一些

    四、电影题材关联的例子

    数据集来源: MovieLens (small)

    movies = pd.read_csv("ml-latest-small/movies.csv")
    
    movies.head(10)
    
    movieId title genres
    0 1 Toy Story (1995) Adventure|Animation|Children|Comedy|Fantasy
    1 2 Jumanji (1995) Adventure|Children|Fantasy
    2 3 Grumpier Old Men (1995) Comedy|Romance
    3 4 Waiting to Exhale (1995) Comedy|Drama|Romance
    4 5 Father of the Bride Part II (1995) Comedy
    5 6 Heat (1995) Action|Crime|Thriller
    6 7 Sabrina (1995) Comedy|Romance
    7 8 Tom and Huck (1995) Adventure|Children
    8 9 Sudden Death (1995) Action
    9 10 GoldenEye (1995) Action|Adventure|Thriller

    数据中包括电影名字与电影类型的标签,第一步还是先转换成one-hot格式

    movies_one = movies.drop("genres",1).join(movies.genres.str.get_dummies())
    
    pd.options.display.max_columns=100
    
    movies_one.head()
    
    movieId title (no genres listed) Action Adventure Animation Children Comedy Crime Documentary Drama Fantasy Film-Noir Horror IMAX Musical Mystery Romance Sci-Fi Thriller War Western
    0 1 Toy Story (1995) 0 0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0
    1 2 Jumanji (1995) 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
    2 3 Grumpier Old Men (1995) 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0
    3 4 Waiting to Exhale (1995) 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0
    4 5 Father of the Bride Part II (1995) 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    movies_one.shape
    
    (9125, 22)
    

    数据集包括9125部电影,一共有20种不同类型。

    movies_one.set_index(["movieId","title"],inplace=True)
    
    movies_one.head()
    
    (no genres listed) Action Adventure Animation Children Comedy Crime Documentary Drama Fantasy Film-Noir Horror IMAX Musical Mystery Romance Sci-Fi Thriller War Western
    movieId title
    1 Toy Story (1995) 0 0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0
    2 Jumanji (1995) 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
    3 Grumpier Old Men (1995) 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0
    4 Waiting to Exhale (1995) 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0
    5 Father of the Bride Part II (1995) 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    frequent_itemsets_movies = apriori(movies_one,use_colnames=True,min_support=0.025)
    
    frequent_itemsets_movies
    
    support itemsets
    0 0.169315 (Action)
    1 0.122411 (Adventure)
    2 0.048986 (Animation)
    3 0.063890 (Children)
    4 0.363288 (Comedy)
    5 0.120548 (Crime)
    6 0.054247 (Documentary)
    7 0.478356 (Drama)
    8 0.071671 (Fantasy)
    9 0.096110 (Horror)
    10 0.043178 (Musical)
    11 0.059507 (Mystery)
    12 0.169315 (Romance)
    13 0.086795 (Sci-Fi)
    14 0.189479 (Thriller)
    15 0.040219 (War)
    16 0.058301 (Action, Adventure)
    17 0.037589 (Comedy, Action)
    18 0.038247 (Action, Crime)
    19 0.051178 (Action, Drama)
    20 0.040986 (Action, Sci-Fi)
    21 0.062904 (Thriller, Action)
    22 0.029260 (Children, Adventure)
    23 0.036712 (Comedy, Adventure)
    24 0.032438 (Drama, Adventure)
    25 0.030685 (Fantasy, Adventure)
    26 0.027726 (Sci-Fi, Adventure)
    27 0.027068 (Children, Animation)
    28 0.032877 (Children, Comedy)
    29 0.032438 (Comedy, Crime)
    30 0.104000 (Comedy, Drama)
    31 0.026959 (Fantasy, Comedy)
    32 0.090082 (Comedy, Romance)
    33 0.067616 (Crime, Drama)
    34 0.057863 (Thriller, Crime)
    35 0.031671 (Mystery, Drama)
    36 0.101260 (Drama, Romance)
    37 0.087123 (Thriller, Drama)
    38 0.031014 (War, Drama)
    39 0.043397 (Horror, Thriller)
    40 0.036055 (Thriller, Mystery)
    41 0.028932 (Thriller, Sci-Fi)
    42 0.035068 (Comedy, Drama, Romance)
    43 0.032000 (Crime, Thriller, Drama)
    rules_movies = association_rules(frequent_itemsets_movies,metric="lift",min_threshold=1.25)
    
    rules_movies
    
    antecedents consequents antecedent support consequent support support confidence lift leverage conviction
    0 (Action) (Adventure) 0.169315 0.122411 0.058301 0.344337 2.812955 0.037575 1.338475
    1 (Adventure) (Action) 0.122411 0.169315 0.058301 0.476276 2.812955 0.037575 1.586111
    2 (Action) (Crime) 0.169315 0.120548 0.038247 0.225890 1.873860 0.017836 1.136081
    3 (Crime) (Action) 0.120548 0.169315 0.038247 0.317273 1.873860 0.017836 1.216716
    4 (Action) (Sci-Fi) 0.169315 0.086795 0.040986 0.242071 2.789015 0.026291 1.204870
    5 (Sci-Fi) (Action) 0.086795 0.169315 0.040986 0.472222 2.789015 0.026291 1.573929
    6 (Thriller) (Action) 0.189479 0.169315 0.062904 0.331984 1.960746 0.030822 1.243510
    7 (Action) (Thriller) 0.169315 0.189479 0.062904 0.371521 1.960746 0.030822 1.289654
    8 (Children) (Adventure) 0.063890 0.122411 0.029260 0.457976 3.741299 0.021439 1.619096
    9 (Adventure) (Children) 0.122411 0.063890 0.029260 0.239033 3.741299 0.021439 1.230158
    10 (Fantasy) (Adventure) 0.071671 0.122411 0.030685 0.428135 3.497518 0.021912 1.534608
    11 (Adventure) (Fantasy) 0.122411 0.071671 0.030685 0.250671 3.497518 0.021912 1.238881
    12 (Sci-Fi) (Adventure) 0.086795 0.122411 0.027726 0.319444 2.609607 0.017101 1.289519
    13 (Adventure) (Sci-Fi) 0.122411 0.086795 0.027726 0.226500 2.609607 0.017101 1.180614
    14 (Children) (Animation) 0.063890 0.048986 0.027068 0.423671 8.648758 0.023939 1.650122
    15 (Animation) (Children) 0.048986 0.063890 0.027068 0.552573 8.648758 0.023939 2.092205
    16 (Children) (Comedy) 0.063890 0.363288 0.032877 0.514580 1.416453 0.009666 1.311672
    17 (Comedy) (Children) 0.363288 0.063890 0.032877 0.090498 1.416453 0.009666 1.029255
    18 (Comedy) (Romance) 0.363288 0.169315 0.090082 0.247964 1.464511 0.028572 1.104581
    19 (Romance) (Comedy) 0.169315 0.363288 0.090082 0.532039 1.464511 0.028572 1.360609
    20 (Thriller) (Crime) 0.189479 0.120548 0.057863 0.305379 2.533256 0.035022 1.266089
    21 (Crime) (Thriller) 0.120548 0.189479 0.057863 0.480000 2.533256 0.035022 1.558693
    22 (Drama) (Romance) 0.478356 0.169315 0.101260 0.211684 1.250236 0.020267 1.053746
    23 (Romance) (Drama) 0.169315 0.478356 0.101260 0.598058 1.250236 0.020267 1.297810
    24 (War) (Drama) 0.040219 0.478356 0.031014 0.771117 1.612015 0.011775 2.279087
    25 (Drama) (War) 0.478356 0.040219 0.031014 0.064834 1.612015 0.011775 1.026321
    26 (Horror) (Thriller) 0.096110 0.189479 0.043397 0.451539 2.383052 0.025186 1.477810
    27 (Thriller) (Horror) 0.189479 0.096110 0.043397 0.229034 2.383052 0.025186 1.172413
    28 (Thriller) (Mystery) 0.189479 0.059507 0.036055 0.190283 3.197672 0.024779 1.161509
    29 (Mystery) (Thriller) 0.059507 0.189479 0.036055 0.605893 3.197672 0.024779 2.056601
    30 (Thriller) (Sci-Fi) 0.189479 0.086795 0.028932 0.152689 1.759206 0.012486 1.077769
    31 (Sci-Fi) (Thriller) 0.086795 0.189479 0.028932 0.333333 1.759206 0.012486 1.215781
    32 (Comedy, Drama) (Romance) 0.104000 0.169315 0.035068 0.337197 1.991536 0.017460 1.253291
    33 (Romance) (Comedy, Drama) 0.169315 0.104000 0.035068 0.207120 1.991536 0.017460 1.130057
    34 (Drama, Crime) (Thriller) 0.067616 0.189479 0.032000 0.473258 2.497673 0.019188 1.538742
    35 (Thriller, Drama) (Crime) 0.087123 0.120548 0.032000 0.367296 3.046884 0.021497 1.389989
    36 (Crime) (Thriller, Drama) 0.120548 0.087123 0.032000 0.265455 3.046884 0.021497 1.242778
    37 (Thriller) (Drama, Crime) 0.189479 0.067616 0.032000 0.168884 2.497673 0.019188 1.121845
    rules_movies[(rules_movies.lift>4)].sort_values(by=['lift'], ascending=False)
    
    antecedents consequents antecedent support consequent support support confidence lift leverage conviction
    14 (Children) (Animation) 0.063890 0.048986 0.027068 0.423671 8.648758 0.023939 1.650122
    15 (Animation) (Children) 0.048986 0.063890 0.027068 0.552573 8.648758 0.023939 2.092205

    Children和Animation 这俩题材是最相关的

    movies[(movies.genres.str.contains('Children')) & (~movies.genres.str.contains('Animation'))]
    
    <tr>
      <th>8917</th>
      <td>135266</td>
      <td>Zenon: The Zequel (2001)</td>
      <td>Adventure|Children|Comedy|Sci-Fi</td>
    </tr>
    <tr>
      <th>8918</th>
      <td>135268</td>
      <td>Zenon: Z3 (2004)</td>
      <td>Adventure|Children|Comedy</td>
    </tr>
    <tr>
      <th>8960</th>
      <td>139620</td>
      <td>Everything's Gonna Be Great (1998)</td>
      <td>Adventure|Children|Comedy|Drama</td>
    </tr>
    <tr>
      <th>8967</th>
      <td>140152</td>
      <td>Dreamcatcher (2015)</td>
      <td>Children|Crime|Documentary</td>
    </tr>
    <tr>
      <th>8981</th>
      <td>140747</td>
      <td>16 Wishes (2010)</td>
      <td>Children|Drama|Fantasy</td>
    </tr>
    <tr>
      <th>9052</th>
      <td>149354</td>
      <td>Sisters (2015)</td>
      <td>Children|Comedy</td>
    </tr>
    
    movieId title genres
    1 2 Jumanji (1995) Adventure|Children|Fantasy
    7 8 Tom and Huck (1995) Adventure|Children
    26 27 Now and Then (1995) Children|Drama
    32 34 Babe (1995) Children|Drama
    36 38 It Takes Two (1995) Children|Comedy
    51 54 Big Green, The (1995) Children|Comedy
    56 60 Indian in the Cupboard, The (1995) Adventure|Children|Fantasy
    74 80 White Balloon, The (Badkonake sefid) (1995) Children|Drama
    81 87 Dunston Checks In (1996) Children|Comedy
    98 107 Muppet Treasure Island (1996) Adventure|Children|Comedy|Musical
    114 126 NeverEnding Story III, The (1994) Adventure|Children|Fantasy
    125 146 Amazing Panda Adventure, The (1995) Adventure|Children
    137 158 Casper (1995) Adventure|Children
    148 169 Free Willy 2: The Adventure Home (1995) Adventure|Children|Drama
    160 181 Mighty Morphin Power Rangers: The Movie (1995) Action|Children
    210 238 Far From Home: The Adventures of Yellow Dog (1995) Adventure|Children
    213 241 Fluke (1995) Children|Drama
    215 243 Gordy (1995) Children|Comedy|Fantasy
    222 250 Heavyweights (Heavy Weights) (1995) Children|Comedy
    230 258 Kid in King Arthur's Court, A (1995) Adventure|Children|Comedy|Fantasy|Romance
    234 262 Little Princess, A (1995) Children|Drama
    280 314 Secret of Roan Inish, The (1994) Children|Drama|Fantasy|Mystery
    308 343 Baby-Sitters Club, The (1995) Children
    320 355 Flintstones, The (1994) Children|Comedy|Fantasy
    326 362 Jungle Book, The (1994) Adventure|Children|Romance
    338 374 Richie Rich (1994) Children|Comedy
    361 410 Addams Family Values (1993) Children|Comedy|Fantasy
    371 421 Black Beauty (1994) Adventure|Children|Drama
    404 455 Free Willy (1993) Adventure|Children|Drama
    431 484 Lassie (1994) Adventure|Children
    ... ... ... ...
    7707 83177 Yogi Bear (2010) Children|Comedy
    7735 84312 Home Alone 4 (2002) Children|Comedy|Crime
    7823 87383 Curly Top (1935) Children|Musical|Romance
    7900 89881 Superman and the Mole-Men (1951) Children|Mystery|Sci-Fi
    7929 90866 Hugo (2011) Children|Drama|Mystery
    7935 91094 Muppets, The (2011) Children|Comedy|Musical
    7942 91286 Little Colonel, The (1935) Children|Comedy|Crime|Drama
    7971 91886 Dolphin Tale (2011) Children|Drama
    8096 95740 Adventures of Mary-Kate and Ashley, The: The Case of the United States Navy Adventure (1997) Children|Musical|Mystery
    8199 98441 Rebecca of Sunnybrook Farm (1938) Children|Comedy|Drama|Musical
    8200 98458 Baby Take a Bow (1934) Children|Comedy|Drama
    8377 104074 Percy Jackson: Sea of Monsters (2013) Adventure|Children|Fantasy
    8450 106441 Book Thief, The (2013) Children|Drama|War
    8558 110461 We Are the Best! (Vi är bäst!) (2013) Children|Comedy|Drama
    8592 111659 Maleficent (2014) Action|Adventure|Children|IMAX
    8689 115139 Challenge to Lassie (1949) Children|Drama
    8761 118997 Into the Woods (2014) Children|Comedy|Fantasy|Musical
    8765 119155 Night at the Museum: Secret of the Tomb (2014) Adventure|Children|Comedy|Fantasy
    8766 119655 Seventh Son (2014) Adventure|Children|Fantasy
    8792 122932 Elsa & Fred (2014) Children|Comedy|Romance
    8845 130073 Cinderella (2015) Children|Drama|Fantasy|Romance
    8850 130450 Pan (2015) Adventure|Children|Fantasy
    8871 132046 Tomorrowland (2015) Action|Adventure|Children|Mystery|Sci-Fi

    336 rows × 3 columns

    展开全文
  • 数据挖掘之关联规则分析

    万次阅读 2018-08-12 14:01:18
    关联规则分析也称为购物篮分析,最早是为了发现超市销售数据库不同的商品之间的关联关系。 用于寻找数据集中各项之间的关联关系。根据所挖掘的关联关系,可以从一个属性的信息来推断另一个属性的信息。当置信度...

    关联规则分析也称为购物篮分析,最早是为了发现超市销售数据库中不同的商品之间的关联关系。

    用于寻找数据集中各项之间的关联关系。根据所挖掘的关联关系,可以从一个属性的信息来推断另一个属性的信息。当置信度达到某一阈值时,可以认为规则成立。

    常用的关联规则算法

    算法名称 算法描述
    Apriori

    关联规则最常用、最经典的挖掘频繁项集的算法,核心思想是通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集

    无法处理连续型数值变量,往往分析之前需要对数据进行离散化。

    FP-Tree

    针对Apriori算法固有的多次扫描事务数据集的缺陷,提出的不产生候选频繁项集的方法。

    Apriori和FP-Tree都是寻找频繁项集的算法

    Eclat算法 一种深度优先算法,采用垂直数据表示形式,在概念格理论的基础上利用基于前缀的等价关系将搜索空间划分为较小的子空间
    灰色关联法 分析和确定各因素之间的影响程度,或是若干个子因素(子序列)对主因素(母序列)的贡献度而进行的一种分析方法

    本文介绍最常用的Apriori算法。

    项集:项的集合。包含k个项的项集成为k项集,如集合{牛奶、麦片、糖}是一个3项集

    频繁项集:如果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集

    支持度(相对支持度):项集A、B同时发生的概率。

    置信度:项集A发生,则项集B发生的概率。

    最小支持度:用户或专家定义的衡量支持度的一个阈值,表示项集在统计意义上的最低重要性。

    最小置信度:用户或专家定义的衡量置信度的一个阈值,表示关联规则的最低可靠性。同时满足最小支持度阈值和最小置信度阈值的规则成为强规则。

    目前,设置最小支持度和最小置信度,大部分根据业务经验设置初始值,然后经过多次调整,获取与业务相符的关联规则结果。


    举例1:

    R语言实现:

    1、创建稀疏矩阵

    tr <- read.transactions("menu_orders.txt",format="basket",sep=",") #读入源数据并创建稀疏矩阵
    #format=c("basket", "single")用于注明源数据的格式。如果源数据每行内容就是一条交易购买的商品列表(类似于一行就是一个购物篮)那么使用basket;如果每行内容是交易号+单个商品,那么使用single。
    summary(tr) #查看数据集相关的统计汇总信息
    
    inspect(tr) #查看稀疏矩阵的内容

    输出如下:

    2、采用Apriori算法建模

    rule0 = apriori(tr,parameter = list(support=0.2,confidence = 0.5)) #设定支持度为0.2,置信度为0.5

    3、输出模型结果

    inspect(rule0)

    输出结果如下:

    结果分析(以结果第12条为例):

    a、b同时发生的概率是50%。

    a发生,则b发生的概率是71.42857%。

    这样就可以进行智能推荐了。


    举例2:

    trans = as(a,"transactions") #将数据转换成transactions属性
    
    inspect(trans[1:5]) #观察前五行的数据
    
    rules = apriori(trans,parameter = list(support=0.06,confidence = 0.75)) #调用Apriori算法,最小支持度为0.06,最小置信度为0.75
    
    rules #显示rules中关联规则条数
    
    inspect(rules) #观测rules中的关联规则

    输出结果如下:

    结果分析(以结果第2条为例):

    A4、F3~H4的支持度最大,为7.85%,置信度为87.96%。说明当A4、F3的条件满足时,H4的可能性为87.96%,而这种情况发生的可能性为7.85%。

     

    Python实现:

    import pandas as pd 
    from apriori import * 导入自己编写的Apriori函数
    data = pd.read_excel("menu_orders.xls",header=None)
    
    print(u'\n转换原始数据为0-1矩阵')
    ct = lambda x:pd.Series(1,index=x[pd.notnull(x)]) #转换0-1矩阵的过渡函数
    b = map(ct,data.as_matrix()) #用map方式执行
    data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用0填充
    print(u'\n转换完毕。')
    del b #删除中间变量b,节省内存
    
    support = 0.2 #最小支持度
    confidence = 0.5 #最小置信度
    ms = '---' #连接符
    find_rule(data,support,confidence,ms).to_excel('1.xls')

    输出结果如下:

    展开全文
  • 数据挖掘的知识模式关联规则模式是比较重要的一种。关联规则的概念由Agrawal、Imielinski、Swami 提出,是数据中一种简单但很实用的规则。关联规则模式属于描述型模式,发现关联规则的算法属于无监督学习的...

    在数据挖掘的知识模式中,关联规则模式是比较重要的一种。关联规则的概念由Agrawal、Imielinski、Swami 提出,是数据中一种简单但很实用的规则。关联规则模式属于描述型模式,发现关联规则的算法属于无监督学习的方法。

    关联规则挖掘

    一、关联规则的定义和属性
     
    考察一些涉及许多物品的事务:事务1 中出现了物品甲,事务2 中出现了物品乙,事务3 中则同时出现了物品甲和乙。那么,物品甲和乙在事务中的出现相互之间是否有规律可循呢?在数据库的知识发现中,关联规则就是描述这种在一个事务中物品之间同时出现的规律的知识模式。更确切的说,关联规则通过量化的数字描述物品甲的出现对物品乙的出现有多大的影响。
     
    现实中,这样的例子很多。例如超级市场利用前端收款机收集存储了大量的售货数据,这些数据是一条条的购买事务记录,每条记录存储了事务处理时间,顾客购买的物品、物品的数量及金额等。这些数据中常常隐含形式如下的关联规则:在购买铁锤的顾客当中,有70 %的人同时购买了铁钉。这些关联规则很有价值,商场管理人员可以根据这些关联规则更好地规划商场,如把铁锤和铁钉这样的商品摆放在一起,能够促进销售。
     
    有些数据不像售货数据那样很容易就能看出一个事务是许多物品的集合,但稍微转换一下思考角度,仍然可以像售货数据一样处理。比如人寿保险,一份保单就是一个事务。保险公司在接受保险前,往往需要记录投保人详尽的信息,有时还要到医院做身体检查。保单上记录有投保人的年龄、性别、健康状况、工作单位、工作地址、工资水平等。这些投保人的个人信息就可以看作事务中的物品。通过分析这些数据,可以得到类似以下这样的关联规则:年龄在40 岁以上,工作在A 区的投保人当中,有45 %的人曾经向保险公司索赔过。在这条规则中,“年龄在40 岁以上”是物品甲,“工作在A 区”是物品乙,“向保险公司索赔过”则是物品丙。可以看出来,A 区可能污染比较严重,环境比较差,导致工作在该区的人健康状况不好,索赔率也相对比较高。
     
    设R= { I1,I2 ……Im} 是一组物品集,W 是一组事务集。W 中的每个事务T 是一组物品,T R。假设有一个物品集A,一个事务T,如果A T,则称事务T 支持物品集A。关联规则是如下形式的一种蕴含:A→B,其中A、B 是两组物品,A I,B I,且A ∩B=。一般用四个参数来描述一个关联规则的属性:
     
    1 .可信度(Confidence)
     
    设W 中支持物品集A 的事务中,有c %的事务同时也支持物品集B,c %称为关联规则A→B 的可信度。简单地说,可信度就是指在出现了物品集A 的事务T 中,物品集B 也同时出现的概率有多大。如上面所举的铁锤和铁钉的例子,该关联规则的可信度就回答了这样一个问题:如果一个顾客购买了铁锤,那么他也购买铁钉的可能性有多大呢?在上述例子中,购买铁锤的顾客中有70 %的人购买了铁钉, 所以可信度是70 %。
     
    2 .支持度(Support)
     
    设W 中有s %的事务同时支持物品集A 和B,s %称为关联规则A→B 的支持度。支持度描述了A 和B 这两个物品集的并集C 在所有的事务中出现的概率有多大。如果某天共有1000 个顾客到商场购买物品,其中有100 个顾客同时购买了铁锤和铁钉,那么上述的关联规则的支持度就是10 %。
     
    3 .期望可信度(Expected confidence)
     
    设W 中有e %的事务支持物品集B,e %称为关联规则A→B 的期望可信度度。期望可信度描述了在没有任何条件影响时,物品集B 在所有事务中出现的概率有多大。如果某天共有1000 个顾客到商场购买物品,其中有200 个顾客购买了铁钉,则上述的关联规则的期望可信度就是20 %。
     
    4 .作用度(Lift)
     
    作用度是可信度与期望可信度的比值。作用度描述物品集A 的出现对物品集B 的出现有多大的影响。因为物品集B 在所有事务中出现的概率是期望可信度;而物品集B 在有物品集A 出现的事务中出现的概率是可信度,通过可信度对期望可信度的比值反映了在加入“物品集A 出现”的这个条件后,物品集B 的出现概率发生了多大的变化。在上例中作用度就是70 %/20 %=3.5。
     
    可信度是对关联规则的准确度的衡量,支持度是对关联规则重要性的衡量。支持度说明了这条规则在所有事务中有多大的代表性,显然支持度越大,关联规则越重要。有些关联规则可信度虽然很高,但支持度却很低,说明该关联规则实用的机会很小,因此也不重要。
     
    期望可信度描述了在没有物品集A 的作用下,物品集B 本身的支持度;作用度描述了物品集A 对物品集B 的影响力的大小。作用度越大,说明物品集B 受物品集A 的影响越大。一般情况,有用的关联规则的作用度都应该大于1,只有关联规则的可信度大于期望可信度,才说明A 的出现对B 的出现有促进作用,也说明了它们之间某种程度的相关性,如果作用度不大于1,则此关联规则也就没有意义了。
     
    二、关联规则的挖掘
     
    在关联规则的四个属性中,支持度和可信度能够比较直接形容关联规则的性质。从关联规则定义可以看出,任意给出事务中的两个物品集,它们之间都存在关联规则,只不过属性值有所不同。如果不考虑关联规则的支持度和可信度,那么在事务数据库中可以发现无穷多的关联规则。事实上,人们一般只对满足一定的支持度和可信度的关联规则感兴趣。因此,为了发现有意义的关联规则,需要给定两个阈值:最小支持度和最小可信度,前者规定了关联规则必须满足的最小支持度;后者规定了关联规则必须满足的最小可信度。一般称满足一定要求的(如较大的支持度和可信度)的规则为强规则(Strong rules)。
     
    在关联规则的挖掘中要注意以下几点:
     
    1、充分理解数据。
     
    2、目标明确。
     
    3、数据准备工作要做好。能否做好数据准备又取决于前两点。数据准备将直接影响到问题的复杂度及目标的实现。
     
    4、选取恰当的最小支持度和最小可信度。这依赖于用户对目标的估计,如果取值过小,那么会发现大量无用的规则,不但影响执行效率、浪费系统资源,而且可能把目标埋没;如果取值过大,则又有可能找不到规则,与知识失之交臂。
     
    5、很好地理解关联规则。数据挖掘工具能够发现满足条件的关联规则,但它不能判定关联规则的实际意义。对关联规则的理解需要熟悉业务背景,丰富的业务经验对数据有足够的理解。在发现的关联规则中,可能有两个主观上认为没有多大关系的物品,它们的关联规则支持度和可信度却很高,需要根据业务知识、经验,从各个角度判断这是一个偶然现象或有其内在的合理性;反之,可能有主观上认为关系密切的物品,结果却显示它们之间相关性不强。只有很好的理解关联规则,才能去其糟粕,取其精华,充分发挥关联规则的价值。
     
    发现关联规则要经过以下三个步骤:
     
    1、连接数据,作数据准备;
     
    2、给定最小支持度和最小可信度,利用数据挖掘工具提供的算法发现关联规则;
     
    3、可视化显示、理解、评估关联规则。
     
    三 、关联规则挖掘的过程
     
    关联规则挖掘过程主要包含两个阶段:
     
    第一阶段必须先从资料集合中找出所有的高频项目组(Frequent Itemsets),
     
    第二阶段再由这些高频项目组中产生关联规则(Association Rules)。
     
    关联规则挖掘的第一阶段必须从原始资料集合中,找出所有高频项目组(Large Itemsets)。高频的意思是指某一项目组出现的频率相对于所有记录而言,必须达到某一水平。一项目组出现的频率称为支持度(Support),以一个包含A与B两个项目的2-itemset为例,我们可以经由公式(1)求得包含{A,B}项目组的支持度,若支持度大于等于所设定的最小支持度(Minimum Support)门槛值时,则{A,B}称为高频项目组。一个满足最小支持度的k-itemset,则称为高频k-项目组(Frequent k-itemset),一般表示为Large k或Frequent k。算法并从Large k的项目组中再产生Large k+1,直到无法再找到更长的高频项目组为止。
     
    关联规则挖掘的第二阶段是要产生关联规则(Association Rules)。从高频项目组产生关联规则,是利用前一步骤的高频k-项目组来产生规则,在最小信赖度(Minimum Confidence)的条件门槛下,若一规则所求得的信赖度满足最小信赖度,称此规则为关联规则。
     
    从上面的介绍还可以看出,关联规则挖掘通常比较适用与记录中的指标取离散值的情况。如果原始数据库中的指标值是取连续的数据,则在关联规则挖掘之前应该进行适当的数据离散化(实际上就是将某个区间的值对应于某个值),数据的离散化是数据挖掘前的重要环节,离散化的过程是否合理将直接影响关联规则的挖掘结果。
     
    四、 关联规则的分类
     
    按照不同情况,关联规则可以进行分类如下:
     
    1.基于规则中处理的变量的类别,关联规则可以分为布尔型和数值型。
     
    布尔型关联规则处理的值都是离散的、种类化的,它显示了这些变量之间的关系;而数值型关联规则可以和多维关联或多层关联规则结合起来,对数值型字段进行处理,将其进行动态的分割,或者直接对原始的数据进行处理,当然数值型关联规则中也可以包含种类变量。例如:性别=“女”=>职业=“秘书” ,是布尔型关联规则;性别=“女”=>avg(收入)=2300,涉及的收入是数值类型,所以是一个数值型关联规则。
     
    2.基于规则中数据的抽象层次,可以分为单层关联规则和多层关联规则。
     
    在单层的关联规则中,所有的变量都没有考虑到现实的数据是具有多个不同的层次的;而在多层的关联规则中,对数据的多层性已经进行了充分的考虑。例如:IBM台式机=>Sony打印机,是一个细节数据上的单层关联规则;台式机=>Sony打印机,是一个较高层次和细节层次之间的多层关联规则。
     
    3.基于规则中涉及到的数据的维数,关联规则可以分为单维的和多维的。
     
    在单维的关联规则中,我们只涉及到数据的一个维,如用户购买的物品;而在多维的关联规则中,要处理的数据将会涉及多个维。换成另一句话,单维关联规则是处理单个属性中的一些关系;多维关联规则是处理各个属性之间的某些关系。例如:啤酒=>尿布,这条规则只涉及到用户的购买的物品;性别=“女”=>职业=“秘书”,这条规则就涉及到两个字段的信息,是两个维上的一条关联规则。
     
    5. 关联规则挖掘的相关算法
     
    1.Apriori算法:使用候选项集找频繁项集
     
    Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。
     
    该算法的基本思想是:首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信度。然后使用第1步找到的频集产生期望的规则,产生只包含集合的项的所有规则,其中每一条规则的右部只有一项,这里采用的是中规则的定义。一旦这些规则被生成,那么只有那些大于用户给定的最小可信度的规则才被留下来。为了生成所有频集,使用了递推的方法。
     
    可能产生大量的候选集,以及可能需要重复扫描数据库,是Apriori算法的两大缺点。
     
    2.基于划分的算法
     
    Savasere等设计了一个基于划分的算法。这个算法先把数据库从逻辑上分成几个互不相交的块,每次单独考虑一个分块并对它生成所有的频集,然后把产生的频集合并,用来生成所有可能的频集,最后计算这些项集的支持度。这里分块的大小选择要使得每个分块可以被放入主存,每个阶段只需被扫描一次。而算法的正确性是由每一个可能的频集至少在某一个分块中是频集保证的。该算法是可以高度并行的,可以把每一分块分别分配给某一个处理器生成频集。产生频集的每一个循环结束后,处理器之间进行通信来产生全局的候选k-项集。通常这里的通信过程是算法执行时间的主要瓶颈;而另一方面,每个独立的处理器生成频集的时间也是一个瓶颈。
     
    3.FP-树频集算法
     
    针对Apriori算法的固有缺陷,J. Han等提出了不产生候选挖掘频繁项集的方法:FP-树频集算法。采用分而治之的策略,在经过第一遍扫描之后,把数据库中的频集压缩进一棵频繁模式树(FP-tree),同时依然保留其中的关联信息,随后再将FP-tree分化成一些条件库,每个库和一个长度为1的频集相关,然后再对这些条件库分别进行挖掘。当原始数据量很大的时候,也可以结合划分的方法,使得一个FP-tree可以放入主存中。实验表明,FP-growth对不同长度的规则都有很好的适应性,同时在效率上较之Apriori算法有巨大的提高。
     
    五、关联规则发掘技术在国内外的应用
     
    就目前而言,关联规则挖掘技术已经被广泛应用在西方金融行业企业中,它可以成功预测银行客户需求。一旦获得了这些信息,银行就可以改善自身营销。现在银行天天都在开发新的沟通客户的方法。各银行在自己的ATM机上就捆绑了顾客可能感兴趣的本行产品信息,供使用本行ATM机的用户了解。如果数据库中显示,某个高信用限额的客户更换了地址,这个客户很有可能新近购买了一栋更大的住宅,因此会有可能需要更高信用限额,更高端的新信用卡,或者需要一个住房改善贷款,这些产品都可以通过信用卡账单邮寄给客户。当客户打电话咨询的时候,数据库可以有力地帮助电话销售代表。销售代表的电脑屏幕上可以显示出客户的特点,同时也可以显示出顾客会对什么产品感兴趣。
     
    同时,一些知名的电子商务站点也从强大的关联规则挖掘中的受益。这些电子购物网站使用关联规则中规则进行挖掘,然后设置用户有意要一起购买的捆绑包。也有一些购物网站使用它们设置相应的交叉销售,也就是购买某种商品的顾客会看到相关的另外一种商品的广告。
     
    但是目前在我国,“数据海量,信息缺乏”是商业银行在数据大集中之后普遍所面对的尴尬。目前金融业实施的大多数数据库只能实现数据的录入、查询、统计等较低层次的功能,却无法发现数据中存在的各种有用的信息,譬如对这些数据进行分析,发现其数据模式及特征,然后可能发现某个客户、消费群体或组织的金融和商业兴趣,并可观察金融市场的变化趋势。可以说,关联规则挖掘的技术在我国的研究与应用并不是很广泛深入。
     
    近年来关联规则发掘技术的一些研究
     
    由于许多应用问题往往比超市购买问题更复杂,大量研究从不同的角度对关联规则做了扩展,将更多的因素集成到关联规则挖掘方法之中,以此丰富关联规则的应用领域,拓宽支持管理决策的范围。如考虑属性之间的类别层次关系,时态关系,多表挖掘等。近年来围绕关联规则的研究主要集中于两个方面,即扩展经典关联规则能够解决问题的范围,改善经典关联规则挖掘算法效率和规则兴趣性。

    展开全文
  • 数据挖掘实验(SAS)关联规则挖掘

    千次阅读 2014-12-08 10:42:05
    关联规则挖掘(Association rule mining)是数据挖掘最活跃的研究方法之一,可以用来发现事情之间的联系。如果两个或者多个事务之间存在一定的关联关系,那么,其中一个事务就能够通过其他事务预测到。本实验要
  • 关联规则

    千次阅读 2014-05-14 19:32:14
    数据挖掘的知识模式关联规则模式是比较重要的一种。关联规则的概念由Agrawal、Imielinski、Swami 提出,是数据中一种简单但很实用的规则。关联规则模式属于描述型模式,发现关联规则的算法属于无监督学习的...
  • 关联规则是从庞大的数据中提取一系列变量或因子间关系,以探索数据变量或项目间隐含的关系。 1、基本原理 关联规则通常用支持度、置信度、增益三个指标来分别表示其显著性、正确性和价值。通过给性最小支持度、...
  • 10-变量数据类型

    千次阅读 2012-12-31 21:07:00
    前几章参考: 1-引言 2-Objective-C 编程 ...枚举数据类型可以只存储一些值的链表这种数据类型定义名称。Objective-C语言的typedef语句允许你内置或派生的数据类型指定自己的名称。 对象的初
  • 关联规则概述

    千次阅读 2006-09-19 11:58:00
    关联规则数据挖掘的重要方面。我概述如下:概论数据关联是数据库存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为...关联规则挖掘发现大量数据中项集之间有趣的关联或相关联系
  • 变量不同,常量贯穿整个脚本是自动全局的。==作用域不影响对常量的访问== 常量值只能是字符串或数字 设置 PHP 常量如需设置常量,请使用 ==define(name, value)== 函数,它有三个参数: - 首个参数定义常量的名称...
  • R语言数据挖掘之关联规则

    千次阅读 2017-05-23 23:02:15
    实验目的 掌握文件的读写 ...掌握R语言数据框操作 ...掌握R语言规则算法的应用 ...加载数据集,使用电信...1.首先设定路径并将数据集导入到工作区间,注意将分类变量强制类型转换成因子类型,通过header将第一行的所有
  • 数据挖掘算法----关联规则

    千次阅读 2018-07-22 22:03:48
    关联规则作为机器学习算法的一个分类,其目的是在数据集中找出两个变量之间的关联关系,且这种相关关系在数据集中不能直观展现出来。 关联规则的分类 1、按处理的变量 布尔型:买啤酒=&gt;买尿布 数值型:...
  • 提到关联规则算法,一般会想到Apriori或者FP,一般很少有想到HotSpot的,这个算法不知道是应用少还是我查资料的手段太low了,在网上只找到很少的内容,这篇...比较好用的算法类软件,如weka,其里面已经包
  • 关联规则(挖掘),数据关联(融合)

    万次阅读 2013-07-02 09:37:16
    关联式规则(Association Rules, AR),又称关联规则,是数据挖掘的一个重要课题,用于从大量数据中挖掘出有价值的数据项之间的相关关系。关联规则解决的常见问题如:“如果一个消费者购买了产品A,那么他有多大机会...
  • R语言数据挖掘(关联规则、聚类算法等)实验内容和步骤:数据概览产品分析性别统计畅销品年龄统计城市居住时间分析查找顶级消费者关联规则分析聚类 实验内容和步骤: 一、 实验内容: 对原始数据进行清洗; 使用R...
  • 关联规则介绍

    千次阅读 2015-06-16 15:01:16
    关联规则是形如X→Y的蕴涵式,其中, X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后继(consequent或right-hand-side, RHS) 。其中,关联规则XY,存在支持度和信任度。 定义:  假设 是项...
  • 数据挖掘算法之关联规则挖掘

    千次阅读 2014-02-22 14:43:15
    数据挖掘的知识模式关联规则模式是比较重要的一种。关联规则的概念由Agrawal、Imielinski、Swami 提出,是数据中一种简单但很实用的规则。关联规则模式属于描述型模式,发现关联规则的算法属于无监督学习的...
  • 所有变量和函数在使用前必须声明。变量和函数名是标识符。  没有默认类型,所有变量和函数声明必须包含一个... 用户定义类型可以使用struct,在结构体所有变量类型都必须是OpenGL ES着色器语言定义的关键字。Op
  • 关联规则分析

    千次阅读 2011-06-18 13:52:00
    1.什么是关联规则 "尿布与啤酒"的故事大家都有听过,这里就不罗嗦了。 按常规思维,尿布与啤酒风马牛不相及,若不是借助数据挖掘技术对大量交易数据进行挖掘分析,沃尔玛是不可能发现数据内在这一有价值的规律的。...
  • 推荐算法-关联规则|R

    千次阅读 2017-07-05 21:17:23
    概念关联规则是常见的推荐算法,从发现大量用户行为数据中发现有强关联的规则。 关联规则是一种无监督的机器学习方法,用于知识发现。优点是能够从大量行为数据中挖掘出无法直接感受到的规则,往往能给出意想不到的...
  • Python变量类型

    千次阅读 2016-08-12 22:41:00
    前言 前篇文章我们基本了解了Python环境安装...基于变量数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存。 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。 与字面
  • 变量和简单数据类型 一、学习目标 学习在Python程序使用的各种数据,学习如何将数据存储到变量中,以及如何在程序使用这些变量。 1.1最简单的语句 print(“Hellow Python word!”) 运行上述代码时,你...
  • 中医证型关联规则挖掘

    千次阅读 2017-12-04 23:13:31
    1.目的 借助患者病理信息,挖掘患者的症状与中医证型之间的关联关系,对治疗...对数据采用关联规则算法,训练得到关系模型 结果分析,应用实际 3.数据预处理 (1)数据清洗:对数据进行有效性检查,整理成为原始数据
  • 前面几篇介绍了关联规则的一些基本概念和两个基本算法,但实际在商业应用,写算法反而比较少,理解数据,把握数据,利用工具才是重要的,前面的基础篇是对算法的理解,这篇将介绍开源利用数据挖掘工具weka进行管理...
  • SiVArc变量规则和副本规则

    千次阅读 2020-03-03 17:26:05
    各 SiVArc 规则定义不同的生成任务: • 画面和文本列表规则用于链接生成...• 复制规则可触发生成以下 HMI 对象(基于主副本或类型): o 画面 o C 和 VB 脚本 o 文本列表 o 变量表 更改 SiVArc 规则后,基于该规则...
  • 所有变量和函数在使用前必须声明。变量和函数名是标识符。  没有默认类型,所有变量和函数声明必须包含一个声明... 用户定义类型可以使用struct,在结构体所有变量类型都必须是OpenGL ES着色器语言定义的关键
  • MySQL 数据类型介绍

    万次阅读 多人点赞 2016-04-29 20:24:03
    要了解一个数据库,我们也必须了解其支持的数据类型。 MySQL支持所有标准的SQL数据类型,主要分3类: ·数值类型 ·字符串类型 ·时间日期类型 另一类是几何数据类型,用的不多,也没多介绍。
  • 数据挖掘学习笔记:关联规则3

    千次阅读 2015-05-13 20:08:40
    ARCS过程的步骤包括 分箱(根据不同分箱方法创建一个2-D数组),本步骤的目的在于减少量化属性相对应...所挖掘的关联规则左手边只能是量化属性 规则的左手边只能有两个量化属性(2-D栅格的限制) 一种基于栅格的, 可以
  • 关联规则挖掘(一)

    千次阅读 2017-12-05 11:31:48
    关联规则挖掘是一种常用的数据挖掘手段,本文作为关联规则挖掘的第一篇文章,将主要介绍关联规则挖掘的来历与目的,以购物篮分析的一个简单例子熟悉基本概念,以及从多维度对关联规则挖掘进行分类。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,367
精华内容 49,746
关键字:

关联规则中变量的数据类型为