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

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

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

输出结果

image.png

实现代码

 

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

import numpy as np

import matplotlib.pyplot as plt

from minepy import MINE

def 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 ax

def 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)/3

   mysubplot(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.suptitle('Understand the difference of correlation index (Pearson VS MIC)')

plt.show()


相关文章
|
传感器
STM32--TIM定时器(1)
STM32--TIM定时器(1)
658 0
深入探究Camunda监听器
执行监听器与任务监听器
1915 1
深入探究Camunda监听器
|
机器学习/深度学习 算法 数据处理
机器学习入门实战加州房价预测
机器学习入门实战加州房价预测
563 0
|
7月前
|
人工智能 小程序 前端开发
【一步步开发AI运动小程序】十八、如何识别用户上传图片中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】为小程序提供人体、运动及姿态检测的AI能力,本地引擎支持10余种运动,无需后台服务,具备快速、低成本等优势。本文介绍如何通过Canvas方案读取用户上传图片的像素数据,实现人体检测与姿态分析功能,代码简单高效,适合快速集成。更多内容欢迎交流!
|
SQL 存储 NoSQL
SQL和NoSQL数据库的全面比较
不可否认,已有越来越多开发人员愿意使用NoSQL数据库,并且在不断地壮大着其相应的社区。但是,相对于成熟的SQL社区,该领域的专家和顾问可能需要更多的时间,去解决那些未曾被记录的NoSQL问题。
349 0
|
12月前
|
SQL 安全 数据库
Python防止SQL注入攻击的方法
Python防止SQL注入攻击的方法
423 0
回合制对战游戏——python小项目
回合制对战游戏——python小项目
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
|
网络协议 中间件 Linux
SOME/IP概述2【SOME/IP的主要中间件功能+SOME/IP报文PDU的封装】
SOME/IP概述2【SOME/IP的主要中间件功能+SOME/IP报文PDU的封装】
841 115
SOME/IP概述2【SOME/IP的主要中间件功能+SOME/IP报文PDU的封装】
|
开发框架 安全 JavaScript
网络安全-文件上传漏洞的原理、攻击与防御
网络安全-文件上传漏洞的原理、攻击与防御
847 0
网络安全-文件上传漏洞的原理、攻击与防御