Python关联分析

2020-03-06  本文已影响0人  米小河123

一、理论知识概述

X==>Y含义:
事务仅包含其涉及到的项目,而不包含项目的具体信息。
支持度(support):一个项集或者规则在所有事务中出现的频率,σ(X):表示项集X的支持度计数
置信度(confidence):确定Y在包含X的事务中出现的频繁程度。c(X→Y)=σ(X∪Y)/σ(X)
设最小支持度为50%, 最小可信度为 50%, 则可得到 :
提升度(lift):物品集A的出现对物品集B的出现的概率发生了多大的变化

由此可见,lift正是弥补了confidence的这一缺陷,if lift=1,X与Y独立,X对Y出现的可能性没有提升作用,其值越大(lift>1),则表明X对Y的提升程度越大,也表明关联性越强。

Leverage 与 Conviction的作用和lift类似,都是值越大代表越关联

二、关联分析案例(不需要进行数据预处理)

import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules 

1、创建数据集

data = {'ID':[1,2,3,4,5,6],
       'Onion':[1,0,0,1,1,1],
       'Potato':[1,1,0,1,1,1],
       'Burger':[1,1,0,0,1,1],
       'Milk':[0,1,1,1,0,1],
       'Beer':[0,0,1,0,1,0]}

df = pd.DataFrame(data)
df = df[['ID', 'Onion', 'Potato', 'Burger', 'Milk', 'Beer']]

2、设置支持度 (support) 来选择频繁项集.

# 设置支持度(support)来选择频繁项集
# 选择最小支持度为50% 
# apriori(df, min_support=0.5, use_colnames=True)
 
frequent_itemset = apriori(df[['Onion', 'Potato', 'Burger', 'Milk', 'Beer']], min_support=0.5, use_colnames=True)
print(frequent_itemset)
    support                 itemsets
0  0.666667                  (Onion)
1  0.833333                 (Potato)
2  0.666667                 (Burger)
3  0.666667                   (Milk)
4  0.666667          (Onion, Potato)
5  0.500000          (Onion, Burger)
6  0.666667         (Burger, Potato)
7  0.500000           (Potato, Milk)
8  0.500000  (Onion, Potato, Burger)

3、计算规则

# 计算规则
# association_rules(df, metric='lift', min_threshold=1)
# 可以指定不同的衡量标准与最小阈值

rules = association_rules(frequent_itemset, metric='lift', min_threshold=1)
rules
# 可以指定不同的衡量标准与最小阈值
rules[(rules['lift'] >1.125) & (rules['confidence']> 0.8)]

三、关联分析案例(需要进行数据预处理)

1、创建数据集

retail_shopping_basket = {'ID':[1,2,3,4,5,6],
                         'Basket':[['Beer', 'Diaper', 'Pretzels', 'Chips', 'Aspirin'],
                                   ['Diaper', 'Beer', 'Chips', 'Lotion', 'Juice', 'BabyFood', 'Milk'],
                                   ['Soda', 'Chips', 'Milk'],
                                   ['Soup', 'Beer', 'Diaper', 'Milk', 'IceCream'],
                                   ['Soda', 'Coffee', 'Milk', 'Bread'],
                                   ['Beer', 'Chips']
                                  ]
                         }

retail_shopping_basket
{'ID': [1, 2, 3, 4, 5, 6],
 'Basket': [['Beer', 'Diaper', 'Pretzels', 'Chips', 'Aspirin'],
  ['Diaper', 'Beer', 'Chips', 'Lotion', 'Juice', 'BabyFood', 'Milk'],
  ['Soda', 'Chips', 'Milk'],
  ['Soup', 'Beer', 'Diaper', 'Milk', 'IceCream'],
  ['Soda', 'Coffee', 'Milk', 'Bread'],
  ['Beer', 'Chips']]}
retail = pd.DataFrame(retail_shopping_basket)
retail = retail[['ID', 'Basket']]
pd.options.display.max_colwidth=100
retail
# 数据集中都是字符串组成的,需要转换成数值编码
retail_id = retail.drop('Basket',1)
retail_id
retail_Basket = retail.Basket.str.join(',')
retail_Basket
retail_Basket = retail_Basket.str.get_dummies(',')
retail_Basket
retail = retail_id.join(retail_Basket)
retail

2、设置支持度 (support) 来选择频繁项集.

frequent_itemsets_2 = apriori(retail.drop('ID',1), use_colnames=True)
frequent_itemsets_2

3、计算规则

# 如果光考虑支持度support(X>Y),[Beer,Chips]和[Beer,Diaper]都是很频繁的,哪一种组合更相关呢?
association_rules(frequent_itemsets_2, metric='lift')

# 显然{Diaper, Beer}更相关一些 

四、电影数据集关联分析

1、导入数据集

movies = pd.read_csv('C:/Users/hexiaomin/Desktop/ml-latest-small/ml-latest-small/movies.csv')
movies.head(10)
# 数据中包括电影名字与电影类型的标签,第一步还是先转换成one-hot格式
movies_ohe = movies.drop('genres', 1).join(movies.genres.str.get_dummies())
pd.options.display.max_columns=100
movies_ohe.head()
movies_ohe.shape
# 数据集包括9125部电影,一共有20种不同类型
movies_ohe.columns
movies_ohe.set_index(['movieId', 'title'], inplace=True)
movies_ohe.head()

2、设置支持度 (support) 来选择频繁项集.

frequent_itemsets_movies = apriori(movies_ohe, use_colnames=True, min_support=0.025)
frequent_itemsets_movies[0:10]

3、计算规则

rules_movies = association_rules(frequent_itemsets_movies, metric='lift', min_threshold=1.25)
rules_movies[0:10]
rules_movies[(rules_movies.lift>4)].sort_values(by=['lift'], ascending=False)

# Children和Animation这俩题材是最相关的。
上一篇下一篇

猜你喜欢

热点阅读