当前位置: 首页 > news >正文

Python和C++及MATLAB距离相关性生物医学样本统计量算法及数据科学

🎯要点

  1. 统计观测值之间距离计算
  2. 代谢组学和脂质组学分析
  3. 相关距离矩阵计算
  4. 卡方检验偏差校正
  5. 快速计算距离协方差算法
  6. 大规模生物系统分析
  7. 距离矩阵相关性测试
  8. 石油勘探统计学关系
    在这里插入图片描述

Python距离矩阵

在数学、计算机科学,尤其是图论中,距离矩阵是一个方阵(二维数组),其中包含一组元素之间成对的距离。根据所涉及的应用,用于定义此矩阵的距离可能是也可能不是度量。如果有 N 个元素,则此矩阵的大小为 N×N。在图论应用中,元素通常被称为点、节点或顶点。

一般来说,距离矩阵是某个图的加权邻接矩阵。在网络(即为弧分配权重的有向图)中,网络两个节点之间的距离可以定义为连接两个节点的最短路径上权重之和的最小值(其中路径中的步数是有界的)。[2] 这个距离函数虽然定义明确,但不是度量。除了需要能够组合和比较权重之外,不需要对权重进行任何限制,因此在某些应用中会使用负权重。由于路径是有向的,因此无法保证对称性,并且如果存在负权重循环,距离矩阵可能不是空心的(并且如果没有对步数的限制,矩阵可能未定义)。

上述的代数公式可以通过使用最小加代数来获得。该系统中的矩阵乘法定义如下:给定两个 n × n n \times n n×n 矩阵 A = ( a i j ) A=\left(a_{i j}\right) A=(aij) B = ( b i j ) B=\left(b_{i j}\right) B=(bij),它们距离积 C = ( c i j ) = A ⋆ B C=\left(c_{i j}\right)=A \star B C=(cij)=AB 定义为 n × n n \times n n×n 矩阵,使得
c i j = min ⁡ k = 1 n { a i k + b k j } c_{i j}=\min _{k=1}^n\left\{a_{i k}+b_{k j}\right\} cij=k=1minn{aik+bkj}
请注意,非直接连接的对角线元素需要设置为无穷大或合适的大值,以使 min-plus 操作正常工作。这些位置的零将被错误地解释为没有距离、成本等的边。

Python示例说明如何对距离矩阵进行排序,以便最终(分层)集群是明显的。

import numpy as np
from scipy.spatial.distance import pdist, squareform
from sklearn import datasets
import matplotlib.pyplot as plt
iris = datasets.load_iris()
iris.data.shape
(150, 4)

该数据集包含 R^4 中的 150 个点(由 4 个特征描述的 150 朵花)。使用 pdist 我们可以计算一个 150 x 150 的距离矩阵,如下所示。

dist_mat = squareform(pdist(iris.data))N = len(iris.data)
plt.pcolormesh(dist_mat)
plt.colorbar()
plt.xlim([0,N])
plt.ylim([0,N])
plt.show()

我们可以看到有 3 个明显的簇:一个相当密集(左下)并且距离其他两个簇很远,另外两个非常接近,但与第三个簇(左下)的距离不同。

这些聚类对应于可以在 iris.target 中找到的 3 个类:一个是线性可分的(下面的 0 类,对应于距离矩阵中左下方的聚类),另外两个不是线性可分的(类 1 和 2,对应于最右边的两个聚类)。

iris.target
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

为了展示所提出的相异矩阵排序方法的有用性,我们对数据点应用随机排列。这是相关的,因为数据点通常以任意顺序提供并且通常没有任何标签。

X = iris.data[np.random.permutation(N),:]dist_mat = squareform(pdist(X))plt.pcolormesh(dist_mat)
plt.xlim([0,N])
plt.ylim([0,N])
plt.show()

在该过程结束时,所有点都根据树状图施加的顺序进行排序。

def seriation(Z,N,cur_index):if cur_index < N:return [cur_index]else:left = int(Z[cur_index-N,0])right = int(Z[cur_index-N,1])return (seriation(Z,N,left) + seriation(Z,N,right))def compute_serial_matrix(dist_mat,method="ward"):N = len(dist_mat)flat_dist_mat = squareform(dist_mat)res_linkage = linkage(flat_dist_mat, method=method,preserve_input=True)res_order = seriation(res_linkage, N, N + N-2)seriated_dist = np.zeros((N,N))a,b = np.triu_indices(N,k=1)seriated_dist[a,b] = dist_mat[ [res_order[i] for i in a], [res_order[j] for j in b]]seriated_dist[b,a] = seriated_dist[a,b]return seriated_dist, res_order, res_linkage

👉更新:亚图跨际

http://www.lryc.cn/news/450289.html

相关文章:

  • 【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
  • golang学习笔记20-面向对象(二):方法与结构体【重要】
  • 广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
  • cas5.3统一登录前后端分离改造方案(源码)
  • 【ComfyUI】控制光照节点——ComfyUI-IC-Light-Native
  • LVS+keepalived整合负载均衡配置
  • Goland无法使用debug的修复
  • MySQL和Doris开窗函数LAG执行时的区别
  • 都是小憨憨!
  • 高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?
  • ICML 2024 论文分享┆一个简单且通用的交通预测提示调优框架
  • 【C++打怪之路Lv4】-- 类和对象(中)
  • 滚雪球学MySQL[1.1讲]:MySQL简介与环境配置
  • Llama微调以及Ollama部署
  • 中关村环球时尚产业联盟 东晟时尚产业创新中心成立
  • 基于SSM的宠物领养管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)
  • 为什么要配置环境变量?
  • 条件熵公式详细解释、举例说明计算步骤
  • 颍川陈氏始祖陈寔逆势崛起的原由(一)不屈的努力
  • golang小项目1-家庭收支记账系统
  • Visual Studio Code下载安装及汉化
  • MySQL—触发器详解
  • 钉钉H5微应用Springboot+Vue开发分享
  • 项目:微服务即时通讯系统客户端(基于C++QT)]四,中间界面搭建和逻辑准备
  • 【C语言】指针详解(一)
  • unity3D雨雪等粒子特效不穿透房屋效果实现(粒子不穿透模型)
  • ROS2安装cartographer
  • kafka测试
  • 总结C/C++中内存区域划分
  • 第168天:应急响应-ELK 日志分析系统Yara规则样本识别特征提取规则编写