最大信息系数MIC的python代码
完整代码
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代码相关推荐
- ML之MIC:利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现
ML之MIC:利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现 目录 利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现 实现结果 实现代码 利用某数据集计算 ...
- ML之MIC:利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数、最大信息系数MIC)
ML之MIC:利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数.最大信息系数MIC) 目录 利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数.最大信息系 ...
- 皮尔逊相关系数的计算(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 ...
- 皮尔森相关性系数的计算python代码(一)
部分代码 from math import sqrt import numpy as np import pandas as pddef excel_one_line_to_list():def mu ...
- 最大信息系数(MIC)——大数据时代的相关性分析
在信息爆炸的当今社会,单靠人力已经不能在无穷无尽的数据中有效的捕获信息.数据挖掘这一学科的兴起也预示着在各行业即将展开一场数据革命.在大数据集中识别两个变量的相关关系越来越重要.数据的相关性又分为线性 ...
- 皮尔森相关性系数的计算python代码(四)(热力图版)
部分代码: import numpy import pandas as pd import numpy as np from matplotlib.font_manager import FontPr ...
- 皮尔森相关性系数的计算python代码(三)
部分代码 import os import pandas as pd import numpy as np from scipy.stats import pearsonrdef Pearson(da ...
- 最大信息系数MIC--minepy安装
要计算最大信息系数MIC,需要安装minepy,引用其中的MINE库.但在terminal直接pip install minepy会报错: error in minepy setup command: ...
- 机器学习 特征选择篇——python实现MIC(最大信息系数)计算
机器学习 特征选择篇--python实现MIC(最大信息系数)计算 摘要 python实现代码 计算实例 摘要 MIC(最大信息系数) 可以检测变量之间的非线性相关性,常用于特征工程中的特征选择,即通 ...
最新文章
- outlook2010 打开总是提示“正在加载配置文件”
- CSDN-markdown编辑器
- python创建线程
- MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器
- 2.1Dynamics 365 安装问题——无法访MSCRM_CONFIG数据库
- 顶会VLDB‘22论文解读:CAE-ENSEMBLE算法
- 如何为活动设计海报|优秀案例,分享关键技巧
- git pull git add git commit git branch git更新代码git提交git分支管理
- python各个关键词的意思_想学好Python,你必须了解Python中的35个关键词
- Mac上安装fastboot等工具与烧写images
- 185+日系清新预设调色PS/PR/FCPX/达芬奇/AE/通用LUT文艺森系滤镜(含安装教程)
- Ubuntu下mysql可视化_ubuntu上mysql有可视化界面吗 ubuntu mysql 图形界面
- Linux c/c++开发常用头文件
- python天下无敌表情包_这套打遍天下无敌手的“算我输”表情包 从哪儿蹦出来的?...
- libxml2 not found
- 苹果计算机音频无法使用,苹果电脑没声音了怎么回事
- 手把手教你在好友不知道的情况下,检查哪个微信好友删了你。
- 小米路由器3c 虚拟服务器,小米路由器3C,怎么刷breed啊?可以吗
- React二级路由的实现
- 冷却红外成像的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告