目录
此to-do list可指导您完成机器学习项目,共包括八个主要步骤:
-
确定问题并从整体角度进行思考。
-
获取数据。
-
探索数据以获取洞察。
-
准备数据,以更好地揭示数据的潜在模式,使其适用于机器学习算法。
-
研究不同模型并筛选出最优模型。
-
对模型进行微调,并将它们组合成最佳解决方案。
-
展示您的解决方案。
-
部署、监控并维护您的系统。
您可以根据自己的需求自由调整此to-do list。
确定问题并从整体角度进行思考
-
以业务目标的方式定义问题。
-
该解决方案将如何被使用?
-
当前是否已有解决方案/变通方法?
-
该问题应如何被定义(监督/无监督学习,在线/离线等)?
-
应如何衡量性能?
-
该性能度量是否与业务目标一致?
-
达到业务目标所需的最低性能是什么?
-
是否存在类似问题?是否可以复用经验或工具?
-
是否可以借助人类专业知识?
-
如果手动解决该问题,应如何操作?
-
列出您(或其他人)目前所做的假设。
-
尽可能验证这些假设。
获取数据
注意:尽可能自动化,以便能够轻松获取最新数据。
-
列出所需数据及其规模。
-
查找并记录数据的获取来源。
-
估算数据所占空间。
-
检查法律义务,并在必要时获得授权。
-
获取访问权限。
-
创建工作空间(确保存储空间充足)。
-
获取数据。
-
将数据转换为易于操作的格式(但不改变数据本身)。
-
确保敏感信息已删除或受到保护(如匿名化)。
-
检查数据的类型和规模(时间序列、样本、地理信息等)。
-
抽取测试集,并单独存放,避免数据泄露(Data Snooping)。
探索数据
注意:尽量与领域专家交流,获取更深入的洞察。
-
创建数据副本以便探索(必要时进行采样)。
-
使用 Jupyter Notebook 记录数据探索过程。
-
研究每个属性及其特性:
-
名称
-
类型(类别型、整数/浮点、受限/不受限、文本、结构化等)
-
缺失值的比例
-
噪声及类型(随机、异常值、舍入误差等)
-
对任务的作用
-
数据分布类型(高斯、均匀、对数等)
-
-
对于监督学习任务,确定目标变量。
-
可视化数据。
-
研究属性之间的相关性。
-
研究如何手动解决该问题。
-
识别可能适用的数据转换方法。
-
评估是否需要额外数据(返回“获取数据”步骤)。
-
记录您的发现。
准备数据
注意:
-
在数据副本上操作(保持原始数据集完整)。
-
编写数据转换函数,原因如下:
-
便于未来处理新数据集。
-
便于在未来项目中复用。
-
便于清理和准备测试集。
-
便于在解决方案上线后处理新数据。
-
便于将数据预处理步骤视作超参数。
-
-
清理数据:
-
修正或移除异常值(可选)。
-
填充缺失值(如使用零、均值、中位数等)或删除相关行/列。
-
-
进行特征选择(可选):
-
删除对任务无用的属性。
-
-
进行特征工程(如适用):
-
离散化连续特征。
-
分解特征(如类别、时间日期等)。
-
生成新特征(如 log(x)、sqrt(x)、x² 等)。
-
组合多个特征生成新特征。
-
-
进行特征缩放:
-
标准化或归一化特征。
-
筛选潜在模型
注意:
-
如果数据量庞大,可使用小规模训练集,以便在合理时间内尝试多种模型(但这可能会影响复杂模型的表现,如大规模神经网络或随机森林)。
-
尽量自动化这些步骤。
-
训练多种不同类别的基础模型(如线性模型、朴素贝叶斯、SVM、随机森林、神经网络等),使用默认参数。
-
评估并比较其性能:
-
对每个模型进行 N 折交叉验证,并计算性能均值和标准差。
-
-
分析各算法中最重要的变量。
-
研究模型的错误类型:
-
人类会如何避免这些错误?
-
-
进行快速的特征选择和工程处理。
-
快速重复前几个步骤 1-2 次。
-
筛选出 3-5 个最有前景的模型,优先考虑错误类型不同的模型。
微调系统
注意:
-
该步骤需尽可能使用全部数据,尤其是在后期优化时。
-
尽量自动化。
-
使用交叉验证调整超参数:
-
也可将数据转换选择视为超参数(如填充缺失值的方法)。
-
若超参数较多,优先使用随机搜索,而非网格搜索。
-
若训练时间较长,可使用贝叶斯优化方法(如高斯过程)。
-
-
尝试集成方法(Ensemble Methods),组合多个最优模型通常能提升性能。
-
确定最终模型后,在测试集上评估泛化误差。
⚠️ 警告:评估泛化误差后,切勿再调整模型,否则可能会过拟合测试集!
展示您的解决方案
-
记录您的工作过程。
-
制作清晰的展示材料:
-
先概述大局。
-
-
解释为何您的解决方案符合业务目标。
-
强调探索过程中有趣的发现:
-
说明哪些方法有效,哪些无效。
-
列出假设及系统的局限性。
-
-
通过可视化或简洁的陈述传达关键发现(如“收入中位数是房价的最佳预测指标”)。
部署!
-
准备生产环境(接入生产数据、编写单元测试等)。
-
监控系统性能,并定期触发告警:
-
注意模型性能的缓慢下降(数据分布随时间变化)。
-
监控输入数据质量(如传感器故障、上游数据过时等)。
-
-
定期使用新数据重新训练模型(尽可能自动化)。
参考资料
【1】《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》