最大信息系数(MIC)

article/2025/9/29 16:17:19

童鞋们觉得文章不错,就麻烦点一下下面人工智能的教程链接吧,然后随便翻阅一下

https://www.captainbed.net/qtlyx

 

MIC(Maximal information coefficient)一个很神奇的东西,源自于2011年发在sicence上的一个论文。

学过统计的都知道,有相关系数这么一个东西,通常叫做r。但是其实应该叫做线性相关系数,应用领域还是很窄的。而MIC这个东西呢,首先比较general,不管是什么函数关系,都可以识别,换句话说,正弦函数和双曲线函数和直线,对这个系数而言是一样的。此外还有一点,那就是,如果没有噪音的直线关系和没有噪音的正弦函数关系,他们的MIC都是1,加上相同的噪音之后,如果线性关系的MIC变成0.7了,那么正弦函数关系的MIC也变成0.7,换句话说,噪音对MIC造成的影响与变量之间的函数关系无关。当然这一论证在一篇论文中被反驳了,或者说部分反驳了。

 

为了说明白这个方法,首先引入一个Mutual inforamtion的东西:

 

是这么定义的。这里x和y是两个联系的随机变量,这个系数也可以用来衡量相关性,但是有很多缺点。比如,非均一性。不过这点在后面的论文中被推翻了,或者说,局部推翻。

p(x,y)是联合概率密度分布函数,想想就很难计算对不对,所以我们就要找一个办法来做这个事。怎么办呢?还记得蒙特卡洛么!这里有那么一点思想是这样的。

我们把两个 随机变量化成散点图,然后不断的用小方格子去分割。然后计算每个方格子里面的落入概率。在某种意义上,就可以估计出联合概率密度分布了。当然,只有在数据量是无穷的情况下我们才可以认为是真的就相等了。所以,导致随后是数据量越大,MIC越好。看看第一篇nature文章的名字就知道了,Large Data Sets哦!所以如果只有几百条数据,关网页洗洗睡吧。

最后,MIC就是这么计算的。

分母下面是什么意思呢?我们之前不是对散点图残忍的分割了好多块嘛,在X方向和Y方向上就有很多段了。所以|X|就是X方向共被分成了多少段的意思。Y方向也一样。

前面还有一个限制条件,就是|X||Y|<B,也就是说,所有的方格格总数不能大于B。B又是一个什么鬼呢?很遗憾,作者说,B取数据总量的0.6或者0.55次方。

为什么?

作者表示他不想告诉你。这也没有从数学上推导出来,应该是个经验值了。

说完了,那我们来用一下吧。

装好MIC的python包,然后就可以开心的用了,不过,要注意只支持32bit的python。是不是有点蛋疼呢?所以我不能用我的Anaconda Platform了,有点小小的蛋疼呢。

好了,装python之前要好多依赖包哦,import一下,缺什么装什么吧。

 

import numpy as np
from minepy import MINEdef print_stats(mine):print "MIC", mine.mic()x = np.linspace(0, 1, 1000)
y = np.sin(10 * np.pi * x) + x
mine = MINE(alpha=0.6, c=15)
mine.compute_score(x, y)print "Without noise:"
print_stats(mine)
printnp.random.seed(0)
y +=np.random.uniform(-1, 1, x.shape[0]) # add some noise
mine.compute_score(x, y)print "With noise:"
print_stats(mine)


挺简单的一个例子,分别是没有噪音的正弦和有噪音的正弦。

 

 

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
from minepy import MINEdef mysubplot(x, y, numRows, numCols, plotNum,xlim=(-4, 4), ylim=(-4, 4)):r = np.around(np.corrcoef(x, y)[0, 1], 1)mine = MINE(alpha=0.6, c=15)mine.compute_score(x, y)mic = np.around(mine.mic(), 1)ax = plt.subplot(numRows, numCols, plotNum,xlim=xlim, ylim=ylim)ax.set_title('Pearson r=%.1f\nMIC=%.1f' % (r, mic),fontsize=10)ax.set_frame_on(False)ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)ax.plot(x, y, ',')ax.set_xticks([])ax.set_yticks([])return axdef rotation(xy, t):return np.dot(xy, [[np.cos(t), -np.sin(t)],[np.sin(t), np.cos(t)]])def mvnormal(n=1000):cors = [1.0, 0.8, 0.4, 0.0, -0.4, -0.8, -1.0]for i, cor in enumerate(cors):cov = [[1, cor],[cor, 1]]xy = np.random.multivariate_normal([0, 0], cov, n)mysubplot(xy[:, 0], xy[:, 1], 3, 7, i+1)def rotnormal(n=1000):ts = [0, np.pi/12, np.pi/6, np.pi/4, np.pi/2-np.pi/6,np.pi/2-np.pi/12, np.pi/2]cov = [[1, 1],[1, 1]]xy = np.random.multivariate_normal([0, 0], cov, n)for i, t in enumerate(ts):xy_r = rotation(xy, t)mysubplot(xy_r[:, 0], xy_r[:, 1], 3, 7, i+8)def others(n=1000):x = np.random.uniform(-1, 1, n)y = 4*(x**2-0.5)**2 + np.random.uniform(-1, 1, n)/3mysubplot(x, y, 3, 7, 15, (-1, 1), (-1/3, 1+1/3))y = np.random.uniform(-1, 1, n)xy = np.concatenate((x.reshape(-1, 1), y.reshape(-1, 1)), axis=1)xy = rotation(xy, -np.pi/8)lim = np.sqrt(2+np.sqrt(2)) / np.sqrt(2)mysubplot(xy[:, 0], xy[:, 1], 3, 7, 16, (-lim, lim), (-lim, lim))xy = rotation(xy, -np.pi/8)lim = np.sqrt(2)mysubplot(xy[:, 0], xy[:, 1], 3, 7, 17, (-lim, lim), (-lim, lim))y = 2*x**2 + np.random.uniform(-1, 1, n)mysubplot(x, y, 3, 7, 18, (-1, 1), (-1, 3))y = (x**2 + np.random.uniform(0, 0.5, n)) * \np.array([-1, 1])[np.random.random_integers(0, 1, size=n)]mysubplot(x, y, 3, 7, 19, (-1.5, 1.5), (-1.5, 1.5))y = np.cos(x * np.pi) + np.random.uniform(0, 1/8, n)x = np.sin(x * np.pi) + np.random.uniform(0, 1/8, n)mysubplot(x, y, 3, 7, 20, (-1.5, 1.5), (-1.5, 1.5))xy1 = np.random.multivariate_normal([3, 3], [[1, 0], [0, 1]], int(n/4))xy2 = np.random.multivariate_normal([-3, 3], [[1, 0], [0, 1]], int(n/4))xy3 = np.random.multivariate_normal([-3, -3], [[1, 0], [0, 1]], int(n/4))xy4 = np.random.multivariate_normal([3, -3], [[1, 0], [0, 1]], int(n/4))xy = np.concatenate((xy1, xy2, xy3, xy4), axis=0)mysubplot(xy[:, 0], xy[:, 1], 3, 7, 21, (-7, 7), (-7, 7))plt.figure(facecolor='white')
mvnormal(n=800)
rotnormal(n=200)
others(n=800)
plt.tight_layout()
plt.show()

 

最后的效果就是这样的。很明显可以看到,左下角那个有点像三角函数的关系,Pearson系数(就是线性相关系数)为0,而MIC则有0.8。

MIC的资料:

[1]Detecting novel associationsin large data sets

[2]Equitability Analysis of theMaximal Information Coefficient, with Comparisons
[3]Equitability, mutual information, and themaximal information coefficient
 

童鞋们觉得文章不错,就麻烦点一下下面人工智能的教程链接吧,然后随便翻阅一下

https://www.captainbed.net/qtlyx


http://chatgpt.dhexx.cn/article/htjRW3Q1.shtml

相关文章

麦克风基础参数

麦克风由Microphone读音翻译的&#xff0c;正确的翻译为微音器&#xff0c;或者称拾音器&#xff0c;传声器。我们的咪芯其实就是一只麦克风&#xff0c;只不过属于半成品。给它加网罩&#xff0c;手柄&#xff0c;开关&#xff0c;导线就成了一支完整的麦克风了。 我们生产的…

mic的灵敏度和声音的大小

今天查看麦克风的一些资料&#xff0c;发现这个博客写得很好&#xff0c;不知道这样转载是否可以。 mic的灵敏度和声音的大小 我对于mic的灵敏度一直无法说出其准确定义的表述。我看过mic的sepc上面都是标注的负的多少dB&#xff0c;比如-42dB。所以我一直认为-30dB的mic的灵…

MIC(最大信息系数)

MIC 我在论文使用MIC来衡量两个基因之间的关联程度&#xff0c;线性或非线性关系&#xff0c;相较于Mutual Information&#xff08;MI&#xff09;互信息而言有更高的准确度巴拉巴拉的&#xff0c;按作者的话说总之比其他的方式好。 原文参照&#xff1a; Detecting Novel As…

MIC相关基础知识

一、mic及声音的指标&#xff1a; &#xff08;1&#xff09;声音的分贝&#xff08;dB&#xff09; 分贝 Decibel 分贝&#xff08;dB&#xff09;是一个对数单位&#xff08;logarithmic unit&#xff09;, 它和很多常见的单位如“米”&#xff0c;“秒”或者“千克”等物理单…

MIC - 最大信息系数

MIC 文章目录 MIC前言MIC介绍MIC库Python实例MIC缺陷参考文章 前言 皮尔逊相关系数即我们通常说的(线性)相关系数&#xff0c;是用来反映两个变量线性相关程度的统计量&#xff0c;变化范围为-1到1。 系数的值为1意味着X和Y可以很好的由直线方程来进行描述&#xff0c;所有的…

MIC:最大信息系数

目录 1. 概念 1.1 MIC 1.2 互信息 2. MIC的优点 3. 算法原理 3.1 MIC公式原理 3.2 MIC计算步骤 &#xff08;1&#xff09;计算最大互信息值 &#xff08;2&#xff09;对最大的互信息值进行归一化 &#xff08;3&#xff09;选择不同尺度下互信息的最大值作为MIC值…

MIC 的指标解读

MIC 的指标解读 1.Sensitivity 灵敏度 麦克风是支持以声压信号为输入&#xff0c;最后转换为电信号的传感器。sensitivity是microphone 能够capture的最小声压信号&#xff0c;声压信号的单位为dBSPL.sensitivity 是ratio &#xff0c;是模拟输出电压或者数字输出值对于输入的…

MIC一般参数指标

SNR>68dB&#xff0c; 灵敏度>-34dB&#xff0c;频响范围&#xff1a;/-3dB &#xff08;300Hz-3kHz&#xff09;&#xff1b;失真度&#xff1a;<3% 麦克风的灵敏度高好还是低&#xff0c;要根据你使用的条件来选择。如果声源离麦克风较远&#xff0c;需用灵敏度高的…

Maximal Information Coefficient (MIC)最大互信息系数

MIC 我在论文使用MIC来衡量两个基因之间的关联程度&#xff0c;线性或非线性关系&#xff0c;相较于Mutual Information&#xff08;MI&#xff09;互信息而言有更高的准确度巴拉巴拉的&#xff0c;按作者的话说总之比其他的方式好。 原文参照&#xff1a; Detecting Novel A…

R+树

考虑R树的性能&#xff0c;其中覆盖(coverage)和重叠(overlap)两个概念很重要&#xff0c;因为R树查询是根据给定区域与当前MBR是否有交叉来判断, 因此覆盖和重叠都应当尽量小 覆盖小即MBR要小&#xff0c;最好刚好包围其中的数据点 (对于叶节点)或子MBR (对于非叶节点) 重叠…

R树及其应用场景

地理围栏&#xff08;Geo-fencing&#xff09;是LBS的一种应用&#xff0c;就是用一个虚拟的栅栏围出一个虚拟地理边界&#xff0c;当手机进入、离开某个特定地理区域&#xff0c;或在该区域内活动时&#xff0c;手机可以接收自动通知和警告。如下图所示&#xff0c;假设地图上…

R树与空间索引

B树或者B树可以非常好的处理一维空间存储的问题。B树是一棵平衡树&#xff0c;它是把一维直线分为若干段线段&#xff0c;当我们查找满足某个要求的点的时候&#xff0c;只要去查找它所属的线段即可。依我看来&#xff0c;这种思想其实就是先找一个大的空间&#xff0c;再逐步缩…

R语言学习(三)——决策树分类

分类 分类&#xff08;Classification&#xff09;任务就是通过学习获得一个目标函数&#xff08;Target Function&#xff09;f, 将每个属性集x映射到一个预先定义好的类标号y。 分类任务的输入数据是记录的集合&#xff0c;每条记录也称为实例或者样例。用元组(X,y)表示&am…

空间数据索引RTree(R树)完全解析及Java实现

本文是在https://www.cnblogs.com/cmi-sh-love/p/kong-jian-shud-ju-suo-yinRTree-wan-quan-jie-xi-jiJa.html?share_tokene5b096d7-6dbf-4839-9992-b29913335ba9基础上进行修改和补充的。 第一部分 空间数据的背景介绍 空间数据的建模 基于实体的模型&#xff08;基于对象…

最小生成树:kruskal算法的R语言实现

以如下图为例 library(hash)#需要用到hash包 Nodes<-c("A","B","C","D","E","F","G") #创建存放顶点的向量 edges<- data.frame(startcharacter(),endcharacter(),lengthnumeric(),stringsAsFa…

【转】R树

R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子吧&#xff1a;查找20英里以内所有的餐厅。如果没有R树你会怎么解决&#xff1f;一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中&#xff0c;…

R语言实现决策树

R语言实现决策树 提示&#xff1a;本文使用R语言实现决策树&#xff0c;并对决策树结构图进行美化 文章目录 R语言实现决策树数据介绍一、相关R包的下载二、实现过程1.数据读取2.训练集与验证集划分3.构建决策树并绘制图形4.测试模型 总结 数据介绍 group就是分类结果&#x…

决策树与R语言(RPART)

关于决策树理论方面的介绍&#xff0c;李航的《统计机器学习》第五章有很好的讲解。 传统的ID3和C4.5一般用于分类问题&#xff0c;其中ID3使用信息增益进行特征选择&#xff0c;即递归的选择分类能力最强的特征对数据进行分割&#xff0c;C4.5唯一不同的是使用信息增益比进行…

经典查找算法 --- R树

R树&#xff1a;处理空间存储问题 -->是引用别人的文章 相信经过上面第一节的介绍&#xff0c;你已经对B树或者B树有所了解。这种树可以非常好的处理一维空间存储的问题。B树是一棵平衡树&#xff0c;它是把一维直线分为若干段线段&#xff0c;当我们查找满足某个要求的点的…

R语言︱决策树族——随机森林算法

每每以为攀得众山小&#xff0c;可、每每又切实来到起点&#xff0c;大牛们&#xff0c;缓缓脚步来俺笔记葩分享一下吧&#xff0c;please~ ——————————————————————————— 笔者寄语&#xff1a;有一篇《有监督学习选择深度学习还是随机森林或支持向…