支持度和置信度

规则

首先给定规则:如果A,那么B(如果客户买了A,那么他还会买B),一条规则由前提条件和结论两部分组成

支持度

支持度指数据集中规则应验的次数,统计起来很简单。有时候,还需要对支持度进行规范化,即再除以规则有效前提下的总数量。我们这里只是简单统计规则应验的次数。

置信度

支持度衡量的是给定规则应验的比例,而置信度衡量的则是规则准确率如何,即符合给定条件(即规则的“如果”语句所表示的前提条件)的所有规则里,跟当前规则结论一致的比例有多 大。计算方法为首先统计当前规则的出现次数,再用它来除以条件(“如果”语句)相同的规则 数量。

计算过程

我们需要统计数据集中所有规则的相关数据。首先分别为规则应验和规则无效这两种情况创建字典。字典的键是由条件和结论组成的元组,元组元素为特征在特征列表(0,1变量组成的列表,0代表不购买,1代表购买)中的索引值,不要用 实际特征名,这里根据实际情况对每一条数据进行编写,A是第三个特征,B是第四个特征,那么规则(3,4)是键

为了计算所有规则的置信度和支持度,首先创建几个字典,用来存放计算结果。这里使用defaultdict,好处是如果查找的键不存在,返回一个默认值。这里需要一个规则应验次数字典,违反次数字典,满足规则条件字典,他们的键一样且只有一个(3,4)
遍历数据集,如果满足3处为1,则满足条件字典值加一,然后判断时候满足规则,仍满足结论则应验字典值加一,否则违反字典值加一。

import pandas as pd
import numpy as np
from collections import defaultdict
X=pd.DataFrame(columns=['f0','f1','f2','f3','f4'],data=np.random.randint(2,size=(10,5))) 
valid_rules = defaultdict(int)
invalid_rules = defaultdict(int) 
num_occurances = defaultdict(int)
support=defaultdict(int) 
for index,sample in X.iterrows():
  for premise in range(5):#遍历条件
    if sample[premise] == 0: 
      continue#检测个体是否满足条件,如果不满足,继续检测下一个条件。
    else:
      num_occurances[premise] += 1 
      for conclusion in range(5): #遍历结果
            if conclusion ==premise:
              continue
            else:
              if sample[conclusion]==1:
                  valid_rules[(premise, conclusion)] += 1
              else:
                  invalid_rules[(premise, conclusion)] += 1
                  
              support[(premise, conclusion)] =valid_rules[(premise, conclusion)]#得到各个规则的支持度字典            
confidence = defaultdict(float)
for premise, conclusion in valid_rules.keys():
    rule = (premise, conclusion)
    confidence[rule] = valid_rules[rule] / num_occurances[premise]#得到各个规则的置信度字典
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值