机器学习项目开发过程(End-to-End Machine Learning Project)

引言:之前对于机器学习的认识停留在算法的分析上,这篇文章主要从项目开发的角度分析机器学习的应用。这篇文章主要解释实际项目过程中的大致方针,每一步涉及的技术不会介绍很细致。机器学习项目开发步骤如下:
1. Look at the big picture.
2. Get the data.
3. Discover and visualize the data to gain insights.
4. Prepare the data for Machine Learning algorithms.
5. Select a model and train it.
6. Fine-tune your model.
7. Present your solution.
8. Launch, monitor, and maintain your system.

首先给出一些公共的数据集:
Popular open data repositories:

  • UC Irvine Machine Learning Repository
  • Kaggle datasets
  • Amazon’s AWS datasets

Meta portals (they list open data repositories):

  • http://dataportals.org/
  • http://opendatamonitor.eu/
  • http://quandl.com/

Other pages listing many popular open data repositories:

  • Wikipedia’s list of Machine Learning datasets
  • Quora.com question
  • Datasets subreddit

一、Look at the big picture:即明确你的任务和数据来源

1,定义问题:

  • 明确你的任务目标
  • 确定任务输出
  • 分析现有的方法的利弊
  • 最终,你要确定设计你任务的方法:回归、分类、或者其他

2,确定模型的评价指标:对分类和回归设计评价指标
3,检查所有的假设:列出你任务可能的所有假设(方案设计,以及可能出现的问题)

二、获取数据:数据下载和数据分析
1,数据下载:通过下载或者爬取拿到数据
2,查看数据的分布:使用pandas快速分析数据结构(一下全是pandas的方法)

  • 分析数据特征及大小:head(),info()
  • 分析类别属性的分布:value_counts()
  • 分析数值型数据分布:describe()
  • 图表展示数据分布:hist()

3,获取测试数据:从整体中分割一部分用作测试,原则是分布均匀

  • shuffle之后选取一定比例:问题是,每次执行过程中选取的测试集是不同
  • shuffle后选取存起来;或者在每次shuffle中设置同样的seed种子:问题是,当数据刷新后就得重新训练
  • 利用样本的唯一标识符选取:利用hash映射
  • 采用分层抽样:对于某一个属性的总体分布比例,代表测试集各个分布的比例

三、可视化并分析数据:对数据进一步分析,在训练集上分析,数据量大可以进行采样。目的是为了分析目标与那些属性相关
1,散点图分析:适合有二维信息的,比如位置信息。用颜色来代表分布情况。分析目标与两个轴有没有关系。
2,相关系分析:
- the standard correlation coefficient (also called Pearson’s r):取值(-1,1);计算每个属性与目标的相关系数;代表的线性相关性,并不代表非线性相关性;corr()方法
- scatter_matrix()方法:每两个属性之间的关系
3,属性组合的测试:对部分属性进行组合计算后,计算得到的属性与目标的相关系数

四、为算法准备数据:数据分析完后,可以提取特征,准备数据。这个过程把数据与目标分开,不想改变目标值
1,数据清洗:非法数据删除,修改
2,类型数据进行编码
3,各个属性的比例很不协调。常见的有:Min-max scaling;Standardization
4,可以用Pipelines进行序列操作

五、选择模型并训练:
1,训练并在训练集上评估模型
2,利用交叉验证评估更好

六、调整模型:
1,Grid Search调整参数
2,Randomized Search调整参数
3,Ensemble Methods模型融合结果
4,得到最好的模型:分析每个特征的作用得分,去掉没有用的特征
5,在测试集上评估模型

七、发行、监控、维护系统:定期监控模型的结果,并给出提示;模型也必须定期更新。

这篇文章是基于别人的代码所写:
https://github.com/ageron/handson-ml/blob/master/02_end_to_end_machine_learning_project.ipynb

你可能感兴趣的:(机器学习)