手动计算
def linegress(l_1,l_2): #求两列数据的线性回归参数
import numpy as np
from numpy.linalg import solve
sumx = np.sum(l_1) #x列的和
sumy = np.sum(l_2) #y列的和
n = len(l_1) #数据的个数
sumxy = np.sum(np.array(l_1)*np.array(l_2)) #xy两列的乘积的和
sumx2 = np.sum(np.array(l_1)**2) #x的平方的和
a = np.mat([[sumx,n],[sumx2,sumx]]) #用np.mat传入第一个矩阵
b = np.mat([sumy,sumxy]).T #用np.mat.T传入第二个矩阵
x = solve(a,b) #求出ab
return x #输出
这里得到以下输出结果
matrix([[ 0.88632061], [-89.12267277]])
上面的就是我们手动笔算线性回归参数的时候会得到的结果,a=0.886,b=-89.123
我们把我们得到的ab代入Y=ax+b来计算新的y列,并求出r2
"""計算"""
import numpy as np
x = np.array([171,180,169,173,173,163,168,176,173,174,164,171,172,172,175,163,163,162,167,170,173,170,170,175,170]) #x列
y = np.array([62,71,53,78,59,54,62,60,62,60,50,66,69,63,62,65,53,52,60,67,70,67,56,68,56]