网站链接: element-ui dtcms
当前位置: 首页 > 技术博文  > 技术博文

python 线性相关 与 线性拟合

2021/6/26 22:48:50 人评论

文章目录线性相关皮尔逊相关系数(stats.pearsonr)斯皮尔曼相关系数(stats.spearmanr)线性拟合/回归最小二乘法(optimize.least_squares)R方(R squared)代码实现线性相关 线性相关分析是描述两变量间直线相…

文章目录

    • 线性相关
      • 皮尔逊相关系数(stats.pearsonr)
      • 斯皮尔曼相关系数(stats.spearmanr)
    • 线性拟合/回归
      • 最小二乘法(optimize.least_squares)
      • R方(R squared)
        • 代码实现

线性相关

线性相关分析是描述两变量间直线相关,常用相关系数来描述。
根据数据的分布特性不同可以分为:皮尔逊相关系数(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=(xmx)2(ymy)2 (xmx)(ymy)
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)

参考
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. 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(yifi)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))

res_lsq.x返回待拟合系数

scipy参考

R方(R squared)

注意并不是相关系数的平方
学术名词,决定系数(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=1SStot 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(yifi)2
总的平方和 S S t o t = ∑ ( y i − y ˉ ) 2 S S_{\mathrm{tot}}=\sum\left(y_{i}-\bar{y}\right)^{2} SStot=(yiyˉ)2

代码实现

from sklearn.metrics import r2_score
R_square = r2_score(a, b) 

参考

相关资讯

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?