Python体素化脑信息图混淆矩阵相似性指标评估

13 篇文章 0 订阅
12 篇文章 0 订阅

🎯要点

  1. 使用相似性度量等算法类别学习评估大脑神经相似性。
  2. 使用混淆矩阵分类器评估相似性,使用斯皮尔曼相关性关联相似度矩阵与混淆矩阵。
  3. 特征化体素选择,优化相似性度量矩阵,用分类器近似大脑状态信息。
  4. 将先验分布建模为二项分布,将更新后的分布建模为另一个二项分布,并计算库尔巴克-莱布勒散度
  5. 使用三种分类器:高斯朴素贝叶斯、k最近邻和线性支持向量机。
  6. 使用探照灯视觉检查脑图像欧几里得、马哈拉诺比斯和皮尔逊相关性的测量指标

🍪语言内容分比

在这里插入图片描述

在这里插入图片描述

🍇Python闵可夫斯基距离

闵可夫斯基距离或闵可夫斯基度量是赋范向量空间中的度量,可以看作是欧几里得距离和曼哈顿距离的推广。它以波兰数学家赫尔曼·闵可夫斯基的名字命名。两点之间 p p p 阶闵可夫斯基距离(其中 p p p 为整数)
X = ( x 1 , x 2 , … , x n )  和  Y = ( y 1 , y 2 , … , y n ) ∈ R n X=\left(x_1, x_2, \ldots, x_n\right) \text { 和 } Y=\left(y_1, y_2, \ldots, y_n\right) \in R ^n X=(x1,x2,,xn)  Y=(y1,y2,,yn)Rn
定义为:
D ( X , Y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p ( 1 ) D(X, Y)=\left(\sum_{i=1}^n\left|x_i-y_i\right|^p\right)^{\frac{1}{p}}\qquad(1) D(X,Y)=(i=1nxiyip)p1(1)
对于 p ≥ 1 p \geq 1 p1,闵可夫斯基距离是根据闵可夫斯基不等式得出的度量。当 p < 1 p<1 p<1 时, ( 0 , 0 ) (0,0) (0,0) ( 1 , 1 ) (1,1) (1,1) 之间的距离为 2 1 / p > 2 2^{1 / p}>2 21/p>2,但点 ( 0 , 1 ) (0,1) (0,1) 与这两个点的距离均为 1。由于这违反了三角不等式,因此对于 p < 1 p<1 p<1,它不是度量。但是,只需删除 1 / p 1 / p 1/p 的指数即可获得这些值的度量。得到的度量也是 F 范数。

通常使用闵可夫斯基距离,其中 p p p 为 1 或 2 ,分别对应于曼哈顿距离和欧几里得距离。 在 p p p 趋向无穷大的极限情况下,我们得到切比雪夫距离:
lim ⁡ p → ∞ ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p = max ⁡ i = 1 n ∣ x i − y i ∣ \lim _{p \rightarrow \infty}\left(\sum_{i=1}^n\left|x_i-y_i\right|^p\right)^{\frac{1}{p}}=\max _{i=1}^n\left|x_i-y_i\right| plim(i=1nxiyip)p1=i=1maxnxiyi
类似地,对于 p p p 达到负无穷大,我们有:
lim ⁡ p → − ∞ ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p = min ⁡ i = 1 n ∣ x i − y i ∣ \lim _{p \rightarrow-\infty}\left(\sum_{i=1}^n\left|x_i-y_i\right|^p\right)^{\frac{1}{p}}=\min _{i=1}^n\left|x_i-y_i\right| plim(i=1nxiyip)p1=i=1minnxiyi
闵可夫斯基距离也可以看作是 P P P Q Q Q 之间各分量差异的幂均值的倍数。

Python和C++/C#/Java计算闵可夫斯基距离

给定两个数组 A[] 和 B[] 作为 n 维空间中两个点的位置向量以及一个整数 p,任务是计算这两点之间的闵可夫斯基距离。根据上式(1),假设,输入A[] = {1,2,3,4}, B[] = {5,6,7,8}, P = 3 输出是 6.340,输入A = {1,2,3,4}, B[] = {5,6,7,8} P = 2 ,输出是8。

import math

def minkowski(A, B, P):
	X = 0.0
	for i in range(len(A)):
		X += abs(A[i] - B[i]) ** P
	
	Z = 1.0 / P
	return X ** Z

if __name__ == "__main__":
	A = [1, 2, 3, 4]
	B = [5, 6, 7, 8]
	P = 2.0

	print(minkowski(A, B, P))

C++计算闵可夫斯基距离

#include <bits/stdc++.h>
using namespace std;

double minkowski(const vector<double>& A,
				const vector<double>& B, double P)
{

	double X = 0.0;
	for (size_t i = 0; i < A.size(); ++i) {
		X += pow(abs(A[i] - B[i]), P);
	}
	
	double Z = 1.0 / P;
	return pow(X, Z);
}

int main()
{

	vector<double> A = { 1, 2, 3, 4 };
	vector<double> B = { 5, 6, 7, 8 };
	double P = 2.0;

	cout << minkowski(A, B, P) << endl;
	return 0;
}

C#计算闵可夫斯基距离

using System;
using System.Collections.Generic;

public class Program
{
	static double Minkowski(List<double> A, List<double> B, double P)
	{
		double X = 0.0;
		for (int i = 0; i < A.Count; ++i)
		{
			X += Math.Pow(Math.Abs(A[i] - B[i]), P);
		}
		double Z = 1.0 / P;
		return Math.Pow(X, Z);
	}

	public static void Main()
	{
		List<double> A = new List<double> { 1, 2, 3, 4 };
		List<double> B = new List<double> { 5, 6, 7, 8 };
		double P = 2.0;
		Console.WriteLine(Minkowski(A, B, P));
	}
}

Java计算闵可夫斯基距离

import java.util.ArrayList;
import java.util.List;

public class MinkowskiDistance {

	private static double
	minkowski(List<Double> A, List<Double> B, double P)
	{
		double X = 0.0;
		for (int i = 0; i < A.size(); ++i) {
			X += Math.pow(Math.abs(A.get(i) - B.get(i)), P);
		}
		double Z = 1.0 / P;
		return Math.pow(X, Z);
	}

	public static void main(String[] args)
	{
		List<Double> A = List.of(1.0, 2.0, 3.0, 4.0);
		List<Double> B = List.of(5.0, 6.0, 7.0, 8.0);
		double P = 2.0;
		System.out.println(minkowski(A, B, P));
	}
}

👉参阅、更新:计算思维 | 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值