词袋模型(新闻文本分类)


            我们要用词袋模型进行文本分类,训练模型大致可以分为两步:第一步,用TF-IDF表示文本特征;第二步,把TF-IDF值和标签值送入分类模型训练。



        第一步用TF-IDF表示文本特征:     

                                     “TF-IDF值” = “TF值” ✖ “IDF值”     (在实操中,我们会把TF值进行归一化,以防止它偏向长文本)

        TF值:某个词(字)在文本(一段话)中出现的频率

        IDF值:某个词(字)在文本(一段话)中的普遍重要性的度量。某一词(字)的IDF值,可以由总文本数目除以包含该词(字)的文本的数目,再将得到的商取 10为底的对数。

这里我们使用sklearn中的TfidfVectorizer方法计算出TF-IDF值:

         首先看一下数据,此数据集为训练数据集,分为“频道”和“文章”两列,后面将使用这样的数据集来进行模型训练。

训练数据集

由于在文本中有许多没有用的词(字)和标点符号,所以要去停用词


TfidfVectorizer方法计算TF-IDF值

参数解释:

                tokenizer = jieba.lcut  用jieba分词中的精确模式;stop_words 定义停用词词典,会在结果中删除词典中包含的词;norm 表示对TF-IDF矩阵的每一行使用l2范数归一化; use_idf 表示在TF矩阵的基础上计算IDF,并相乘得到TF-IDF;smooth_idf 表示通过加1到文档频率平滑idf权重,为防止除零,加入一个额外的文档(防止计算IDF时出现除0的尴尬情况);sublinear_tf 表示使用 1+log(tf)替换原来的tf, True值表示使用    

                contents参数就是我们要计算成TF-IDF值的文本数据集(即文章那一列的数据)

得到的TF-IDF值:


计算出的TF-IDF值

我们可以看看这个词袋包含多少词:

词表中有25359个词


第二步,把TF-IDF值和标签值送入分类模型训练:

           我们在得到TF-IDF模型之后,我们还需要对频道那一列进行处理。频道那列其实就是标签值,包含娱乐,体育,音乐之类的类别。

            把频道那一列进行编码,得到标签值y ,再用刚刚训练好的tfidf模型计算出x值:

得到x和y

            这里我们在分割训练集和测试集时,不再直接用x,y来分割,因为此时数据量太大,会让分割时间变长,所以通过分割index值来得到训练集和测试集:

分割训练集和测试集

            这里使用逻辑回归模型:

训练模型

            训练完我们评估一下模型效果:

通过混淆矩阵可以观察其分类正确和错误的数量

最后保存模型:

保存模型

使用模型预测新的新闻文本:

                            加载保存的模型:

加载模型,并运用模型转换为词袋并预测

和实际类别进行比对:

预测值和实际值对比

总结:

            上面整个流程就是一个简单的通过词袋模型进行新闻文本分类,通过计算出TF-IDF值,再送入分类模型进行预测。

你可能感兴趣的:(词袋模型(新闻文本分类))