数据挖掘——亲和性分析

亲和性分析根据样本个体之间的相似度,确定它们关系的亲疏。应用场景:

1.向网站用户提供多样化的服务或投放定向广告。

2.为了向用户推荐电影或商品

3.根据基因寻找有亲缘关系的人

比如:统计顾客购买了商品1,然后再购买商品2的比率,算相似度。

import numpy as np
dataset_filename = "affinity_dataset.txt"
x = np.loadtxt(dataset_filename)
# print x[:5]
# 上述代码的结果代表前5次交易中顾客购买了什么。用“1”表示购买,“0”表示没有购买。
# 这五种商品分别是:面包,牛奶,奶酪,苹果和香蕉。
# 现在我们要找出“如果顾客购买了商品x,那么他们可能愿意购买商品y”的规则(一条规则有前提条件和结论两部分组成)。衡量一个规则的优劣通常有:支持度(指数据集中规则应验的次数)和置信度(指规则准确率如何,计算方法是:规则应验次数除以满足前提条件的所有次数)。

# 举个例子计算有多少人购买了苹果。
num_apples_purchases = 0
for sample in x:
    if sample[3] == 1:
        num_apples_purchases += 1
# print "{0} people bought Apples".format(num_apples_purchases)
# 接着我们计算有多少人购买了苹果,后又购买了香蕉。同时计算支持度和置信度。
num_apples_bananas_purchases = 0
for sample in x:
    if sample[3] == 1 and sample[4] == 1:
        num_apples_bananas_purchases += 1
valid_rules = num_apples_bananas_purchases
num_occurances = num_apples_purchases
support = valid_rules
confidence = valid_rules/float(num_occurances)
print "{0} people bought Apples, but {1} people also bought bananas".format(num_apples_purchases, num_apples_bananas_purchases)
print "------"
# 支持度
print support
# 置信度
print "{0:.3f}".format(confidence)

# 我们接着将所有规则下的可能性都统计出来,找出亲和性最高的几个。首先,分为两种:一种是规则应验,一种是规则无效。分别创建字典。字典的键是由条件和结论组成的元组,元组元素为特征在特征列表中的索引值,比如“如果顾客买了苹果,他们也会买香蕉”就用(3,4)表示。这里使用defaultdict,好处是如果查找的键不存在,返回一个默认值。
from collections import defaultdict
features = ["bread", "milk", "cheese", "apple", "banana"]
valib_rules = defaultdict(int)
invalib_rules = defaultdict(int)
num_occurances = defaultdict(int)
# 依次对样本的每个个体及个体的每个特征值进行处理。第一个特征为规则的前提条件。
for sample in x:
    for premise in xrange(4):
        if sample[premise] == 0:
            continue
        num_occurances[premise] += 1
        # 比如“顾客买了苹果,他们也买了苹果”,这样的规则是没有意义的。
        for conclusion in xrange(len(features)):
            if premise == conclusion:
                continue
            if sample[conclusion] == 1:
                valib_rules[(premise, conclusion)] += 1
            else:
                invalib_rules[(premise, conclusion)] += 1
support = valib_rules
confidence = defaultdict(float)
‘‘‘
for premise, conclusion in valib_rules.keys():
    rule = (premise, conclusion)
    confidence[rule] = valib_rules[rule] / num_occurances[premise]
‘‘‘
# 这样我们就得到了支持度字典和置信度字典。我们再来创建一个函数,以便更加方便查看结果。
def print_rule(premise, conclusion, support, confidence, features):
    premise_name = features[premise]
    conclusion_name = features[conclusion]
    confidence[(premise, conclusion)] = valib_rules[(premise, conclusion)] / float(num_occurances[premise])
    print "Rule: If a person buys {0} they will also buy {1}".format(premise_name, conclusion_name)
    print "- Support: {0}".format(support[(premise, conclusion)])
    print "- Confidence: {0:.3f}".format(confidence[(premise, conclusion)])
if __name__ == "__main__":
    premise = 1
    conclusion = 3
    # print print_rule(premise, conclusion, support, confidence, features)

# 排序找出最佳的规则。对字典排序:首先字典的items()函数返回包含字典所有元素的列表,再使用itemgetter()类作为键,这样就可以对嵌套列表进行排序了。
from operator import itemgetter
sorted_support = sorted(support.items(), key=itemgetter(1), reverse=True)
# 提取支持度最高的5条
for index in range(5):
    print "Rule #{0}".format(index + 1)
    premise, conclusion = sorted_support[index][0]
    print_rule(premise, conclusion, support, confidence, features)

# 总结亲和性分析,可以清楚的看出哪两种商品一起购买的几率要大些,经理就可以根据这些规则来调整商品摆放的位置,从而为商家带来更大的经济效益。
affinity_dataset.txt
0 1 0 0 01 1 0 0 00 0 1 0 11 1 0 0 00 0 1 1 10 1 0 0 00 0 1 1 10 0 1 1 00 1 0 1 00 1 0 0 10 0 0 1 01 0 1 0 01 0 0 0 10 1 1 0 00 0 1 0 10 1 0 1 01 1 0 1 10 0 0 1 10 1 0 0 11 1 0 1 00 1 1 0 00 1 0 0 10 0 1 0 01 0 0 0 10 1 0 1 01 0 0 1 10 1 1 0 00 1 0 0 10 0 0 0 11 0 0 0 10 1 0 1 11 0 0 0 00 1 0 0 01 0 0 0 00 0 1 1 10 0 1 1 10 0 1 1 11 0 0 1 00 1 0 0 11 1 0 0 00 0 0 0 10 1 0 1 10 1 0 1 00 1 0 0 11 1 1 1 01 0 0 0 10 0 0 1 11 1 0 0 10 1 0 0 00 1 1 0 00 1 0 1 10 1 0 0 10 0 1 1 10 0 0 1 10 0 1 0 00 0 1 1 11 0 0 0 01 1 1 0 10 0 1 1 10 1 0 0 00 0 1 1 00 1 0 0 10 0 1 0 00 1 0 0 01 0 0 0 10 1 0 0 00 1 1 0 10 0 1 0 00 0 1 0 00 0 0 1 10 0 1 0 00 0 1 1 00 1 0 0 00 1 1 1 11 1 0 0 10 0 1 1 00 0 1 1 00 0 1 1 10 0 1 1 10 1 0 0 00 1 0 1 01 1 0 0 10 1 0 0 10 0 1 1 10 1 0 0 10 1 0 1 10 1 0 0 11 0 0 0 01 0 0 1 10 1 1 1 11 0 0 0 10 0 1 0 10 1 1 1 01 1 0 1 11 0 1 0 10 0 1 1 11 1 1 1 00 1 0 0 10 1 0 0 11 1 0 1 1
时间: 2024-11-10 01:01:08

数据挖掘——亲和性分析的相关文章

数据挖掘入门系列教程(一)之亲和性分析

数据挖掘入门系列教程(一)之亲和性分析 教程系列简介 系列地址:https://www.cnblogs.com/xiaohuiduan/category/1661541.html 该教程为入门教程,为博主学习数据挖掘的学习路径步骤.教程为入门教程,从最简单的开始.使用的编程语言为Python3.8.1,使用JupyterNotebook作为开发环境(使不使用JupyterNotebook都没有关系). 在学习本教程之前,你需要: 有一点python编程基础 会用百度 or 谷歌 数学知识还是要一

数据挖掘-MovieLens数据集_电影推荐_亲和性分析_Aprioro算法

[python] view plain copy print? #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Feb  7 14:38:33 2017 电影推荐分析: 使用 亲和性分析方法 基于 Apriori算法 推荐电影 @author: yingzhang """ #读取数据集: http://grouplens.org/datasets/movielen

亲和性分析——推荐电影

小编今天学习了Apriori算法,用于生成频繁项集,感觉好厉害.  ——参考 Robert Layton的 数据挖掘 所以小编特此记录加深印象.所以代码 仅仅放上核心. Apriori算法可以说是经典的亲和性分析算法.它只从数据集中频繁出现的商品中选取共同出现的商品组成频繁项集(frequent itemset),避免了上述复杂度呈指数级增长的问题.一旦找到频繁项集,生成关联规则就很容易了. 挖掘亲和性分析所用的关联规则之前,我们先用Apriori算法生成频繁项集.接着,通过检测48 第 4 章

数据挖掘案例分析

数据挖掘应用目前在国内的基本结论是“大企业成功案例少,中小企业需求小”.但是对于市场来说,如果不是真的“没有人买”所以“没有人卖”,那一定是创新的机会所在.个人的判断是,一个数据库只要有几十万以上记录,就有数据挖掘的价值. 搜集以下案例,希望有一定的启发和学习价值. 1. 哪些商品放在一起比较好卖? 这 是沃尔玛的经典案例:一般看来,啤酒和尿布是顾客群完全不同的商品.但是沃尔玛一年内数据挖掘的结果显示,在居民区中尿布卖得好的店面啤酒也卖得很好.原 因其实很简单,一般太太让先生下楼买尿布的时候,先

如何以客户为中心进行数据挖掘与分析(转)

数据挖掘与分析可以说是信息领域发展最快的技术,很多不同领域的专家都从中获得了发展的空间,使得数据挖掘成为企业界讨论的热门话题. 随着信息技术的发展,人们采集数据的手段越来越丰富,由此积累的数据日益膨胀,数据量达到GB甚至TB级,而且高位数据也成为了主流,于是数据挖掘这一融合多种分析手段,从大量数据中发现有用知识的方法就应运而生了,它的出现为商业决策提供了有价值的知识,让企业获得了利润,在客户内在需求管理中,数据挖掘正在起着导向的作用. 一.以客户为中心的数据分析框架思想 信息时代到今天已经发生了

如何利用数据挖掘进行分析的方法

ps:作为目前人工智能和数据库领域研究的热点问题,数据挖掘从数据库的大量数据中揭示出隐含的.先前未知的并有潜在价值的信息的非平凡过程. 数据挖掘(Data Mining,DM),又称数据库中的知识发现(Knowledge Discover in Database,KDD),是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的.先前未知的并有潜在价值的信息的非平凡过程.数据挖掘是一种决策支持过程,它主要基于人工智能.机器学习.模式识别.统计学.数据库.可视化技

社交网站的数据挖掘与分析(高清版)PDF

社交网站的数据挖掘与分析(高清版)PDF百度网盘链接:https://pan.baidu.com/s/1ia57ZMxvdTtq7eragsITzg 提取码:5hth 复制这段内容后打开百度网盘手机App,操作更方便哦内容简介 · · · · · · Facebook.Twitter和LinkedIn产生了大量宝贵的社交数据,但是你怎样才能找出谁通过社交媒介正在进行联系?他们在讨论些什么?或者他们在哪儿?这本简洁而且具有可操作性的书将揭示如何回答这些问题甚至更多的问题.你将学到如何组合社交网络数

数据挖掘工具分析北京房价 (一) 数据爬取采集

一. 前言 房价永远是最让人头疼且激动的话题,尤其是在帝都,多少人一辈子都为了一套房子打拼.正好我也想用一个大家比较关心的话题作为案例,把目前我开发的这套软件进行一次完整的演练.从数据采集,到清洗,分析,和最终可视化和报告的呈现,实现一次完整的流程.一方面可以给大家切实的分享一些有用的信息,再者可以更好地了解这套软件的使用流程.  关于本工具的介绍,可参考数据挖掘平台介绍(综述)——平台简介. 自然的,文章分为四部分,本节是第一部分:数据爬取和采集. 二.  准备工作 俗话说巧妇难为无米之炊,没

社交网站的数据挖掘与分析 中文版 pdf

下载地址:网盘下载 内容简介  · · · · · · Facebook.Twitter和LinkedIn产生了大量宝贵的社交数据,但是你怎样才能找出谁通过社交媒介正在进行联系?他们在讨论些什么?或者他们在哪儿?这本简洁而且具有可操作性的书将揭示如何回答这些问题甚至更多的问题.你将学到如何组合社交网络数据.分析技术,如何通过可视化帮助你找到你一直在社交世界中寻找的内容,以及你闻所未闻的有用信息. 每个独立的章节介绍了在社交网络的不同领域挖掘数据的技术,这些领域包括博客和电子邮件.你所需要具备的就