<强>译者按:>强人工智能时代,不会机器学习的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 });代码>