最小二乘法是一种用于拟合数据的常用方法,通常用于线性回归模型中。其基本思想是找到一条直线,使得所有点到直线的垂直距离之和最小化。实现最小二乘法的目标是找到线性模型的参数,使得这些误差的平方和最小。
以下是使用 Node.js 实现线性回归的最小二乘法算法的示例代码:
// 定义最小二乘法函数
function leastSquares(xValues, yValues) {
if (xValues.length !== yValues.length) {
throw new Error('xValues 和 yValues 长度必须相同');
}
const n = xValues.length;
let sumX = 0, sumY = 0, sumXY = 0, sumXX = 0;
for (let i = 0; i < n; i++) {
sumX += xValues[i];
sumY += yValues[i];
sumXY += xValues[i] * yValues[i];
sumXX += xValues[i] * xValues[i];
}
// 计算斜率和截距
const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
const intercept = (sumY - slope * sumX) / n;
return { slope, intercept };
}
// 测试数据
const xValues = [1, 2, 3, 4, 5];
const yValues = [2, 4, 5, 4, 5];
// 调用最小二乘法
const result = leastSquares(xValues, yValues);
console.log(`斜率: ${result.slope}`);
console.log(`截距: ${result.intercept}`);
解释:
xValues
和yValues
:代表数据点的横坐标和纵坐标数组。sumX
和sumY
:分别为x
和y
值的总和。sumXY
:x
和y
值的乘积总和。sumXX
:x
值的平方和。- 通过公式计算出直线的斜率 (
slope
) 和截距 (intercept
)。
这个实现可以用于线性回归,适用于输入一组点并找出最符合这组点的线性函数。