Spark MLlib 特征抽取、转化和选择 -- 特征抽取1 TF-IDF(HashingTF and IDF)

这一部分主要介绍和特征处理相关的算法,大体分为以下三类:
1)特征抽取:从原始数据中抽取特征

2)特征转换:特征的维度、特征的转化、特征的修改

3)特征选取:从大规模特征集中选取一个子集

特征提取:

TF-IDF(HashingTF and IDF)

“词频-逆向文件频率”(TF-IDF)是一种在文本挖掘中广泛使用的特征向量化方法,它可以体现一个文档中词语在语料库中的重要程度。

词语由t表示,文档由d表示,语料库由D表示。词频TF(t,d)是词语t在文档d中出现的次数。文件频率DF(t,D)是包含词语的文档的个数。如果我们只使用词频来衡量重要性,很容易过度强调在文档中经常出现,却没有太多实际信息的词语,比如“a”,“the”以及“of”。如果一个词语经常出现在语料库中,意味着它并不能很好的对文档进行区分。TF-IDF就是在数值化文档信息,衡量词语能提供多少信息以区分文档。其定义如下:

公式中使用log函数,当词出现在所有文档中时,它的IDF值变为0。加1是为了避免分母为0的情况。TF-IDF 度量值表示如下:

\[IDF(t,D) = log \frac{\left| D \right| + 1}{DF(t,D) + 1}\],此处的\[\left| D \right|\]是语料库中总的文档数,

公式中使用log函数,当词出现在所有文档中时,它的IDF值变为0。加1是为了避免分母为0的情况。TF-IDF 度量值表示如下:

\[TFIDF(t,d,D) = TF(t,d) \cdot IDF(t,D)\]

TF: HashingTF 是一个Transformer,在文本处理中,接收词条的集合然后把这些集合转化成固定长度的特征向量。这个算法在哈希的同时会统计各个词条的词频。关于哈希表的解释  https://www.cnblogs.com/s-b-b/p/6208565.html

IDF: IDF是一个Estimator,在一个数据集上应用它的fit()方法,产生一个IDFModel。 该IDFModel 接收特征向量(由HashingTF产生),然后计算每一个词在文档中出现的频次。IDF会减少那些在语料库中出现频率较高的词的权重。

在下面的代码段中,我们以一组句子开始。首先使用分解器Tokenizer把句子划分为单个词语。对每一个句子(词袋),我们使用HashingTF将句子转换为特征向量,最后使用IDF重新调整特征向量。这种转换通常可以提高使用文本特征的性能。

1)首先,导入TFIDF所需要的包:

2)准备工作完成后,我们创建一个简单的DataFrame,每一个句子代表一个文档。

3)在得到文档集合后,即可用tokenizer对句子进行分词

4)得到分词后的文档序列后,即可使用HashingTF的transform()方法把句子哈希成特征向量,这里设置哈希表的桶数为2000,numfeatures是维数。

5)可以看到,分词序列被变换成一个稀疏特征向量,其中每个单词都被散列成了一个不同的索引值,特征向量在某一维度上的值即该词汇在文档中出现的次数。

最后,使用IDF来对单纯的词频特征向量进行修正,使其更能体现不同词汇对文本的区别能力,IDF是一个Estimator,调用fit()方法并将词频向量传入,即产生一个IDFModel。

6)很显然,IDFModel是一个Transformer,调用它的transform()方法,即可得到每一个单词对应的TF-IDF度量值。

7)可以看到,特征向量已经被其在语料库中出现的总次数进行了修正,通过TF-IDF得到的特征向量,在接下来可以被应用到相关的机器学习方法中。

猜你喜欢

转载自blog.csdn.net/zhaoqqa/article/details/81877654
今日推荐