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();
}
相关推荐
白榆maple8 分钟前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少12 分钟前
数据结构——线性表与链表
数据结构·c++·算法
许野平25 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
也无晴也无风雨28 分钟前
在JS中, 0 == [0] 吗
开发语言·javascript
狂奔solar37 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
此生只爱蛋1 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
何曾参静谧1 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong2 小时前
Java反射
java·开发语言·反射