在百度中搜索 “如何度量两个实数变量之间的相关性?” 可得到如下链接:
https://jingyan.baidu.com/article/fd8044facdc8d25030137a44.html. 可见相关性分析已经有一些成熟的方法. 本贴不考虑这些方法, 而是从我的已有知识来进行模型的构建.
1. 相关性度量
令输入为
X
=
[
x
i
j
]
n
×
m
∈
R
n
×
m
\mathbf{X} = [x_{ij}]_{n \times m} \in \mathbb{R}^{n \times m}
X=[xij]n×m∈Rn×m, 输出为
Y
=
[
y
1
,
y
2
,
…
,
y
n
]
\mathbf{Y} = [y_1, y_2, \dots, y_n]
Y=[y1,y2,…,yn], 其中
n
n
n 为对象数,
m
m
m 为属性数. 将输入属性记为变量
x
i
x_i
xi (
1
≤
i
≤
m
1 \le i \le m
1≤i≤m), 输出属性记为变量
y
y
y. 不失一般性, 令
Y
^
=
[
y
^
1
,
y
^
2
,
…
,
y
^
n
]
\hat{\mathbf{Y}} = [\hat{y}_1, \hat{y}_2, \dots, \hat{y}_n]
Y^=[y^1,y^2,…,y^n] 为根据
X
\mathbf{X}
X 对
Y
\mathbf{Y}
Y 的预测, 预测函数可记为
y
=
f
(
x
1
,
x
2
,
…
,
x
m
)
(1)
y = f(x_1, x_2, \dots, x_m) \tag{1}
y=f(x1,x2,…,xm)(1)
即
y
^
i
=
f
(
x
i
)
=
f
(
x
i
1
,
x
i
2
,
…
,
x
i
m
)
(2)
\hat{y}_i = f(\mathbf{x}_i) = f(x_{i1}, x_{i2}, \dots, x_{im}) \tag{2}
y^i=f(xi)=f(xi1,xi2,…,xim)(2)
则变量集合
A
=
{
x
1
,
x
2
,
…
,
x
m
}
\mathbf{A} = \{x_1, x_2, \dots, x_m\}
A={x1,x2,…,xm} 在预测函数
f
f
f 下与
y
y
y 的相关性定义为
p
p
p-范数
c
o
r
(
A
,
y
)
=
∥
Y
^
−
Y
∥
p
cor(\mathbf{A}, y) = \|\hat{\mathbf{Y}} - \mathbf{Y}\|_p
cor(A,y)=∥Y^−Y∥p
其中
p
p
p 一般取 1 或者 2. 该范数越小, 表示相关性越高.
2. 基于单变量的泛化线性回归
如果只想观察单个变量 x ∈ A x \in \mathbf{A} x∈A 与 y y y 的相关性, 可使用不同的预测模型.
- 考虑基本线性假设
y
=
a
x
+
b
(3)
y = ax + b \tag{3}
y=ax+b(3)
重新构建输入矩阵
X
=
[
x
i
j
]
n
×
2
\mathbf{X} = [x_{ij}]_{n \times 2}
X=[xij]n×2, 其中
x
i
1
≡
1
x_{i1} \equiv 1
xi1≡1,
x
i
2
x_{i2}
xi2 变量
x
x
x 在第
i
i
i 个对象上的值. 令权重向量为
w
=
[
w
1
,
w
2
]
\mathbf{w} = [w_1, w_2]
w=[w1,w2]. 利用线性回归模型易知
w
=
(
X
T
X
)
−
1
X
T
Y
(3)
\mathbf{w} = (\mathbf{X}^{\mathrm{T}}\mathbf{X})^{-1}\mathbf{X}^{\mathrm{T}}\mathbf{Y} \tag{3}
w=(XTX)−1XTY(3)
用它来计算
Y
^
\hat{\mathbf{Y}}
Y^ 即可.
- 考虑二次曲线假设
y
=
a
x
2
+
b
x
+
c
(4)
y = ax ^2 + bx + c \tag{4}
y=ax2+bx+c(4)
重新构建输入矩阵
X
=
[
x
i
j
]
n
×
2
\mathbf{X} = [x_{ij}]_{n \times 2}
X=[xij]n×2, 其中
x
i
1
≡
1
x_{i1} \equiv 1
xi1≡1,
x
i
2
x_{i2}
xi2 为变量
x
x
x 在第
i
i
i 个对象上的值,
x
i
3
=
x
i
2
2
x_{i3} = x_{i2}^2
xi3=xi22. 仍然使用线性回归模型求解
w
\mathbf{w}
w 并计算
Y
^
\hat{\mathbf{Y}}
Y^.
- 考虑其它假设
其它假设如自然对数可按类似方法求解, 即仅需要重构
X
\mathbf{X}
X.
由于在线性回归的基础上可加入其它函数假设, 我将其称为 “泛化线性回归”.
- 说明
- 由于仅仅是两个变量之间的相关性, 可在二维平面上画出散列点, 分析规律后选择合适的模型假设.
- 纯线性的最为常用, 其它方法中, 不建议考虑三次曲线等.
- 如果仅仅是想对变量进行排序, 用这些方法就可以了.
3. 多变量的处理
如果想获得更好的拟合, 可使用多变量. 当变量比较少的情况下, 可穷举所有的组合, 然后用线性回归. 如果变量较多, 只能用启发式方法:
Step 1. 计算各变量的相关性, 并令
x
′
=
arg min
x
i
∈
A
c
o
r
(
{
x
i
}
,
y
)
,
B
=
{
x
′
}
;
x' = \argmin_{x_i \in \mathbf{A}} cor(\{x_i\}, y), \mathbf{B} = \{x'\};
x′=xi∈Aargmincor({xi},y),B={x′};
Step 2. 令
x
′
=
arg min
x
i
∈
A
∖
B
c
o
r
(
B
∪
{
x
i
}
,
y
)
;
x' = \argmin_{x_i \in \mathbf{A} \setminus \mathbf{B}} cor(\mathbf{B} \cup \{x_i\}, y);
x′=xi∈A∖Bargmincor(B∪{xi},y);
Step 3. if (
c
o
r
(
B
∪
{
x
′
}
,
y
)
<
c
o
r
(
B
,
y
)
)
cor(\mathbf{B} \cup \{x'\}, y) < cor(\mathbf{B}, y))
cor(B∪{x′},y)<cor(B,y)) then
B
←
B
∪
{
x
′
}
\mathbf{B} \leftarrow \mathbf{B} \cup \{x'\}
B←B∪{x′};
goto Step 2;
else return
B
\mathbf{B}
B;
说明: Step 3 的判断, 也可以要求相关性之间的差值不小于某个阈值.
4. 其它
- 可以考虑离群点移除, 以获得泛化性更佳的拟合. 可采用自步学习等方法. 这时候需要对回归方法、评价指标均作相应修改, 即仅计算离群点移除后的结果.
- 不建议使用正则项. 有效性仅需要在训练集上验证即可, 不需要测试集.
5. 权威方法
咨询超哥后获得权威方法.
Pearson 相关系数定义为:
ρ
(
X
,
Y
)
=
c
o
v
(
X
,
Y
)
σ
X
σ
Y
=
E
(
(
X
−
μ
X
)
(
Y
−
μ
Y
)
)
σ
X
σ
Y
\rho(X, Y) = \frac{cov(X, Y)}{\sigma_X \sigma_Y} = \frac{E((X - \mu_X) (Y - \mu_Y))}{\sigma_X \sigma_Y}
ρ(X,Y)=σXσYcov(X,Y)=σXσYE((X−μX)(Y−μY))
−
1
-1
−1 表示完全不相关,
+
1
+1
+1 表示完全相关.