Python(PyTorch)多语言图像感知质量指标算法

🎯要点

🎯算法实现:🖊PyTorch单尺度和多尺度质量指标算法 | 🖊C++单尺度质量指标算法 | 🖊Rust多尺度质量指标算法 | 🖊LabVIEW单尺度质量指标算法 | 🖊MATLAB单尺度质量指标算法 | 🖊PyTorch完整参考图像质量测量指标、和分布式图像特征质量测量指标 | 🖊多尺度质量模型应用:图像压缩,视频压缩、端到端优化图像压缩、神经图像压缩、GPU变速图像压缩

🍪语言内容分比


🍇Python斯皮尔曼秩相关性

斯皮尔曼秩相关性是两个连续变量之间单调关系强度和方向的统计度量。因此,这些属性按其偏好排序或排列。它用符号"rho"(ρ)表示,可以取 -1 到 1 之间的值。rho 的正值表示两个变量之间存在正关系,而 rho 的负值表示负关系。rho 值为 0 表示两个变量之间没有关联。
ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \rho=1-\frac{6 \sum d_i^2}{n\left(n^2-1\right)} ρ=1−n(n2−1)6∑di2

  • ρ = \rho= ρ=斯皮尔曼相关系数
  • 秩 = 变量值相对于数据集中其他值的位置或顺序
  • d i = d _i= di= 每个数据项的两个变量值的排名差异
  • n = 观察总数

创建秩涉及为数据集中的值分配数字顺序,其中最小值的秩为 1,第二小的值的秩为 2,依此类推。
次序 X1 Y1 1 7 5 2 6 4 3 5 5 4 8 10 5 7 7 6 10 9 7 3 2 8 9 8 10 2 1 \begin{array}{|c|c|c|} \hline \text { 次序 } & \text { X1 } & \text { Y1 } \\ \hline 1 & 7 & 5 \\ \hline 2 & 6 & 4 \\ \hline 3 & 5 & 5 \\ \hline 4 & 8 & 10 \\ \hline 5 & 7 & 7 \\ \hline 6 & 10 & 9 \\ \hline 7 & 3 & 2 \\ \hline 8 & 9 & 8 \\ \hline 10 & 2 & 1 \\ \hline \end{array} 次序 1234567810 X1 7658710392 Y1 5451079281

为 X 1 X_1 X1 创建秩,

  1. 按升序对 X 1 X_1 X1 的值进行排序: 2 , 3 , 4 , 5 , 6 , 7 , 7 , 8 , 9 , 10 2,3,4,5,6,7,7,8,9,10 2,3,4,5,6,7,7,8,9,10
  2. 根据排序顺序分配秩:1、2、3、4、5、6.5、6.5、8、9、10。由于有两个并列值(6 和 7),因此分配它们的平均秩 (6.5)。

对 Y 1 Y_1 Y1 进行同样的处理,我们得到:
次序 秩 X 1 秩 Y 1 1 6.5 4.5 2 5 3 3 3 4.5 4 8 10 5 6.5 7 6 10 9 7 2 2 9 9 1 10 1 8 \begin{array}{|c|c|c|} \hline \text { 次序 } & \text { 秩 } X_1 & \text { 秩 } Y_1 \\ \hline 1 & 6.5 & 4.5 \\ \hline 2 & 5 & 3 \\ \hline 3 & 3 & 4.5 \\ \hline 4 & 8 & 10 \\ \hline 5 & 6.5 & 7 \\ \hline 6 & 10 & 9 \\ \hline 7 & 2 & 2 \\ \hline 9 & 9 & 1 \\ \hline 10 & 1 & 8 \\ \hline \end{array} 次序 1234567910 秩 X16.55386.510291 秩 Y14.534.51079218

斯皮尔曼相关计算:

在斯皮尔曼的秩相关中,该过程涉及将原始数据转换为秩。这样做是为了评估两个变量之间的单调关系,而不依赖于数据点的具体数值。

让我们考虑在变量 X 1 X_1 X1 和 Y 1 Y_1 Y1 中获取 10 个不同的数据点。然后按照以下步骤操作:

  • 将值按从小到大的升序排列。
  • 根据每个值在排序顺序中的位置为每个值分配排名。最小值的等级为 1,第二小的值的等级为 2,依此类推。
  • 然后找出每项数据的两个变量值的排名差异的平方。

次序 1 2 3 4 5 6 7 8 9 10 X 1 7 6 4 5 8 7 10 3 9 2 Y 1 5 4 5 6 10 7 9 2 8 1 秩 X 1 6.5 5 3 4 8 6.5 10 2 9 1 秩 Y 1 4.5 3 4.5 6 10 7 9 2 8 1 d 2 4 4 2.25 4 4 0.25 1 0 1 0 \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|} \hline \text { 次序 } & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\ \hline X _1 & 7 & 6 & 4 & 5 & 8 & 7 & 10 & 3 & 9 & 2 \\ \hline Y _1 & 5 & 4 & 5 & 6 & 10 & 7 & 9 & 2 & 8 & 1 \\ \hline \text { 秩 } X_1 & 6.5 & 5 & 3 & 4 & 8 & 6.5 & 10 & 2 & 9 & 1 \\ \hline \text { 秩 } Y_1 & 4.5 & 3 & 4.5 & 6 & 10 & 7 & 9 & 2 & 8 & 1 \\ \hline d^2 & 4 & 4 & 2.25 & 4 & 4 & 0.25 & 1 & 0 & 1 & 0 \\ \hline \end{array} 次序 X1Y1 秩 X1 秩 Y1d21756.54.5426453434534.52.25456464581081046776.570.25710910918322209989811021110

计算 d 2 d^2 d2:

获得秩后,您可以计算秩之间的差异。因此,在这种情况下,第一个数据点的秩差异为 2 ,我们对其进行平方,类似地,我们将 X i X_i Xi 和 Y i Y_i Yi 之间的秩中的第二个数据点的差值设为 2,并将其平方,得到 4。因此,像这样,我们对秩进行差异化,并通过对其进行平方,我们得到了最终的 d 平方值。我们将所有值相加,然后在上述公式中使用该值来计算斯皮尔曼系数。

通过输入 d 2 d^2 d2 和 n n n 值的值
ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) = 1 − 6 ( 4 + 4 + 2.25 + 4 + 4 + 0.25 + 1 + 0 + 1 + 0 ) 10 ( 1 0 2 − 1 ) = 1 − 6 × 20.5 990 = 1 − 123 990 = 1 − 0.12424242424242424 = 0.8757575757575757 ≈ 0.88 \begin{aligned} \rho & =1-\frac{6 \sum d_i^2}{n\left(n^2-1\right)} \\ & =1-\frac{6(4+4+2.25+4+4+0.25+1+0+1+0)}{10\left(10^2-1\right)} \\ & =1-\frac{6 \times 20.5}{990} \\ & =1-\frac{123}{990} \\ & =1-0.12424242424242424 \\ & =0.8757575757575757 \\ & \approx 0.88 \end{aligned} ρ=1−n(n2−1)6∑di2=1−10(102−1)6(4+4+2.25+4+4+0.25+1+0+1+0)=1−9906×20.5=1−990123=1−0.12424242424242424=0.8757575757575757≈0.88

Python绘图

Python 复制代码
import pandas as pd
from scipy.stats import spearmanr
import matplotlib.pyplot as plt

anscombe_data = pd.read_csv(data_url, index_col=0)
subset_data = anscombe_data[['x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']]
fig, axs = plt.subplots(2, 2, figsize=(12, 8))

for i, (x_col, y_col) in enumerate(zip(subset_data.columns[::2], subset_data.columns[1::2])):
	row = i // 2
	col = i % 2

	subset_data.plot.scatter(x=x_col, y=y_col, ax=axs[row, col], title=f'Dataset {i+1}')
	correlation = spearmanr(subset_data[x_col], subset_data[y_col]).correlation
	axs[row, col].text(0.5, 0.9, f'Spearman correlation: {correlation:.2f}',
					ha='center', va='center', transform=axs[row, col].transAxes)

	if correlation > 0:
		axs[row, col].text(0.5, 0.8, 'Positive correlation', ha='center', va='center', transform=axs[row, col].transAxes)
	elif correlation < 0:
		axs[row, col].text(0.5, 0.8, 'Negative correlation', ha='center', va='center', transform=axs[row, col].transAxes)
	else:
		axs[row, col].text(0.5, 0.8, 'No correlation', ha='center', va='center', transform=axs[row, col].transAxes)

	if abs(correlation) > 0.7: 
		axs[row, col].text(0.5, 0.7, 'Linear relationship', ha='center', va='center', transform=axs[row, col].transAxes)
	else:
		axs[row, col].text(0.5, 0.7, 'Non-linear relationship', ha='center', va='center', transform=axs[row, col].transAxes)

plt.tight_layout()
plt.show()

Python实现相关性

Python 复制代码
from scipy.stats import spearmanr

# sample data
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]

# calculate Spearman's correlation coefficient and p-value
corr, pval = spearmanr(x, y)

# print the result
print("Spearman's correlation coefficient:", corr)
print("p-value:", pval)

输出

python 复制代码
Spearman's correlation coefficient: -0.9999999999999999
p-value: 1.4042654220543672e-24 

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

相关推荐
limingade2 小时前
手机实时提取SIM卡打电话的信令和声音-新的篇章(一、可行的方案探讨)
物联网·算法·智能手机·数据分析·信息与通信
jiao000014 小时前
数据结构——队列
c语言·数据结构·算法
迷迭所归处5 小时前
C++ —— 关于vector
开发语言·c++·算法
leon6256 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林6 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z6 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
Aic山鱼6 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
天玑y7 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
sjsjs117 小时前
【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
数据结构·算法·leetcode
redcocal7 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘