JavaScript 用于机器学习:能力与局限

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

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

开始课程

JavaScript 用于机器学习:能力与局限概述



机器学习领域传统上与 Python 及其丰富的库生态(TensorFlow、PyTorch、scikit-learn)紧密相关。然而,随着 Node.js 的日益普及和强大工具的出现,JavaScript 正逐渐被视为机器学习的替代平台。在本文中,我们将探讨 JavaScript(Node.js)在机器学习方面的适用性、可使用的库以及会遇到哪些限制。



为什么选择 JavaScript 用于机器学习?主要优势



JavaScript 是一种无处不在的语言:在浏览器中、在服务器端(Node.js)、甚至在移动设备上(React Native)。这为部署机器学习模型提供了独特的机会:



  • 通用性:同一套代码库可同时服务于前端、后端和机器学习逻辑。
  • 低门槛:Web 开发者无需学习新语言即可集成机器学习。
  • 快速原型开发:直接在浏览器中快速开发和测试。
  • 生态系统:数量庞大的 npm 包可用于数据处理和可视化。


不过,不应认为 JS 会在科学计算领域取代 Python。它有自己的真正擅长的特定领域。



Node.js 上主要的机器学习库



我们来看看三个关键的库,它们让你能用 JavaScript 做机器学习。



1. TensorFlow.js —— JS 领域机器学习的旗舰



TensorFlow.js 是谷歌流行框架的移植版本。它允许你在 Node.js 或浏览器中直接运行现成模型,甚至训练新模型。



const tf = require('@tensorflow/tfjs-node');

// Create a simple linear regression modelconst model = tf.sequential();model.add(tf.layers.dense({units: 1, inputShape: [1]}));

// Compile the modelmodel.compile({loss: 'meanSquaredError', optimizer: 'sgd'});

// Training data: y = 2x - 1const xs = tf.tensor2d([-1, 0, 1, 2, 3, 4], [6, 1]);const ys = tf.tensor2d([-3, -1, 1, 3, 5, 7], [6, 1]);

// Trainingmodel.fit(xs, ys, {epochs: 250}).then(() => { // Prediction for x = 10 model.predict(tf.tensor2d([10], [1, 1])).print(); // Expected result: ~19});


这段代码展示了基本的神经网络训练。TensorFlow.js 支持卷积网络和循环网络、迁移学习以及通过 CUDA 实现 GPU 加速。



2. Brain.js —— 简单直观



Brain.js 非常适合快速实验和小型项目。它提供了简单的 API 来创建神经网络。



const brain = require('brain.js');

const net = new brain.NeuralNetwork();

// Train the network to recognize XORnet.train([ {input: [0, 0], output: [0]}, {input: [0, 1], output: [1]}, {input: [1, 0], output: [1]}, {input: [1, 1], output: [0]}]);

// Test itconst output = net.run([1, 0]); // ~0.98console.log(`XOR(1,0) = ${output}`);


Brain.js 不需要深入的数学知识——对于刚接触 JavaScript 机器学习的人来说,这是一个极好的入门工具。



3. ML.js —— 一套经典机器学习工具



ML.js 是用纯 JavaScript 编写的一系列机器学习算法的集合。这里你可以找到 KNN、随机森林、SVM 以及其他经典方法。



const { KNN } = require('ml-knn');

// Training data: [height, weight]const trainData = [[1.70, 65], [1.80, 80], [1.60, 55], [1.90, 90]];const trainLabels = [0, 1, 0, 1]; // 0 - normal, 1 - overweight

const knn = new KNN(trainData, trainLabels);

// Prediction for a new personconst prediction = knn.predict([[1.75, 70]]);console.log(`Predicted category: ${prediction[0]}`); // 0


ML.js 非常适合分类和回归任务,但不

博客

书籍推荐