zoukankan      html  css  js  c++  java
  • 信息熵与TF-IDF 学习笔记

    • 自信息量

    评价一个事件发生所包含的信息量大小,设独立事件x、y发生概率为p(x)、p(y),包含信息量为I(x)、I(y)

    预设信息量的大小一定大于0,并且事件发生的概率越大,所包含的信息量越小,可知

    [Ileft( x ight) >  = 0,Ileft( y ight) >  = 0]

    [如果{ m{ }}pleft( x ight) > pleft( y ight),则{ m{ }}Ileft( x ight) < Ileft( y ight)]

    [Ileft( {x,y} ight) = Ileft( x ight) + Ileft( y ight)]

    通过上式可得

     [I(x) =  - C{log _D}p(x)]

    其中C、D为常量

    • 信息熵

    一个变量x,可能有多个取值,每个取值对应一个事件,则变量的信息熵H(x)为x各个事件自信息量的期望

    [H(x) =  - sumlimits_x {p(x)log (p(x))} ]

    当事件只有两个取值时,信息熵可表示为

    [H(x) =  - plog p - (1 - p)log (1 - p)]

    求导可知,H(x)的最大点在p=0.5处取得,同样可证,当事件有多个取值p1,p2,..,pn时,当p1=p2=..=pn=1/n时信息熵最大,具体证明可见参考文献

    • 联合信息熵(联合熵)

    两个变量x、y,分别有多个取值,每个取值组合对应一个事件,则联合信息熵H(x,y)为各个事件组合自信息量的期望

    [H(x,y) =  - sumlimits_x {sumlimits_y {p(x,y)log (p(x,y))} } ]

    联合熵评价的是x、y联合分布的不确定性,可知联合熵必然不小于x或y单独发生的不确定性,必然不大于x、y单独发生的不确定性之和,即

    [H(x,y) <  = H(x) + H(y),H(x,y) >  = H(x),H(x,y) >  = H(y)]

    当x、y相互独立时

    [H(x,y) = H(x) + H(y)](x,y) > H(y)]

    当x、y完全相关时

    [H(x,y) = H(x) = H(y)]

    • 条件信息熵(条件熵)

    两个变量x、y,在给定x情况下,y事件发生的不确定性成为条件信息熵

    [H(y|x) =  - sumlimits_x {sumlimits_y {p(x,y)log (p(y|x))} } ]

    根据条件概率公式可得

    [egin{array}{l}
    H(y|x) = - sumlimits_x {sumlimits_y {p(x,y)log frac{{p(x,y)}}{{p(x)}}} } \
    = - sumlimits_x {sumlimits_y {p(x,y)(log (p(x,y)) - log (p(x)))} } \
    = H(x,y) - H(x)
    end{array}]

    可得x确定情况下的条件信息熵,等于x、y联合的不确定性减去x发生的不确定性

    可知

    [H(y|x) = H(x,y) - H(x) <  = H(x) + H(y) - H(x) = H(y)]

    • 互信息

    互信息定义了事件x确定情况下能给事件y减少的不确定性

    [egin{array}{l}
    I(x;y) = H(y) - H(y|x)\
    = H(y) - (H(x,y) - H(x))\
    = - sumlimits_x {p(x)log (p(x))} - sumlimits_y {p(y)log (p(y))} + sumlimits_x {sumlimits_y {p(x,y)log (p(x,y))} } \
    = - sumlimits_x {sumlimits_y {p(x,y)log frac{{p(x)p(y)}}{{p(x,y)}}} }
    end{array}]

    • 上述概念之间的关系

    理解下图即可

     

    • 交叉信息熵(交叉熵)

    一个变量x,可能有多个取值,每个取值对应一个事件,事件发生的两个概率分布分别为p(x)和q(x),为了衡量p(x)与q(x)的差异,提出交叉熵的概念。一般情况下,假设真实概率分布为p(x),模型估计的非真实概率分布为q(x),则衡量非真实概率分布与真实分布的交叉熵为

     [H(p,q) =  - sumlimits_x {p(x)log (q(x))} ]

    根据Gibbs不等式可知

    [H(p,q) =  - sumlimits_x {p(x)log (q(x))}  >  =  - sumlimits_x {p(x)log (p(x))}  = H(p)]

    当且仅当q(x)==p(x)时,取等号

    因此机器学习模型可以使用交叉熵作为损失函数,损失函数越小,模型预测越接近与真实分布

    • 相对熵(KL散度)

    相对熵等于交叉熵减去信息熵,在交叉熵最小时,相对熵为0

    [D(p||q) = H(p,q) - H(p) = sumlimits_x {p(x)log frac{{p(x)}}{{q(x)}}} ]

    •  TF-IDF

    TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)

    基本思路是:在某一篇文档中,一个词语出现次数越多,越能代表这个文档(的主题);在所有文档中,一个词语出现的次数越多,越不能代表某个文档(的主题)

    TF-IDF的一般计算公式如下,ni代表词语在当前文档中的出现次数,m代表当前文档中所有词语的总出现次数,Di代表词语在所有文档中包含词语i的个数,D代表文档总个数

    [egin{array}{l}
    TF = frac{{{n_i}}}{m}\
    IDF = log frac{D}{{{D_i}}}
    end{array}]

    关于相对熵与TF-IDF的关系,其实是相对熵可以给以上TF-IDF计算公式在某种特定条件下的一个数学解释,从相对熵并不能推导出TF-IDF

    如果对于当前文档,建立模型假设:

    1. 文档中每个词语出现概率完全独立
    2. 每个文档包含相同个数的词语m
    3. 每个文档如果包含某个词语i,则词语i出现的概率相同,即包含相同个数个词语ni

    其实假设本身就存在某种矛盾之处,不同文档包含了不同的词语,但一个词语要么包含ni,要么不包含,还要保证每个文档词语总数相同,那每个词语出现的概率怎么可能独立

    假设上面的假设成立,将所有文档中词语i的分布记为模型估计的分布q(i),将当期文档中词语i的分布记为真实分布p(i),使用相对熵来衡量模型估计分布与真实分布的差距,可得

    [D(p||q) = sumlimits_x {p(i)log frac{{p(i)}}{{q(i)}}}  = sumlimits_x {frac{{{n_i}}}{m}log frac{{{D_i}}}{D}} ]

    可以看到式子右边刚好就是文档中每个词的TF-IDF权重之和

    相对熵越大,说明分布p(i)与q(i)的差距越大,说明当前文档指向性越强,与其他大部分文档差别越大;相对熵越小,说明分布p(i)与q(i)的差距越小,说明当前文档越像是随机按分布q(i)选择词语堆砌成文

    而这正是TF-IDF的初衷,衡量词语对文章指向性的参考价值

    从另一个角度讲,TF代表了词语在当前文档中出现频率,IDF代表了词语在所有文档中出现这个事件的信息量,如果假设:词语对文档指向性的参考价值与词语在当前文档中的出现频率与该词语出现在当前文档中的事件的信息量的乘积,也可以得到TF-IDF的计算公式

    • 结论

    说白了,上述TF-IDF计算公式只是一个比较常用的计算方法而已,通过信息论的相关理论,能够在某种特定情况下,给出这个计算公式的一个数学解释,但在实际使用时,还要看实际情况进行调整,只要满足基本思路——在某一篇文档中,一个词语出现次数越多,越能代表这个文档(的主题);在所有文档中,一个词语出现的次数越多,越不能代表某个文档(的主题)——的算法,都可以尝试,并不一定比一般TF-IDF算法效果差

    参考文献:

    http://www.math345.com/blog/article/17

    http://www.cnblogs.com/frombeijingwithlove/p/5931750.html

    https://www.zhihu.com/question/41252833

    https://en.wikipedia.org/wiki/Gibbs%27_inequality

    http://www.cnblogs.com/weidagang2046/archive/2012/10/22/tf-idf-from-probabilistic-view.html

    https://www.cnblogs.com/ZisZ/p/8567675.html

    https://www.cnblogs.com/ZisZ/p/9083914.html

    https://www.cnblogs.com/ZisZ/p/9087921.html

  • 相关阅读:
    关于使用cocoaPods,import导入时第三方库头文件没有提示问题的解决办法
    在iOS项目中,这样才能完美的修改项目名称
    Mac OS删除文件夹和文件的命令
    mac添加环境变量
    gdb教程
    判断链表是否有环和两个单链表是否相交
    C/C++ 获取文件大小
    exit()与_exit()的区别
    atoi 和 itoa的实现
    new和malloc的区别
  • 原文地址:https://www.cnblogs.com/jhc888007/p/10064408.html
Copyright © 2011-2022 走看看