一种可以识别局部单调的系数

记录一种可以识别局部单调的系数
在这里插入图片描述
pearson和kendall等系数再识别单调的时候,更多是关注整体情况,很多时候,变量和因变量之间非简单的单调关系,局部单调ξ识别

假设我们正在测量变量X和Y之间的关系。传统的相关性测量方法通常假定X与Y之间的关系是线性的,即X和Y之间的相关性是对称的。然而,新方法的目标是测量Y作为X的函数的程度,因此ξ(X, Y)不一定等于ξ(Y, X)。
为了计算ξ,我们首先需要对数据进行排序,使得X的值按从小到大的顺序排列。然后,我们需要计算Y值的秩。根据数据中是否存在重复值,我们有两种不同的公式:
如果数据中不存在重复值
在这里插入图片描述
如果存在重复值:
在这里插入图片描述

代码实现:

import numpy as np
import randomdef xicor(X, Y, ties=True):"""ties是否存在相同值,如果存在则为True"""n = len(X)order = np.array([i[0] for i in sorted(enumerate(X), key=lambda x: x[1])])if ties:l = np.array([sum(y >= Y[order]) for y in Y[order]])r = l.copy()for j in range(n):if sum([r[j] == r[i] for i in range(n)]) > 1:tie_index = np.array([r[j] == r[i] for i in range(n)])r[tie_index] = random.sample(list(r[tie_index] - np.arange(0, sum(tie_index))), sum(tie_index))return 1 - n * np.sum(np.abs(r[1:] - r[:n-1])) / (2 * np.sum(l * (n - l)))else:r = np.array([sum(y >= Y[order]) for y in Y[order]])return 1 - 3 * np.sum(np.abs(r[1:] - r[:n-1])) / (n**2 - 1)# pyspark实现
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, rank, abs as spark_abs, sum as spark_sum, lit, monotonically_increasing_id
from pyspark.sql.window import Window# 初始化 SparkSession
spark = SparkSession.builder.appName("XiCorrelation").getOrCreate()# 样本数据
data = [(1, 0), (2, 0), (3, 1), (4, 1), (5, 1), (6, 0), (7, 0), (8, 1), (9, 1), (10, 0)]
columns = ["X", "Y"]
df = spark.createDataFrame(data, columns)# 计算 Xi 相关系数函数
def xicor(df, x_col, y_col, ties=True):n = df.count()# 排序和排名window = Window.orderBy(x_col)df = df.withColumn("rank", rank().over(window))if ties:# 处理 ties 的情况order = Window.orderBy(monotonically_increasing_id())df = df.withColumn("order_id", rank().over(order))df = df.withColumn("rank_Y", rank().over(Window.orderBy(y_col)))df = df.withColumn("l", spark_sum(col("rank_Y")).over(Window.partitionBy("rank_Y").orderBy("order_id")))def tie_adjustment(df, l_col):df = df.withColumn("r", col(l_col))for i in range(n):count = df.filter(col("r") == i).count()if count > 1:indices = df.filter(col("r") == i).select("order_id").rdd.flatMap(lambda x: x).collect()adjustments = np.random.permutation(np.arange(count))for j, idx in enumerate(indices):df = df.withColumn("r", when(col("order_id") == idx, col("r") - adjustments[j]).otherwise(col("r")))return dfdf = tie_adjustment(df, "l")else:# 不处理 ties 的情况df = df.withColumn("r", rank().over(Window.orderBy(y_col)))df = df.withColumn("diff", spark_abs(col("r") - col("rank")))if ties:xi = 1 - n * df.select(spark_sum(col("diff"))).first()[0] / (2 * df.select(spark_sum(col("l") * (n - col("l")))).first()[0])else:xi = 1 - 3 * df.select(spark_sum(col("diff"))).first()[0] / (n**2 - 1)return xi

需要注意的是这个系数本质上还是去识别单调,比pearson之类的提升也仅限于局部单调的识别。
如果一个数据是对于特定区间内存在聚集现象的二值化数据,
相关系数可能无法有效识别这种关系.

主要来源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go - 3.库源码文件

目录 一.引言 二.库源码文件 1.定义 2.生成库源码文件 3.直接调用库源码文件 三.总结 一.引言 前面我们学习了 命令源码文件,并成功运行了 go 的 hello world 代码,下面我们介绍 go 里面另一个概念: 库源码文件。 二.库源码文件 1.定义 库源码文…

一看就会!Win11文件资源管理器的打开方法!

在Win11电脑操作中,用户可以借助文件资源管理器轻松管理文件或文件夹。但是,许多新手用户不知道要怎么操作才能顺利打开文件资源管理器?接下来小编给大家介绍五种简单快速的打开Win11系统文件资源管理器的方法。 方法 1:WindowsE …

企业邮箱大附件无法上传?无法确认接收状态?这样解决就行

Outlook邮箱作为最常用的邮箱系统,被全世界企业采用作为内部通用沟通方式,但Outlook邮箱却有着明显的使用缺陷,如邮箱大附件上传障碍及附件接收无提示等。 1、企业邮箱大附件无法上传 Outlook企业邮箱大附件的上传上限一般是50M,…

SpringSecurity6从入门到实战之自定义登录页面

SpringSecurity6从入门到实战之自定义登录页面 在使用SpringSecurity进行认证操作的时候,可以发现默认提供的登录页面比较简陋.那么我们能否对登录页面进行自定义配置呢?接下来开始讲解应该如何进行配置 自定义登录页面流程 引入模板依赖 由于自定义登录页面会使用到前端相关…

测试单选框

单选按钮:用于在一组互相排斥的选项中选择其中一项; 由一个圆圈和紧随其后的文本标题组成,当它被选中时,圆圈中就标上一个黑点。 通常将一组单选按钮放在一个组框控件中,在一组单选按钮中,第一个(Tab键顺序…

【Linux】版本

文章目录 linux版本1、linxu技术版本(内核版本)2、linux商业化版本(发行版本) 区别 linux版本 1、linxu技术版本(内核版本) 内核:提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程…

PyTorch与TensorFlow模型互转指南

在深度学习的领域中,PyTorch和TensorFlow是两大广泛使用的框架。每个框架都有其独特的优势和特性,因此在不同的项目中选择使用哪一个框架可能会有所不同。然而,有时我们可能需要在这两个框架之间进行模型的转换,以便于在不同的环境…

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些,相比文科说理工科的院校也更多,如何选择适合自己的专业,这是一个比较重要的课题,毕竟大学专业直接关系到职业,是一辈子的大事。 那么理科究竟如何选择专业呢?需要从什么地方…

RPC框架知识学习

RPC框架介绍 RPC(Remote Procedure Call,远程过程调用)框架是一种允许程序调用位于另一台计算机上的程序的技术。这种调用看起来就像是调用本地程序一样,但实际上是通过网络进行的。RPC框架使得分布式系统的开发变得更加简单&…

【VUE3学习手札】

VUE3学习手札 vue3成长之路学习笔记 文章目录 VUE3学习手札前言一、markRaw1.1 代码示例1.2 应用场景1.3 拓展(toRaw)1.4 实际应用 二、ref 和 reactive 前言 主要用于自己的一个备忘,对知识点的查缺补漏 一、markRaw 将一个对象标记为不可被…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 02:设计并使用断言

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字,英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

JeecgFlow排他网关演示

排他网关概念理解 排他网关,也称为异或(XOR)网关,用于流程中实现分支决策建模。排他网关需要搭配条件顺序流使用。 当流程流转到排他网关时,所有流程顺序流都是会顺序求解, 其中第一条条件为true的顺序流会被选中(当有多条顺序流都…

澳汰尔(Altair)3D 打印部件设计仿真——打造高效的增材制造设计

借助 Inspire Print3D,可加速创新、结构高效的 3D 打印部件的创建、优化和研究,提供快速准确的工具集,可用于实现选择性激光熔融 (SLM) 部件的设计和过程仿真。 工程师可以快速了解影响可制造性的工艺或设计变更,然后将部件和支撑…

SoC设计更重要的是IP管理

对于大多数片上系统(SoC)设计来说,最关键的任务不是RTL编码,甚至不是创建芯片架构。今天,SoC的设计主要使用来自多个供应商的各种IP块。这使得管理硅IP成为SoC设计过程中的主要任务。 一般来说,新编写的RTL…

Swift Combine — JUST Publisher

之前文章介绍的Publisher都是可以连续发送数据的,Subscriber也可以一直接收数据,除非收到了finished或者error而结束。而JUST Publisher则不同,它只向每个订阅者发送一次输出,然后结束。 一起来看一下下面的代码。 class JustVi…

从0到1:手动测试迈向自动化——手机web应用的自动化测试工具

引言: 在当今移动互联网时代,手机web应用已经成为人们生活中不可或缺的一部分。为了保证手机web应用的质量和稳定性,自动化测试工具变得十分重要。本文将介绍手机web应用自动化测试工具的选择和使用,提供一份超详细且规范的指南&a…

GPT3.5的PPO目标函数怎么来的:From PPO to PPO-ptx

给定当前优化的大模型 π \pi π,以及SFT模型 π S F T \pi_{SFT} πSFT​ 原始优化目标为: max ⁡ E ( s , a ) ∼ R L [ π ( s , a ) π S F T ( s , a ) A π S F T ( s , a ) ] \max E_{(s,a)\sim RL}[\frac{\pi(s,a)}{\pi_{SFT}(s,a)}A^{\pi_{SFT}}(s,a)] m…

重构大学数学基础_week05_雅各比矩阵与雅各比行列式

这周来讲一下雅各比矩阵和雅各比行列式。 多元函数的局部线性属性 首先我们来回顾一下向量函数,就是我们输入一个向量,输出也是一个向量,我们假设现在有一个向量函数 这个函数意思就是在说,我们在原来的平面上有一个向量(x,y),经…

美团Meitu前端一面,期望27K

面经哥只做互联网社招面试经历分享,关注我,每日推送精选面经,面试前,先找面经哥 1、做的主要是什么项目,桌面端的吗? 2、用的主要是什么技术栈?vue有了解吗? 3、移动端开发一般怎么…

使用Ventoy制作U盘启动安装系统

简介 Ventoy是一个制作可启动U盘的开源工具。 无需反复地格式化U盘。你只要制作一次U盘启动盘,后面你只需要把 ISO/WIM/IMG/VHD(x)/EFI 等类型的系统镜像文件直接拷贝到U盘里面就可以启动了,无需其他操作。可以一次性拷贝很多个不同类型的镜像文件&…