数据挖掘学习笔记
如果你对 Python有一定了解,那么可以直接跳过这部分内容。
Python 是一门面向对象、直译式编程语言, 编写简单、上手迅速,开源扩展包十分丰富,所以在数据挖掘的前沿科研和工业领域都广受欢迎,有着瑞士军刀般的价值。利用 Python,可以非常方便地开展各种领域的数据挖掘工作。
回顾python的数据结构和基本语法
一、Python 的介绍
Python 的优、缺点
1. 优点
简单易学:Python 的代码比较简洁、语法比较规范, 甚至有点像伪代码,很容易上手。如果你有其他编程语言基础的话,那么学习 Python 就会变得很快了。如果你没有学过,也不要担心,市面上关于 Python 入门的课程非常多,足够满足你的需求。
开源:因为用户可以免费使用,所以不管是在工作中,还是在学习中,使用 Python 的人群都很多,这使得各种更新包层出不穷。
可移植性好:在不同的平台都可以运行,不管是 MacOS、Windows 还是 Linux,唯一需要注意的是运行环境的配置。比如 Python 中各种包的依赖关系,如果处理不好将导致程序无法运行,要注意避免。下一课时我会介绍一种常用的包管理办法。
可扩展性:Python 拥有丰富的第三方库,不管是文件操作、网络编程、各种数据库,还是 3D 图形编程都可以运用到。
2. 缺点
慢!通常来说 Python 的缺点就 1 个, 为了使语言更加简便易懂,Python 在底层做了很多工作,所以其运行速度比 C、Java 等要慢很多。 如果非要说还有什么缺点,我认为,由于各种扩展库太庞大,导致配置这些相关包有些困难,比如不同版本的包可能存在不兼容的情况,甚至是 Python 语言本身,在从 2.x 版本升级到 3.x 版本后,很多语句和功能都发生了变化,无法跨版本运行。
知道了 Python 的特点之后,我们来了解一下它的数据类型,这对我们编写代码有很大的帮助。
二、Python 支持的数据类型
支持的数据类型
1. 列表(list)
列表可以理解为是一个有序可重复的数组,主要用于按顺序存放我们的数据。
首先,来举个例子,下面是一个为列表赋值的语句:
list=['one','two',3,4,5]
通过该语句生成了一个列表,即 list,里面有 5 个元素,但它们的类型不一样,前 2 个是字符串,后 3 个是数字。
简单来说有三点:
1.数据量大:数据的生产、收集和存储也越来越方便,海量数据因此产生
2.维度多:比如点外卖事件涉及的维度就有:浏览饭店的菜品(形式有文字、图片或语言、视频等)、浏览时间、下单价格、交易处理、分配配送员及 GPS 信息、完成订单后的评价等。
3.问题复杂:编写一段代码来区分某图片中是否有一只猫咪,那要考虑的问题就太多了,使用传统的方法很难解决,而这恰恰是数据挖掘所擅长的
三、数据挖掘有什么用处
1.分类问题
什么是分类
一张图片,电脑判断男人还是女人,一封邮件,电脑判断为垃圾信息还是又用信息?
2.聚类问题
聚类与分类不同,聚类的类别预先是不清楚的,我们的目标就是要去发现这些类别。聚类的算法比较适合一些不确定的类别场景。
比如:比如我们出去玩,捡了一大堆不同的树叶回来,你不知道这些树叶是从什么树上掉落的,但是你可以根据它们的大小、形状、纹路、边缘等特征给树叶进行划分,最后得到了三个较小的树叶堆,每一堆树叶都属于同一个种类
3.回归问题
使用回归的方法预测北京某个房子的总价(y),假设总价只跟房子的面积(x)有关,那么我们构建的方程式就是 ax+b=y。如何根据已知 x 和 y 的值解出 a 和 b 就是回归问题要解决的。回归方法是通过构建一个模型去拟合已知的数据(自变量),然后预测因变量结果。
4.关联问题
常见的啤酒与尿布的故事
四、数据挖掘怎么做
应用最多的 CRISP-DM(Cross-industry Standard Process for Data Mining,跨行业数据挖掘标准流程)方法论
1.业务理解(Business Understanding)
业务理解就是需求,弄明白问题所需求什么?训练模型用来预测垃圾邮件,那么你得弄明白,什么是垃圾邮件,他的特征有哪些,对于垃圾邮件的定义是什么,还有就是你目前的资源、局限、设想、存在风险等等问题。
2.数据理解(Data Understanding)
数据理解阶段始于数据的收集工作,但我认为重点是在业务理解的基础上,对我们所掌握的数据要有一个清晰、明确的认识,了解有哪些数据、哪些数据可能对目标有影响、哪些可能是冗余数据、哪些数据存在不足或缺失,等等。
需要注意的是,数据理解和业务理解是相辅相成的,因此你在制定数据挖掘计划的时候,不能只是单纯地谈需求,这也是大多数初入门的数据挖掘工程师容易忽略的。数据理解得不好,很可能会导致你对业务需求的错误评估,从而影响后续进度甚至是结果。
3.数据准备(Data Preparation)
你需要找销售要销售数据,找采购要采购数据,找财务要各种收入、支出数据,然后整理所有需要用到的数据,想办法补全那些缺失的数据,计算各种统计值,等等。数据准备就是基于原始数据,去构建数据挖掘模型所需的数据集的所有工作,包括数据收集、数据清洗、数据补全、数据整合、数据转换、特征提取等一系列动作。
事实上,在大多数的数据挖掘项目中,数据准备是最困难、最艰巨的一步。如果你的数据足够干净和完整,那么在建模和评估阶段所付出的精力就越少,甚至都不必去使用什么复杂的模型就可以得到足够好的效果,所以这个阶段也是十分重要的。
4.构建模型(Modeling)
也可以叫作训练模型,在这一阶段,我们会把准备好的数据喂给算法,所以这个阶段重点解决的是技术方面的问题,会选用各种各样的算法模型来处理数据,让模型学习数据的规律 ,并产出模型用于后续的工作。
对于同一个数据挖掘的问题类型,可以有多种方法选择使用。如果有多重技术要使用,那么在这一任务中,对于每一个要使用的技术要分别对待。一些建模方法对数据的形式有具体的要求,比如 SVM 算法只能输入数值型的数据,等等 。 因此,在这一阶段,重新回到数据准备阶段执行某些任务有时是非常必要的
5.评估模型(Evaluation)
在模型评估阶段,我们已经建立了一个或多个高质量的模型。但是模型的效果如何,能否满足我们的业务需求,就需要使用各种评估手段、评估指标甚至是让业务人员一起参与进来,彻底地评估模型,回顾在构建模型过程中所执行的每一个步骤,以确保这些模型达到了目标。在评估之后会有两种情况,一种是评估通过,进入到上线部署阶段;另一种是评估不通过,那么就要反过来再进行迭代更新了。
6.模型部署(Deployment)
整理了数据,研究了算法模型,并通过了多方评估,终于到了部署阶段。此时可能还要解决一些实际的问题,比如长期运行的模型是否有足够的机器来支撑,数据量以及并发程度会不会造成我们部署的服务出现问题,等等。但是,关于数据挖掘的生命周期可能还远未结束,关于一些特殊情况的出现可能仍然无法处理,以及在后续的进程中,随着新数据的生产以及变化,我们的模型仍然会发生一些变化。所以部署是一个挖掘项目的结束,也是一个数据挖掘项目的开始。
五、总结
我们主要来认识一下“数据挖掘”,让它不再是一个抽象的名词,从“它解决什么问题”和“怎么做”的角度建立了全面而具体的认识。后面的篇幅,我也将围绕这些内容进行展开和扩充讲解。
数据挖掘与数据分析,业务目标相同,但是工作上有些区别。一般数据挖掘更倾向于技术层面,而数据分析倾向于业务结果方面,数据挖掘和算法工程师更接近一点。