完整代码

import numpy as np
import logging
import sys
import pandas as pdclass CyrusMIC(object):logger = logging.getLogger()logger.setLevel(logging.INFO)screen_handler = logging.StreamHandler(sys.stdout)screen_handler.setLevel(logging.INFO)formatter = logging.Formatter('%(asctime)s - %(module)s.%(funcName)s:%(lineno)d - %(levelname)s - %(message)s')screen_handler.setFormatter(formatter)logger.addHandler(screen_handler)def __init__(self,x_num=[None,None],y_num=[None,None]):self.x_max_num = x_num[1]self.x_min_num = x_num[0]self.y_min_num = y_num[0]self.y_max_num = y_num[1]self.x = Noneself.y = Nonedef cal_mut_info(self,p_matrix):"""计算互信息值:param p_matrix: 变量X和Y的构成的概率矩阵:return: 互信息值"""mut_info = 0p_matrix = np.array(p_matrix)for i in range(p_matrix.shape[0]):for j in range(p_matrix.shape[1]):if p_matrix[i,j] != 0:mut_info += p_matrix[i,j]*np.log2(p_matrix[i,j]/(p_matrix[i,:].sum()*p_matrix[:,j].sum()))self.logger.info("信息系数为:{}".format(mut_info/np.log2(min(p_matrix.shape[0],p_matrix.shape[1]))))return mut_info/np.log2(min(p_matrix.shape[0],p_matrix.shape[1]))def divide_bin(self,x_num,y_num):"""指定在两个变量方向上需划分的网格数,返回概率矩阵:param x_num::param y_num::return: p_matrix"""p_matrix = np.zeros([x_num,y_num])x_bin = np.linspace(self.x.min(),self.x.max()+1,x_num+1)y_bin = np.linspace(self.y.min(),self.y.max()+1,y_num+1)for i in range(x_num):for j in range(y_num):p_matrix[i,j] = sum([1 if (self.x[value] < x_bin[i + 1] and self.x[value] >= x_bin[i] and self.y[value] < y_bin[j + 1] andself.y[value] >= y_bin[j]) else 0 for value in range(self.x.shape[0])])/self.x.shape[0]return p_matrixdef cal_MIC(self,x,y):self.x = np.array(x).reshape((-1,))self.y = np.array(y).reshape((-1,))if not self.x_max_num:self.x_max_num = int(round(self.x.shape[0]**0.3,0))self.y_max_num = self.x_max_numself.x_min_num = 2self.y_min_num = 2mics = []for i in range(self.x_min_num,self.x_max_num+1):for j in range(self.y_min_num,self.x_max_num+1):self.logger.info("划分区间数量为:[{},{}]".format(i,j))mics.append(self.cal_mut_info(self.divide_bin(i,j)))self.logger.info("最大信息系数为:{}".format(max(mics)))return max(mics)if __name__ == '__main__':import matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesfont_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)df = pd.read_excel("xxx.xls")x = df['a']y = df['b']fig = plt.figure(figsize=(5, 5))ax = fig.add_subplot(1, 1, 1)ax.set_title('xxx', fontsize=11, fontstyle='oblique', fontproperties=font_set)ax.set_xlabel('xxx', fontsize=11, fontfamily='sans-serif', fontstyle='italic', fontproperties=font_set)ax.set_ylabel('xxx', fontsize=11, fontstyle='oblique', fontproperties=font_set)plt.scatter(x, y, c='g')mic_tool = CyrusMIC()mic_tool.cal_MIC(x, y)plt.show()

效果展示

最大信息系数MIC的python代码相关推荐

  1. ML之MIC:利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现

    ML之MIC:利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现 目录 利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现 实现结果 实现代码 利用某数据集计算 ...

  2. ML之MIC:利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数、最大信息系数MIC)

    ML之MIC:利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数.最大信息系数MIC) 目录 利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数.最大信息系 ...

  3. 皮尔逊相关系数的计算(python代码版)

    皮尔逊相关系数的计算(python代码版) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 fro ...

  4. 皮尔森相关性系数的计算python代码(一)

    部分代码 from math import sqrt import numpy as np import pandas as pddef excel_one_line_to_list():def mu ...

  5. 最大信息系数(MIC)——大数据时代的相关性分析

    在信息爆炸的当今社会,单靠人力已经不能在无穷无尽的数据中有效的捕获信息.数据挖掘这一学科的兴起也预示着在各行业即将展开一场数据革命.在大数据集中识别两个变量的相关关系越来越重要.数据的相关性又分为线性 ...

  6. 皮尔森相关性系数的计算python代码(四)(热力图版)

    部分代码: import numpy import pandas as pd import numpy as np from matplotlib.font_manager import FontPr ...

  7. 皮尔森相关性系数的计算python代码(三)

    部分代码 import os import pandas as pd import numpy as np from scipy.stats import pearsonrdef Pearson(da ...

  8. 最大信息系数MIC--minepy安装

    要计算最大信息系数MIC,需要安装minepy,引用其中的MINE库.但在terminal直接pip install minepy会报错: error in minepy setup command: ...

  9. 机器学习 特征选择篇——python实现MIC(最大信息系数)计算

    机器学习 特征选择篇--python实现MIC(最大信息系数)计算 摘要 python实现代码 计算实例 摘要 MIC(最大信息系数) 可以检测变量之间的非线性相关性,常用于特征工程中的特征选择,即通 ...

最新文章

  1. outlook2010 打开总是提示“正在加载配置文件”
  2. CSDN-markdown编辑器
  3. python创建线程
  4. MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器
  5. 2.1Dynamics 365 安装问题——无法访MSCRM_CONFIG数据库
  6. 顶会VLDB‘22论文解读:CAE-ENSEMBLE算法
  7. 如何为活动设计海报|优秀案例,分享关键技巧
  8. git pull git add git commit git branch git更新代码git提交git分支管理
  9. python各个关键词的意思_想学好Python,你必须了解Python中的35个关键词
  10. Mac上安装fastboot等工具与烧写images
  11. 185+日系清新预设调色PS/PR/FCPX/达芬奇/AE/通用LUT文艺森系滤镜(含安装教程)
  12. Ubuntu下mysql可视化_ubuntu上mysql有可视化界面吗 ubuntu mysql 图形界面
  13. Linux c/c++开发常用头文件
  14. python天下无敌表情包_这套打遍天下无敌手的“算我输”表情包 从哪儿蹦出来的?...
  15. libxml2 not found
  16. 苹果计算机音频无法使用,苹果电脑没声音了怎么回事
  17. 手把手教你在好友不知道的情况下,检查哪个微信好友删了你。
  18. 小米路由器3c 虚拟服务器,小米路由器3C,怎么刷breed啊?可以吗
  19. React二级路由的实现
  20. 冷却红外成像的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. C# 程序创建word文件与表格
  2. 通过2-3-4树理解红黑树
  3. 每日加瓦,终成栋房5-正则表达式
  4. 企业的考勤管理系统应该具备哪些功能!
  5. Google Earth Engine(GEE)——
  6. linux分区出现hfs,如何在Ubuntu中将HFS分区挂载为读/写?
  7. 免费听好歌曲,音乐下载工具
  8. 【技术类】【ArcGIS对国产卫星的支持2:高分一号卫星】篇9、动态影像服务发布
  9. Docker - Docker Volume及Volume命令详解
  10. 网线的制作方法及步骤