Task3 特征选择

1. TF-IDF原理。

TF-IDF原理概述

在一份给定的文件里,词频(term frequency, TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)

逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率。TF表示词条在文档d中出现的频率。

上面是从定性上说明的IDF的作用,那么如何对一个词的IDF进行定量分析呢?这里直接给出一个词x的IDF的基本公式如下:

其中,N代表语料库中文本的总数,而N(x)代表语料库中包含词x的文本总数。

在一些特殊的情况下上面的公式会有一些小的问题,比如某一个生僻词在语料库中没有,则分母变为0,IDF就没有意义了,所以常用的IDF需要做一些平滑,使得语料库中没有出现的词也可以得到一个合适的IDF值,平滑的方法有很多种,小修之前为大家介绍过,最常见的IDF平滑公式之一维:

进而可以计算某一个词的TF-IDF值:

扫描二维码关注公众号,回复: 5770290 查看本文章

其中TF(x)是指词x在当前文本的词频。这个数字是对词数的归一化,以防止它偏向长的文件,(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否)。对于某一特定文件里的词语x来说,它的重要性可表示为:


以上式子种分子为x词在第j个文件中出现的次数,而分母是在第j个文件中所有字词的出现词数之和。

2. 文本矩阵化,使用词袋模型,以TF-IDF特征值为权重。(可以使用Python中TfidfTransformer库)

#导入sklearn 中相应的包文件
from sklearn.feature_extraction.text import TfidfVectorizer
#语料库
corpus = [
    'This is the first document.',
    'This is the second document.',
    'And the third one.',
    'Is this the first document?',
    'I come to American to travel'
]
#调用包函数进行计算
tfidf = TfidfVectorizer().fit_transform(corpus)
print(tfidf)

3. 互信息的原理。

互信息,Mutual Information,缩写为MI,表示两个变量X与Y是否有关系,以及关系的强弱。

如果 (X, Y) ~ p(x, y), X, Y 之间的互信息 I(X; Y)定义为:

Note: 互信息 I (X; Y)可为正、负或0。

互信息实际上是更广泛的相对熵的特殊情形

如果变量不是独立的,那么我们可以通过考察联合概率分布与边缘概率分布乘积之间的 Kullback-Leibler 散度来判断它们是否“接近”于相互独立。此时, Kullback-Leibler 散度为

这被称为变量 x 和变量 y 之间的互信息( mutual information )。根据 Kullback-Leibler 散度的性质,我们看到 I[x, y] ≥ 0 ,当且仅当 x 和 y 相互独立时等号成立。

使用概率的加和规则和乘积规则,我们看到互信息和条件熵之间的关系为

可以把互信息看成由于知道 y 值而造成的 x 的不确定性的减小(反之亦然)(即Y的值透露了多少关于X 的信息量)。

\

\

Y的熵指的是衡量的是Y的不确定度,Y分布得越离散,H(Y)的值越高

H(Y|X)则表示在已知X的情况下,Y的不确定度

所以,根据互信息公式的变形: 

可以看出,I(X,Y)可以解释为由X引入而使Y的不确定度减小的量,这个减小的量为H(Y|X)

所以,如果X,Y关系越密切,I(X,Y)就越大

I(X,Y)最大的取值是H(Y),此时H(Y|X)为0,意义为X和Y完全相关,在X确定的情况下Y是个定值,没有出现其他不确定情况的概率,所以为H(Y|X)为0

I(X,Y)取0时,代表X与Y独立,此时H(Y)=H(Y|X),意义为X的出现不影响Y。。

性质

I(X;Y)的性质: 
1)I(X;Y)⩾0 
2)H(X)−H(X|Y)=I(X;Y)=I(Y;X)=H(Y)−H(Y|X)
3)当X,Y独立时,I(X;Y)=0,
4)当X,Y知道一个就能推断另一个时,I(X;Y)=H(X)=H(Y)

缺点

在做文本分类时,我们可能会判断一个词和某类的相关程度,但是计算时,未考虑词频的影响 
(可以让互信息的结果再乘上tf-idf因子,从而将特征频率与特征分布考虑进去)

应用

1、文本自动摘要 
2、两个词语同时出现的概率 
PMI(点互信息),通过判断一个词分别与poor和excellent的互信息来判断这个词的情感倾向 
这里写图片描述 
3、特征提取时特征项与类别的关联程度 
这里写图片描述

点互信息PMI(Pointwise Mutual Information)

PMI(Pointwise Mutual Information)这个指标来衡量两个事物之间的相关性(比如两个词)。

其原理很简单,公式如下:

在概率论中,我们知道,如果x跟y不相关,则。二者相关性越大,则就相比于越大。用后面的式子可能更好理解,在y出现的情况下x出现的条件概率除以x本身出现的概率,自然就表示x跟y的相关程度。 这里的log来自于信息论的理论,可以简单理解为,当对取log之后就将一个概率转换为了信息量(要再乘以-1将其变为正数),以2为底时可以简单理解为用多少个bits可以表示这个变量。(更正式的解释请阅读信息论相关理论)

点互信息PMI其实就是从信息论里面的互信息这个概念里面衍生出来的。其衡量的是两个随机变量之间的相关性,即一个随机变量中包含的关于另一个随机变量的信息量。所谓的随机变量,即随机试验结果的量的表示,可以简单理解为按照一个概率分布进行取值的变量,比如随机抽查的一个人的身高就是一个随机变量。可以看出,互信息其实就是对X和Y的所有可能的取值情况的点互信息PMI的加权和,而点互信息只是对其中两个点进行相关性判断。因此,点互信息这个名字还是很形象的。

[点互信息(PMI,Pointwise Mutual Information) ]

互信息、条件熵与联合熵的区别与联系

venn图表示关系

\

由于 H(X|X) = 0, 所以, H(X) = H(X) – H(X|X) = I(X; X)

这一方面说明了为什么熵又称自信息,另一方面说明了两个完全相互依赖的变量之间的互信息并不是一个常量,而是取决于它们的熵。

从图中可以看出,条件熵可以通过联合熵 - 熵( H(X|Y) = H(X, Y) - H(Y) )表示,也可以通过熵 - 互信息( H(X|Y) = H(X) - I(X; Y) )表示。

4. 使用第二步生成的特征矩阵,利用互信息进行特征筛选。

import pandas as pd
from sklearn import datasets
from sklearn import metrics as mr
iris =datasets.load_iris()
x=iris.data
y = iris.target
x0 = x[:,0]
x1 = x[:,1]
x2 = x[:,2]
x3 = x[:,3]
#计算互信息
print(mr.mutual_info_score(x0,y))
print(mr.mutual_info_score(x1,y))
print(mr.mutual_info_score(x2,y))
print(mr.mutual_info_score(x3,y))

5. 参考 文本挖掘预处理之TF-IDF:文本挖掘预处理之TF-IDF - 刘建平Pinard - 博客园

使用不同的方法计算TF-IDF值:使用不同的方法计算TF-IDF值 - 简书

sklearn-点互信息和互信息:sklearn:点互信息和互信息 - 专注计算机体系结构 - CSDN博客

如何进行特征选择(理论篇)机器学习你会遇到的“坑”:如何进行特征选择(理论篇)机器学习你会遇到的“坑”

参考:https://blog.csdn.net/gzmfxy/article/details/78891139 

猜你喜欢

转载自blog.csdn.net/yanyiting666/article/details/88236373
今日推荐