文章目录
-
- 线性相关
-
- 皮尔逊相关系数(stats.pearsonr)
- 斯皮尔曼相关系数(stats.spearmanr)
- 线性拟合/回归
-
- 最小二乘法(optimize.least_squares)
- R方(sklearn.metrics.r2_score)
-
- 代码实现
- 区别与联系
-
- 区别
线性相关
线性相关分析是描述两变量间直线相关,常用相关系数来描述。
根据数据的分布特性不同可以分为:皮尔逊相关系数(Pearson correlation coefficient )和斯皮尔曼相关系数(Spearman‘s rank correlation coefficient )
皮尔逊相关系数(stats.pearsonr)
适用条件:变量需要满足正态分布
计算表达式:
r
=
∑
(
x
−
m
x
)
(
y
−
m
y
)
∑
(
x
−
m
x
)
2
∑
(
y
−
m
y
)
2
r=\frac{\sum\left(x-m_{x}\right)\left(y-m_{y}\right)}{\sqrt{\sum\left(x-m_{x}\right)^{2} \sum\left(y-m_{y}\right)^{2}}}
r=∑(x−mx)2∑(y−my)2∑(x−mx)(y−my)
pytho代码,两个返回值,分别返回:相关系数和pvalue。pvalue空假设是两变量相关系数为0,pvalue越小越拒绝原假设,故越线性相关
from scipy import stats
a = np.array([0, 0, 0, 1, 1, 1, 1])
b = np.arange(7)
stats.pearsonr(a, b)
- 1
- 2
- 3
- 4
参考
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pearsonr.html#scipy.stats.pearsonr
斯皮尔曼相关系数(stats.spearmanr)
适用条件:非参数估计方法,适用于任何分布的数据
计算表达式与pearson,但是需要注意:分布x和y是排序后的编号(秩),非原始数据。计算示例
from scipy import stats
a = np.array([0, 0, 0, 1, 1, 1, 1])
b = np.arange(7)
stats.spearmanr(a, b)
- 1
- 2
- 3
- 4
线性拟合/回归
定量描述两个变量间依存关系的统计分析方法。
适用条件:
- 两变量变化关系呈线性趋势;
- 每个数据样本之间相互独立;
- X和Y服从正态分布;
求线性回归方程主要依据最小二乘法(least square method)
最小二乘法(optimize.least_squares)
在曲线拟合问题中, 使得剩余平方和(residual sum of squares)
S
S
r
e
s
=
∑
i
(
y
i
−
f
i
)
2
SS_{\mathrm{res}}=\sum_{i}\left(y_{i}-f_{i}\right)^{2}
SSres=∑i(yi−fi)2最小的方法。
当
f
i
f_{i}
fi为线性函数时,称为线性最小二乘问题;对于线性问题,可以直接通过线性方程组求出使得
S
S
r
e
s
SS_{\mathrm{res}}
SSres最小的系数。
当
f
i
f_{i}
fi为非线性函数时,称为非线性最小二乘问题。对非线性问题据需要适用不同的优化算法(梯度下降等)进行求解。
这里注意最小二乘法可以看作是求解回归问题的一个loss值
https://en.wikipedia.org/wiki/Least_squares
python代码实现(optimize.least_squares)
from scipy.optimize import least_squares
#待拟合的表达式, x表示待拟合系数,t自变量,y因变量
def fun(x, t, y):
return x[0] + x[1] * np.exp(x[2] * t) - y
#初始参数
x0 = np.array([1.0, 1.0, 0.0])
res_lsq = least_squares(fun, x0, args=(t_train, y_train))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
res_lsq.x返回待拟合系数
scipy参考
R方(sklearn.metrics.r2_score)
注意并不是相关系数的平方
学术名词,决定系数(Coefficient of determination),一个统计量用来评价模型预测量与观测值的变异(variation)
计算表达式:
R
2
=
1
−
S
S
res
S
S
tot
R^{2}=1-\frac{S S_{\text {res }}}{S S_{\text {tot }}}
R2=1−SStot SSres
式中,剩余平方和
S
S
r
e
s
=
∑
i
(
y
i
−
f
i
)
2
SS_{\mathrm{res}}=\sum_{i}\left(y_{i}-f_{i}\right)^{2}
SSres=∑i(yi−fi)2
总的平方和
S
S
t
o
t
=
∑
(
y
i
−
y
ˉ
)
2
S S_{\mathrm{tot}}=\sum\left(y_{i}-\bar{y}\right)^{2}
SStot=∑(yi−yˉ)2
代码实现
from sklearn.metrics import r2_score
R_square = r2_score(a, b)
- 1
- 2
参考
区别与联系
区别
- 统计意义不同:相关反映两变量间的伴随关系,这种关系
是相互的,对等的
,不一定有因果关系;回归反映两变量间的依存关系(因果或从属关系),有自变量与应变量之分。 - 分析目的不同:相关是把两变量间直线关系的密切程度及方向用统计指标表示出来,回归是把自变量与应变量之间的关系用函数公式定量表达出来。