当前位置:首页 > JavaScript

用js实现线性回归

2026-03-01 18:54:18JavaScript

实现线性回归的基本原理

线性回归通过最小化预测值与真实值之间的平方误差(最小二乘法),拟合出最佳直线方程 $y = mx + b$。在JavaScript中可以通过以下步骤实现:

计算斜率和截距

斜率 $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} $$

用js实现线性回归

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 m = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
    const b = (sumY - m * sumX) / n;

    return { m, b };
}

使用示例

const x = [1, 2, 3, 4, 5];
const y = [2, 4, 5, 4, 5];

const { m, b } = linearRegression(x, y);
console.log(`回归方程: y = ${m}x + ${b}`); // 输出如 y = 0.6x + 2.2

预测新数据点

利用拟合的方程进行预测:

function predict(x, m, b) {
    return m * x + b;
}

console.log(predict(6, m, b)); // 预测x=6时的y值

可视化实现(可选)

结合Canvas或图表库(如Chart.js)绘制数据点和回归线:

用js实现线性回归

const ctx = document.getElementById('chart').getContext('2d');
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), m, b)},
                   {x: Math.max(...x), y: predict(Math.max(...x), m, b)}],
            type: 'line',
            borderColor: 'blue'
        }]
    }
});

性能优化

对于大数据集,可使用矩阵运算库(如math.js)加速计算:

const math = require('mathjs');
function matrixRegression(x, y) {
    const X = math.concat(math.ones([x.length, 1]), math.transpose([x]));
    const coeff = math.multiply(
        math.multiply(math.inv(math.multiply(math.transpose(X), X)), math.transpose(X)),
        y
    );
    return { m: coeff[1], b: coeff[0] };
}

注意事项:

  • 输入数组x和y的长度需一致
  • 极端值(如全零)可能导致计算错误
  • 对于非线性数据,需考虑多项式回归或其他模型

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

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取…