最小二乘法计算一组数据的斜率(线性回归、趋势计算)

在这里插入图片描述
在这里插入图片描述

def compute_trend(*y):
    """
    计算数据的趋势(线性回归求斜率,最小二乘法),https://blog.csdn.net/qq_45607873/article/details/109425736
    :return:
    """
    x = np.arange(len(y[0])) + 1  # 横轴
    y = np.array(y)  # 纵轴
    xymean = np.mean(np.multiply(x, y), axis=1)  # axis=0是batch
    xmeany = np.mean(x) * np.mean(y, axis=1)
    x2mean = np.square(x).mean()
    xmean2 = x.mean()**2
    trend = (xymean-xmeany)/(x2mean - xmean2)
    return trend
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,可以使用最小二乘法线性回归方程。最小二乘法是一种通过最小化观测数据的预测值与真实值之间的差异来确定最佳拟合直线的方法。 在C语言中,可以通过以下步骤来实现最小二乘法线性回归方程: 1. 创建一个函数来计算最小二乘法的拟合直线的斜率w和截距b。 2. 在该函数中,首先计算相关的统计量,如x和y的均值和方差。 3. 然后,计算回归系数w和b的估计值。回归系数w的估计值可以通过以下公式计算:w = sum((xi - x_mean) * (yi - y_mean)) / sum((xi - x_mean) ^ 2),其中sum表示和,xi和yi是观测数据中的第i个点的x和y值,x_mean和y_mean分别是x和y的均值。 4. 最后,通过以下公式计算截距b的估计值:b = y_mean - w * x_mean。 5. 最小二乘法的拟合直线方程为:y = wx + b。 下面是一个示例代码: ```c #include <stdio.h> #include <math.h> void leastSquare(double x[], double y[], int num, double *w, double *b) { double sum_x = 0.0, sum_y = 0.0, sum_xy = 0.0, sum_xx = 0.0; double x_mean, y_mean; // 计算x和y的均值 for (int i = 0; i < num; i++) { sum_x += x[i]; sum_y += y[i]; } x_mean = sum_x / num; y_mean = sum_y / num; // 计算回归系数w和b的估计值 for (int i = 0; i < num; i++) { sum_xy += (x[i] - x_mean) * (y[i] - y_mean); sum_xx += pow((x[i] - x_mean), 2); } *w = sum_xy / sum_xx; *b = y_mean - (*w) * x_mean; } int main() { double x[] = {1, 2, 3, 4, 5}; double y[] = {2, 4, 6, 8, 10}; double w, b; int num = sizeof(x) / sizeof(x[0]); leastSquare(x, y, num, &w, &b); printf("回归方程为:y = %.2lf * x + %.2lf\n", w, b); return 0; } ``` 上述代码中,给定了一组观测数据x和y,并调用了`leastSquare`函数来计算最小二乘法的拟合直线的斜率w和截距b。最后,通过打印输出的方式输出线性回归方程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值