海量数据场景下机器学习模型训练方案

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 实际处理和解决机器学习工程化问题过程中,我们很难通过单点完成机器学习模型的训练。这些场景包括在线推荐,CTR预估,Lookalike营销等,当有上亿条数据,上千上万维特征,这些应用涉及到的数据量在10G以上甚至TB级别,那么该如何基于海量数据来训练模型呢?

实际处理和解决机器学习工程化问题过程中,我们很难通过单点完成机器学习模型的训练。这些场景包括在线推荐,CTR预估,Lookalike营销等,当有上亿条数据,上千上万维特征,这些应用涉及到的数据量在10G以上甚至TB级别,那么该如何基于海量数据来训练模型呢?

增量学习与特征选择

增量学习

增量学习即使用小batch的数据中进行学习(有时候也称为online learning)是这种学习方式的核心,因为它能让任何一段时间内内存中只有少量的数据,然后将最终的结果通过Voting的方式产生输出,如下是参考代码

#切分块数
cnt=20
size = math.ceil(len(train) / cnt)
result=[]
for i in range(cnt):
    start = size * i
    end = (i + 1) * size if (i + 1) * size < len(train) else len(train)
    #对数据做batch
    slice = train[start:end]
    result.append(batch_predict(pd.concat([slice,test]),i))
    gc.collect()

特征选择

特征选择即从稀疏的特征中删除特征重要度为0,特征重要度排序较低的特征值,并通过npz的格式将特征持久化,供后续加载,核心代码如下

se = pd.Series(clf.feature_importances_)
se = se[se>0]
##将特征重要性进行排序
col =list(se.sort_values(ascending=False).index)
pd.Series(col).to_csv('data_preprocessing/col_sort_one.csv',index=False)
##打印出来不为零的特征以及个数
print('特征重要性不为零的编码特征有',len(se),'个')
n = clf.best_iteration_
baseloss = clf.best_score_['valid']['auc']
print('baseloss',baseloss)
#通过筛选特征找出最优特征个数
clf = LGBMClassifier(boosting_type='gbdt',
                     num_leaves=31, max_depth=-1, 
                     learning_rate=0.1, n_estimators=n, 
                     subsample_for_bin=200000, objective=None,
                     class_weight=None, min_split_gain=0.0, 
                     min_child_weight=0.001,
                     min_child_samples=20, subsample=1.0, subsample_freq=1,
                     colsample_bytree=1.0,
                     reg_alpha=0.0, reg_lambda=0.0, random_state=None,
                     n_jobs=-1, silent=True)

print('开始进行特征选择计算...')
all_num = int(len(se)/100)*100
print('共有',all_num,'个待计算特征')
loss = []
break_num = 0
for i in range(100,all_num,100):
    loss.append(evalsLoss(col[:i]))
    if loss[-1]>baseloss:
        best_num = i
        baseloss = loss[-1]
        break_num+=1
    print('前',i,'个特征的得分为',loss[-1],'而全量得分',baseloss)
    print('\n')
    if break_num==2:
        break
print('筛选出来最佳特征个数为',best_num,'这下子训练速度终于可以大大提升了')

如上所述,我们介绍了增量学习+特征选择的方式,他适用的场景普遍在数据量在10G左右的单机计算,这种方式也适用于开发人员也可以通过阿里PAI搭载计算资源Maxcompute来做模型验证,采用这种方式有如下优势

优势

  • 模型的泛化能力最强,性能最好;
  • 易于部署和模型迭代;
  • 支持较为复杂的树模型,模型可解释强;

局限

  • 仅适用于单机场景,超过100G级别的数据很难训练;

MMLSpark

Spark 是为通用数据处理而设计的,并非专用于机器学习任务 ,所以真正意义下Spark不是一个机器学习框架。 要在 Spark 上运行机器学习任务,可以使用 MLlib for Spark;但该方案通常存在如下局限:

  • 不支持较为复杂的模型,如集成树模型的训练;
  • 适用的场景多为baseline,对于参数的选择支持有限,需要开发者自己重构(比如kmeans算法,spark内部使用的两个向量间的距离是欧式距离。如果希望调整为余弦或者马氏距离,就需要重构了);
  • 对网格调参支持并不理想;

鉴于此,微软开发了MMLSpark,为Apache Spark提供了一些深入的学习和数据科学工具,实现了将机器学习组件 CNTK、LightGBM 和 Spark的 统一,至此:

  • 我们可以基于Spark来运行集成树模型的任务;
  • 能够对叶子节点设置等复杂参数来做调整;
  • 支持超参数的搜索

示例代码如下:

# 实例化一个LightGBM Regressor, 其参数和单机版本类似但不尽相同, 文档可以在以下链接找到:
# https://mmlspark.azureedge.net/docs/pyspark/LightGBMRegressor.html
lgbm = LightGBMRegressor(numIterations=120, objective='binary',
        learningRate=0.007, baggingSeed=50,
        boostingType="goss", lambdaL1=0.4, lambdaL2=0.4,
        baggingFraction=0.87, minSumHessianInLeaf=0.003,
        maxDepth=9, featureFraction=0.66, numLeaves=47,
        labelCol="TARGET")

MMLSpark对比增量学习有如下优势

优势

  • 分布式训练;
  • 支持PB级别数据训练建模;

局限

  • 环境搭建与维护成本过于复杂;

Tensorflow等深度学习框架

将数据集均等地分配到系统的各个节点(node),其中每个节点都有该神经网络的一个副本及其本地的权重。每个节点都会处理该数据集的一个不同子集并更新其本地权重集。这些本地权重会在整个集群中共享,从而通过一个累积算法计算出一个新的全局权重集。这些全局权重又会被分配至所有节点,然后节点会在此基础上处理下一批数据

image

如上图所示,在 TensorFlow 中,分布式机器学习训练就使用了参数服务器方法(PS)。实现了数据集的并行处理和参数的全局共享

采用深度学习框架的优势如下

优势

  • Tensorflow、Mxnet与Pytorch天然支持分布式训练,配置简单灵活;

局限

  • 机器学习场景下,缺乏可解释性
  • 数据并行计算带来了开发门槛

除开上述方法,如果采用阿里云的Maxcompute+Dataworks,可尝试机器学习PAI的方式做海量的数据建模,PAI屏蔽了分布式环境产生的开发复杂度,无需环境的配置与运维,应该说也是个“降本增效”的选择

_2020_05_11_3_09_06

在最新的版本中,PAI支持了小数据集模型运算,可以让开发者先跑通流程,在验证之成功后方可进行大规模数据的计算。

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
19天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的五大技巧
【4月更文挑战第7天】 在数据科学迅猛发展的今天,机器学习已成为解决复杂问题的重要工具。然而,构建一个既精确又高效的机器学习模型并非易事。本文将分享五种提升机器学习模型性能的有效技巧,包括数据预处理、特征工程、模型选择、超参数调优以及交叉验证。这些方法不仅能帮助初学者快速提高模型准确度,也为经验丰富的数据科学家提供了进一步提升模型性能的思路。
|
23天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的最佳实践
【4月更文挑战第3天】在数据驱动的时代,构建高效的机器学习模型已成为解决复杂问题的关键。本文将探讨一系列实用的技术策略,旨在提高模型的性能和泛化能力。我们将从数据预处理、特征工程、模型选择、超参数调优到集成学习等方面进行详细讨论,并通过实例分析展示如何在实践中应用这些策略。
17 1
|
3天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的最佳实践
【4月更文挑战第23天】在数据驱动的时代,机器学习已成为创新的核心动力。本文深入探讨了构建高效机器学习模型的关键步骤,包括数据预处理、特征工程、模型选择、训练技巧以及性能评估。通过实例分析与经验总结,旨在为从业者提供一套实用的技术指南,帮助他们在复杂数据环境中提升模型的准确性和泛化能力。
|
1天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的最佳实践
【4月更文挑战第25天】 在数据驱动的时代,机器学习已成为创新和效率提升的关键工具。本文将探讨一系列实用的策略和技术,旨在帮助读者构建出更高效、更精确的机器学习模型。我们将从数据处理开始,讨论特征选择的重要性以及如何避免过拟合,接着深入到模型选择与优化,最后讨论模型部署和维护的实践要点。通过遵循这些最佳实践,读者能够提升其机器学习项目的成功率并实现更好的业务成果。
|
3天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
30 12
|
9天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
30 7
|
9天前
|
机器学习/深度学习 算法 数据处理
构建自定义机器学习模型:Scikit-learn的高级应用
【4月更文挑战第17天】本文探讨了如何利用Scikit-learn构建自定义机器学习模型,包括创建自定义估计器、使用管道集成数据处理和模型、深化特征工程以及调优与评估模型。通过继承`BaseEstimator`和相关Mixin类,用户可实现自定义算法。管道允许串联多个步骤,而特征工程涉及多项式特征和自定义变换。模型调优可借助交叉验证和参数搜索工具。掌握这些高级技巧能提升机器学习项目的效果和效率。
|
10天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从特征工程到模型调优
【4月更文挑战第16天】 在数据驱动的时代,机器学习已成为解决复杂问题的关键工具。本文旨在分享一套实用的技术流程,帮助读者构建高效的机器学习模型。我们将重点讨论特征工程的重要性、选择合适算法的策略,以及通过交叉验证和网格搜索进行模型调优的方法。文章的目标是为初学者提供一个清晰的指南,同时为有经验的实践者提供一些高级技巧。
|
10天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
15 0
|
16天前
|
机器学习/深度学习 JavaScript 前端开发
机器学习模型部署:使用Python和Vue搭建用户友好的预测界面
【4月更文挑战第10天】本文介绍了如何使用Python和Vue.js构建机器学习模型预测界面。Python作为机器学习的首选语言,结合Vue.js的前端框架,能有效部署模型并提供直观的预测服务。步骤包括:1) 使用Python训练模型并保存;2) 创建Python后端应用提供API接口;3) 利用Vue CLI构建前端项目;4) 设计Vue组件实现用户界面;5) 前后端交互通过HTTP请求;6) 优化用户体验;7) 全面测试并部署。这种技术组合为机器学习模型的实用化提供了高效解决方案,未来有望更加智能和个性化。

热门文章

最新文章