赞
踩
前面的两篇文章中,我们完成了文件内容提取、中文分词、机器学习模型构建等任务。现在,我们希望对得到的模型效果做出优化。当然,有很多方法可以提升模型的表现,包括特征工程、调参、模型融合等。在这篇文章中,主要介绍针对模型融合的实践内容,即对多个baseline按一定的方法进行“融合”以期达到指标的提升。以下是前面两篇文章的链接。
最全NLP中文文本分类实践(上)——中文分词获取和Word2Vec模型构建
最全NLP中文文本分类实践(中)——SVM和基于keras的TextCNN实现
所谓模型融合,其实就是字面意思,通过融合多个不同的模型来提升性能。最容易理解的模型融合有针对分类问题的Voting和回归问题的Average。在其基础上有改进或稍微复杂的有Bagging,Boosting,Stacking等。
用多个模型对样本进行分类,以“投票”的形式,投票最多者为最终的分类。
对不同模型得出的结果取平均或加权平均。
先利用多次有放回抽样生成不同的训练集训练出不同的模型,将这些模型的输出结果通过上述两种方法综合得到最终的结果。随机森林就是基于Bagging算法的一个典型例子。
一种迭代的方法,每一次训练的时候都更加关心分类错误的样例,给这些分类错误的样例增加更大的权重,下一次迭代的目标就是能够更容易辨别出上一轮分类错误的样例。最终将这些弱分类器进行加权相加。
本质上是分层的结构。第一层是k折交叉的训练集,针对于每一折,由除自己以外的其他的训练数据训练出模型,并以此模型对这一折进行预测。按照此流程进行k次之后,我们得到了用不同模型预测训练集标签的结果,按顺序罗列之后作为第二层的训练集。再用k次训练的模型预测测试集标签,将得到的结果除以k取平均,作为第二层的测试集。随后,我们再用另一个模型去训练第二层的训练集并预测第二层的测试集,获取对原始的测试集的预测结果进行评估。
这一部分的内容概念可能用语言描述起来不太好理解,我是通过以下链接进行更直观的认知的。有需要的同学可以去加深一下理解认识。
在本次实践中,我主要应用的是Voting和Stacking两种模型融合的方法,也将在下文中分别展开。
在此之前,我们先需要有几个预先存好的模型。最好是奇数个,这样不会出现特别多的平票的情况。我使用了5个模型进行voting,分别是TextCNN,以及5个和10个epochs分别训练出来的Word2Vec模型下,各自的SVM和神经网络分类器。
#模型融合 import joblib import h5py from tensorflow.keras.models import load_model #导入五个提前保存好的模型 cnnmodel = load_model('textcnn.h5') svm1model = joblib.load("download_w2v_svm.m") svm2model = joblib.load("download_w2v_10epochs_svm.m") nn1model = joblib.load("download_w2v_nn.m") nn2model = joblib.load("download_w2v_10epochs_nn.m") #由于CNN模型和其他分类器模型所产生的标签格式是不一致的 #因此需要应用不同的测试集特征格式,并将预测结果进行统一 y_cnnpred = cnnmodel.predict(X_testcnn, batch_size=64, verbose=0, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。