题目要求
编写两个函数,第一个函数:求相关系数值的函数;第二个函数:求一元线性回归方程中一次项系数的估计值
代码实现
求相关系数值
def correlation(x, y):
result = np.corrcoef(x, y)[0, 1] #使用numpy自带corrcoef函数进行计算
return result
求一元线性回归方程中一次项系数的估计值
使用polyfit函数
def regression(x, y):
co = np.polyfit(x, y, 1)
sp = co[0] #计算斜率(一次项系数)
itc = co[1] #计算截距
return sp, itc
使用lstsq函数
def regression(x, y):
X = np.vstack([np.ones(len(x)), x]).T
co, _, _, _ = np.linalg.lstsq(X, y, rcond=None) #使用lstsq函数计算最小二乘解
sp = co[1] #计算斜率(一次项系数)
itc = co[0] #计算截距
return sp, itc
完整代码(含测试)
import numpy as np
def correlation(x, y):
result = np.corrcoef(x, y)[0, 1]
return result
def regression(x, y):
co = np.polyfit(x, y, 1)
sp = co[0]
itc = co[1]
return sp, itc
def regression1(x, y):
X = np.vstack([np.ones(len(x)), x]).T
# 使用numpy的lstsq函数计算最小二乘解
co, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
sp = co[1]
itc = co[0]
return sp, itc
# 示例使用
x = np.random.randint(0, 20, size=15) #随机生成15个0-20的数,也可指定参数
y = np.random.randint(0, 20, size=15)
print(x)
print(y)
print(correlation(x, y)) #打印相关系数值
print(regression(x, y)) #打印使用polyfit函数计算的一元线性回归方程估计值
print(regression1(x, y)) #打印使用lstsq函数计算的一元线性回归方程估计值
运行结果
随机数版本
指定参数版本
输入参数
x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 3, 5, 7, 9]) #成强正相关
运行结果
注:计算一元线性回归方程的两种方法的计算值稍有误差,属正常现象,误差大小被计算参数所影响。