机器学习模型上线及优化流程
- 时间: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):
- 加入更多更好的特征。首先自己要深入理解业务的运作方式,了解影响模型label目标的主要业务因素;其次多和业务的专家沟通,获取到从他们角度认为重要的因素;拉入更多人员进行头脑风暴,找到尽可能多的影响因素。 (微博表情例子)
- 特征可视化,可以通过分布图等方式观察下特征数据的特点,并去除一些异常特征。
- 统计特征:有了原始的特征因素后,可以让这个特征具备更强的表达性。统计化是一个常用的方式,主要有最大值、最小值、平均值、标准差、方差、中位数、分布区间统计数等。例如周一的平均订单数、最大订单数等。
- 特征组合:组合多个相关特征提取出其相关的规律,例如多个特征加和、求差、乘除、求斜率、变化比率、增长倍数等。(今年的购买记录 减 去年的记录 = )
- 特征拆解:将一个特征拆为多个更易理解的特征。 例如日期,可以拆为年、月、日、小时、分、秒、星期几、是否为周末。是否为节假日。
- 统计性特征映射为解释型特征:如将一个数字型或统计性特征,映射为多个范围区间。历史月订单0~5 为低频、6~15 为中频、 大于16为高频,
- 特征筛选:当有很多特征时,有部分特征是强相关的,属于冗余特征,贡献小甚至负面贡献。这时候需要做一些特征筛选。例如特征两两组合确认特征之间的相关性系数,对于相关性非常高的特征只保留一个;从基础特征集合开始,逐渐加入新特征或新特征集实验,如果新特征效果不好,则丢弃。
- 深度学习特征工程:
论文中相对于机器学习手工设计特征,“深度能自动获取特征”,深度神经网络经过训练 ,自动进行特征组合 和特征舍弃。 但是实践中,我们肯定发现做一定的处理,引入先验知识,能够加快收敛,甚至提升模型精度。
比如NLP:one-hot(离散、稀疏的值) -> 词向量(word2vec,glove,BERT) -> 句向量
图像就是:灰度、梯度、边缘、纹理、边缘(对这些组合:SIFT、SURF、HOG)、知名深层网络(在大规模图像库中训练后)的中间层。
6.2 算法调参(DL)
- 每个模型 特有算法参数 调整:每种模型有不同的超参数,而每个超参数的意义有不同,所以要熟悉模型原理的细节。比如为之前用过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')
- 通用的超参数:
- 学习率:初始学习率很重要,学习率的变化策略也很重要。开始可以高一些,后面低一些。在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分析
实践中最有用的没有之一。
- 业务数据测试集 结果可视化。
- 搜集此类错误数据集,验证是否这类的数据全不行?还是误差
- 追溯这个case计算的整个流程:未登录词问题,分词问题(冠军:武大 靖),词典质量或者覆盖度不足,模型效果不佳等。 比如分类的阈值是0.5. 模型输出prediction 0.51(模棱两可)
- 修正训练集。不要觉得训练集一定是完全正确的。 lable修正、数据不均衡(添加此类数据)。
- 调参: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
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~