机器学习最佳实践整理

前段时间,基于scikit-learn这个库,对机器学习 相关的主要方面写了一系列的文章,

其中包括数据加载方面,数据预处理方面,比较知名的一些监督算法和无监督算法的介绍,以及模型的评估和持久化相关的内容。

基本囊括了一个机器学习项目所需要的方方面面。

本篇作为机器学习的一个总结,整理了在机器学习项目中,各个阶段需要特别注意的事项。

题目中的"最佳实践",只是我个人目前的最佳实践,文中如有不当之处,欢迎指正。

1. 机器学习项目流程

一个机器学习项目,一般分为四个阶段:

  1. 数据收集
  2. 数据清洗
  3. 模型训练
  4. 模型部署

这四个阶段并不是严格的自上而下依次执行的,

比如,数据清洗 时如果发现缺失太多,获取数据错误较多的话,是要回到第一步重新采集的;

即使在模型训练阶段,训练效果不好如果是数据问题,也会回到第一步重新收集数据。

下面整理的各个阶段的**"最佳实践"**,目的之一就是保证每个阶段能够尽量完善,进入下一个阶段后,尽量避免再次回到上一个阶段,提高完成机器学习项目的效率。

2. 数据收集阶段

数据收集是第一个阶段,没有数据,机器学习无从谈起。

不过,这个阶段不是一上来就想着如何用各种爬虫技术去收集数据,而是先透彻理解项目目标。

将要进行的机器学习项目究竟为了得到什么样的模型?为了解决什么问题?为了配合什么业务?

了解项目为什么做之后,再根据目标来确定需要什么样的数据。

采集数据时,每类数据的字段尽量多采集一些,否则以后补采集很困难,甚至有些数据过了时间就采集不到了。

比如,采集房产销售数据,成交价,成交时间,以及房屋面积等等信息很重要自不必说,

采集数据时,也可以顺带采集房屋的挂牌时间,挂牌价,阳台朝向,是否有电梯等等。

这些信息看似暂时用不上,后续难保不会用上,如果后续要用,一方面补采麻烦,另一方面如果时间长了不一定能采集到(比如链家上,某一地区的成交信息只提供最近的几千条)

另外,采集信息时,相同的名词保持一致。

比如,采集南京雨花台区 的房产交易数据,所以数据统一用南京雨花台区 ,不要有的房产用南京雨花 ,有的用雨花台区 等等。

特别是日期字段,统一成 年/月/日 ,或者 月/日/年 等方式,所有数据用一种方式表示时间。

3. 数据清洗阶段

数据清洗阶段需要注意的包含数据预处理特征工程两个部分。

3.1. 数据预处理

首先,处理采集来的数据中的缺失值重复值

因为机器学习算法本身 是不考虑缺失值重复值,我们需要自己来保证提供给算法的数据尽量精确。

对于重复值 ,一般就是删除,对于缺失值,根据情况,可以删除或者用插值来填补。

其次,用数值代替类别型特征,

比如,对于一些定性的数据,比如风险级别、职业和兴趣等,需要转换为数值型便于后续算法计算。

还可以对类别型特征进行编码,将其编码成数值,比如常用的one-hot编码。

最后,数据的属性如果数量级差别 很大,还需要做数据缩放处理。

对数据取值范围不敏感的算法,比如朴素贝叶斯,基于树的算法对率回归和线性回归等等,不一定需要缩放数据;

而其他涉及样本数据之间任何形式的距离的算法,需要缩放特征和标准化处理。

3.2. 特征工程

特征工程 的目的是提取数据中的有用信息,并将这些信息转换为适合用于机器学习模型的格式,以提高模型的性能。
特征工程需要一定的专业背景知识,带着领域知识做特征工程,利用业务经验和洞察力,将数据中与预测目标相关的信息以形式化的方式表示出来。

特征工程中,最重要的是从数据中提取出最有效的特征,删除冗余或不相关的特征,减少预测模型的训练时间。

注意 ,不一定每次都是对数据进行降维 处理,若数据包含的相关特征很少,有时会去组合新的特征,也就是升维

这时,每个特征生成方法要保留,训练模型失败后,需要回过头来重新生成或者调整特征,这时需要知道特征是怎么来的。

如果我们缺少领域知识,是不是就无法做特征工程 了?如果能做的话,如何做特征工程 呢?

答案是如果缺少领域知识,仍然有一些方法帮助我们做特征,比如:

  1. 二值化:设定好阈值,将数值型特征转化为二值型
  2. 离散化:将数值型特征转化为有限个类别型特征
  3. 交互型:包括求和,相乘或两个数值特征之间的任意运算,还有两个类别型特征的联合条件检验
  4. 多项式转换:生成多项式和交互特征的过程

4. 模型训练阶段

模型训练 阶段的重点在于准备算法评估训练效果
模型训练 开始前,其实是不知道哪种算法是最合适的,一般会准备3个左右 的备选算法。

确定备选算法前,需要考虑:

  • 训练集大小
  • 数据集的维度
  • 数据是否线性可分
  • 特征之间是否独立
  • 偏差和方差的容忍度,如何权衡
  • 是否要求线上学习
  • 等等。。。

评估模型 训练效果,最关注的要属欠拟合过拟合

一般通过绘制学习曲线来诊断过拟合和欠拟合,诊断有拟合问题的话,可以尝试下面方法来解决:

  • 交叉检验
  • 正则化
  • 尽可能保持模型的简单,模型越复杂,就越可能过拟合
  • 集成学习,整合一系列较弱的模型,形成更强大的模型

5. 模型部署阶段

模型部署阶段的最佳实践比较简单,主要做好以下几点。

首先,模型一定要序列化保存 ,使得模型可以在其他机器上重用,也避免每次使用模型都要重新训练。

其次,模型使用中,随时监控模型 的性能,记录使用中发现的模型的不足之处。

最后,定期更新模型,即使训练出符合评估效果的模型也不是一劳永逸,随着新的数据产生,监控模型时发现的问题,需要定期更新数据和算法参数,训练新的模型来替换原有模型。

6. 总结

各个阶段的 "最佳实践" 要点总结如下:

  1. 数据收集阶段
    1. 理解项目目标
    2. 数据相关字段尽量多采集
    3. 数据中相同的名词保持一致
  2. 数据清洗阶段
    1. 处理缺失值和重复值
    2. 类别型数据数值化
    3. 类别型数据编码
    4. 数据缩放处理
    5. 特征工程
  3. 模型训练阶段
    1. 准备算法
    2. 评估模型
  4. 模型部署阶段
    1. 模型保存,重用
    2. 监控模型
    3. 定期更新模型
相关推荐
Power20246665 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k5 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
sp_fyf_20246 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
知来者逆7 小时前
研究大语言模型在心理保健智能顾问的有效性和挑战
人工智能·神经网络·机器学习·语言模型·自然语言处理
老艾的AI世界7 小时前
新一代AI换脸更自然,DeepLiveCam下载介绍(可直播)
图像处理·人工智能·深度学习·神经网络·目标检测·机器学习·ai换脸·视频换脸·直播换脸·图片换脸
Chef_Chen8 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
AI街潜水的八角9 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
喵~来学编程啦10 小时前
【论文精读】LPT: Long-tailed prompt tuning for image classification
人工智能·深度学习·机器学习·计算机视觉·论文笔记
Chef_Chen11 小时前
从0开始学习机器学习--Day13--神经网络如何处理复杂非线性函数
神经网络·学习·机器学习
Troc_wangpeng11 小时前
R language 关于二维平面直角坐标系的制作
开发语言·机器学习