JavaScript 机器学习:实践中的可能性与局限性

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript 机器学习:实践中的可能性与局限性

\n\n

许多开发者习惯性地认为机器学习是 Python 的专属领域。确实,拥有 TensorFlow、PyTorch 和 Scikit-learn 等库的 Python 生态系统在该领域占据主导地位。然而,JavaScript(尤其是在 Node.js 环境中)也提供了有趣的 ML 工具。在本文中,我们将探讨用 JavaScript 能做什么,它的实际边界在哪里,以及如何在实践中使用可用的库。

\n\n

为什么用 JavaScript 做 ML?主要应用场景

\n\n

JavaScript 的主要优势在于其通用性。如果你的团队已经在使用 JS 编写代码,并且没有资源学习 Python,你可以直接在 Node.js 中实现简单的 ML 模型。主要使用场景包括:

\n\n
    \n
  • 浏览器端机器学习 — 直接在客户端运行模型(例如,浏览器中的 TensorFlow.js)。这对于处理敏感数据(如医疗、金融)的任务非常理想。
  • \n
  • 服务器端解决方案 — Node.js 能够很好地处理简单的预测、文本分类或情感分析。
  • \n
  • 原型设计与学习 — 用于快速实验和概念验证。
  • \n
  • 与 Web 生态系统集成 — 如果你的项目已经基于 Node.js,则无需再搭建一个独立的 Python 微服务。
  • \n
\n\n

实践示例:使用 Brain.js 进行数字分类

\n\n

Brain.js 是 JavaScript 中最简单的神经网络库之一。它不需要 GPU,非常适合在 CPU 上进行训练。我们来看一个识别手写数字的示例(简化版的 MNIST)。

\n\n

首先安装库:

\n
npm install brain.js
\n\n

现在编写代码,训练一个神经网络,基于 4x4 像素的二进制图像来识别数字 0 和 1:

\n\n
const brain = require('brain.js');\n\n// 创建一个带一个隐藏层的神经网络\nconst net = new brain.NeuralNetwork({ hiddenLayers: [3] });\n\n// 训练数据:16 个输入 (4x4),1 个输出 (0 或 1)\nconst trainingData = [\n    { input: [0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0], output: [0] }, // 数字 0\n    { input: [0,0,0,0, 0,0,1,0, 0,0,1,0, 0,0,0,0], output: [1] }, // 数字 1\n    { input: [0,0,0,0, 1,1,1,0, 0,1,1,0, 0,0,0,0], output: [0] }, // 另一个 0\n    { input: [0,0,0,0, 0,0,1,0, 0,1,1,0, 0,0,0,0], output: [1] }  // 另一个 1\n];\n\n// 训练网络\nnet.train(trainingData, {\n    iterations: 2000,\n    errorThresh: 0.005,\n    log: true,\n    logPeriod: 500\n});\n\n// 测试\nconst testData = [0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0]; // 看起来像 0\nconst result = net.run(testData);\nconsole.log(`结果: ${result[0] > 0.5 ? '1' : '0'} (置信度: ${result[0].toFixed(3)})`);
\n\n

这个示例展示了如何快速训练一个简单的网络。然而,对于实际的 MNIST 识别,需要更深的架构和数千个样本。

\n\n

TensorFlow.js:Node.js 的强大工具

\n\n

TensorFlow.js 是流行框架的 JavaScript 移植版。它同时支持浏览器和 Node.js。以下是一个用于预测房价的线性回归示例(简化版):

\n\n
const tf = require('@tensorflow/tfjs-node');\n\n// 数据:面积 (平方米) -> 价格 ($)\nconst xs = tf.tensor2d([50, 60, 70, 80, 90], [5, 1]);\nconst ys = tf.tensor2d([150000, 180000, 210000, 240000, 270000], [5, 1]);\n\n// 创建模型\nconst model = tf.sequential();\nmodel.add(tf.layers.dense({ units: 1, inputShape: [1] }));\n\n// 编译\nmodel.compile({ optimizer: 'sgd', loss: 'meanSquaredError' });\n\n// 训练\nasync function train() {\n    await model.fit(xs, ys, { epochs: 100 });\n    \n    // 预测 75 平方米的房屋价格\n    const prediction = model.predict(tf.tensor2d([75], [1, 1]));\n    prediction.print(); // ~225000\n}\n\ntrain();
\n\n

TensorFlow.js 提供了对大多数

博客

书籍推荐