1.数据分析
最近找了个暑期实习,组里leader陆续给了些小任务让我熟悉。第一个就是一个分类任务。数据集形式如下:(逗号前面是样本,后面是标签)
租金,358
硒鼓,15
变量泵,70
平板投影,55
显示器,161
荧光笔,27
联合作业制作费,2241
住宿费,679
抓斗式采泥器,205
香菇素菜包,892
服务费,208
服装,128
律师代理费,273
拿到这个数据集后,首先做了一个类别统计:
可以看到总共有3150个类别等其他信息。
2.数据预处理
拿到这个数据集后,最开始认为匹配不就行了吗?结果认真看了一些样本之后,发现根本不行。比如“手机,iphone,iphone手机”都是归为一个类别里面的,类似的情况还有很多。所以,显然靠关键字匹配肯定不行了。于是就只好通过分词来处理。
方法一:
1. 用jieba(精确模式)对训练集和测试进行分词(去掉数字);
2. 使用collection中的Counter包进行词频统计;
3. 分别在完整训练集和处理训练集(去掉出现次数小于2的样本)中,通过选择出现频率最高的前1、3、5、7万个词作为特征维度,然后构建TF-IDF词频矩阵;
通过分词发现,训练集中一共有232165个词,测试集中9987个词。于是就一次取了出现频率最高的前1、3、5、7万个词作为特征维度,分别用随机森林,支持向量机,计算相似度三个模型来做预测。
源码1
源码2
方法二:
某一刻突然想到,按分词有这么大的维度,如果按分字(一个字一个字的分)的话,维度是不是会小很多。因为常用中国汉字一共不才5000多嘛。
- 将训练集和测试集中的样本,按单个字符分开;
- 去掉样本中的数字,构建TF-IDF词频矩阵;(738793,4884)
- 利用随机森林对词频矩阵中的特征按重要性进行排序,构造一个1000维度的数据集;
可以发现维度一下降了不少。且发现,利用随机森林挑选出来的前1000位特征和总共的4884维特征效果几乎差不多。
源码
3.预测结果
地址