机器学习实战——Apriori算法另类实现

Apriori算法实战与扩展
博主基于《机器学习实战》中的Apriori算法进行了个人实现,增加了更多可调系数,提高了算法的实用性。文章展示了算法实现后的效果。
部署运行你感兴趣的模型镜像

机器学习实战上的Apriori算法最后结果看着不过瘾,随着算法思路另外实现了一遍。

import itertools
def load_data():
    return [[1,3,4],[2,3,5],[1,2,3,5],[2,5]]
def creat_list(str_num,num_combine):
    cat={}
    p=[]
    for i in itertools.combinations(str_num,num_combine):
        p.append(i)
        for j in range(len(p)):
            if p[j] not in cat.keys():
                cat[p[j]]=0
    return cat
def scan_data(data_set,str_num,num_combine):
    p=[]
    cat = creat_list(str_num,num_combine)
    keys=list(cat.keys())
    for j in range(len(data_set)):
        if len(data_set[j])>=num_combine:
            for k in itertools.combinations(data_set[j],num_combine):
                p.append(k)
    for j in range(len(keys)):
        for k in range(len(p)):
            if keys[j] ==p[k]:
                cat[keys[j]]+=1
    return cat
def choose_min(cat,min_support_rate,trans):
    for key in list(cat.keys()):
        support_rate=float(cat[key])/trans
        if support_rate<min_support_rate:
            del(cat[key])
    return cat
def apriori(data_set,str_num,num_combine,min_support_rate,trans):
    cat=scan_data(data_set,str_num,num_combine)
    cat=choose_min(cat,min_support_rate,trans)
    cat_list=[]
    while cat!={}:
        new_str=[]
        for key in cat.keys():
            new_str.append(key[0])
        new_str=set(new_str)
        new_str=list(new_str)
        cat=scan_data(data_set,new_str,num_combine)
        num_combine+=1
        cat=choose_min(cat,min_support_rate,trans)
        cat_list.append(cat)
    return cat_list
if __name__=="__main__":
    str_num=[1,2,3,4,5]
    min_rate=0.7
    trans=len(load_data())
    data_set=load_data()
    print(apriori(data_set,str_num,1,min_rate,trans))

比书本上的原算法多了更多的系数可选,操作性更强。

图片是以上算法的结果


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值