1、开启数据挖掘之旅
前言:因为这篇博客很多东西都是联系起来的,像是一条线,因此如果你对数据挖掘感兴趣的话呢,希望你能够耐心看完这篇文章。相信会对你有很大的帮助哈哈哈~
如何使用python进行数据挖掘,主要会涉及一下几个主题:
- 数据挖掘简介以及应用场景
- 搭建python数据挖掘环境
- 亲和性分析案例:根据购买习惯推荐商品
- (经典)分类问题案例:根据测量结果推荐植物种类
1.1 数据挖掘简介
(1)数据挖掘的基本概念
- 概念:让计算机根据已有数据做出决策(决策可以是预测明天的天气、拦截垃圾邮件、检测网站的语言或者说在约会网站上发现新的恋爱对象哈哈哈哈)
- 涉及领域:涉及算法、统计学、工程学、计算机科学等相关领域。当然,除此之外还会涉及到语言学、神经科学、城市规划等领域
通常会在算法中整合这些属于特点领域上的东西
(2)数据挖掘的基本步骤
- 创建数据集(数据集能够描述真实世界的某一方面);主要包括以下两个部分:
<1> 表示真实世界中的物体样本(可以是一本书、一张照片、一个动物…)
<2> 描述数据集中样本的特征(可以是长度、单词频率、创建时间…)
- 调整算法
<1> 每种数据挖掘的算法都会有参数(它们可以是自身包含的,也可以是使用者添加的,这些参数的修改都会影响算法的具体决策)
(3)安装IPython
- 请在命令提示符后(注意不是Python中,终端环境),输入以下命令安装IPython:
pip install ipython[all]
- 安装好IPython Notebook后,运行方式如下:
ipython3 notebook
- 会进入到以下界面
上述的命令帮你做了两件事情:
- 在命令提示符界面创建一个IPython Notebook实例
- 打开Web浏览器,连接到实例,你可以在此创建新的笔记本文件
如何关闭IPython Notebook:
- 打开运行实例的终端界面
- 按下ctrl+c键,就可以。IPython Notebook就会关闭
(4)安装scikit-learn库
scikit_learn库是用Python开发的机器学习库。它包含大量机器学习的算法、数据集、工具和框架。其中numpy和scipy等都针对ss护具处理任务进行过优化。因此scikit-learn速度快、扩展性强
- 安装scikit-learn(之前没有安装NurmPy和SciPy的话)
pip3 install -U scikit-learn
1.2 亲和性分析案例
终于迎来了第一个数据挖掘的案例,我们先利用亲和性分析的这个案例来具体看下数据挖掘到底是怎么回事。我们先来看一个场景:
<1>当顾客在购买一件商品的时候,商家可以趁机了解用户还想买什么,以便把更多顾客愿意同时购买的商品放在一起销售以提高销售额。
<2>当商家收集到足够多的数据时,就可以对其进行亲和性分析,以便确定哪些商品适合放在一起销售。
那什么是亲和性分析呢?
亲和性分析会根据样本或者物体之间的相似度,确定它们关系的亲疏。亲和性分析的场景如下:
- 向网站用户提供多样化的服务或投放定向广告
- 为了向用户推荐电影或者商品,而卖给它们一些与之相关的小玩意
- 根据基因寻找有亲缘关系的人
基本了解了什么是亲和性分析之后,我们会有疑问,即如何去测量。换句话说就是亲和性的测量方法有哪些呢?
其实亲和性的测量方法有多种,例如:
- 统计两件商品一起出售的频率
- 或者统计顾客购买商品1之后再购买商品2的概率
- 计算样本个体之间的相似度
1.3 商品推荐
商品销售有线下推到线上之后,很多由人工完成的工作只有实现自动化,才有望将生意做大。就举个向上销售的案例:向上销售指的是向已经购买商品的客户推荐另一种商品。原本由人工来完成的推荐工作,现在依靠我们的数据挖掘就可以实现。
那商品推荐服务它背后的思路是什么呢?
- 人们之前经常同时购物的两件商品,以后也有可能会同时购买
- 虽然这个想法很简单,但这就是很多商品推荐服务的基础
这种想法很容易转化为算法。顾客购买商品后,在向他们推荐商品前,先查询一下历史交易数据,找到以往他们购买同样商品的交易数据,看看同时购买了什么,再把它们推荐给顾客即可。该算法实际表现也不错,至少比随机推荐商品更有效。然而,它还有很大的提升空间,这正是数据挖掘一展身手的好机会。
为了方便我们理解,我们只考虑一次购买两种商品的情况。例如,人们去超市买了面包,就会相应的买牛奶。作为数据挖掘的入门案例,我们希望得到下面这样的规则:
- 如果一个人买了x商品,那么他很可能购买Y商品
针对多件商品它们的规则就更加复杂。就比如购买香肠和汉堡的顾客更有可能购买番茄酱。
1.4 在Numpy中加载数据集
- 首先需要导入我们的数据集文件
affinity_dataset.txt
- 处理该数据时,我们需要用到NumPy的二维数组【数组看上去像是一张表每一行表示样本中一个个个体,每一列表示一种特征】
- 代码示例
import numpy as np
dataset_filename = 'affinity_dataset.txt'
x = np.loadtxt(dataset_filename)
n_samples, n_features = x.shape
# print("This dataset has {0} samples and {1} features".format(n_samples, n_features))
# print(x[:5])
# The names of the features,for your reference
features = ["bread", "milk", "cheese",