内容目录
1.思考题
1.1关联规则中的支持度、置信度和提升度代表的什么,如何计算
支持度:指的是某个商品组合出现的次数与总次数之间的比值。支持度越高,代表这个组合出现的概率越大;
置信度:指的是当前购买了商品A,会有多大的概率购买商品B;
提升度:商品A的出现,对商品B的出现概率提升的程度。 ( A → B ) = 置 信 度 ( A → B ) 支 持 度 ( B ) (A→B)=\frac{置信度(A→B)}{支持度(B)} (A→B)=支持度(B)置信度(A→B)
- 计算上图中每个词语,在五次中出现了几次。牛奶出现四次,“牛奶”的支持度 4 5 = 0.8 \frac{4}{5}=0.8 54=0.8。出现牛奶后,同时出现面包的次数有三次,“牛奶+面包”的支持度 3 5 = 0.6 \frac{3}{5}=0.6 53=0.6;
- 置信度:牛奶在五次中出现4次,在牛奶出现的时候啤酒出现2次,购买了牛奶后,再去买啤酒的概率(牛奶→啤酒) 2 4 = 0.5 \frac{2}{4}=0.5 42=0.5;
- 置信度(牛奶→啤酒) = 2 4 = 0.5 =\frac{2}{4}=0.5 =42=0.5, 支持度(啤酒) = 3 = 3 =3;提升度(A→B) = 0.5 3 = 1 6 < 1 =\frac{0.5}{3}=\frac{1}{6} <1 =30.5=61<1,牛奶对啤酒的提升度下降。
1.2关联规则与协同过滤的区别
协同过滤(collaborative filtering),按维基百科的说法,是一种在推荐系统中广泛应用的技术。该技术通过分析用户或者事物之间的相似性(“协同”),来预测用户可能感兴趣的内容并将此内容推荐给用户。这里的相似性可以是人口特征(性别、年龄、居住地等)的相似性,也可以是历史浏览内容的相似性(比如都关注过和中餐相关的内容),还可以是个人通过一定机制给予某个事物的回应(比如一些教学网站会让用户对授课人进行评分)。比如,用户A和B都是居住在北京的年龄在20-30岁的女性,并且都关注过化妆品和衣物相关的内容。这种情况下,协同过滤可能会认为,A和B相似程度很高。于是可能会把A关注B没有关注的内容推荐给B,反之亦然。
协同过滤基于如下基本假设:如果一个人A在一个问题上和另一个人B持相同观点,那么对于另外一个问题,比起随机选择的一个路人甲,A更有可能同B持相同观点。
协同过滤依赖用户偏好信息,偏好又称为用户评分(rating),分为主动评分和被动评分。自动评分指用户使用系统提供的方式进行评分或者评价;
被动评分则根据使用者的行为模式由系统代替使用者完成评价,行为模式包括用户的浏览行为、购买行为等等。User-based 的协同过滤和 Item-based 的协同过滤是两个最常用的技术,它俩统称为Memory
based的协同过滤技术,他们共有的缺点是数据稀疏,难以处理大数据量给出即时结果(item-based的协同过滤比user-based的协同过滤稍好一些),因此发展出以模型为基础的协同过滤技术。
以模型为基础的协同过滤(Model-based Collaborative
Filtering)是先用历史资料得到一个模型,再用此模型进行预测。以模型为基础的协同过滤广泛使用的技术包括Latent Semantic
Indexing、Bayesian Networks等等。User-based的协同过滤用相似统计的方法得到具有相似爱好或者兴趣的相邻使用者,以下是它的详细步骤:
- 收集用户信息:收集可以代表用户兴趣的信息。一般的网站系统使用评分的方式或是给予评价,这种方式被称为“主动评分”。另外一种是“被动评分”,是根据用户的行为模式由系统代替用户完成评价,不需要用户直接打分或输入评价资料。电子商务网站在被动评分的资料获取上有其优势,用户购买的商品记录是相当有用的资料。
- 最近邻搜索(Nearest neighbor search, NNS):以用户为基础(User-based)的协同过滤的出发点是与用户兴趣爱好相同的另一组用户,就是计算两个用户的相似度。寻找n个和A有相似兴趣用户,然后把他们对M的评分作为A对M的评分预测。
- 产生推荐结果 有了最近邻集合,就可以对目标用户的兴趣进行预测,产生推荐结果。依据推荐目的的不同进行不同形式的推荐, 较常见的推荐算法有Top-N 推荐和关联推荐。Top-N
推荐是针对个体用户产生,对每个人产生不一样的结果,例如:透过对A使用者的最近邻使用者进行统计,选择出现频率高且在A使用者的评分项目中不存在的,作为推荐结果。关联推荐是对最近邻使用者的记录进行关联规则(association
rules)挖掘。Item-based的协同过滤技术实现方式同 User-based的协同过滤类似,只是分析目标由用户变成了Item。
关联规则分析 (Association Rules,又称 Basket Analysis) 用于从大量数据中挖掘出有价值的数据项之间的相关关系。关联规则解决的常见问题如:“如果一个消费者购买了产品A,那么他有多大机会购买产品B?”以及“如果他购买了产品C和D,那么他还将购买什么产品?”
Apriori 演算法和F-P算法是两个经常用到的算法,两个算法在处理大数据时都存在缺陷问题。总结来说,协同过滤是推荐系统中采用的名称,理论基础之一是数据挖掘中的关联规则。两者的区别比较明显,
- 关联规则面向的是 transaction,而协同过滤面向的是用户偏好(评分)。
- 协同过滤在计算相似商品的过程中可以使用关联规则分析,但是在有用户评分的情况下(非1/0),协同过滤算法应该比传统的关联规则更能产生精准的推荐。
- 协同过滤的约束条件没有关联规则强,或者说更为灵活,可以考虑更多的商业实施运算和特殊的商业规则。
1.3为什么我们需要多种推荐算法
综合利用协同过滤推荐算法和基于内容的推荐算法各自的优点同时抵消各自的缺点
1.4关联规则中的最小支持度、最小置信度该如何确定
关联规则中的最小支持度、最小置信度,可以从0.01,0.5很小的数开始试,是可以实验出来的。
最小支持度:不同的数据集差别较大,可能时0.01到0.5之间
最小置信度:可能时0.5到1之间
1.5:都有哪些常见的回归分析方法,评价指标是什么
常见的回归分析方法有:
- 线性回归
- 逻辑回归
- 多项式回归
- 岭回归
- 套索回归
评价指标有以下这些:
- 回归的有:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)、Coefficient of determination (决定系数)。
R M S E = 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 RMSE=\sqrt{\frac{1}{n}\sum^{n}_{i=1}(f(x_i)-y_i)^2} RMSE=n1∑i=1n(f(xi)−yi)2
M A E = 1 n ∑ i = 1 n ∣ ( f ( x i ) − y i ) ∣ MAE=\frac{1}{n}\sum^{n}_{i=1}|(f(x_i)-y_i)| MAE=n1∑i=1n∣(f(xi)−yi)∣
M A D = m e d ( ∣ ( f ( x i ) − y i ) ∣ ) MAD=med(|(f(x_i)-y_i)|) MAD=med(∣(f(xi)−yi)∣)
M S E = 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 MSE=\frac{1}{n}\sum^{n}_{i=1}(f(x_i)-y_i)^2 MSE=n1∑i=1n(f(xi)−yi)2
- 分类的有:准确率、召回率、精确率、F值、ROC-AUC 、F-score、混淆矩阵、PRC。
准确率 a c c u r a c y = T P + T N T P + F P + T N + F N accuracy=\frac{TP+TN}{TP+FP+TN+FN} accuracy=TP+FP+TN+FNTP+TN
召回率 r e c a l l = T P T P + F N recall=\frac{TP}{TP+FN} recall=TP+FNTP
精确率 p r e c i s i o n = T P T P + F P precision=\frac{TP}{TP+FP} precision=TP+FPTP
F值 F = ( α 2 + 1 ) p r e c i s i o n ∗ r e c a l l α 2 ( p r e c i s i o n + r e c a l l ) F=\frac{(\alpha^{2}+1)precision*recall}{\alpha^{2}(precision+recall)} F=α2(precision+recall)(α2+1)precision∗recall
当 α = 1 \alpha=1 α=1时, F 1 = 2 ∗ p r e c i s o n ∗ r e c a l l p r e c i s i o n + r e c a l l F1=\frac{2*precison*recall}{precision+recall} F1=precision+recall2∗precison∗recall
F-score F β = ( β 2 + 1 ) ∗ P ∗ R β 2 ∗ P + R F_{\beta}=\frac{(\beta^{2}+1)*P*R}{\beta^{2}*P+R} Fβ=β2∗P+R(β2+1)∗P∗R,P是precision,R是recall
- 聚类的有:兰德指数、互信息、轮廓系数。
link:
1.机器学习中常用的评价指标 | 分类任务、回归任务
2.推荐系统初探
2.编程题
2.1购物篮分析,统计交易中的频繁项集和关联规则**
# -*- encoding: utf-8 -*-
"""
@File : Apriori_learn.py
@Time : 2020/11/14 14:57
@Author : biao chen
@Email : 1259319710@qq.com
@Software: PyCharm
"""
# 导入所需的模块
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
# 转换函数
def encode_units(x):
if x <= 0:
return 0
if x >= 1:
return 1
# 数据加载
BreadBasket=pd.read_csv('E:/python/machina/kaggle_practice/data/BreadBasket_DMS.csv')
# 统一小写
BreadBasket['Item'] = BreadBasket['Item'].str.lower()
# 去掉none项
BreadBasket= BreadBasket.drop(BreadBasket[BreadBasket.Item == 'none'].index)
# 设置最大的列数
pd.options.display.max_columns=100
# 数据处理
hot_encoded_df=BreadBasket.groupby(['Transaction','Item'])['Item'].count().unstack().reset_index().fillna(0).set_index('Transaction')
hot_encoded_df = hot_encoded_df.applymap(encode_units)
# 调用apriori方法
frequent_itemsets = apriori(hot_encoded_df, min_support=0.03, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=0.4)
print("频繁项集:", frequent_itemsets)
# 输出满足 rules['lift'] >=1 并且 rules['confidence'] >=0.5 的关联规则
'''
代码结果:
频繁项集: support itemsets
0 0.036348 (alfajores)
1 0.327134 (bread)
2 0.040046 (brownie)
3 0.103867 (cake)
4 0.478445 (coffee)
5 0.054417 (cookies)
6 0.039201 (farm house)
7 0.058326 (hot chocolate)
8 0.038567 (juice)
9 0.061813 (medialuna)
10 0.038462 (muffin)
11 0.086116 (pastry)
12 0.071851 (sandwich)
13 0.034552 (scone)
14 0.034446 (soup)
15 0.142646 (tea)
16 0.033601 (toast)
17 0.090025 (coffee, bread)
18 0.054734 (coffee, cake)
19 0.035186 (coffee, medialuna)
20 0.047549 (pastry, coffee)
21 0.038250 (sandwich, coffee)
22 0.049873 (coffee, tea)
关联规则: antecedents consequents antecedent support consequent support support \
3 (cake) (coffee) 0.103867 0.478445 0.054734
5 (medialuna) (coffee) 0.061813 0.478445 0.035186
6 (pastry) (coffee) 0.086116 0.478445 0.047549
8 (sandwich) (coffee) 0.071851 0.478445 0.038250
confidence lift leverage conviction
3 0.526958 1.101399 0.005039 1.102557
5 0.569231 1.189753 0.005612 1.210754
6 0.552147 1.154046 0.006347 1.164569
8 0.532353 1.112674 0.003873 1.115276
'''
print("关联规则:", rules[ (rules['lift'] >= 1) & (rules['confidence'] >= 0.5) ])