前言
TF-IDF
这个笔记早就做过了笔记,文章链接在TF-IDF方法提取文本特征–TfidfVectorizer 工具,虽然没有涉及到公式这类的,但是偏向实际,其他都可以百度得到。
点互信息
这是表示两个变量之间的关联程度,其计算公式如下:
P
M
I
(
x
,
y
)
=
log
(
p
(
x
,
y
)
p
(
x
)
p
(
y
)
)
PMI(x,y)=\log(\frac{p(x,y)}{p(x)p(y)})
PMI(x,y)=log(p(x)p(y)p(x,y))
根据贝叶斯公式:
p
(
x
∣
y
)
=
p
(
x
,
y
)
p
(
y
)
,
p
(
y
∣
x
)
=
p
(
x
,
y
)
p
(
x
)
p(x|y)=\frac{p(x,y)}{p(y)} , p(y|x)=\frac{p(x,y)}{p(x)}
p(x∣y)=p(y)p(x,y),p(y∣x)=p(x)p(x,y)
于是点互信息的公式就转换为:
P
M
I
(
x
,
y
)
=
log
(
p
(
x
,
y
)
p
(
x
)
p
(
y
)
)
=
l
o
g
(
p
(
x
∣
y
)
p
(
x
)
)
=
l
o
g
(
p
(
y
∣
x
)
p
(
y
)
)
PMI(x,y)=\log(\frac{p(x,y)}{p(x)p(y)}) = log(\frac{p(x|y)}{p(x)}) = log(\frac{p(y|x)}{p(y)})
PMI(x,y)=log(p(x)p(y)p(x,y))=log(p(x)p(x∣y))=log(p(y)p(y∣x))
如果x与y一点关系都没有,相互独立,则
p
(
x
,
y
)
=
p
(
x
)
p
(
y
)
p(x,y)=p(x)p(y)
p(x,y)=p(x)p(y),这使得
P
M
I
(
x
,
y
)
=
0
PMI(x,y)=0
PMI(x,y)=0,如果两者有关联关系,则
从公式中可以看到,可以分别求得出现y在x条件下出现的概率,与y本身出现的概率之比,可以看出两者的联系比,反之
p
(
x
∣
y
)
p(x|y)
p(x∣y)也是一样。在NLP中可以查看两个词之间的相关性,可以约定一个n大小的滑动窗口,两个词在窗口内就可以认为两者是出现的,两个词出现的次数除以单词总次数就得到了
p
(
x
,
y
)
p(x,y)
p(x,y),同样的方法得到
p
(
x
)
p(x)
p(x)和
p
(
y
)
p(y)
p(y),这样就可以回到两个词的相关性,同时,我们也可以求单词情感词性(正面情感,负面情感)。我们想衡量like这个词的极性(正向情感还是负向情感)。我们可以预先挑选一些正向情感的词,比如good,然后我们算like跟good的PMI。
互信息
深入推广一下,对于两个拥有多个变量的样本来说,它们之间的关系就是:
I
(
X
,
Y
)
=
∑
y
i
∈
Y
∑
x
i
∈
X
p
(
x
,
y
)
∗
log
(
p
(
x
,
y
)
p
(
x
)
p
(
y
)
)
I(X,Y) = \sum_{y_i \in Y}\sum_{x_i \in X} p(x,y)*\log(\frac{p(x,y)}{p(x)p(y)})
I(X,Y)=yi∈Y∑xi∈X∑p(x,y)∗log(p(x)p(y)p(x,y))
这里 X,Y是两个样本,两个样本之间有很多特征,这些特征都参与到这两个变量的互信息计算过程中,每个变量都会参与计算中。上述的对数底都是2位底数。
参考博客讲解了很多关系互信息量的内容,这些内容有点晦涩难懂,大家感兴趣可以参考博客。
互信息有几个缺点:
- 无法归一化,
- 特征值是连续变量计算结果较差,通常需要离散化数据,而互信息对离散化的方式很敏感。
最大信息系数解决了这个问题,它找到了一种最优的离散方式,然后把互信息取值转换成一种度量方式,值区间在[0,1]之间,
import numpy as np
#minepy包——基于最大信息的非参数估计
from minepy import MINE
m = MINE()
x = np.random.uniform(-1, 1, 1000) #均匀分布
m.compute_score(x, x**2)
print (m.mic())