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();
}
相关推荐
c-c-developer2 分钟前
C++ Primer 标准库类型string
开发语言·c++
山茶花开时。3 分钟前
[SAP ABAP] Debug Skill
开发语言·sap·abap
奥顺互联V12 分钟前
yes镜像站群/PHP驱动的镜像站群架构实践
开发语言·架构·开源·php
灰灰老师20 分钟前
数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)
人工智能·算法·机器学习·数据挖掘·数据分析·kmeans·rapidminer
宁静致远202126 分钟前
Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成
c++·vscode·ubuntu
Bluesonli31 分钟前
第 2 天:创建你的第一个 UE5 C++ 项目!
c++·学习·ue5·虚幻·虚幻引擎·unreal engine
追求源于热爱!1 小时前
记4(可训练对象+自动求导机制+波士顿房价回归预测
图像处理·人工智能·算法·机器学习·回归
taopi20241 小时前
android java系统弹窗的基础模板
android·java·开发语言
比特在路上1 小时前
蓝桥杯之c++入门(四)【循环】
c++·职场和发展·蓝桥杯
釉色清风1 小时前
【matlab】绘图 离散数据--->连续函数
开发语言·matlab