商品标题类目判断算法

类目体系:

经去重,合并,子到父类共有645个商品类目
选用Liblinear作为分类工具,相比于它的“兄弟”Libsvm,速度快很多。

程序结构

调参

因为对所有父级类目的训练做交叉验证非常缓慢,所以,从中随机选择了178个类目,设定每类目1000条标题是测试集,100条测试。

训练参数选择:

分类方法比较

分类方法 用时(s) 准群率
L2-regularized L2-loss support vector classification 91 86.426% (14606/16900)
support vector classification by Crammer and Singer 34 85.9704% (14529/16900)
L2-regularized logistic regression 113 87.0828% (14717/16900)

逻辑回归表现优秀,但在全类目训练上表现非常缓慢;Crammer和 Singer的SVM训练时间短,没看实现代码不熟悉;L2正则化能有效防止过拟合,就选L2-regularized L2-loss support vector classification这个啦。

训练参数

cost of constrain(C):
五折交叉验证,取平均命中率,C从log2C=-23,即C近似于0开始查找。如图所示,当log2C = -2,C=0.25时候,Cross Validation Accuracy = 87.16%最高。

stopping criterion(eps):0.1 不作调整

混淆矩阵

根据测试结果,输出混淆矩阵。因为类目过多,类目数*类目数的矩阵形式无法表述,所以输出了每个类目的正确率和它最容易混淆的标题。

如图:290601(ZIPPO/瑞士军刀/眼镜-瑞士军刀),350301(大家电-洗衣机)等7个类目测试命中率100%。而往后根据命中率从低往高排列:50000802(玩具/模型/动漫/早教/益智-其它玩具)命中率仅48%,类目2512(汽车/用品/配件/改装-汽车影音/车用电子/电器-车用电子/电器-蓝牙检测仪)有6个和它混淆;50016434 (居家日用/婚庆/创意礼品-创意礼品)有4个和它混淆,排第二,从高到低排列。

怎么解决某些类目命中率过低的问题?1.该类目训练集数量*2 2.对互相混淆,比如说cid1命中率50%,其最高的混淆cid2接近50%; 而cid2命中率也仅50%,和cid1大量混淆,说明这俩类目类似,应当合并这俩类目

训练

数量:
共645个类目,超过3000个标题(阈值)的有628个。
| 训练集 | Cost | 用时 | 命中率 |
| -------- | -----: | :----: | |
| 1000 | 0.0315 | 360 |73.09% = 443661/607000 |
| 1000| 0.25 | 845 | 74.19%=450330/607000|
| 1000| 1 | 1264 | 73.2%=444364/607000|
| 2000| 0.0315 | 1456 |74.39%=451565/607000 |
| 2000| 0.25 | 1808 | 75.76%459859/607000|
| 2000| 1 | 2512 |75.24%=456692/607000 |
| 5000| 0.0315 | 3975 | 76.14%=462163/607000|
| 5000| 0.25 |4590 |77.4%=469429/607000 |
| 5000| 1 | 7622 |77.27%=469025/607000 |
显然,训练样本数量越多,耗时越长,准确率越高;训练样本数一致的时候,C=0.25达到命中率最高,用时何时,最有效率。所以,全部数据训练参数选择如下:
过滤类目阈值:包含标题数大于3000
每个类目训练标题数目:5000
每个类目训练测试数目:1000
C:0.25
eps:0.1

Comments
Write a Comment