数据科学项目开篇(一)
这篇文章重点是介绍,数据挖掘,机器学习项目作为一个完整的流程是怎么样的,意义是制定自己一个规范,所以里面的具体细节并没有花太多的心思,效果不好在所难免。重点是体会这个过程!!!
这篇文章是这个系列的开篇立论,学了一年的机器学习方面的知识,但是当自己上手去做的时候,问题就来了,好像什么都知道一些,但是又什么都做不了,各种困难,实际工作中,没有人为你收集处理数据,而数据集质量的好坏,特征工程的质量,将决定最后模型的性能上限。数据科学,机器学习是一门实践的知识,而原理的东西似乎永远都学不完。实际工作中,真正拉开差距的更多是对客户需求,具体业务的理解,和工程的熟练度和深度。而这些东西是课本上学不到的,所以希望在研二这一年,投入到实际的工程中去,做一些真正贴近实际的项目。
在项目中我会用到python中两个重要的库,我们会使用 Pandas 和 scikit-learn ,tensorflow等库。我们会大量用到 Pandas 的DataFrame,这使得在 Python 中读取和处理表格数据变得非常简单。这个系列,我会把重点放在:
特征工程,
业务理解,
不同机器学习算法的适用场合,
相同场合下不同算法的表现,
对结果多指标的评价上,所以在实现上我们直接调用各种轮子来实现我们的模型。
下面这段复制了 知乎上的一篇文章,这篇文章写的很好,介绍了一个完整的数据科学项目的严格流程,按照这个流程做事情,会让人的头绪清楚,建议大家直接看下面链接的原文。
第一步,我们要寻找有价值的数据集。
链接:https://zhuanlan.zhihu.com/p/22894651
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
寻找优质数据集进行完整的项目分析很困难。数据集需要足够大,大到出现内存和性能的限制。还需要具备业务价值。举个例子,这个数据集中包含了美国大学的招生条件、毕业率和毕业生未来收入的数据。这就是一个可以用来讲故事的优质数据集。然而,如果你仔细想想,就会发现这里面没有足够的细节来建立一个完整的项目。
举例说,你可以告诉别人如果他们去某些(好)大学,他们未来的潜在收入就会更高,但是这只需要一个很快的查找比较就可以完成,没有足够的空间去展示你的技术能力。你也可以发现如果大学有更高的入学条件,它们的毕业生就更有可能获得高薪,但这些就更偏向于讲故事,而非业务价值了。
当你有 GB 以上的数据量时,或者当你想要预测一些数据细节,内存和性能限制就会逐渐凸现出来,因为得对数据集运行算法运算。
一个优质数据集允许你编写一系列脚本对数据做变形,从而回答一些动态问题。股票价格就是一个很好的数据集。你可以根据这些数据预测第二天的股价走势,并且在闭市的时候把新数据提供给算法。这可以帮助你执行交易,甚至是获取利润。这就不是在讲故事了 — 而是直接产生价值。
下面是一些能够找到优质数据集的地方:
- /r/datasets — 一个有着上百有趣的数据集的 subreddit
- Google Public Datasets — 一些在 Google BigQuery 上的公共数据集
- Awesome datasets — 一个托管在 Github 上的数据集清单
- 。。。。。。。。有个新的数据集网站的时候会更新在这里。
浏览这些数据集时,想一想如果有这些数据集,人们可能会问什么问题,然后再想想这些问题是否是一次性的(“S&P 500 和房价的相关性是怎样的?”),或是持续性的(“你能预测股票价格吗?”)。这里的关键在于找到那些持续性的问题,这些问题需要多次运行,并输入不同的数据才能回答。
第二步,选择分析角度。
重要的事是要坚持一个角度。一次专注于太多事情会很难做成一个优秀的项目。选择一个有足够细节的角度这点也很重要。
第三步,理解数据。
链接:https://zhuanlan.zhihu.com/p/22894651
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我们首先快速查看原始数据文件。下面是 2012 年第一季度收购数据的前几行:
100000853384|R|OTHER|4.625|280000|360|02/2012|04/2012|31|31|1|23|801|N|C|SF|1|I|CA|945||FRM|
100003735682|R|SUNTRUST MORTGAGE INC.|3.99|466000|360|01/2012|03/2012|80|80|2|30|794|N|P|SF|1|P|MD|208||FRM|788
100006367485|C|PHH MORTGAGE CORPORATION|4|229000|360|02/2012|04/2012|67|67|2|36|802|N|R|SF|1|P|CA|959||FRM|794
下面是 2012 年第一季度的表现数据的前几行:
100000853384|03/01/2012|OTHER|4.625||0|360|359|03/2042|41860|0|N||||||||||||||||
100000853384|04/01/2012||4.625||1|359|358|03/2042|41860|0|N||||||||||||||||
100000853384|05/01/2012||4.625||2|358|357|03/2042|41860|0|N||||||||||||||||
在编写代码之前,花点时间去理解数据是很有用的。尤其对于业务型项目而言,因为我们没有互动式地去探索数据,很难发现某些细节,除非一开始就找到它们。这种情况下,第一步就是去房利美的网站上读一读有关数据集的材料:
读完这些材料之后,我们知道了一些有用的关键信息:
- 从 2000 年到现在,每个季度都有一个收购文件和表现文件。数据滞后一年,所以最近的数据是 2015 年的
- 这些文件是文本形式,用 | 作为分隔符
- 这些文件没有头文档,但是我们有所有列名称的列表
- 全部加起来,这些文件共包含 2.2 千万个房贷的数据
- 因为表现文件涵盖了之前的房贷信息,所以早些时候的房贷会有更多的表现数据(举个例子,2014 年收购的房贷不会有太多表现信息)
在设计项目结构和处理数据时,这些信息能帮助我们节省一大笔时间。
链接:https://zhuanlan.zhihu.com/p/22894651
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第四步,设计项目结构
在开始下载和探索数据之前,设计好项目结构是非常重要的。在打造一个完整的项目时,我们的主要目标是:
- 输出一个可行的解决方案
- 解决方案运行快且消耗最少资源
- 让他人可以很容易地扩展项目
- 让他人可以容易地理解代码
- 写的代码越少越好
为了达到这些目标,我们要设计好项目的结构。一个结构良好的项目遵从以下规范:
- 数据文件和源代码分开
- 原始数据和生成数据分开
- 有一个 README.md 文件,介绍如何安装并使用这个项目
- 有一个 requirements.txt 文件,包含项目所需的所有模块
- 有一个 settings.py 文件,包含所有其他文件所需的设置
- 例如,如果有很多Python脚本都读取同一个文件,就不如让它们都导入settings并从这一个地方来得到文件
- 有一个 .gitignore 文件,来防止一些特别大的或者私密的文件被提交到 Git
- 把任务分成几步,并分别放在可以单独执行的文件里
- 例如, 用一个文件读取数据,一个文件建立特征,一个文件执行预测
- 储存中间值。例如,一个脚本可能会输出一个文件,这个文件又会被另外一个脚本读取
- 这使得我们可以在数据处理的流程中做一些改动,而又不需要重新计算
该项目的文件结构如下:
loan-prediction
├── data
├── processed
├── .gitignore
├── README.md
├── requirements.txt
├── settings.py