大家好,tf-idf作为文体特征提取的常用统计方法之一,适合用于文本分类任务,本文将从原理、参数详解和实际处理方面介绍tf-idf,助力tf-idf用于文本数据分类。
1.tf-idf原理
tf 表示词频,即某单词在某文本中的出现次数与该文本中所有词的词数的比值,idf表示逆文本频率(语料库中包含某单词的文本数、倒数、取log),tf-idf则表示词频 * 逆文档频率,tf-idf认为词的重要性随着它在文本中出现的次数成正比增加,但同时会随着它在整个语料库中出现的频率成反比下降。
idf表达式如下,其中k为包含某词的文本数,n为整个语料库的文本数:
idf=log(n/k)
对idf进行平滑处理,避免出现极大/极小值(smooth_idf=True)
idf=log((1+n)/(1+k))+1
2.文本处理方法
sklearn中提供了一些方便的文本处理方法:
CountVectorizer: 将文本文档集合转换为词频/字符频数矩阵,在单个类中实现了 tokenization (字符级+词级分词)、n-grams、剔除停用词、筛选高频词和 occurrence counting (频数统计)
TfidfTransformer:将词频/字符频数矩阵转换为标准化的 tf 或 tf-idf 矩阵,Tf 表示词频、而 tf-idf 表示词频乘以逆文档频率,常用于文本分类。
TfidfVectorizer:将原始文档集合转换为tf-idf 特征矩阵,将 CountVectorizer 和TfidfTransformer的所有功能组合在一个模型中。
实际应用结果如下图(2-grams):
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformer,TfidfVectorizer
3.初始化词频向量/tf_idf训练参数
由于存在功能组合的问题,TfidfVectorizer参数=CountVectorizer参数+TfidfTransformer参数,因此初始化参数函数将三部分参数汇总,通过设置传参label,用于确定所需要返回的参数字典。
def init_params(label='TfidfVectorizer'):
params_count={