使用 C++ 进行回归分析和最佳拟合线
简介
回归分析是最基本的预测分析形式。
在统计学中,线性回归是一种对标量值与一个或多个解释变量之间关系进行建模的方法。
在机器学习中,线性回归是一种监督算法。这种算法根据自变量预测目标值。
更多关于线性回归和回归分析
在线性回归/分析中,目标是一个实数或连续值,例如薪资、BMI 等。它通常用于预测因变量与一组自变量之间的关系。这些模型通常拟合线性方程,但是也存在其他类型的回归,包括高阶多项式。
在将线性模型拟合到数据之前,有必要检查数据点之间是否存在线性关系。这可以通过它们的散点图来体现。算法/模型的目标是找到最佳拟合线。
在本文中,我们将探讨线性回归分析及其使用 C++ 的实现。
线性回归方程的形式为 Y = c + mx,其中 Y 是目标变量,X 是自变量或解释参数/变量。m 是回归线的斜率,c 是截距。由于这是一个二维回归任务,因此模型在训练期间尝试找到最佳拟合线。并非所有点都必须完全位于同一条线上。一些数据点可能位于线上,一些则散布在其周围。线与数据点之间的垂直距离称为残差。根据点位于线下方还是上方,它可以是负数或正数。残差是衡量线拟合数据好坏的指标。算法继续最小化总残差误差。
每个观测值的残差是 y(因变量)的预测值与 y 的观测值之间的差值。
$$\mathrm{残差\: =\: 实际 y 值\:−\:预测 y 值}$$
$$\mathrm{ri\:=\:yi\:−\:y'i}$$
评估线性回归模型性能最常用的指标称为均方根误差,或 RMSE。其基本思想是衡量模型预测与实际观测值相比有多糟糕/错误。
因此,高 RMSE 是“糟糕的”,而低 RMSE 是“好的”。
RMSE 误差给出为
$$\mathrm{RMSE\:=\:\sqrt{\frac{\sum_i^n=1\:(yi\:-\:yi')^2}{n}}}$$
使用 C++ 实现
#include<iostream> #define N 50 using namespace std; int main(){ int n, i; float x[N], y[N], sum_x=0, sum_x2=0, sum_y=0, sum_xy=0, a, b; /* Input */ cout<<"Please enter the number of data points.."; cin>>n; cout<<"Enter data:"<< endl; for(i=1;i<=n;i++){ cout<<"x["<< i <<"] = "; cin>>x[i]; cout<<"y["<< i <<"] = "; cin>>y[i]; } /* Calculating Required Sum */ for(i=1;i<=n;i++){ sum_x = sum_x + x[i]; sum_x2 = sum_x2 + x[i]*x[i]; sum_y = sum_y + y[i]; sum_xy = sum_xy + x[i]*y[i]; } /* Calculating a and b */ b = (n*sum_xy-sum_x*sum_y)/(n*sum_x2-sum_x*sum_x); a = (sum_y - b*sum_x)/n; /* Displaying value of a and b */ cout<<"Calculated value of a is "<< a << "and b is "<< b << endl; cout<<"Equation of best fit line is: y = "<< a <<" + "<< b<<"x"; return(0); }
输出
Please enter the number of data points..5 Enter data: x[1] = 2 y[1] = 5 x[2] = 5 y[2] = 7 x[3] = 2 y[3] = 6 x[4] = 8 y[4] = 9 x[5] = 2 y[5] = 7 Calculated value of a is 4.97917 and b is 0.479167 Equation of best fit line is: y = 4.97917 + 0.479167x
结论
回归分析是一种非常简单但功能强大的预测分析技术,在机器学习和统计学中均有应用。其思想在于其简单性和自变量与目标变量之间潜在的线性关系。