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 

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

相关推荐
cwj&xyp6 分钟前
Python(二)str、list、tuple、dict、set
前端·python·算法
xiaoshiguang34 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡4 小时前
【C语言】判断回文
c语言·学习·算法
别NULL4 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇4 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
yuanbenshidiaos6 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习6 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA6 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
chengooooooo6 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc6 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法