当前位置:首页 > JavaScript

用js实现线性回归

2026-01-31 03:46:54JavaScript

实现线性回归的基本原理

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

用js实现线性回归

计算斜率和截距的公式

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

用js实现线性回归

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' } } }
});

注意事项

  • 输入数组 xy 长度需一致。
  • 对于大数据集,建议使用矩阵运算库(如 math.js)提升性能。
  • 此实现仅适用于简单线性回归(单变量)。多变量回归需使用正规方程或梯度下降法。

标签: 线性js
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js实现放大缩小

js实现放大缩小

使用 CSS transform 实现缩放 通过修改元素的 transform 属性实现平滑缩放效果。CSS 的 scale() 函数可以轻松调整元素大小。 const element = docu…