当前位置:首页 > 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实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…