Code: https://github.com/SimonLliu/DGB_AlphaTeam
在这篇笔记中暂且先讨论传统机器学习分类器模型。
首先分析数据可得,这是一个多分类的问题,而且是大规模稀疏矩阵训练的多分类问题。
这就说明了树型模型在比赛中的表现较差就情有可原了,线性模型表现较好。
比赛中尝试的传统机器学习分类器模型有:
1、线性模型:
线性回归LogisticRegression
支持向量机(线性核)LinearSVC
2、树形模型
LightGBM
XGBoost
3、贝叶斯
Multinomial Naive Bayes
一、LogisticRegression
1、原理分析
https://blog.csdn.net/joshly/article/details/50494548
做个记录:建议手动推导包括概率定义,损失函数定义,优化算法的过程
2、比赛过程
在比赛中,首先采用的就是逻辑回归,对逻辑回归的参数微调即可达到0.77以上,但在网上就遇到瓶颈了。
二、LinearSVC
1、LinearSVC和SVC的区别
https://www.cnblogs.com/zealousness/p/7757603.html
1)LinearSVC使用的是平方hinge loss,SVC使用的是绝对值hinge loss
(我们知道,绝对值hinge loss是非凸的,因而你不能用GD去优化,而平方hinge loss可以)
2)LinearSVC使用的是One-vs-All(也成One-vs-Rest)的优化方法,而SVC使用的是One-vs-One
3)对于多分类问题,如果分类的数量是N,则LinearSVC适合N模型,而SVC适合N(N-1)/2模型
4)对于二分类问题一般只有其中一个合适,具体问题具体对待
5)LinearSVC基于liblinear,惩罚函数是对截矩进行惩罚;SVC基于libsvm,惩罚函数不是对截矩进行惩罚。
6)我们知道SVM解决问题时,问题是分为线性可分和线性不可分问题的,liblinear对线性可分问题做了优化,故在大量数据上收敛速度比libsvm快(大规模线性可分问题上LinearSVC更快)
2、原理分析
https://blog.csdn.net/liugan528/article/details/79448379
3、比赛过程
在尝试了大量的逻辑回归实验后,考虑使用svm,对比了SVC和LinearSVC,SVC在大数据的情况训练慢的无法接受,且准确率较低,LinearSVC表现较为惊艳,在使用拼接特征后,达到了0.779。
三、LightGBM
1、原理分析
https://blog.csdn.net/niaolianjiulin/article/details/76584785
lightGBM主要有以下特点:
1)基于Histogram的决策树算法
2)带深度限制的Leaf-wise的叶子生长策略
3)直方图做差加速
3)直接支持类别特征(Categorical Feature)
4)Cache命中率优化
5)基于直方图的稀疏特征优化
6)多线程优化
2、比赛过程
1)比赛参数和代码
params = {
'boosting': 'gbdt',
'application': 'multiclassova',
'num_class': 20,
'learning_rate': 0.1,
'num_leaves':31,
'max_depth':-1,
'lambda_l1': 0,
'lambda_l2': 0.5,
'bagging_fraction' :1.0,
'feature_fraction': 1.0
}
bst = lgb.train(params, d_train, num_boost_round=800, valid_sets=d_vali,feval=f1_score_vali, early_stopping_rounds=None,
verbose_eval=True)
2)比赛理解
在比赛的后期,svm和lr的模型已经较多,为了能有更多区别较大的模型,我们尝试了许多种分类器,在树形模型普遍较差的情况下,lgb仍然不失为”大杀器“,在几个拼接特征的训练下都达到了0.77以上。
但lgb的训练相对来说还是较慢,在训练800个num_boost_round时,训练时长大概为6-8小时,且特征越大对cpu的运算要求越高,曾出现过占满服务器cpu的情况,对内存要求较小。
四、XGBoost
1、原理分析
https://blog.csdn.net/github_38414650/article/details/76061893
2、比赛过程
有一个队友训练出了准确率在0.6以上的XGBoost,当时挺兴奋的,以为调调参可以得到一个0.7+的模型,结果现实给了一个暴击,直到比赛结束,我们的新XGBoost并没有训练出来。
五、Multinomial Naive Bayes
1、原理分析:
https://blog.csdn.net/xlinsist/article/details/51236454
2、比赛过程
由于是文本分类,选用多项式贝叶斯算法,结果在0.6-0.7
六、深度学习模型
1、TextCNN
在队友的指导下,尝试了下TextCNN,不过可能结构过于简单,结果极差。
2、RCNN
训练时间超久。
https://zhuanlan.zhihu.com/p/29201491