python数据挖掘入门与实践-------------支持度与置信度

 

支持度:Xi与Xj同时出现的次数

置信度:购买Xi的人,同时购买Xj的人  (Xi,Xj)/Xi

import numpy as np
from collections import defaultdict

'''num_apple_purchases=0
for sample in X:
    if sample[3]==1:    #一个人买了苹果
        num_apple_purchases+=1
print num_apple_purchases'''


def calS(X,n_features):
    
    valid_rules=defaultdict(int)
    invalid_rules=defaultdict(int)
    num_occurances=defaultdict(int)#记录每个物品的购买次数
    #print X
    for sample in X:
        for premise in range(5):
            if sample[premise]==0:continue
            num_occurances[premise]+=1
            for conclusion in range(n_features):   #  确认这一条记录是否也购买了其他物品
                if premise==conclusion:continue
                if sample[conclusion]==1:
                    valid_rules[(premise,conclusion)] += 1    #  Xi和Xj同时购买的次数+1
                else:
                    invalid_rules[(premise,conclusion)] += 1    #  Xi和Xj未被同时购买的次数+1
    support=valid_rules
    confidence=defaultdict(float)
    #print(valid_rules.keys())
    for premise,conclusion in valid_rules.keys():
        rule=(premise,conclusion)
        confidence[rule]=float(valid_rules[rule])/num_occurances[premise]    #这里需要将valid_rules的规则条目数从int转成float
    return support,confidence


def print_rule(premise,conclusion,support,confidence,features):
    premise_name=features[premise]
    conclusion_name=features[conclusion]
    print("Rule:If a person buys {0} they will also buy {1}".format(premise_name,conclusion_name))
    print("-Support:{0}".format(support[(premise,conclusion)]))
    print("-Confidence:{0:.3f}".format(confidence[(premise,conclusion)]))


if __name__ == '__main__':
    X=np.loadtxt("D:\\python27\\study\\code\\Chapter1\\affinity_dataset.txt")
    n_samples,n_features=X.shape     # 100行,5列
    premise=1     #  任意定义的
    conclusion=3     #  任意定义的
    support,confidence=calS(X,n_features)
    features = ["bread", "milk", "cheese", "apples", "bananas"]
    print support,confidence
    print_rule(premise,conclusion,support,confidence,features)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值