共计 1598 个字符,预计需要花费 4 分钟才能阅读完成。
上一篇使用卡方系数进行特征选择,使用的是假设检验的思路,这篇文章使用最大信息系数的方法进行计算。
为什么要使用mic?
MIC的优越性
根据MIC的性质,MIC具有普适性、公平性和对称性。所谓普适性,是指在样本量足够大(包含了样本的大部分信息)时,能够捕获各种各样的有趣的关联,而不限定于特定的函数类型(如线性函数、指数函数或周期函数),或者说能均衡覆盖所有的函数关系。一般变量之间的复杂关系不仅仅是通过单独一个函数就能够建模的,而是需要叠加函数来表现。所谓公平性,是指在样本量足够大时能为不同类型单噪声程度相似的相关关系给出相近的系数。例如,对于一个充满相同噪声的线性关系和一个正弦关系,一个好的评价算法应该给出相同或相近的相关系数。
MIC与具有代表性的六种相关性评价算法的普适性对比如下图所示,可以看出MIC不仅可以检测出线性关系,还能够检测出各种非线性关系,并且只要两个变量不独立,它们的MIC系数均为1;而其他评价方法或者只适合检测线性关系,或者没有标准化,或者无法检测出正弦关系、周期性关系等。如果采用没有普适性的算法进行相关性挖掘,那么结果就不是完备的,会令人漏掉许多有用的关联关系。
MIC与几种相关性评价算法的公平性对比见下图。图中横坐标代表噪声程度从0增长到1,纵坐标代表相关系数的大小,图中共有27种不同颜色的散点曲线代表不同的函数关系。从图A可以看出,随着噪声程度的增加,不同相关关系的MIC系数都是均匀降低,MIC可以为不同类型单噪声程度相似的相关关系给出相近的系数。图B-E分别是spearman系数、基于互信息的kraskov系数、最大相关系数、CorGC系数的公平性检测。可以看到,随着噪声程度的增加,这些方法对某些函数关系表现出的健壮性不一致。在大数据相关性挖掘中,数据难免会有噪声和异常点,如果没有良好的公平性,挖掘出的结果也就不再准确并且难以令人信服。利用MIC,可以大大减少数据清洗的麻烦,只要有足够的数据量可以代表总体信息,就可以直接用MIC计算分析。MIC算法与其它算法的优劣对比:
mic基本原理
mic基本原理会利用到互信息概念,互信息的概念使用以下方程来说明:
I(x;y)=\int p(x,y) log_2 \frac{p(x,y)}{p(x)p(y)}\mathrm{d}x\mathrm{d}y
一般情况下联合概率计算相对来说比较麻烦,要是不记得联合概率可以去这里看看:联合概率
mic的想法是针对两个变量之间的关系离散在二维空间中,并且使用散点图来表示,将当前二维空间在x,y方向分别划分为一定的区间数,然后查看当前的散点在各个方格中落入的情况,这就是联合概率的计算,这样就解决了在互信息中的联合概率难求的问题。下面的公式给出mic的计算公式:
mic(x;y)=\max_{a*b<B}\frac{I(x;y)}{log_2\min(a,b)}
上式中a,b是在x,y方向上的划分格子的个数,本质上就是网格分布,B是变量,在原作者的论文当中提到B的大小设置是数据量的0.6次方左右。
sklearn函数剖析
from minepy import MINE
from numpy import array
def mic(x, y):
m = MINE()
m.compute_score(x, y)
return (m.mic(), 0.5)
#选择K个最好的特征,返回特征选择后的数据
SelectKBest(lambda X, Y: tuple(map(tuple,array(list(map(lambda x:mic(x, Y), X.T))).T)), k=2).fit_transform(irisdata.data, irisdata.target)
输出结果
array([[ 1.4, 0.2],
[ 1.4, 0.2],
[ 1.3, 0.2],
[ 1.5, 0.2],
[ 1.4, 0.2],
[ 1.7, 0.4],
站长你好,该文图片已失效,望修复,力挺!https://www.deeplearn.me/1466.html
@卧槽熊孩子 谢谢指出,今天会修复
@卧槽熊孩子 已更新