今天看啥  ›  专栏  ›  超人汪小建

聊聊机器学习的套路

超人汪小建  · 掘金  · 架构  · 2018-11-15 00:31
阅读 148

聊聊机器学习的套路

前言

这里说说机器学习问题分析的一般性过程,尽管存在各种各样的机器学习问题,但大体上的步骤及最佳实践都有一定的套路。

理解问题

首先得理解要解决的是什么问题,比如

  • 业务上要解决什么问题
  • 该问题涉及到的信息管道有哪些
  • 如何采集数据,数据源在哪
  • 数据是完整的吗,数据刻度最小是多少
  • 数据是定期发布的还是实时获取的
  • 确定影响模型的有价值因素
  • 工作量

以上等等等等。

ETL处理

待收集的数据可能是表格数据、一串实时数据,N维矩阵或其他类型数据,同时也可能是多种存储介质,通过ETL处理将混合的数据源转成我们需要的格式,生成结构化数据类型。

数据预处理

对于收集的数据,可能存在缺陷,比如空值、异常值或数据产生器本身引起的偏差。这些缺陷可能导致模型效果不佳,同时为了优化更快收敛,需要做数据标准化处理,所以需要进行数据预处理。

比如缺失值可以简单设为0、列平均值、中值、最高频率值、甚至是稳健算法和knn等等。

比如标准化数据集,使数据集正态分布,平均值为0标准差为1。而且还达到了特征缩放效果。

模型定义

机器学习主要就是模型问题,我们通过机器学习来对现实进行抽象建模,以解决现实问题。所以机器学习主要工作就是使用哪种模型来建模,尽管各种大大小小模型一大堆,但大体上也有些套路。

  • 要完成的任务是预测结果还是对数据进行分类,前者是回归问题,后者是分类问题。
  • 对于分类问题,如果需要数据标记,则是监督学习,否则是非监督学习,使用聚类技术。
  • 数据是否为连续的,是的话考虑序列模型,比如自回归和RNN之类的。
  • 尽量使用简单模型,如果能用比如用单变量或多变量的线性回归或逻辑回归。
  • 简单模型解决不了的情况,可通过多层神经网络解决,比如复杂的非线性。
  • 使用了多少个维度的变量,将作用大的特征提取出来,并把不重要的特征去掉,比如用PCA降维。
  • 不是监督也不是非监督?考虑强化学习?

损失函数

损失函数用于衡量模型质量,它可以度量模型预测值与实际期望之间的差距,选择不合适的函数可能会影响模型的准确性,甚至影响收敛速度。

模型训练

数据准备好了,模型定义好了,就可以开始训练模型。训练中涉及几个关键术语:迭代,表示模型计算和调整的一次过程;批,数据集每次以一批为单位输入到模型中;epoch,每当整个数据集被处理完称为一个epoch。

另外,训练模型前先调整模型的初始权重,以便能更快更好地收敛。不能初始化为0,否则将导致学习失败。一般可以使用标准化技术将权重初始化。

数据集分割

一般将整个数据集分成三组,比例是7:2:1,第一组为训练集,用于调整模型参数;第二种为验证集,用于比较多个模型直接的表现;第三组为测试集,用于测试训练得到的模型准确性。

模型效果

模型训练完后要看效果如何,要看看泛化的能力。

对于回归问题,可以通过下面几个指标来了解拟合效果。

  • 平均绝对误差
  • 中值绝对误差
  • 均方误差等等

对于分类问题,可以通过下面几个指标来了解分类效果。

  • 准确性
  • 精确率
  • 召回率
  • F值
  • 混淆矩阵

对于聚类问题,可以通过下面几个指标来了解聚类效果。

  • 轮廓系数
  • 同质性
  • 完整性
  • V度量

-------------推荐阅读------------

我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)

为什么写《Tomcat内核设计剖析》

我的2017文章汇总——机器学习篇

我的2017文章汇总——Java及中间件

我的2017文章汇总——深度学习篇

我的2017文章汇总——JDK源码篇

我的2017文章汇总——自然语言处理篇

我的2017文章汇总——Java并发篇


跟我交流,向我提问:

欢迎关注:




原文地址:访问原文地址
快照地址: 访问文章快照