首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》8.2.1 将单词转换为特征向量

关灯直达底部

如需根据每个文档中的单词数量构建词袋模型,我们可以使用scikit-learn中的Count-Vectorizer类。如下述代码所示,CountVectorizer以文本数据数组作为输入,其中文本数据可以是个文档或仅仅是个句子,返回的就是我们所要构建的词袋模型:

通过调用CountVectorizer的fit_tranform方法,我们创建了词袋模型的词汇库,并将下面三个句子转换成为稀疏的特征向量:

我们将相关词汇的内容显示出来,以更好地理解相关概念:

由上述命令的运行结果可见,词汇以Python字典的格式存储,将单个的单词映射为一个整数索引。下面我们来看一下之前创建的特征向量:

特征向量中的每个索引位置与通过CountVectorizer得到的词汇表字典中存储的整数值对应。例如,索引位置为0的第一个特征对应单词and,它只在最后一个文档中出现过;单词is的索引位置是1(文档向量中的第二个特征),它在三个句子中都出现过。出现在特征向量中的值也称作原始词频(raw term frequency):tf(t,d)——词汇t在文档d中出现的次数。

我们刚创建的词袋模型中,各项目的序列也称为1元组(1-gram)或者单元组(unigram)模型——词汇表中的每一项或者每个单元代表一个词汇。更普遍地,自然语言处理(NLP)中各项(包括单词、字母、符号)的序列,也称作n元组(n-gram)。n元组模型中数字n的选择依赖于特定的应用;例如,Kanaris等人通过研究发现,在反垃圾邮件过滤中,n的值为3或者4的n元组即可得到很好的效果(Ioannis Kanaris,Konstantinos Kanaris,Ioannis Houvardas,and Efstathios Stamatatos.Words vs Character N-Grams for Anti-Spam Filtering.International Journal on Artificial Intelligence Tools,16(06):1047–1067,2007)。对n元组表示的概念做个总结,分别使用1元组和2元组来表示文档"the sum is shining"的结果如下:

·1元组:"the","sun","is","shining"

·2元组:"the sun","sun is","is shining"

借助于scikit-learn中的CountVecorizer类,我们可以通过设置其ngram_range参数来使用不同的n元组模型。此类默认为1元组,使用ngram_range=(2,2)初始化一个新的CountVectorizer类,可以得到一个z元组表示。