JavaScript机器学习之线性回归

  

<强>译者按:强人工智能时代,不会机器学习的JavaScript开发者不是好的前端工程师。

  
      <李>原文:机器学习JavaScript: 第1部分   
  
      <李>译者:Fundebug李   
  

<强>为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

  

使用JavaScript做机器学习?不是应该用Python吗?是不是我疯了才用JavaScript做如此繁重的计算?难道我不用Python和R是为了装逼? scikit-learn (Python机器学习库)不能使用Python吧?

  

嗯,我并没有开玩笑…

  

其实呢,类似于Python的scikit-learn, JavaScript开发者也开发了一些机器学习库,我打算用一下它们。

  

JavaScript不能用于机器学习?

  
      <李>太慢(幻觉?)   <李>矩阵操作太难(有函数库啊,比如<强> math.js )   <李> JavaScript只能用于前端开发(node . js开发者笑了)   <李>机器学习库都是Python (JS开发者)   
  

JavaScript机器学习库

  
      <李>脑。李js(神经网络)   <李>突触(神经网络)   <李>自然(自然语言处理)   <李> ConvNetJS(卷积神经网络)   <李> mljs(一系列AI库)   <李> Neataptic(神经网络)   <李> Webdnn(深度学习)   
  

我们将使用mljs来实现线性回归,源代码在GitHub仓库:machine-learning-with-js。下面是详细步骤:

  

1。安装模块

  
 <代码>美元纱添加ml-regression csvtojson  
  

或者使用<代码> npm

  
 <代码> npm美元安装ml-regression csvtojson  
  
      <李> ml-regression模块提供了一些<强>回归算法   <李> csvtojson模块用于将CSV数据转换为JSON。   
  

2。初始化并导入数据

  

下载. csv数据。

  

假设你已经初始化了一个NPM项目,请在<强> index.js 中输入以下内容:

  
 <=坝镅詊avascript代码类> const毫升=要求(“ml-regression”);
  const csv=要求(“csvtojson”);
  const单反=ml.SLR;//线性回归
  
  const csvFilePath=" advertising.csv”;//训练数据
  让csvData=https://www.yisu.com/zixun/[],
  X=[],
  y=[];
  
  让regressionModel;  
  

使用csvtojson模块的fromFile方法加载数据:

  
 <=坝镅詊avascript代码类> csv ()
  .fromFile (csvFilePath)
  内(json (jsonObj)=比;{
  csvData.push (jsonObj);
  })
  内(“完成”,()=比;{
  dressData ();
  performRegression ();
  }); 
  

3。转换数据

  

导入的数据为json对象数组,我们需要使用<强> dressData 函数将其转化为两个数据向量<强> x 和<强> y :

  
 <=坝镅詊avascript代码类>//将JSON数据转换为向量数据
  函数dressData () {/* *
  *原始数据中每一行为JSON对象
  *因此需要将数据转换为向量数据,并将字符串解析为浮点数
  * {
  *电视:“10”,
  *广播:“100”,
  *报纸:“20”,
  *“销售”:“1000”
  *}
  */csvData.forEach((行)=比;{
  X.push (f (row.Radio));
  y.push (f (row.Sales));
  });
  }//将字符串解析为浮点数
  函数f (s) {
  返回parseFloat (s);
  } 
  

4。训练数据并预测

  

编写<强> performRegression 函数:

  
 <=坝镅詊avascript代码类>//使用线性回归算法训练数据
  函数performRegression () {
  regressionModel=new单反(X, y);
  console.log (regressionModel.toString (3));
  predictOutput ();
  } 
  

<强> regressionModel 的<强> toString 强方法可以指定参数的精确度。

  

<强> predictOutput 函数可以根据输入值输出预测值。

  
 <=坝镅詊avascript代码类>//接收输入数据,然后输出预测值
  函数predictOutput () {
  rl.question(“请输入X用于预测(输入CTRL + C退出):”,(答案)=比;{
  控制台。日志(“当X=${答案}时,预测值y=$ {regressionModel.predict (parseFloat(回答))}”);
  predictOutput ();
  });
  } 
  

<强> predictOutput 函数使用了node . js的Readline模块:

  
 <=坝镅詊avascript代码类> const readline=要求(“readline”);
  
  const rl=readline.createInterface ({
  输入:process.stdin,
  输出:process.stdout
  }); 
  

5。完整程序

JavaScript机器学习之线性回归