纵有疾风起
人生不言弃

机器学习模型上线及优化流程

机器学习模型上线及优化流程

  • 时间:2020-07-09

文章目录

通用流程:

如何应用机器学习模型来构建一个智能化应用的通用的过程

1) 业务问题界定和定义

将一个业务中待解决问题转化为一个机器学习模型应用问题。这个步骤非常重要,要有清晰的业务目标,避免产品、服务沦为技术展示。

如何将一个业务中待解决问题转化为一个机器学习模型应用问题,是机器学习应用的第一步,也确定后面所有流程的工作方向。如果这个部分界定或拆分的不好,那就很难产出好的业务效果。

  • 监督学习:

    • 分类:预测数据所属的类别;(包括:二分类、多分类、多标签分类)
      • 应用:(1)NLP:垃圾邮件检测、情感分析等。(2)CV:图片质检(黄赌毒暴政)、猫狗检测、垃圾分类
      • 算法:(1)传统:K近邻算法、线性回归、支持向量机(SVM)、决策树和随机森林、神经网络(浅层);(2)深度:DNN、CNN、RNN;
    • (复合型)目标检测:找出图像中所有感兴趣的目标(物体),确定它们的位置和大小。
      • 应用:LOGO识别、人头识别、ps检测
      • R-CNN、Fast/Faster R-CNN;SSD、YOLO 。以最大得分的框去与其他框做IoU操作,并过滤那些IoU较大(即交集较大)的框。
    • (复合型)OCR:身份证OCR、银行卡OCR
    • (副产物)分布式表征:将一个图像、自然语言、录音抽象为机器能理解的向量。
      • 应用:文本相似度、图像搜索、看图写话
      • 算法:(1)词嵌入onehot、Word2vec;(2)DNN中间层(图像)
    • 序列模型:
      • 应用:词性标注、分词、命名实体识别、信息抽取
      • 算法:隐马尔可夫HMM、条件随机场CRF、RNN-CRF
    • 回归:根据先前观察到的数据预测数值;
      • 应用:房价预测、股价预测、身高-体重预测等。
      • 算法:线性回归、多项式回归、逻辑回归
  • 无监督学习

    • 聚类算法:信用卡交易异常检测、相册人物聚类、
      • 模型:K均值算法(K-means)、基于密度的聚类方法(DBSCAN)、最大期望算法
    • 可视化和降维:降维的目的在于不丢失太多的信息的情况下简化数据。
      • 模型:主成分分析pca
    • 关联规则学习
      • Apriori、Eclat
  • 强化学习:解决交互学习问题:国际象棋、deep mind LOL

    • Q学习、深度强化学习

2) 数据样本的筛选和构造

在这个阶段,会确定我们可用的数据样本的规模,确定训练样本、测试样本的拆分方式。有几点思路:

1) 尽量多的数据样本

爬虫、业务方提供。数据增强:
NLP:可以通过重复采样、时间窗口滑动等方式增大样本规模。
CV:数据增强:随机的裁剪、旋转、缩放变形、翻转(from keras.preprocessing.image import ImageDataGenerator)

train_datagen = ImageDataGenerator(rescale=1. / 255, # 预测的时候,特征也要这么处理
    shear_range=0.2, # 用来进行剪切变换的程度
    zoom_range=0.2, # 用来进行随机的放大
    horizontal_flip=True) # 随机的对图片进行水平翻转

2) 针对预测目标做一些倾斜采样处理(业务方提供常见,eg:电话业务分类)

例如如果正样本少,而我们应用主要需要预测正样本,这时候,可以针对已有正样本进行重复采样,扩大正样本在总体样本中的比例。

3) label的定义与标注

label的定义和问题的界定直接相关。 Label我们要尽量选择用户在产品中做出的明确清晰的标注。例如是否点击了广告、是否发单,需要尽量和业务方一起来做label。

理想是丰满的,但显示是骨干的。往往有时候缺少标签数据,需要自己构建。

  • 分类标签:可以利用
  • 目标检测、信息抽取类,就要靠自己标注。

4) 选择机器学习算法

  • 在数据规模大不是特别特别大情况下,成熟机器学习算法的结果差异不会太大。
  • 如果有大数据,一般DL是比ML效果好。越新的越好。

5) 确定模型性能的度量方式

在选择了适合训练集的模型之后,可以用测试集来评估它在新数据上的性能,以评估泛化误差。如果对模型的性能感到满意,那么就可以用它来预测未来的新数据。

  • 分类模型:Accuracy (Precision、Recall、F1 score)
  • 目标检测:在某iou标准下:mAP(mean Average Precision)即各类别AP的平均值,(AP: PR曲线下面积)PR曲线: Precision-Recall曲线
  • OCR:字符串相似度sim的均值:1- L/max(a,b) L为编辑距离
  • 序列模型:F-score: 分别对每种实体类别分别计算对应类别的F-score,再求整体平均
  • 回归模型:均方误差MSE、均方根误差RMSE、平均绝对误差MAEMAE

6) 模型优化

包括特征工程、算法调参、bad case 分析等,这是一个反复迭代优化的过程。

6.1 特征工程(ML):

  1. 加入更多更好的特征。首先自己要深入理解业务的运作方式,了解影响模型label目标的主要业务因素;其次多和业务的专家沟通,获取到从他们角度认为重要的因素;拉入更多人员进行头脑风暴,找到尽可能多的影响因素。 (微博表情例子)
  2. 特征可视化,可以通过分布图等方式观察下特征数据的特点,并去除一些异常特征。
  3. 统计特征:有了原始的特征因素后,可以让这个特征具备更强的表达性。统计化是一个常用的方式,主要有最大值、最小值、平均值、标准差、方差、中位数、分布区间统计数等。例如周一的平均订单数、最大订单数等。
  4. 特征组合:组合多个相关特征提取出其相关的规律,例如多个特征加和、求差、乘除、求斜率、变化比率、增长倍数等。(今年的购买记录 减 去年的记录 = )
  5. 特征拆解:将一个特征拆为多个更易理解的特征。 例如日期,可以拆为年、月、日、小时、分、秒、星期几、是否为周末。是否为节假日。
  6. 统计性特征映射为解释型特征:如将一个数字型或统计性特征,映射为多个范围区间。历史月订单0~5 为低频、6~15 为中频、 大于16为高频,
  7. 特征筛选:当有很多特征时,有部分特征是强相关的,属于冗余特征,贡献小甚至负面贡献。这时候需要做一些特征筛选。例如特征两两组合确认特征之间的相关性系数,对于相关性非常高的特征只保留一个;从基础特征集合开始,逐渐加入新特征或新特征集实验,如果新特征效果不好,则丢弃。
  • 深度学习特征工程:

论文中相对于机器学习手工设计特征,“深度能自动获取特征”,深度神经网络经过训练 ,自动进行特征组合 和特征舍弃。 但是实践中,我们肯定发现做一定的处理,引入先验知识,能够加快收敛,甚至提升模型精度。

比如NLP:one-hot(离散、稀疏的值) -> 词向量(word2vec,glove,BERT) -> 句向量
图像就是:灰度、梯度、边缘、纹理、边缘(对这些组合:SIFT、SURF、HOG)、知名深层网络(在大规模图像库中训练后)的中间层。

6.2 算法调参(DL)

  1. 每个模型 特有算法参数 调整:每种模型有不同的超参数,而每个超参数的意义有不同,所以要熟悉模型原理的细节。比如为之前用过SVM:SVM模型有:(线性核函数、多项式核函数、RBF核函、sigmoid核函数 )重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差。gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少。 sklearn 自带的调参函数:网格搜索
from sklearn.model_selection import GridSearchCV
parameters={'kernel':['linear','rbf','sigmoid','poly'],'C':np.linspace(0.1,20,50),'gamma':np.linspace(0.1,20,20)}
svc = svm.SVC()
model = GridSearchCV(svc,parameters,cv=5,scoring='accuracy')
  1. 通用的超参数:
    • 学习率:初始学习率很重要,学习率的变化策略也很重要。开始可以高一些,后面低一些。在0.1到0.00001范围
    • batch size:随机梯度下降是建立在batch基础上的,常取2的n次方,太大的batch size会受GPU显存的限制,所以不能无限增大。一般32 或者64的多。
    • epoch:训练轮数。如果你的模型已经过拟合了,你就没必要继续跑了;相反,如果你的epoch太小,你epoch跑完了,模型的loss还在下降,模型还在优化,那么你这个epoch就太小了,应该增加。
    • 模型层数,每层的神经元个数:模型越深越宽复杂,越容易欠拟合。需要考虑自己的数据。不要以为追求复杂网络,除非有先验知识。
    • 优化算法:SGD算法+ Adam优化算法+退火算法(学习率(α)衰减值)
    • 激活函数:神经网络目前效果随着网络的深度不断增加,效果也不断提升,一个重要原因就是通过非线性的变换。(Sigmoid函数、Tanh、ReLU)
    • Droupout系数,防止过拟合,一般0.5-0.9之间

6.3 bad case分析

实践中最有用的没有之一。

  1. 业务数据测试集 结果可视化。
  2. 搜集此类错误数据集,验证是否这类的数据全不行?还是误差
  3. 追溯这个case计算的整个流程:未登录词问题,分词问题(冠军:武大 靖),词典质量或者覆盖度不足,模型效果不佳等。 比如分类的阈值是0.5. 模型输出prediction 0.51(模棱两可)
  4. 修正训练集。不要觉得训练集一定是完全正确的。 lable修正、数据不均衡(添加此类数据)。
  5. 调参:logo识别双框重叠问题

7) 模型实验的策略

最常规有效的方式就是按一定规则随机分组,进行A/B实验,做分组尽量引入随机算法,避免使用固有id取模的方式分组。在确定B实验有效 再更新模型,否则回退。

8) 模型线上应用

  • 收集用户数据(非公开)业务方训练集有偏。logo识别 用户上传。
  • 体验服务 -> 生产服务
  • 负载均衡 网关 监控 业务方调用统计 加解密 代码管理 模型存储

9)业务效果评估

机器学习模型应用是一个反复迭代实验过程,根据实验效果进行很多次的分析调整,以上环节会反复循环进行。

参考

《机器学习模型应用以及模型优化的一些思路》:https://blog.csdn.net/mozhizun/article/details/60966354

原文链接:https://lookme.blog.csdn.net/article/details/107337234

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

未经允许不得转载:起风网 » 机器学习模型上线及优化流程
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录