当两个分布的0值具有特殊物理意义,怎么进行对齐 ?

news/2026/1/19 23:43:04/文章来源:https://www.cnblogs.com/ylifs/p/19504005

通常,当数据的 0值具有特殊物理意义(例如:0表示无反应,正负表示相反的效果)时,我们不能简单地进行全局缩放,因为那可能会导致0点漂移。

需要以 0 为锚点,分别拉伸:

  1. 负半轴部分:将蛋白质的负值最小值(Lower Bound)拉伸至 DNA 的负值最小值。
  2. 正半轴部分:将蛋白质的正值最大值(Upper Bound)拉伸至 DNA 的正值最大值。

这种方法叫 “以零为锚点的分段线性缩放” (Zero-Anchored Segmented Rescaling)

\[x_{new} = \begin{cases} x \times \frac{Min_{DNA}}{Min_{Protein}} & \text{if } x < 0 \\ x \times \frac{Max_{DNA}}{Max_{Protein}} & \text{if } x \ge 0 \end{cases} \]

核心算法逻辑

以下是实现代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np# 假设路径 (请替换为实际路径)
# output_path = 'your_dna_file.parquet'
# input_path = 'your_protein_file.parquet'sns.set_theme(style="whitegrid")
plt.figure(figsize=(12, 7))# ---------------------------------------------------------
# 1. 读取数据
# ---------------------------------------------------------
df_dna = pd.read_parquet(output_path)
df_protein = pd.read_parquet(input_path)# ---------------------------------------------------------
# 2. 计算边界 (Bounds)
# ---------------------------------------------------------
# DNA 的边界
dna_min = df_dna['score'].min()
dna_max = df_dna['score'].max()
# 此时我们需要分别获取 DNA 在 0 轴两侧的极值,用于作为对齐目标
dna_neg_min = df_dna[df_dna['score'] < 0]['score'].min()
dna_pos_max = df_dna[df_dna['score'] >= 0]['score'].max()# Protein 的边界
prot_neg_min = df_protein[df_protein['score'] < 0]['score'].min()
prot_pos_max = df_protein[df_protein['score'] >= 0]['score'].max()print("=== 边界统计 ===")
print(f"DNA     负极值: {dna_neg_min:.4f} | 正极值: {dna_pos_max:.4f}")
print(f"Protein 负极值: {prot_neg_min:.4f} | 正极值: {prot_pos_max:.4f}")# ---------------------------------------------------------
# 3. 分段迁移 (Segmented Transfer)
# ---------------------------------------------------------
# 计算缩放因子 (Scaling Factors)
# 负半轴缩放比例:目标负极值 / 源负极值
scale_neg = dna_neg_min / prot_neg_min if prot_neg_min != 0 else 1.0
# 正半轴缩放比例:目标正极值 / 源正极值
scale_pos = dna_pos_max / prot_pos_max if prot_pos_max != 0 else 1.0print("\n=== 缩放因子 ===")
print(f"负半轴缩放 (x < 0) : {scale_neg:.4f} 倍")
print(f"正半轴缩放 (x >= 0): {scale_pos:.4f} 倍")def apply_segmented_scaling(x):if x < 0:return x * scale_negelse:return x * scale_pos# 应用变换
df_protein['aligned_score'] = df_protein['score'].apply(apply_segmented_scaling)# ---------------------------------------------------------
# 4. 绘图
# ---------------------------------------------------------# 绘制 DNA (Target) - 红色背景
sns.histplot(df_dna['score'], color='tab:red', label='Target: DNA', kde=True, stat="density", alpha=0.2, element="step", linewidth=0
)# 绘制 原始 Protein (Source) - 蓝色背景
sns.histplot(df_protein['score'], color='tab:blue', label='Source: Protein (Original)', kde=True, stat="density", alpha=0.2, element="step", linewidth=0
)# 绘制 迁移后 Protein (Aligned) - 绿色实线
sns.histplot(df_protein['aligned_score'], color='tab:green', label='Transformed: Protein (Bound-Aligned)', kde=True, stat="density", alpha=0.4, element="step", linewidth=1.5, linestyle='-', fill=False # 只画轮廓更清晰
)# ---------------------------------------------------------
# 5. 添加辅助线验证边界对齐
# ---------------------------------------------------------
# 0 点分割线
plt.axvline(0, color='black', linestyle='-', linewidth=1, alpha=0.5, label='Zero Anchor')# 负极值对齐线 (理论上 绿色 和 红色 的左边界应该重合)
plt.axvline(dna_neg_min, color='tab:red', linestyle=':', alpha=0.6, ymax=0.3)
plt.axvline(df_protein['aligned_score'].min(), color='tab:green', linestyle='--', alpha=0.6, ymax=0.3)
plt.text(dna_neg_min, 0.01, ' Neg Boundary', color='black', fontsize=9, ha='right')# 正极值对齐线 (理论上 绿色 和 红色 的右边界应该重合)
plt.axvline(dna_pos_max, color='tab:red', linestyle=':', alpha=0.6, ymax=0.3)
plt.axvline(df_protein['aligned_score'].max(), color='tab:green', linestyle='--', alpha=0.6, ymax=0.3)
plt.text(dna_pos_max, 0.01, 'Pos Boundary ', color='black', fontsize=9, ha='left')plt.title('Segmented Distribution Alignment (Zero-Anchored)', fontsize=16)
plt.xlabel('Score', fontsize=12)
plt.ylabel('Density', fontsize=12)
plt.legend(loc='upper right')plt.show()

这种方法的特点:

  1. 0点绝对不动:这保证了如果你的Score中, 代表正向结合, 代表负向结合,这个性质不会改变。
  2. 边界严格对齐
  • 变换后的绿色分布,其最左端会精确落在红色(DNA)的最左端。
  • 变换后的绿色分布,其最右端会精确落在红色(DNA)的最右端。
  1. 形状保留:它只是在0的两侧分别做了“拉伸”或“压缩”,分布的波峰波谷相对位置不会乱,只是宽度变了。

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

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

相关文章

垃圾有机质燃烧的热值

今天看到一则有意思的新闻,深圳准备开挖一个停用了20多年的生活垃圾填埋区,通过机械将挖出的垃圾进行分类处理,最终得到腐殖土、轻质物以及无机骨料这三种物质,其中腐殖土外运进行无害化处理,无机骨料进行资源化利…

python: 安装python 依赖pip install xxx报错,pip 不是内部或外部命令,也不是可运行的程序

python: 安装python 依赖pip install xxx报错,pip 不是内部或外部命令,也不是可运行的程序查看python版本:python --version 安装pip(查询ai发现 Python 3.4 及以上的版本,应该预装了pip )python -m pip install…

深度学习毕设选题推荐:基于python-CNN卷积神经网络机器学习对不同柑橘病变识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

近视防控:一场需要耐心与坚持的“持久战”!

‍  青少年近视率居高不下的现状&#xff0c;让“近视防控”成为每个家庭都绕不开的重要课题。不同于感冒发烧的“对症治疗”&#xff0c;近视防控既没有一蹴而就的特效药&#xff0c;也没有一劳永逸的解决办法&#xff0c;它更像是一场漫长的马拉松&#xff0c;考验着家长与…

产线上,逐个产品高速数据记录的一个方法

一、前言在离散制造的过程中,生产是间歇的,只需针对产品记录重要生产数据,既产品开始加工时,开始记录,加工完成后停止记录,并进行归档。并不需要像流程行业那样24小时不停地记录数据。比如:在钢管生产中,有一个…

深度学习毕设项目推荐-基于python-深度学习CNN-pytorch卷神经网络训练识别蝴蝶-蚂蚱等昆虫

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

怎么做才能让孩子疯涨的近视度数减缓?

‍  现在很多家长都在为孩子快速加深的近视度数焦虑&#xff0c;看着孩子镜片越来越厚&#xff0c;既担心影响视力&#xff0c;又怕耽误未来发展。其实&#xff0c;减缓孩子近视度数增长不是靠单一方法&#xff0c;而是一套覆盖日常用眼、环境、身体状态的综合方案。接下来&a…

【计算机毕业设计案例】人工智能基于python-CNN卷积神经网络的不同衣服颜色识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

结课综合项目

站点访问:http://192.168.88.128/forum.php?modviewthread&tid1&extra

深度学习毕设项目推荐-基于python-CNN卷积神经网络的不同衣服颜色识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

如何快速构建PLC数据采集系统,为您的设备装一个“黑匣子”?

如果您是一位设备供应商,是否遇到过这样的糟心问题:客户着急火燎地向您报告设备出现了异常,当您派工程师去现场排查时,异常却迟迟无法再现。信任的小船立即倾覆,与客户的关系迅速恶化。实际上,这些偶然发生的异常…

如何让普通人用上Claude Code?国产版Coze Skills 教学来了。。

大家好&#xff0c;我是顾北。大家都知道&#xff0c;2025年初&#xff0c;Anthropic推出了Claude Code&#xff0c;它不仅仅是一个AI编程工具&#xff0c;而是一款智能的Agent超级应用&#xff0c;不但可以写代码、还可以帮你写文章、做PPT、数据分析、数据清理等工作&#xf…

Java语言提供了八种基本类型。六种数字类型【函数大的1】

变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xff0c;可以在内存中储存整…

Linux零基础入门:用户和组管理实战详解

前言 在上一篇文章中,我们学习了Linux用户管理和权限控制的基础概念。本文将深入实战操作,详细讲解用户和组的创建、修改、删除等完整管理流程,以及软链接的基础使用。通过本文的学习,你将能够熟练地进行Linux系统的用户和组管理操作,为后续的系统管理打下坚实基础。 文章目录…

深度学习毕设项目推荐-基于python-CNN卷积神经网络对不同柑橘病变识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

从历史角度理解当前市场状况的重要性

从历史角度理解当前市场状况的重要性 关键词:历史角度、市场状况、经济周期、市场规律、决策依据、风险评估、未来趋势 摘要:本文旨在探讨从历史角度理解当前市场状况的重要性。通过回顾市场发展的历史,我们能够发现经济周期、市场规律等关键要素,这些要素对于准确评估当前…

【毕业设计】基于python-CNN卷积神经网络对不同柑橘病变识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

C++编程从新手到高手的成长之路

我的C学习之旅 我&#xff1a;最近想学C&#xff0c;但是感觉好难啊&#xff01;指针、内存管理、模板… 头都大了&#xff01; C导师&#xff1a;别担心&#xff0c;每个C程序员都经历过这个阶段。让我带你一步步理解C的精髓。想想看&#xff0c;C就像一辆超级跑车——既能像…

计算机深度学习毕设实战-基于python-CNN人工智能卷积神经网络对不同柑橘病变识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Transformer之后,AI编程未来趋势会向哪里发展?AI应用架构师的思考

Transformer之后,AI编程未来趋势会向哪里发展?——AI应用架构师的思考 一、引入:当“代码补全”遇到“系统思维”——AI编程的下一个拐点 小张是某电商公司的资深程序员,最近他的工作发生了微妙的变化:以前写接口需要查文档、调参数,现在只要对着Copilot说“帮我写一个…