数据挖掘-亲和性分析函数(通用)

#库导入
import numpy as np
from collections import defaultdict
from operator import itemgetter

def Affinity_Analysis(dataset,features,nums_feature);
if __name__ == "__main__":
    #数据导入(0、1矩阵,一行表示单一消费者的消费情况,一列表示单一商品售卖情况)
    dataset_filename="数据包路径"
    X=np.loadtxt(dataset_filename)
    
	#特征名称
    features=['bread','milk','cheese','apple','banana']
    
	#特征数量
    nums_feature=5
    
	#函数调用
	Affinity_Analysis(X,features,nums_feature)
	

def Affinity_Analysis(dataset,features,nums_feature):
    #遍历数据
    valid_rules=defaultdict(int)
    invalid_rules=defaultdict(int)
    nums_occurances=defaultdict(int)
    for sample in dataset:
        for primise in range(nums_feature):
            if sample[primise]==0: continue
            nums_occurances[primise]+=1
            for conclusion in range(nums_feature):
                if conclusion==primise: continue
                if sample[conclusion]==1: valid_rules[(primise,conclusion)]+=1
                else: invalid_rules[(primise,conclusion)]+=1

    #支持度
    support=valid_rules
    #置信度
    confidence=defaultdict(float)
    for primise,conclusion in valid_rules.keys():
        confidence[(primise,conclusion)]=valid_rules[(primise,conclusion)]/nums_occurances[primise]

    #根据支持度和置信度进行降序排列
    sorted_support=sorted(support.items(),key=itemgetter(1),reverse=True)
    sorted_confidence=sorted(confidence.items(),key=itemgetter(1),reverse=True)
    
    #结果展示
    print('\n支持度由高到低:')
    for i in sorted_support:
        print("[{0} {1}]\t- Support: {2}".format(features[i[0][0]],features[i[0][1]],i[1]))
        #print("- Support: {0}".format(confidence[(primise,conclusion)]))
        #print("- Confidence: {0}".format(support[(primise,conclusion)]))
    print('\n置信度由高到低:')
    for i in sorted_confidence:
        print("[{0} {1}]\t- Support: {2:.3f}".format(features[i[0][0]],features[i[0][1]],i[1]))
        #print("- Support: {0}".format(confidence[(primise,conclusion)]))
        #print("- Confidence: {0}".format(support[(primise,conclusion)]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值