目前机器学习领域的建模语言主要有Python和R,腾讯前不久推出的机器学习框架Angel支持Java和Scala。本文作者AbhishekSoni用实际行动告诉我们,JavaScript也可以用来开发机器学习模型。JavaScript?我不应该使用Python吗?甚至Scikit-learn也不支持JavaScript。这是可能的,事实上,我很惊讶开发人员会忽略它。以Scikit-learn为例,Javascript的开发者实际上已经发布了一个合适的库,这将在本文中提到。那么,让我们看看Javascript可以用机器学习做什么。根据人工智能先驱ArthurSamuel的说法,机器学习使计算机无需明确编程即可学习。换句话说,它使计算机能够在没有人类指导的情况下自行学习并执行正确的指令。谷歌长期以来一直在将其移动优先战略转变为人工智能优先。为什么机器学习社区没有提到JavaScript?慢(真的还是假的?)矩阵操作很困难(有像math.js这样的库)仅用于Web开发(但有Node.js)机器学习库通常在Python上(好吧,JS还有很多开发人员)JavaScript中有一些预制库,其中包含一些机器学习算法,如线性回归、SVM、朴素贝叶斯等,以下是其中的一部分。brain.js(神经网络)Synaptic(神经网络)Natural(自然语言处理)ConvNetJS(卷积神经网络)mljs(一组具有各种功能的子库)首先,我们将使用mljs回归库来做一些线性回归操作。参考代码:https://github.com/abhisheksoni27/machine-learning-with-js1。安装库$npminstallml-regressioncsvtojson$yarnaddml-regressioncsvtojsonml-regression顾名思义就是负责机器学习的线性回归。csvtojson是一个用于node.js的快速CSV解析器,它允许加载CSV数据文件并将它们转换为JSON。2.初始化和加载数据下载数据文件(.csv)并将其添加到您的项目中。链接:http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv如果你已经初始化了一个空的npm项目,打开index.js并输入以下代码。constml=require('ml-regression');constcsv=require('csvtojson');常量SLR=ml.SLR;//简单线性回归constcsvFilePath='advertising.csv';//DataletcsvData=[],//解析数据X=[],//输入y=[];//Outputlet回归模型;我把文件放在项目的根目录下,如果你想放在别的地方,记得更新csvFilePath。现在我们使用csvtojson的fromFile方法加载数据文件:csv().fromFile(csvFilePath).on('json',(jsonObj)=>{csvData.push(jsonObj);}).on('done',()=>{dressData();//从JSON对象中获取数据点performRegression();});3.打包数据,准备执行。JSON对象存储在csvData中,我们还需要输入数据点和输出数据点的数组。我们通过填充X和Y变量的dressData函数运行数据。functiondressData(){/***数据对象的一行如下所示:*{*TV:"10",*Radio:"100",*Newspaper:"20",*"Sales":"1000"*}**因此,在添加数据点时,*我们需要将字符串值解析为浮点数。*/csvData.forEach((row)=>{X.push(f(row.Radio));y.push(f(row.Sales));});}functionf(s){returnparseFloat(s);}4。训练模型开始预测数据已经打包,是时候训练我们的模型了。为此,我们需要编写一个performRegression函数:functionperformRegression(){regressionModel=newSLR(X,y);//在训练数据上训练模型console.log(regressionModel.toString(3));predictOutput();}performRegression函数有一个toString方法,它采用一个名为precision的参数来进行浮点输出。predictOutput函数允许您输入值,然后将模型的输出通过管道传输到控制台。看起来像这样(注意,我使用的是Node.js的readline工具):>{console.log(`AtX=${answer},y=${regressionModel.predict(parseFloat(answer))}`);predictOutput();});}下面是增加阅读用户的代码constreadline=require('readline');//对于允许预测的用户提示constrl=readline.createInterface({input:process.stdin,output:process.stdout});5.你完成了!按照上述步骤,您的index.js应该如下所示:constml=require('ml-regression');constcsv=require('csvtojson');常量SLR=ml.SLR;//简单线性回归constcsvFilePath='advertising.csv';//DataletcsvData=[],//解析数据X=[],//输入y=[];//Outputlet回归模型;constreadline=require('readline');//对于允许预测的用户提示constrl=readline.createInterface({input:process.stdin,output:process.stdout});csv().fromFile(csvFilePath).on('j儿子',(jsonObj)=>{csvData.push(jsonObj);}).on('done',()=>{dressData();//从JSON对象中获取数据点performRegression();});functionperformRegression(){regressionModel=newSLR(X,y);//在训练数据上训练模型console.log(regressionModel.toString(3));predictOutput();}functiondressData(){/***数据对象的一行如下所示:*{*TV:"10",*Radio:"100",*Newspaper:"20",*"Sales":"1000"*}**因此,在添加数据点时,*我们需要将字符串值解析为浮点数。*/csvData.forEach((row)=>{X.push(f(row.Radio));y.push(f(row.Sales));});}functionf(s){returnparseFloat(s);}functionpredictOutput(){rl.question('输入输入X进行预测(按CTRL+C退出):',(answer)=>{console.log(`在X=${answer},y=${regressionModel.predict(parseFloat(answer))}`);预测输出();});}转到您的终端并运行nodeindex.js以获取输出它将是这样的:$nodeindex.jsf(x)=0.202*x+9.31EnterinputXforprediction(PressCTRL+Ctoexit):151.***tX=151.5,y=39.98974927911285EnterinputXforprediction(PressCTRL+Ctoexit):恭喜!你刚刚用JavaScript训练了你的第一个线性回归模型(PS。你注意到速度了吗?)
