Python数据挖掘学习——亲和性分析

本文介绍使用Python进行数据挖掘的基础知识,重点讲解了《Python数据挖掘入门与实践》一书中关于亲和性分析的内容,包括数据集创建、规则查找及评估等关键步骤。

最近了解了一些Python数据挖掘方面的内容,主要学习了《Python数据挖掘入门与实践》这本书的内容,在这里对书中的内容以及我遇到的一些问题进行整理。

数据挖掘旨在让计算机根据已有的数据作出决策。

数据挖掘的第一步一般是创建数据集,数据集主要包括:

(1)样本:表示真实世界中的物体

(2)特征:描述数据集中样本

学习的第一步接触的就是亲和性分析,亲和性分析是通过样本个体之间的相似度确定它们之间关系的亲疏。

这个例子中采用商品购买的一个数据集,商品共有:面包,牛奶,奶酪,苹果,香蕉这几种。

这里每个特征都有且只可能有0或者1两个值——表示是否购买该商品,而非购买的数量。

在得到样品及特征后,我们要找出规则,比如“购买了X,那么可能会购买Y”

找出规则后还需要判断其优劣,这里涉及到两个指标——支持度和置信度。

代码如下:

"""
《Python数据挖掘入门与实践》
亲和性分析
数据集每一列代表:是否购买——面包、牛奶、奶酪、苹果、香蕉
支持度support——规则应验的次数
置信度confidence——规则应验的比例
"""
import numpy as np
from collections import defaultdict #默认字典——如果没有对应的键,返回默认值0
from operator import itemgetter #针对字典进行排序


dataset_filename = r'F:\Python\pycharm\DataAnalysis_test\data\affinity_dataset.txt'
X = np.loadtxt(dataset_filename)
# print(X[:15])#显示前15行数据
features = ["bread", "milk", "cheese", "apple", "banana"]#特征列表

"""查看有多少人购买了苹果"""
# num_apple_buy = 0
# for sample in X:
#     if sample[3] == 1:
#         num_apple_buy +=1
# print("{0} people bought Apples".format(num_apple_buy))

"""构建规则字典"""
valid_rules = defaultdict(int)#规则应验
invalid_rules = defaultdict(int)#规则无效
num_occurances = defaultdict(int)#符合A条件(如果。。。)的所有情况
n_features = 5#共有几项特征
for sample in X:
    for premise in range(n_features):
        if sample[premise] == 0:
            continue
        else:
            num_occurances[premise] += 1#符合A条件的情况+1
            for conclusion in range(n_features):
                if premise == conclusion:
                    continue
                else:
                    if sample[conclusion] == 1:
                        valid_rules[(premise, conclusion)] +=1 #规则应验
                    else:
                        invalid_rules[(premise, conclusion)] +=1 #规则无效

#计算每条规则的置信度(confidence规则的准确率如何)和支持度(support规则应验的次数)
support = valid_rules
confidence = defaultdict(float)
for (premise, conclusion) in valid_rules.keys():
    rule = (premise, conclusion)
    confidence[rule] = valid_rules[rule] / num_occurances[premise]

"""定义输出每条规则及其置信度和支持度的函数"""
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("置信度confidence: {0:.3f}".format(confidence[(premise, conclusion)]))
    print("支持度support:{0}".format(support[(premise, conclusion)]))


"""排序找出最佳规则"""
def best_rule():
    sorted_support = sorted(support.items(),
                            key=itemgetter(1), #以字典的值的次序进行排序
                            reverse=True)#降序
    sorted_confidence = sorted(confidence.items(), key=itemgetter(1), reverse=True)
    for index in range(5):#输出排序最高的五个规则
        print("RULE #{0}".format(index + 1))
        premise, conclusion = sorted_support[index][0]
        print_rule(premise, conclusion, support, confidence, features)

if __name__ == '__main__':
    premise = 2
    conclusion = 4
    # print_rule(premise, conclusion, support, confidence, features)
    best_rule()
    # print(valid_rules)

输出结果为规则的评价结果:

RULE #1
rule: if a person buys cheese they will also buy banana
置信度confidence: 0.659
支持度support:27
RULE #2
rule: if a person buys banana they will also buy cheese
置信度confidence: 0.458
支持度support:27
RULE #3
rule: if a person buys apple they will also buy cheese
置信度confidence: 0.694
支持度support:25
RULE #4
rule: if a person buys cheese they will also buy apple
置信度confidence: 0.610
支持度support:25
RULE #5
rule: if a person buys banana they will also buy apple
置信度confidence: 0.356
支持度support:21

 这个例子中的数据集下载链接:商品购买数据集下载

 

 

以下为一份亲和性分析用于商品推荐的实验报告示例: ### 一、实验背景 在电商等领域,商品推荐系统对于提高用户购物体验、增加销售额至关重要。亲和性分析是一种通过分析用户行为数据来找出商品之间关联关系的方法,能够为商品推荐提供有力支持。通过本次实验,旨在验证亲和性分析在商品推荐中的有效性和实用性。 ### 二、实验目的 本次实验的主要目的是利用亲和性分析方法,对商品销售数据进行挖掘,找出商品之间的关联规则,并将这些规则应用于商品推荐,评估推荐效果。 ### 三、实验数据 本次实验使用的是某电商平台一段时间内的用户订单数据,包含了用户 ID、订单 ID、商品 ID 等信息。数据集中共有[X]条订单记录,涉及[X]种不同的商品。 ### 四、实验方法 #### (一)数据预处理 首先对原始数据进行清洗,去除重复记录和无效数据。然后将订单数据转换为适合亲和性分析的格式,即每个订单对应的商品集合。 #### (二)亲和性分析算法选择 选择 Apriori 算法进行关联规则挖掘。Apriori 算法是一种经典的频繁项集挖掘算法,通过逐层搜索的方式找出满足最小支持度的频繁项集,进而生成关联规则。 #### (三)参数设置 设置最小支持度为[X],最小置信度为[X]。支持度表示项集在数据集中出现的频率,置信度表示在包含前件的情况下,同时包含后件的概率。 #### (四)关联规则生成 使用 Apriori 算法对预处理后的数据进行频繁项集挖掘,生成满足最小支持度和最小置信度的关联规则。 #### (五)商品推荐实现 根据生成的关联规则,为用户推荐可能感兴趣的商品。具体方法是,当用户购买了某一商品时,根据关联规则找出之关联度较高的商品作为推荐结果。 ### 五、实验结果 #### (一)频繁项集挖掘结果 通过 Apriori 算法,共挖掘出[X]个频繁项集。其中,包含 2 个商品的频繁项集有[X]个,包含 3 个商品的频繁项集有[X]个,以此类推。 #### (二)关联规则生成结果 根据频繁项集生成了[X]条关联规则。这些规则展示了不同商品之间的关联关系,例如“商品 A -> 商品 B”,表示购买了商品 A 的用户有较大概率会购买商品 B。 #### (三)推荐效果评估 为了评估推荐效果,使用准确率、召回率和 F1 值等指标。在测试集上,推荐系统的准确率为[X],召回率为[X],F1 值为[X]。 ### 六、实验结论 本次实验表明,亲和性分析在商品推荐中具有一定的有效性。通过挖掘商品之间的关联规则,能够为用户提供有针对性的商品推荐,提高推荐的准确性和召回率。然而,实验结果也受到数据质量、参数设置等因素的影响。在实际应用中,需要进一步优化算法和参数,以提高推荐效果。 ### 七、实验代码示例(Python) ```python import pandas as pd from mlxtend.preprocessing import TransactionEncoder from mlxtend.frequent_patterns import apriori, association_rules # 假设 data 是经过预处理后的订单数据,格式为列表的列表,每个子列表表示一个订单中的商品集合 data = [['商品 A', '商品 B'], ['商品 B', '商品 C'], ...] # 数据编码 te = TransactionEncoder() te_ary = te.fit(data).transform(data) df = pd.DataFrame(te_ary, columns=te.columns_) # 频繁项集挖掘 frequent_itemsets = apriori(df, min_support=0.1, use_colnames=True) # 关联规则生成 rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7) # 打印关联规则 print(rules) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值