机器学习——文本特征值表示

对数据最简单的编码之一是使用单词计数,对于每个短语,仅仅计算其中每个单词出现的次数,在sklearn中,使用CountVectorizer就可以轻松解决!

看代码:

# ——创建时间:2019.3.15——
# 文本特征表示
from sklearn.feature_extraction.text import CountVectorizer

sample = [
    'feature engineering',
    'feature selection',
    'feature extraction'
]
vec = CountVectorizer()
x = vec.fit_transform(sample)
x.toarray()  # 转换成稀疏矩阵
print(x)
print(vec.get_feature_names())

输出的结果:

  (0, 0)	1
  (0, 2)	1
  (1, 3)	1
  (1, 2)	1
  (2, 1)	1
  (2, 2)	1
['engineering', 'extraction', 'feature', 'selection']

但是,这种计数方法的缺点是,如果某个单词出现的次数过于频繁,那么将会被赋予较大的权重。比如我们在进行搜索过程中,一篇文章当中必将出现较多的“的”、“是”等无意义的词语,这种词会占据着较大权重,严重影响搜索的性能。

那么,著名的词频—逆文档(TF-IDF)出场了!TF-IDF是网页搜索技术上一个重大的突破,先看看维基百科上是怎样描述的:

tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技术。tf-idf是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。tf-idf加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了tf-idf以外,互联网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜索结果中出现的顺序。

 所谓词频和之前的文本特征表示方法一样,特别之处就在于逆文档频率上:

在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语{\displaystyle t_{i}}来说,它的重要性可表示为:

以上式子中是该词在文件中的出现次数,而分母则是在文件中所有字词的出现次数之和。

逆向文件频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到:

其中

  • |D|:语料库中的文件总数
  • :包含词语{\displaystyle t_{i}}的文件数目(即的文件数目)如果词语不在数据中,就导致分母为零,因此一般情况下使用

然后

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的tf-idf。因此,tf-idf倾向于过滤掉常见的词语,保留重要的词语。

下面使用sklearn中的TfidfVectorizer进行处理:

# ——创建时间:2019.3.15——
# 文本特征表示
from sklearn.feature_extraction.text import CountVectorizer

sample = [
    'feature engineering',
    'feature selection',
    'feature extraction'
]
vec = CountVectorizer()
x = vec.fit_transform(sample)
array = x.toarray()  # 转换成稀疏矩阵

# 使用词频—逆文档进行文本特征表示
from sklearn.feature_extraction.text import TfidfTransformer
import numpy as np

vec1 = TfidfTransformer()
# sample(type=np.float32)
x = vec1.fit_transform(array)
# X.toarray()  # 转换成稀疏矩阵
print(x)

 输出:

  (0, 2)	0.5085423203783267
  (0, 0)	0.8610369959439764
  (1, 3)	0.8610369959439764
  (1, 2)	0.5085423203783267
  (2, 2)	0.5085423203783267
  (2, 1)	0.8610369959439764

 

你可能感兴趣的:(机器学习)