用js实现线性回归
实现线性回归的基本原理
线性回归通过最小化预测值与实际值的平方误差,拟合出最佳直线。数学表达式为: $$ y = mx + b $$ 其中 $m$ 是斜率,$b$ 是截距。

计算斜率和截距的公式
斜率和截距可通过以下公式计算: $$ m = \frac{n\sum xy - (\sum x)(\sum y)}{n\sum x^2 - (\sum x)^2} $$ $$ b = \frac{\sum y - m \sum x}{n} $$

JavaScript 实现代码
function linearRegression(x, y) {
const n = x.length;
let sumX = 0, sumY = 0, sumXY = 0, sumXX = 0;
for (let i = 0; i < n; i++) {
sumX += x[i];
sumY += y[i];
sumXY += x[i] * y[i];
sumXX += x[i] * x[i];
}
const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
const intercept = (sumY - slope * sumX) / n;
return { slope, intercept };
}
// 示例数据
const x = [1, 2, 3, 4, 5];
const y = [2, 4, 5, 4, 5];
// 计算回归系数
const { slope, intercept } = linearRegression(x, y);
console.log(`斜率: ${slope}, 截距: ${intercept}`);
预测新数据点
使用计算出的斜率和截距预测新数据点:
function predict(x, slope, intercept) {
return slope * x + intercept;
}
const newX = 6;
const predictedY = predict(newX, slope, intercept);
console.log(`预测值: ${predictedY}`);
可视化结果(可选)
结合 Chart.js 绘制回归线:
import Chart from 'chart.js';
const ctx = document.getElementById('chart').getContext('2d');
const chart = new Chart(ctx, {
type: 'scatter',
data: {
datasets: [{
label: '原始数据',
data: x.map((val, i) => ({x: val, y: y[i]})),
backgroundColor: 'red'
}, {
label: '回归线',
data: [{x: Math.min(...x), y: predict(Math.min(...x), slope, intercept)},
{x: Math.max(...x), y: predict(Math.max(...x), slope, intercept)}],
type: 'line',
borderColor: 'blue',
borderWidth: 2,
fill: false
}]
},
options: { scales: { x: { type: 'linear' } } }
});
注意事项
- 输入数组
x和y长度需一致。 - 对于大数据集,建议使用矩阵运算库(如
math.js)提升性能。 - 此实现仅适用于简单线性回归(单变量)。多变量回归需使用正规方程或梯度下降法。






