🎯要点
🎯算法实现:🖊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 创建秩,
- 按升序对 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
- 根据排序顺序分配秩: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绘图
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实现相关性
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)
输出
Spearman's correlation coefficient: -0.9999999999999999
p-value: 1.4042654220543672e-24