基于tfjs实现线性回归等基本模型

目录

1.回归模型基础概念与应用综述

1.1 线性回归(Linear Regression)

1.2 多元线性回归(Multiple Linear Regression)

1.3 广义线性回归(Generalized Linear Model, GLM)

1.4 逻辑回归(Logistic Regression)

1.5 最大熵模型(Maximum Entropy Model)

1.6 总结

2.多项式回归的实例

2.1 安装 Node.js

2.2 创建项目目录并初始化

2.3 安装 TensorFlow.js

2.4 创建 JavaScript 文件

2.5 运行代码

2.6 训练结果分析

3.Train MNIST with the Core API

3.1 安装与配置步骤

3.1.1 克隆代码仓库

3.1.2 进入项目目录

3.1.3 配置与运行项目

3.1.4 在浏览器中访问

3.1.5 实验结果与分析

4.基于 TensorFlow.js 实现线性回归的实验

4.1 访问实验页面

4.2 生成数据

4.3 训练模型

4.4 清除图表

4.5 结果分析

4.5.1 结果展示

4.5.2 结果分析


1.回归模型基础概念与应用综述

1.1 线性回归(Linear Regression)

定义:线性回归用于描述一个因变量(目标变量)与一个或多个自变量(特征)之间的线性关系。

数学表达式
y=b0+b1x+ϵ
其中,y 为目标变量,x 为特征变量,b0​ 是截距,b1​ 是系数,ϵ 是误差项。

用途:用于预测和分析两个变量之间的关系,如销售预测、趋势分析。

1.2 多元线性回归(Multiple Linear Regression)

定义:多元线性回归是一种线性回归模型,处理多个自变量(特征),预测一个因变量的值。

数学表达式
y=b0+b1x1+b2x2+⋯+bnxn+ϵ
其中,x1,x2,…,xn 是多个自变量,b0,b1,…,bn 是回归系数。

用途:适用于多个特征影响目标变量的情况,如房价预测(影响因素包括面积、位置、房龄等)。

1.3 广义线性回归(Generalized Linear Model, GLM)

定义:广义线性模型是对线性回归模型的推广,允许因变量服从非正态分布,如二项分布、泊松分布等。

结构

  • 链接函数:将线性组合映射到目标变量的分布空间。
  • 线性预测器:自变量的线性组合部分。

常见模型

  • 逻辑回归:用于二分类问题。
  • 泊松回归:用于计数数据。

1.4 逻辑回归(Logistic Regression)

定义:逻辑回归是一种分类模型,通过使用 Sigmoid 函数将回归结果映射到 0 到 1 之间,用于预测二分类或多分类问题的概率。

数学表达式
其中 z=b0+b1x1+⋯+bnxn​。

用途:常用于二元分类,如垃圾邮件检测、信用违约预测。

1.5 最大熵模型(Maximum Entropy Model)

定义:最大熵模型是一种基于最大熵原理的概率分类模型,适用于多分类任务。它假设在所有可能的概率分布中,应该选择熵最大的那个(即不偏不倚的分布)。

数学原理:该模型与逻辑回归在结构上相似,但目标是最大化信息熵。

用途:广泛用于自然语言处理(如词性标注、命名实体识别)和多分类问题。

1.6 总结

这些回归模型在数据建模中发挥了不同作用:

  • 线性回归和多元线性回归:处理自变量与因变量之间的线性关系。
  • 广义线性模型:进一步推广线性回归,适应不同类型的数据分布。
  • 逻辑回归和最大熵模型:用于分类问题,尤其是在二分类和多分类任务中表现优异。

2.多项式回归的实例

2.1 安装 Node.js

  • 如果你还没有安装 Node.js,请先从 Node.js 官网 下载并安装。

2.2 创建项目目录并初始化

创建文件夹tfjs。

2.3 安装 TensorFlow.js

npm install @tensorflow/tfjs

2.4 创建 JavaScript 文件

在项目目录下创建一个名为 line.js 的文件,并将代码粘贴到这个文件中。

// 引入 TensorFlow.js
const tf = require('@tensorflow/tfjs');

// 构造训练数据:输入 x 和对应的输出 y
const xs = tf.tensor1d([0, 1, 2, 3, 4, 5]);
const ys = tf.tensor1d([1, 3, 7, 13, 21, 31]);

// 定义模型:多项式回归 y = ax^2 + bx + c
const model = tf.sequential();
model.add(tf.layers.dense({units: 10, activation: 'relu', inputShape: [1]}));
model.add(tf.layers.dense({units: 1}));

// 编译模型,指定损失函数和优化器
model.compile({
  loss: 'meanSquaredError',
  optimizer: 'sgd'
});

// 模型训练函数
async function trainModel() {
  console.log('Training model...');
  await model.fit(xs, ys, {
    epochs: 500,
    callbacks: {
      onEpochEnd: (epoch, logs) => {
        console.log(`Epoch ${epoch + 1}: loss = ${logs.loss}`);
      }
    }
  });
  console.log('Training completed.');
}

// 调用训练模型并进行预测
trainModel().then(() => {
  const output = model.predict(tf.tensor1d([6]));
  output.print();  // 输出模型对 x=6 的预测值
});

2.5 运行代码

在终端中运行以下命令:

node line.js

2.6 训练结果分析

  • 控制台会显示每个 epoch 的损失值,并最终输出对 x = 6 的预测结果。
  • 模型预测:对 x=6 的预测结果为 36.81
  • 预期结果:根据给定的训练数据趋势,理想预测值应为 37 左右。
  • 误差:预测值 36.81 与理想值 37 相比非常接近,误差为 0.19,表明模型已经很好地拟合了数据。

3.Train MNIST with the Core API

3.1 安装与配置步骤

3.1.1 克隆代码仓库

在终端(如 PowerShell、命令行或 VSCode 终端)中运行以下命令,克隆 TensorFlow.js 的示例项目:

git clone https://github.com/tensorflow/tfjs-examples.git

3.1.2 进入项目目录

cd tfjs-examples/mnist-core

3.1.3 配置与运行项目

方法任选一个

如果你使用yarn:

cd mnist-core

yarn

yarn watch

如果你使用 npm:

cd mnist-core

npm install

npm run watch

3.1.4 在浏览器中访问

在浏览器中访问:

http://localhost:1234

这会加载你的 TensorFlow.js 项目,并展示 MNIST 手写数字分类器的界面。

3.1.5 实验结果与分析

1. 训练过程与损失曲线分析

从第一张截图可以看到:

  • 损失值的变化:随着训练步骤的增加,损失值呈现出快速下降趋势,从初始的 2.0+ 降至 0.5 以下。这表明模型在训练过程中不断优化,逐渐学会了 MNIST 数据集的特征。

  • 轻微波动:在训练的过程中,损失值存在一些小幅度波动,说明模型在某些步骤上可能遇到了数据的复杂性,但整体趋势是在收敛。

2. 模型的测试准确率

  • 测试集准确率:在第二张截图中的 50 个测试样本中,有 47 个样本被正确分类,准确率为 94%

  • 错误分类示例:如红色标注的:

    • 一个 2 被错误识别为 3
    • 一个 8 被错误识别为 7
    • 一个 4 被错误识别为 1

这些错误表明,虽然模型已经学会了大部分数字的特征,但在某些情况下,数字的书写方式和笔迹差异仍会影响模型的判断。


4.基于 TensorFlow.js 实现线性回归的实验

4.1 访问实验页面

打开浏览器,访问 CodePen 示例。

4.2 生成数据

点击 “Generate Data” 按钮,激活生成数据点功能。

在画布上任意位置点击,会生成一个数据点并绘制在图表上。

4.3 训练模型

点击 “Train” 按钮,系统会使用生成的数据进行线性回归训练,并绘制拟合的回归线。

4.4 清除图表

点击 “Clear” 按钮,清除画布上的所有数据点和回归线,恢复画布初始状态。

4.5 结果分析

4.5.1 结果展示

数据点与拟合回归线

  • 上传的截图显示了多个随机生成的橙色数据点分布在坐标系中。数据点覆盖了不同区域,展示了用户与系统的交互效果。
  • 回归线成功绘制,并尽可能贴合这些数据点,显示了模型的良好拟合。

4.5.2 结果分析

拟合效果

  • 从结果可以看出,系统的线性回归模型能够较好地捕捉数据的线性趋势,并且回归线与大多数数据点接近重合,表明模型拟合效果良好。

交互与反馈

  • 系统的交互体验良好,用户可以通过简单的点击生成数据并立即训练模型。回归线的展示帮助用户直观地理解数据的趋势和模型的性能。

性能与问题

  • 虽然模型拟合效果良好,但如果数据点的分布存在较大的偏差,可能会导致模型的拟合效果下降。在实际应用中,可以通过增加训练轮数或更复杂的模型(如多项式回归)来优化结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899039.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于武汉芯景科技有限公司的限流开关芯片XJ6241开发指南(兼容LTC4411)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.CTL引脚控制VIN和VOUT的通断 2.CTL引脚控制STAT引脚的状态 3.输出电压高于输入电压加上–VRTO的值,芯片处于关断状态

免费开源Odoo软件如何实现电商仓库高效发货

世界排名第一的免费开源ERP软件Odoo,拥有非常强大的仓库管理WMS功能。本文以电商仓库发货管理为例,介绍电商订单的仓库发货作业的各种方法。电商订单仓库发货流程,通常分为三个步骤,即拣货、打包、发货。根据仓库日处理订单数量的…

HTTP Proxy环境下部署Microsoft Entra Connect和Health Agents

在企业环境中,时常需要通过使用HTTP Proxy访问Internet,在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤,以便这些服务能够正常连接到Internet。 一…

linux系统之jar启动脚本

编辑linux启动脚本 执行 vi run_blog 按i 进入编辑,复制以下代码,并根据当前环境修改三个参数。以下是详细完整脚本代码: #!/bin/bash# 配置部分 JAR_PATH"/path/to/your/app.jar" # 替换为你的 JAR 文件的实际路径 L…

CRMEB标准版Mysql修改sql_mode

数据库配置 1.宝塔控制面板-软件商店-MySql-设置 2.点击配置修改,查找sql-mode或sql_mode (可使用CtrlF快捷查找) 3.复制 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 然后替换粘贴,保存 注:MySQL8.0版本的 第三步用…

从新手到高手:map和set的使用技巧全攻略(C++)

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C:由浅入深篇 小新的主页:编程版小新-CSDN博客 前言: 本章节讲解的map和set底层…

自定义多级联动选择器指南(uni-app)

多端支持:可以运行在H5、APP、微信小程序还是支付宝小程序,都可以轻松使用改组件。自定义配置:您可以根据需要配置选择器的级数,使其适应不同的数据结构和用例。无限级联:此组件支持无限级联选择,使您能够创…

MySQL--基本介绍

一.数据库前言 1.数据库的相关介绍 关系数据库管理系统(Relational Database Management System:RDBMS)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数…

张雪峰:如果你现在是计算机专业,一定要优先报网络安全,它是未来国家发展的大方向

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 前言 “计算机专业 一定要优先报 网络安全 它是未来国家发展的大方向” 为什么推荐学网络安全? “没有网络安全就没有国家安全。”当前&#xff…

Git Push(TODO)

最近经常碰到GIT push不上去的问题。到处求人解决也真是尴尬,想自己看看,所以刚刚在github上建了一个仓,试了下。结果如下: 暂时可能还不行,因为数据都是加密的,没法看到具体GIT的交互信息。。。 后面再想办…

12.个人博客系统(Java项目基于spring和vue)

目录 1.系统的受众说明 2.相关技术介绍 2.1 B/S 简介 2.2 JAVA 简介 2.3 vue简介 2.4 SSM和Springboot简介 3.可行性分析 3.1 技术可行性分析 3.2 经济可行性分析 3.3 操作可行性 4.系统设计 4.1 系统总流程 4.2 博主用例 4.3 游客用例 4.4 系统类 4.…

HarmonyOS 模块化设计

1.HarmonyOS 模块化设计 模块化设计文档   应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,HarmonyOs组件化的使用,有利于模块之间的解…

算法笔记day05

目录 1.最小公倍数 2.最长连续的子序列 3.字母收集 1.最小公倍数 求最小公倍数_牛客题霸_牛客网 算法思路&#xff1a; 这就是一道数学题&#xff0c;a,b的最小公倍数 a * b / 最大公约数。 使用辗转相除法&#xff0c;求a&#xff0c;b的最大公约数。 #include <iostre…

Cadence元件A属性和B属性相互覆盖

最近在使用第三方插件集成到Cadence,协助导出BOM到平台上&#xff0c;方便对BOM进行管理和修改&#xff0c;结果因为属性A和属性B不相同&#xff0c;导致导出的BOM错误。如下图&#xff1a; ​​ 本来我们需要导出Q12&#xff0c;结果给我们导出了Q13&#xff0c;或者反之&…

UNIX网络编程-传输层

概述 传输层主要包括&#xff1a;TCP、UDP、SCTP&#xff08;流控制传输协议&#xff09;&#xff01; 绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议&#xff0c;最初设计用于跨因特网传输电话信令。 这些传输协议都转而使用网络协议IP&#xff1a;或是…

VScode分文件编写报错 | 如何进行VScode分文件编写 | 小白也能轻松解决版

分文件编写遇到的问题 分文件编写例子如下所示&#xff1a; 但是直接使用 Run Code 或者 调试C/C文件 会报错如下&#xff1a; 正在执行任务: C/C: g.exe 生成活动文件 正在启动生成… cmd /c chcp 65001>nul && D:\Librarys\mingw64\bin\g.exe -fdiagnostics-col…

计算机网络——传输层服务

传输层会给段加上目标ip和目标端口号 应用层去识别报文的开始和结束

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十五集:制作更多地图,更多敌人,更多可交互对象

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、第一个代表性场景 1.制作更多敌人2.制作更多可交互对象二、第二个代表性场景 1.制作更多敌人2.制作更多可交互对象三、第三个代表性场景 1.制作更多敌人2.制…

MongoDB安装配置及配置和启动服务

MongoDB 安装配置 附&#xff1a;MongoDB官网下载地址&#xff1a; https://www.mongodb.com/download-center/community 注&#xff1a; 官网可以下载最新版的MongoDB安装包&#xff0c;有MSI安装版和ZIP安装版。我们课堂上使用4.4.4的ZIP安装版。安装版参考博客&#xff1…

【redis】基础指令|数据结构总览|单线程架构分析

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;redis系类博客都是以redis5.0版本为基础&#xff01;&#xff01;&#xff01; 目录 Redis常见命令 基本全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 数据结构和内部编码 单线程架构 Redis…