Tf-idfVectorizer 与CountVectorizer详解
1 机器学习文本分类
机器学习是对能通过经验自动改进的计算机算法的研究。机器学习通过历史数据训练出模型对应于人类对经验进行归纳的过程,机器学习利用模型对新数据进行预测对应于人类利用总结的规律对新问题进行预测的过程。
文本表示方法
- One-hot
One-hot与数据挖掘任务中的操作是一致得,每一个单词使用一个离散的向量表示,具体将每一个字、词使用一个索引(语料库vocab)表示,向量的长度的是语料库vocab中词的个数, - 词袋模型
该模型区别于Word2vector中的bag of words,在这里每一个文档中的字、词使用其出现的次数表示。 - TF-IDF
由两部分组成,第1部分是词语频率,第2部分是逆文档频率。其中其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。
TF(t)= 该词语在当前文档出现的次数 / 当前文档中词语的总数
IDF(t)= log_e(文档总数 / 出现该词语的文档总数)
2 使用sklearn实现文本分类
机器学习实现文本特征提取,主要依赖两个api,CountVectorizer 和 TfidfVectorizer。
2.1 CountVectorizer
CountVectorizer()函数只考虑每个单词出现的频率;然后构成一个特征矩阵,每一行表示一个训练文本的词频统计结果。其思想是,先根据所有训练文本,不考虑其出现顺序,只将训练文本中每个出现过的词汇单独视为一列特征,构成一个词汇表,该方法又称为词袋法(Bag of Words)。
代码例子:
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
texts=["orange banana apple grape","banana apple apple","grape", 'orange apple']
cv = CountVectorizer()
cv_fit=cv.fit_transform(texts)
print(cv.vocabulary_)
print(cv_fit)
print(cv_fit.toarray())
{
'orange': 3, 'banana': 1, 'apple': 0, 'grape': 2}
#接下输出的 训练文本矩阵,按照首字母排序
(0, 2) 1 #第一个句子,“grape”,在这个句子中出现1次