2019年用于JavaScript的6大機(jī)器學(xué)習(xí)庫(kù)
通常,人們使用兩種編程語(yǔ)言之一來(lái)應(yīng)用機(jī)器學(xué)習(xí)(ML)方法和算法:Python或R.關(guān)于機(jī)器學(xué)習(xí)的書(shū)籍,課程和教程通常也使用這些語(yǔ)言中的一種(或兩者)。
Python是一種通用編程語(yǔ)言,不僅用于機(jī)器學(xué)習(xí),還用于科學(xué)計(jì)算,后端Web開(kāi)發(fā),桌面應(yīng)用程序等.R主要用于統(tǒng)計(jì)學(xué)家。但是,它們至少有兩個(gè)共同特征:
- 它們適合非程序員
- 他們有全面的ML庫(kù)
在許多情況下,ML算法在Fortran,C,C ++或Cython中實(shí)現(xiàn),并從Python或R調(diào)用。
Java也用于機(jī)器學(xué)習(xí),但通常由專(zhuān)業(yè)程序員使用。
在過(guò)去的幾年中,JavaScript得到了普及,并且出現(xiàn)了一些非常有趣的機(jī)器學(xué)習(xí)庫(kù),可以在瀏覽器或Node.js上實(shí)現(xiàn)ML方法。令人驚訝的是,許多這些庫(kù)在JavaScript中實(shí)現(xiàn)了大量代碼。
ml.js
ml.js是一個(gè)全面的,通用的JavaScript ML庫(kù),適用于瀏覽器和Node.js. 它提供了以下例程:
- 對(duì)數(shù)組,哈希表,排序,隨機(jī)數(shù)生成等的位操作。
- 線性代數(shù),數(shù)組操作,優(yōu)化(Levenberg-Marquardt方法),統(tǒng)計(jì)
- 交叉驗(yàn)證
- 監(jiān)督學(xué)習(xí)
- 無(wú)監(jiān)督學(xué)習(xí)
支持的監(jiān)督學(xué)習(xí)方法是:
- 線性,多項(xiàng)式,指數(shù)和冪回歸
- K-最近鄰居
- 樸素貝葉斯
- 支持向量機(jī)
- 決策樹(shù)和隨機(jī)森林
- 前饋神經(jīng)網(wǎng)絡(luò)等
此外,ml.js提供了幾種無(wú)監(jiān)督的學(xué)習(xí)方法:
- 主成分分析
- 聚類(lèi)分析(k均值和層次聚類(lèi))
- 自組織地圖(Kohonen網(wǎng)絡(luò))
TensorFlow.js
TensorFlow是***的機(jī)器學(xué)習(xí)庫(kù)之一。它側(cè)重于人工神經(jīng)網(wǎng)絡(luò)的各種類(lèi)型和結(jié)構(gòu),包括深度網(wǎng)絡(luò)以及網(wǎng)絡(luò)的組件。
TensorFlow由Google Brain Team創(chuàng)建,使用C ++和Python編寫(xiě)。但是,它可以與包括JavaScript在內(nèi)的多種語(yǔ)言一起使用。
TensorFlow是一個(gè)非常全面的庫(kù),仍然可以輕松地構(gòu)建和培訓(xùn)模型。它支持各種各樣的網(wǎng)絡(luò)層,激活功能,優(yōu)化器和其他組件。它具有良好的性能并提供GPU支持。
TensorFlow.js是一個(gè)用于瀏覽器或Node.js的JavaScript ML庫(kù)。它支持WebGL。
brain.js
brain.js是一個(gè)用JavaScript編寫(xiě)的庫(kù) - 專(zhuān)注于訓(xùn)練和應(yīng)用前饋和循環(huán)神經(jīng)網(wǎng)絡(luò)。它還提供其他實(shí)用程序,例如神經(jīng)網(wǎng)絡(luò)所需的數(shù)學(xué)例程。
它提供了高級(jí)選項(xiàng),如:
- 使用GPU訓(xùn)練網(wǎng)絡(luò)
- 可以并行適應(yīng)多個(gè)網(wǎng)絡(luò)的異步培訓(xùn)
- 交叉驗(yàn)證是一種更復(fù)雜的驗(yàn)證方法
brain.js將模型保存到JSON文件或從中加載模型。
ConvNetJS
ConvNetJS是神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的另一個(gè)庫(kù)。它可以在瀏覽器中訓(xùn)練神經(jīng)網(wǎng)絡(luò)。除了分類(lèi)和回歸問(wèn)題,它還有強(qiáng)化學(xué)習(xí)模塊(使用Q學(xué)習(xí))仍然是實(shí)驗(yàn)性的。ConvNetJS為在圖像識(shí)別方面表現(xiàn)優(yōu)異的卷積神經(jīng)網(wǎng)絡(luò)提供支持。
在ConvNetJS中,神經(jīng)網(wǎng)絡(luò)是層的列表。它提供以下層:
- 輸入(***個(gè))圖層
- 完全連接的層
- 卷積層
- 匯集層
- 局部對(duì)比度歸一化層
- 分類(lèi)器丟失(輸出)層:softmax和svm
- 使用L2的回歸損失(輸出)層
它支持幾個(gè)重要的激活功能,如:
- RELU
- 乙狀結(jié)腸
- 雙曲正切
- MAXOUT
以及優(yōu)化器如:
- 隨機(jī)梯度下降
- Adadelta
- AdagradS
- ConvNetJS還提供了一種方便的方法來(lái)保存和加載JSON文件的模型。
執(zhí)照:麻省理工學(xué)院。
WebDNN
WebDNN是一個(gè)專(zhuān)注于深度神經(jīng)網(wǎng)絡(luò)的圖書(shū)館,包括具有LSTM架構(gòu)的遞歸神經(jīng)網(wǎng)絡(luò)。它使用TypeScript和Python編寫(xiě),并提供JavaScript和Python API。
它還提供了在瀏覽器中執(zhí)行GPU的可能性。
WebDNN的一個(gè)非常方便的功能是可以轉(zhuǎn)換和使用PyTorch,TensorFlow,Keras,Caffemodel或Chainer預(yù)訓(xùn)練的模型。
natural
natural是一個(gè)用于Node.js的自然語(yǔ)言處理的JavaScript庫(kù)。
它支持:
- 標(biāo)記化(將文本分解為字符串?dāng)?shù)組)
- 弦距離的計(jì)算
- 匹配相似的字符串
- 分類(lèi)(樸素貝葉斯,邏輯回歸和***熵)
- 情感分析(目前有八種語(yǔ)言)
- 語(yǔ)音匹配,inflectors,n-gram等
結(jié)論
在過(guò)去的幾年里,JavaScript和機(jī)器學(xué)習(xí)都得到了很多關(guān)注和普及。盡管最初是為了實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)行為而創(chuàng)建的,但JavaScript成為實(shí)現(xiàn)和應(yīng)用機(jī)器學(xué)習(xí)方法的***語(yǔ)言之一,尤其是在瀏覽器或服務(wù)器(Node.js)中。
本文提供了有關(guān)JavaScript機(jī)器學(xué)習(xí)庫(kù)可用性的初始信息。