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多嘛。


  1. 将训练集和测试集中的样本,按单个字符分开;
  2. 去掉样本中的数字,构建TF-IDF词频矩阵;(738793,4884)
  3. 利用随机森林对词频矩阵中的特征按重要性进行排序,构造一个1000维度的数据集;

可以发现维度一下降了不少。且发现,利用随机森林挑选出来的前1000位特征和总共的4884维特征效果几乎差不多。

​源码​

3.预测结果

​地址​