及时行乐|算法工程师福利:超实用技术路线图( 六 )


  • 自我考核:在项目中复现一个 Kaggle 获胜方案 , 检验其效果 , 分析模型表现背后的原因 , 并尝试进行改进 。
算法框架
数据处理框架
在项目实施过程中 , 会需要各类复杂的数据处理操作 , 因此熟练掌握此类框架就显得尤为重要 。 目前行业的标准基本上会参照 Pandas DataFrame 的定义 , 在数据量较大的情况下 , 也有许多类似的框架 , 如 Spark , Dask , Modin , Mars 等支持分布式运行的 DataFrame , 以及 cuDF , Vaex 等提升单机性能的改进实现 。 这方面经典的书籍可以参考 Wes McKinney 的《Python for Data Analysis》 , 在掌握基础数据操作的基础上 , 可以进而了解窗口函数 , 向量化性能优化等高级话题 。 另外 SQL 也可以做非常复杂的数据处理工作 , 有不少公司例如阿里会以 SQL 为主来构建数据处理流程 , 感兴趣的同学也可以学习一下 SQL 中各种高级计算的使用及优化方法 。
  • 自我考核:在已有项目中 , 能把至少三个使用 apply 方法的 pandas 处理修改成向量化运行 , 并测试性能提升 。 使用 window function 或其它方案来实现 lag 特征 , 减少 join 次数 。
机器学习框架
机器学习方面的新框架层出不穷 , 一方面我们需要掌握经典框架的使用方式 , 理解其模块构成 , 接口规范的设计 , 一定程度上来说其它新框架也都需要遵循这些业界标准框架的模块与接口定义 。 另一方面对于新框架或特定领域框架 , 我们需要掌握快速评估 , 上手使用 , 并且做一定改造适配的能力 。 一些比较经典的框架有:
  • 通用机器学习:scikit-learn , Spark ML , LightGBM
  • 通用深度学习:Keras/TensorFlow , PyTorch
  • 特征工程:tsfresh, Featuretools , Feast
  • AutoML:hyperopt , SMAC3 , nni , autogluon
  • 可解释机器学习:shap , aix360 , eli5 , interpret
  • 异常检测:pyod , egads
  • 可视化:pyecharts , seaborn
  • 数据质量:cerberus , pandas_profiling , Deequ
  • 时间序列:fbprophet , sktime , pyts
  • 大规模机器学习:Horovod , BigDL , mmlspark
  • Pipeline:MLflow, metaflow , KubeFlow , Hopsworks
一般的学习路径主要是阅读这些框架的官方文档和 tutorial , 在自己的项目中进行尝试使用 。 对于一些核心接口 , 也可以阅读一下相关的源代码 , 深入理解其背后的原理 。
  • 自我考核:在 LightGBM 框架下 , 实现一个自定义的损失函数 , 并跑通训练与预测流程 。
其它框架
其它比较常见且与算法工程师日常工作会有一些联系的有 Web 框架 , 爬虫框架等 , 最具有代表性的当属 Flask 和 scrapy 。 这两者背后各自又是很大一块领域 , 尤其 web 开发更是保罗万象 。 感兴趣的同学还可以了解一下一些新兴的基于 Python3 的框架 , 例如 FastAPI , 其背后借鉴的许多现代框架的思想设计 , 包括数据验证 , 序列化 , 自动文档 , 异步高性能等 , 开拓一下知识面 。
  • 自我考核:实现一个简单的 model serving http 服务 。
算法工程交叉
大规模算法运行
分布式训练
在很多项目中 , 数据量达到十亿级以上的情况下 , 单机训练会难以支撑 。 因此分布式训练也是实际工程落地中非常重要的一个主题 。 分布式训练涉及到多机的通讯协同方式 , 优化算法的改造 , 数据及模型的并行与聚合 , 以及框架的选择和运维等话题 , 具体可以参考《分布式机器学习》 。 另外对于分布式系统 , 也可以参阅《数据密集型应用系统设计》这本神作 , 了解其背后原理 。