前言
打卡学习任务
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())
参考博客
互信息(Mutual Information)的介绍
sklearn学习——特征工程(特征选择)