C++ 计算 拟合优度R^2

解决的问题:

拟合优度(Goodness of Fit)是指回归直线对观测值的拟合程度,度量拟合优度的统计量是可决系数(亦称确定系数) R?。R最大值为

1。R%的值越接近1,说明回归直线对观测值的拟合程度越好,反之,R%值越小,说明回归直线对观测值的拟合程度越差.

这是网上的介绍,那么根据算法的公式

咱们实现自己的算法


如何实现:

1:拟合出自己的曲线方程式

y = a0 + a1*x + a2*x^2;

如下图:

具体这个函数的拟合方法,有相应的代码,可以点关注私信我,我使用opencv自带的函数

复制代码
cv::solve

然后就是计算R Squared的值


代码块解析:

cpp 复制代码
double calculateMean(QVector<double> &numbers)
{
    double sum = 0.0;
    int count = 0.0;

    for (double number : numbers)
    {
        sum += number;
        ++count;
    }

    // 返回平均值
    return sum / count;
}

double calculateYValue(double xValue)
{
    double yValue = 0.0;
    yValue = a0 + (a1 * xValue) + (a2*xValue*xValue);
    return yValue;
}

double calculateRfitValue(QVector<double> x, QVector<double> y)
{
    double yMean = calculateMean(y);

    double SSR = 0.0;
    double SSE = 0.0;
    double SST = 0.0;


    for(int i = 0; i < x.length(); ++i){
        SSR += pow((calculateYValue(x[i]) - yMean), 2);
        SSE += pow((y[i] - calculateYValue(x[i])), 2);
    }
    SST = SSR + SSE;
    return (1.0- SSE/SST);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QVector<double> myX = {29.82,
           29.62,
           29.42,
           29.21,
           29.01,
           28.8,
           28.59,
           28.38,
           28.17,
           27.97,
           27.76,
           27.55,
           27.34,
           27.13,
           26.92,
           26.71,
           26.5,
           26.3,
           26.09,
           25.88};
    QVector<double> myY = {133.2,
           135.2,
           137.12,
           139.2,
           141.2,
           142.3,
           143.5,
           144.2,
           144.9,
           145.3,
           143.6,
           145.8,
           144.6,
           143.4,
           142.0,
           140.2,
           138.7,
           136.2,
           133.7,
           130.4};
    qDebug() << "r2: " << calculateRfitValue(myX, myY);
    return a.exec();
}
相关推荐
初圣魔门首席弟子2 分钟前
c++ bug 记录(merge函数调用时错误地传入了vector对象而非迭代器。)
java·c++·bug
AresXue4 分钟前
你是否也在寻找二进制和字符串的高效转换算法?
算法
Swift社区14 分钟前
从 0 到 1 构建一个完整的 AGUI 前端项目的流程在 ESP32 上运行
前端·算法·职场和发展
低调小一14 分钟前
Kuikly 小白拆解系列 · 第1篇|两棵树直调(Kotlin 构建与原生承载)
android·开发语言·kotlin
RTC老炮18 分钟前
webrtc弱网-BitrateEstimator类源码分析与算法原理
网络·人工智能·算法·机器学习·webrtc
郝学胜-神的一滴19 分钟前
Linux下的阻塞与非阻塞模式详解
linux·服务器·开发语言·c++·程序人生·软件工程
程序员烧烤21 分钟前
【leetcode刷题007】leetcode116、117
算法·leetcode
yanqiaofanhua30 分钟前
C语言自学--预处理详解
c语言·开发语言
沐知全栈开发39 分钟前
Vue3 计算属性
开发语言
冰糖雪梨dd1 小时前
JS中new的过程发生了什么
开发语言·javascript·原型模式