機器學習工程師需要掌握哪些編程語言?

本題已加入知乎圓桌 ?「機器學習 · 學以致用」,更多「機器學習」相關話題討論歡迎關注。

想往機器學習方面發展。目前我的情況是C++和Java都會一些基礎的東西,但是都不精通。要是兩個都精那是不可能的,所以我想從裡面選一個深入學習。目標是做數據挖掘,機器學習方面的演算法工程師,請問需要掌握哪一個


取決於你希望做一些什麼:

- 機器學習的底層優化:C/C++,適當學習一些assembly和intrinsics。
- 機器學習框架和演算法的開發優化:C/C++,CUDA。根據工作的側重可能需要了解OpenCL,OpenGL,甚至
HDL,但是這些都是bonus。
- 工業級別的分散式系統:依然是C/C++,了解分散式系統的知識比如說MPI,Spark,等等。
- 機器學習模型的設計研究:Python 加上一兩個機器學習的框架,最好還是要學一些C/C++。
- 機器學習在前端的應用:Python,java(Android),Obj-C(iOS),但是這個其實基本上和機器學習沒有太大關係。
- 機器學習在大量傳統公司當中的應用:他們以前用什麼語言就什麼語言。。。

另外,作為面試官的話我會根據你的背景和偏好選擇C++和Python之一。個人把這兩個列為必須要會一門的語言。


看到各位同學的精彩回答收穫頗豐,有關機器學習工程師要掌握哪些編程語言,社區有一篇不錯的文章分享過來,希望對大夥有所幫助

機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能。機器學習牽涉的編程語言十分之廣,包括了MATLAB、Julia、R、Perl、Python、Clojure、Ruby等等。

為了讓開發者更加廣泛、深入地了解機器學習,雲棲社區組織翻譯了GitHub Awesome Machine Learning 資源,涵蓋24種編程語言的機器學習的框架、庫以及其他相關資料。

目錄

  • C
    • 通用機器學習
    • 計算機視覺
  • C++
    • 計算機視覺
    • 通用機器學習
    • 自然語言處理
    • 序列分析
    • 手勢識別
  • Common Lisp
    • 通用機器學習
  • Clojure
    • 自然語言處理
    • 通用機器學習
    • 數據分析 /數據可視化
  • Erlang
    • 通用機器學習
  • Go
    • 自然語言處理
    • 通用機器學習
    • 數據分析 /數據可視化
  • Haskell
    • 通用機器學習
  • Java
    • 自然語言處理
    • 通用機器學習
    • 數據分析 /數據可視化
    • 深度學習
  • Javascript
    • 自然語言處理
    • 數據分析 /數據可視化
    • 通用機器學習
    • 其他
  • Julia
    • 通用機器學習
    • 自然語言處理
    • 數據分析/數據可視化
    • 其他項 /展示
  • Lua
    • 通用機器學習
    • 示例和腳本
  • Matlab
    • 計算機視覺
    • 自然語言處理
    • 通用機器學
    • 數據分析 / 數據可視化
  • .NET
    • 計算機視覺
    • 自然語言處理
    • 通用機器學習
    • 數據分析 /數據可視化
  • Objective C
    • 通用機器學習
  • OCaml
    • 通用機器學習
  • PHP
    • 自然語言處理
    • 通用機器學習
  • Python
    • 計算機視覺
    • 自然語言處理
    • 通用機器學習
    • 數據分析 /數據可視化
    • 雜項腳本/ iPython筆記 /源碼庫
    • Kaggle競賽源碼
  • Ruby
    • 自然語言處理
    • 通用機器學習
    • 數據分析 /數據處理
    • 雜項
  • Rust
    • 通用機器學習
  • R
    • 通用機器學習
    • 數據分析 /數據可視化
  • SAS
    • 通用機器學習
    • 數據分析 /數據可視化
    • 高性能機器學習(MPP)
    • 自然語言處理
    • 示例和腳本
  • Scala
    • 自然語言處理
    • 數據分析 /數據可視化
    • 通用機器學習
  • Swift
    • 通用機器學習
  • Credits

C

------------------------------------------------------------------------------------

通用機器學習

  • Recommender - 一個C語言庫,利用協同過濾(CF)進行產品推薦/建議;
  • Darknet -是一個用C和CUDA編寫的開源神經網路框架,它速度快,易於安裝,並支持CPU和GPU計算。

計算機視覺

  • CCV -基於C語言、高速緩存的核計算機視覺庫,是一個現代化的計算機視覺庫;
  • VLFeat -開放、可便攜的計算機視覺演算法庫,內有matlab工具箱。

語音識別

  • HTK -隱馬爾可夫模型工具包(HTK)是一個攜帶型工具包,用於構建和操作隱馬爾可夫模型。

C++

------------------------------------------------------------------------------------

計算機視覺

  • OpenCV -OpenCV自帶C ++、C、Python、Java和MATLAB介面,並支持Windows、Linux、Android版和Mac OS等系統;
  • DLib -DLib有C ++和Python介面,用於人臉檢測和訓練通用的目標探測器;
  • EBLearn -Eblearn是一種面向對象的C++庫,能夠實現各種機器學習模型;
  • VIGRA -VIGRA是通用跨平台的C++計算機視覺和機器學習庫,能夠用Python綁定任意維度的體積。

通用機器學習

  • mlpack -可擴展的C++機器學習庫;
  • DLib -ML工具套件,能夠很容易嵌入到其他應用程序中;
  • encog-cpp
  • shark
  • Vowpal Wabbit (VW) -一個快速的核外(out-of-core )學習系統;
  • sofia-ml -快速增量演算法套件;
  • Shogun -Shogun機器學習工具箱;
  • Caffe -基於清潔度、可讀性和速度考慮而開發的深度學習框架。[深度學習]
  • CXXNET -另一個深度學習框架,其核心代碼少於1000行;[深度學習]
  • XGBoost -一種並行、優化、通用的梯度推進庫;
  • CUDA -利用C++ / CUDA快速實現卷積;[深度學習]
  • Stan -一種概率性的編程語言,能夠實現Hamiltonian Monte Carlo抽樣的全貝葉斯統計推斷;
  • BanditLib -一個簡單、有多重保護的Bandit庫;
  • Timbl :一個軟體包/ C ++庫,能夠實現多種基於內存的學習演算法,其中有IB1-IG--k-最近鄰分類的實現、IGTree--IB1-IG的決策樹近似值;常用於NLP;
  • Disrtibuted Machine learning Tool Kit (DMTK) -微軟開發的分散式機器學習(參數伺服器)框架,能夠在多台機器的大型數據集上實現訓練模型,與它捆綁的現有工具包括:LightLDA和分散式(多感測)字嵌入;
  • igraph -通用圖形庫;
  • Warp-CTC -在CPU和GPU上快速並行地實現連接時域分類(Connectionist Temporal Classification,CTC);
  • CNTK -微軟研究院開發的計算網路工具包(CNTK),它作為一系列計算步驟,通過有向圖來描述神經網路,是統一的深度學習工具包;
  • DeepDetect -一個機器學習API,伺服器用C++11編寫,它使機器學習的狀態易於工作,並容易集成到現有應用程序;
  • Fido -一個高度模塊化的C++機器學習庫,用於嵌入式電子產品和機器人中。

自然語言處理

  • MIT Information Extraction Toolkit -C,C ++和Python的工具,用於命名實體識別與關係抽取;
  • CRF++ -條件隨機域(Conditional Random Fields,CRFs)的開源實現,用於分割/標記序列數據及其他自然語言處理任務;
  • CRFsuite -條件隨機域(CRFs)的實現,用於標記序列數據;
  • BLLIP Parser -BLLIP自然語言解析器(也稱為Charniak-Johnson解析器);
  • colibri-core -是C++庫、命令行工具,和Python綁定用於提取與使用基本的語言結構,例如用快速和高效存儲的方式實現n-grams和skipgrams模型;
  • ucto -是一種工具和C++庫,基於支持各種語言的編譯器,內含統一字元標準及規則表達式;支持FoLiA格式;
  • libfolia -支持FoLiA格式的C++庫;
  • frog -為Dutch開發的基於內存的NLP套件:POS標籤、歸類分析、依存句法分析、NER、淺層句法分析、形態分析;
  • MeTA -s&://meta-toolkit.org/">MeTA : ModErn 語篇分析(ModErn Text Analysis),是一個C++數據科學工具包,便於挖掘大文本數據。

語音識別

  • Kaldi -Kaldi是用於語音識別的工具包,用C++編寫,由Apache許可證V2.0協議授權,專門給語音識別的研究人員使用。

序列分析

  • ToPS -這是一種面向對象的框架,便於在用戶定義的字母序列中整合概率模型。

手勢檢測

  • grt -手勢識別工具包(GRT)是一個跨平台、開源的C++機器學習庫,用於實時的手勢識別。

Common Lisp

------------------------------------------------------------------------------------

通用機器學習

  • mgl -神經網路(玻耳茲曼機,前饋和循環網路)以及高斯過程;
  • mgl-gpr -演化演算法;
  • cl-libsvm -LIBSVM支持向量機庫的包裝。

Clojure

------------------------------------------------------------------------------------

自然語言處理

  • Clojure-openNLP - Clojure中自然語言處理的工具包(openNLP);
  • Infections-clj - Clojure和Clojure中類似於Rails的inflection庫。

通用機器學習

  • Touchstone - Clojure A/B 測試庫;
  • Clojush - Clojure中的Push程序語言和PushGP遺傳編程系統;
  • Infer - Clojure中分析和機器學習的工具;
  • Clj-ML - Clojure中基於Weka及其相關環境的深度學習庫;
  • Encog - 在Clojure中封裝成Encog (v3) (專門研究神經網路的機器學習框架);
  • Fungp - Clojure中的遺傳編程實例庫;
  • Statistiker - Clojure中基礎機器學習演算法;
  • clortex -採用Numenta』s Cortical 學習演算法的通用機器學習庫;
  • comportex - 採用Numenta』s Cortical 學習演算法的功能組合的機器學習庫。

數據分析/數據可視化

  • Incanter - Incanter是基於 Clojure,類似R的統計計算與製圖平台;
  • PigPen - Clojure中的Map-Reduce;
  • Envision - 基於Statistiker和D3Clojure 數據可視化庫。

Erlang

------------------------------------------------------------------------------------

通用機器學習

  • Disco- Erlang中的Map Reduce模型。

Go

------------------------------------------------------------------------------------

自然語言處理

  • go-porterstemmer - 一個用於實現Porter詞幹提取演算法的原生Go語言凈室;
  • paicehusk - Go語言中用於實現Paice/Husk詞幹提取演算法;
  • snowball - Go語言中的Snowball 詞幹提取器;
  • go-ngram -內存N-gram索引壓縮 。

通用機器學習

  • Go Learn - Go語言中的機器學習庫;
  • go-pr - Go語言中的模式識別包;
  • go-ml - 線性/邏輯回歸、神經網路、協同過濾和多元高斯分布;
  • bayesian - Go語言中樸素貝葉斯分類庫;
  • go-galib - Go語言版的遺傳演算法庫;
  • Cloudforest - GO語言中的決策樹集合;
  • gobrain - GO語言版的神經網路;
  • GoNN - GoNN 是用Go語言實現的神經網路,它包括BPNN、RBF、PCN ;
  • MXNet - 輕量級、攜帶型、靈活的分散式/深度學習系統,可對動態的、突變數據流調度部署,同時也支持Python、R、Julia、Go、Javascript 等編程語言。

數據分析/數據可視化

  • go-graph - Go語言圖形庫;
  • SVGo - Go語言的SVG生成庫;
  • RF - Go語言的隨機森林庫;

Haskell

------------------------------------------------------------------------------------

通用機器學習

  • haskell-ml - Haskell 語言實現的各種深度學習演算法 ;
  • HLearn - 根據代數結構解釋其深度模型的庫;
  • hnn - Haskell語言的神經網路庫;
  • hopfield-networks - Haskell中用於無監督學習的Hopfield網路;
  • caffegraph - 一種用於深度神經網路的領域特定語言(DSL);
  • LambdaNet - Haskell中的可配置的神經網路。

Java

------------------------------------------------------------------------------------

自然語言處理

  • Cortical.io - 像人腦一樣快速、精確處理複雜的NLP(自然語言處理)操作(如消歧、分類、流文本過濾等操作)的Retina API;
  • CoreNLP - 斯坦福大學的CoreNLP提供的一系列的自然語言處理工具,該工具可以根據輸入原始英語文本,給出單詞的基本形式;
  • Stanford Parser - 一種自然語言分析器,可以分析語句的語法結構;
  • Stanford POS Tagger -一個詞性分類器 (POS Tagger);
  • Stanford Name Entity Recognizer - Stanford NER是一個Java實現的名稱識別器;
  • Stanford Word Segmenter - 分詞器,很多NLP工作中都要用到的標準預處理步驟;
  • Tregex, Tsurgeon and Semgrex - Tregex基於樹關係以及節點匹配的正則表達式,用於在樹狀數據結構中進行模式匹配(名字是「tree regular expressions」的縮寫) ;
  • Stanford Phrasal: 一個基於短語的翻譯系統
  • Stanford English Tokenizer - Stanford Phrasal 用Java寫成的最新的基於統計短語的機器翻譯系統;
  • Stanford Tokens Regex - 一個分解器,可以將文本大致分成一系列對應於「詞」的符號;
  • Stanford Temporal Tagger - SUTime是一個用於識別並標準化時間表達式的庫;
  • Stanford SPIED -在種子集上使用模式,以迭代方式從無標籤文本中進行學習實體;
  • Stanford Topic Modeling Toolbox - 為社會科學家及其他希望分析數據集的人員提供的主題建模工具;
  • Twitter Text Java - Java實現的推特文本處理庫;
  • MALLET - 基於Java的統計自然語言處理、文檔分類、聚類、主題建模、信息提取以及其他機器學習的文本應用包;
  • OpenNLP - 基於機器學習的自然語言文本處理工具包;
  • LingPipe - 一個使用計算機語言學文本處理的工具包;
  • ClearTK - 在Java中ClearTK為開發統計語言處理組件提供了一個框架,該框架是基於Apache UIMA;
  • Apache cTAKES - Apache cTAKES是一個開源自然語言處理系統,用於從臨床電子病歷的自由文本中提取信息;
  • ClearNLP - ClearNLP工程為自然語言處理提供了軟體和資源提供了。該項目最早在計算機癒合和教育研究中心啟動,目前由Emory 大學的語言和信息研究中心繼續開發。該項目遵循Apache 2 license。

通用機器學習

  • aerosolve - 是由Airbnb設計的定價建議系統的機器學習庫;
  • Datumbox -應對機器學習和統計應用快速發展的機器學習框架;
  • ELKI - 用於數據挖掘的Java工具包(無監督:聚類、異常檢測等等);
  • Encog - 一種先進的神經網路和機器學習框架。 Encog包含用於創建各類網路的類,同時也支持為神經網路規範和處理數據的類。它的訓練採用多線程彈性傳播。它也能使用GPU加快處理時間。提供了圖形化界面來幫助建模和訓練神經網路。
  • EvA2 - 包含遺傳演算法、差分進化、協方差自適應進化策略等等的進化演算法框架;
  • FlinkML in Apache Flink - Flink中的分散式機器學習庫;
  • H2O - 深度學習引擎,支持在Hadoop、Spark 或者通過R、Python、Scala 、REST/JSONML 的APIs連到的筆記本上進行分散式學習;
  • htm.java - 採用Numenta Cortical 學習演算法的通用機器學習庫 ;
  • java-deeplearning - Java、Clojure、Scala的分散式深度學習平台;
  • JAVA-ML - 包含所有Java演算法的通用介面的通用深度學習庫;
  • JSAT - 用於分類、回歸、聚類的機器學習演算法集合;
  • Mahout - 分散式的機器學習庫;
  • Meka - MEKA提供了一個面向多標籤學習和評價方法的開源實現(擴展成Weka);
  • MLlib in Apache Spark - Spark中的分散式機器學習程序庫;
  • Neuroph - Neuroph 是輕量級的Java神經網路框架;
  • ORYX - 採用Apache Spark和Apache Kafka的Lambda 結構框架,專門用於實時大規模機器學習;
  • Samoa - SAMOA 是一個包含用於分散式機器學習數據流的框架,同時為數據流流入不同的流處理平台提供了介面;
  • RankLib - RankLib是一個排序學習演算法庫;
  • rapaio - Java中用於統計、數據挖掘和機器學習的工具箱;
  • RapidMiner - RapidMiner integration into Java code
  • Stanford Classifier - 斯坦福大學分類器是一種機器學習工具,它可以將數據項歸置不同的類別中;
  • SmileMiner - 統計機器智能與學習引擎;
  • SystemML - 靈活、可擴展的機器學習語言;
  • WalnutiQ - 人腦部分面向對象模型;
  • Weka - Weka是數據挖掘方面的機器學習演算法集 。

語音識別

  • CMU Sphinx - CMU Sphinx 是基於Java 語音識別庫,用於純語音識別開源工具包。

數據分析/數據可視化

  • Flink - Apache Flink是一個面向分散式數據流處理和批量數據處理的開源計算平台;
  • Hadoop - 大數據分析平台;
  • Spark - Spark是一個快速通用的大規模數據處理引擎;
  • Storm - Storm是一個分散式實時計算系統;
  • Impala - 為Hadoop實現實時查詢
  • DataMelt - 用於數字計算、統計、符號計算、數據分析和數據可視化的數學軟體;
  • Dr. Michael Thomas Flanagan"s Java Scientific Library

深度學習

  • Deeplearning4j - 採用並行GPU的商用可擴展深度學習庫。

Javascript

------------------------------------------------------------------------------------

自然語言處理

  • Twitter-text - Twitter文本處理庫中使用JavaScript的實現;
  • NLP.js – 使用JavaScript和CoffeeScript的NLP實用工具;
  • natural – 用於節點的通用自然語言工具;
  • Knwl.js – JS中的自然語言處理器;
  • Retext -用於分析和處理自然語言的可擴展系統;
  • TextProcessing -情感分析,詞幹和詞形還原,部分詞性標註和組塊,短語提取和命名實體識別;
  • NLP Compromise - 瀏覽器中的自然語言處理。

數據分析/數據可視化

  • D3.js
  • High Charts
  • NVD3.js
  • dc.js
  • chartjs
  • dimple
  • amCharts
  • D3xter –直接建立在D3上的繪圖;
  • statkit – JavaScript的統計工具;
  • datakit - JavaScript的輕量級數據分析框架;
  • science.js - JavaScript中的科學統計計算;
  • Z3d – 在Three.js上輕鬆地繪製互動式3D圖;
  • Sigma.js - JavaScript庫,專門用於圖形繪製;
  • C3.js – 基於D3.js的定製庫,能夠輕鬆繪製圖表;
  • ZingChart - Vanilla JS編寫的庫,用於大數據可視化;
  • cheminfo – 數據可視化和分析的平台,使用可視化項目。

通用機器學習

  • Convnet.js - ConvNetJS是一個JavaScript庫,用於訓練深度學習模型[深度學習];
  • Clusterfck - 為Node.js和瀏覽器,用Javascript實現的凝聚層次聚類;
  • Clustering.js – Javascript為Node.js和瀏覽器實現的聚類演算法;
  • Decision Trees -使用ID3演算法實現NodeJS決策樹;
  • figue - K-均值、模糊C均值和凝聚聚類;
  • Node-fann -Node.js綁定的快速人工神經網路庫(Fast Artificial Neural Network Library,FANN);
  • Kmeans.js - K-均值演算法用JavaScript的簡單實現,用於Node.js和瀏覽器;
  • LDA.js - Node.js的LDA主題建模;
  • Learning.js –用Javascript實現邏輯回歸/ c4.5決策樹;
  • Machine Learning - Node.js的機器學習庫;
  • Node-SVM - Node.js的支持向量機;
  • Brain - JavaScript中的神經網路[已棄用];
  • Bayesian-Bandit - Node和瀏覽器的貝葉斯實現;
  • Synaptic – 用於Node.js和瀏覽器的無架構神經網路庫;
  • kNear - JavaScript實現的k個最近鄰演算法,用於監督學習;
  • NeuralN - Node.js的C++神經網路庫,其優點是有大量的數據集和多線程訓練;
  • kalman - Javascript的卡爾曼濾波器;
  • shaman - Node.js庫,同時支持簡單和多元的線性回歸;
  • ml.js –用於Node.js和瀏覽器的機器學習和數值分析工具;
  • Pavlov.js -利用馬爾可夫決策過程強化學習;
  • MXNet - 輕量級、攜帶型、靈活的分散式/深度學習系統,可對動態的、突變數據流調度部署,同時也支持Python、R、Julia、Go、Javascript 等編程語言。

其它

  • sylvester – 用於JavaScript的向量和矩陣數學;
  • simple-statistics - 描述,回歸和推斷統計的JavaScript實現;用文字實現的JavaScript,沒有依賴性,能在所有現代瀏覽器(包括IE)以及在node.js中工作;
  • regression-js – JavaScript庫,包含小二乘法擬合方法的集合,用於尋找數據集的趨勢;
  • Lyric -線性回歸庫;
  • GreatCircle – 計算大圓距的庫。

Julia

------------------------------------------------------------------------------------

通用機器學習

  • MachineLearning - Julia機器學習庫;
  • MLBase -一組支持機器學習演算法的發展的函數;
  • PGM - 一個概率圖模型的Julia框架;
  • DA - 正則判別分析的Julia組件;
  • Regression - 回歸分析演算法(例如線性回歸和邏輯回歸);
  • Local Regression -局部回歸,超級流暢!
  • Naive Bayes - Julia樸素貝葉斯方法的簡單實現;
  • Mixed Models – 用於裝配(統計)混合效應模型的Julia組件;
  • Simple MCMC – Julia實現基本的MCMC採樣;
  • Distance - Julia距離評估模塊;
  • Decision Tree -決策樹分類和回歸;
  • Neural - Julia神經網路;
  • MCMC – Julia 的MCMC工具;
  • Mamba – Julia中馬爾可夫鏈蒙特卡羅(MCMC)的貝葉斯分析;
  • GLM – Julia的廣義線性模型。
  • Online Learning
  • GLMNet – GMLNet的Julia包裝版,適合套索/彈性網模型;
  • Clustering -集群數據的基本功能:K-均值,DP-均值等;
  • SVM – Julia適用的SVM;
  • Kernal Density – Julia的核密度估計量;
  • Dimensionality Reduction -降維方法;
  • NMF - 非負矩陣分解的Julia包;
  • ANN - Julia人工神經網路;
  • Mocha – 受Caffe啟發,Julia的深度學習框架;
  • XGBoost – Julia中的eXtreme Gradient Boosting 包;
  • ManifoldLearning – 用於流形學習和非線性降維的Julia組件;
  • MXNet - 輕量級、攜帶型、靈活的分散式/深度學習系統,可對動態的、突變數據流調度部署,同時也支持Python、R、Julia、Go、Javascript 等編程語言。
  • Merlin - Julia靈活的深度學習框架。

自然語言處理

  • Topic Models – Julia下的主題模型;
  • Text Analysis – Julia下的文本分析包。

數據分析/數據可視化

  • Graph Layout – 純Julia實現的圖布局演算法;
  • Data Frames Meta - DataFrames的元編程工具;
  • Julia Data - 處理表格數據的Julia庫;
  • Data Read - 從Stata、SAS、SPSS讀取文件;
  • Hypothesis Tests – Julia的假設檢驗;
  • Gadfly – Julia 靈活的統計製圖法;
  • Stats – Julia的統計圖檢驗;
  • RDataSets - 用於裝載許多R中可用數據集的Julia包;
  • DataFrames – 處理列表數據的Julia庫;
  • Distributions - 概率分布和相關函數的Julia包;
  • Data Arrays - 允許缺失值的數據結構;
  • Time Series – Julia的時間序列工具包;
  • Sampling - Julia的基本採樣演算法。

其他項/展示

  • DSP -數字信號處理(濾波,周期圖,頻譜圖,窗函數);
  • JuliaCon Presentations – JuliaCon的演示文稿;
  • SignalProcessing – Julia寫的信號處理工具;
  • Images – Julia的圖像庫。

以上為「史上最全機器學習資料(上)」的全部內容,敬請期待下一節。

編譯自:https://github.com/josephmisiti/awesome-machine-learning

譯者:劉崇鑫 校對:王殿進

原文鏈接:史上最全的機器學習資料(上)-博客-雲棲社區-阿里雲


  1. Python: 下可寫爬蟲爬數據,可寫腳本做數據預處理; 上可調用scikit-learn等機器學習框架,以及tensorflow,theano,mxnet等深度學習框架。
  2. 如果是放在線上的程序的話,一般會用c++ 或者java。個人推薦java,用java處理文本還是比較方便的。
  3. 時間有限的話可以先學java,python,學會用一種機器學習和深度學習框架。

編程語言是大家比較關注的問題。AI工程師也會捲入各種平台和語言之爭,在語言的選擇上主要關注兩點的:一程序員編程效率高,就是編的快;二就是編出的程序機器運行效率高,就是跑得快。在表達的時候,需要一種更善於表達的語言,運行的時候我們又恨不得需要一種更高性能的語言,所以通常會把兩種語言糅合起來使用,比如Python跟C++,或者Scala跟Java這樣的幾種組合。微博一般就這兩種組合。

Scala基於Java,能夠直接調用各種Java對象,而語法和Python一樣比較簡潔,代碼相對短小,所以編起來不至於那樣費勁。我們運行的很多平台基於Java,大規模計算平台是基於用Scala編寫的Spark來定製,所以Scala+Java這樣的組合也就很自然。

順便說下,微博實現了一個高性能分散式平台,規模達到了千億樣本,目標是萬億樣本和百億特徵,大部分其他企業的同類型平台,因為多用於廣告等相對內容消費低頻的場景,支持的規模會比這個系統小一個數量級。所以微博的基於參數伺服器的大規模機器學習平台在實踐規模上屬於前列,本質上還是因為有背後大業務的需求驅動。

Python跟C++組合因為TensorFlow的引入而更流行,而這種組合的道理也是基於同樣的邏輯:人工和機器並重,表達效率和運行效率齊飛。


謝邀。就在公司而言,java與python。
對於很多人說c++,一般作為某個機器學習演算法庫的開發語言,因為c++在語言性能上比java要高,但是現在來說,一般常用的演算法庫都已經開發好了,然後用到業務中。

而實踐中,很多業務並不是用常用的演算法就能處理好的,需要自己寫適合自己問題的演算法或者對常用的機器學習演算法進行改進,或者一般性的演算法。因此一般使用java與python。
因為數據量一大,就需要分散式,而很多分散式工具都是面向使用者都是java的,比如mpi,mapreduce,spark(scala),graph等,並且java很多開發庫,以及開發效率比c++高,比如做nlp。

python一般是單機處理數據,快速驗證演算法等,以及一些簡單的udf。

對了,不要忘記sql。來處理數據。

最後一句:不要迷戀語言,對於演算法,優化演算法的時間複雜度以及空間負責度比使用那種語言更加可取。而且java不斷在提升語言效率。


機器學習的演算法以及應用都已經非常廣泛,從最底層的硬體,到最上層的前端,每個分層用的語法都不盡相同。如果是問演算法工程方面的話,我就從不同領域的工程師需要具備的語言來分析吧!


* 鑽研新演算法、發paper的研究人員:Python,C/C++

Python絕對是你最好的選擇,Python不但擁有豐富的machine learning package,目前火爆的tensorflow,都是以Python作為最外層的api。除了擁有豐富的資源作後盾,Python語言上手門檻低,可讀性高,不需要花大量的時間處理程序語言問題,可以投入更多精力在研究上。

另一個語言就是C/C++啦!C/C++算是歷史悠久的語言,效率高。像是影像處理等許多的應用大部分還是以C/C++作為開發工具,深度學習的框架底層也會用到C/C++,熟悉的話,C/C++也會是個很好的工具。

* 數據 ETL工程師:Java

在Big Data Machine Learning 的時代,信息的量級已經不是一個簡單的程序能夠處理的。從4年前的HadoopSparkStorm等一路走來,這些分散式系統讓我們能更有效率地處理原始信息,並轉換成乾淨的數據。

雖然目前有許多可以連接Python的api介面,不過這一塊的主要構成還是Java/Scala。如果想要進行更底層的操作,掌握Java會更加如虎添翼。


* 數據分析、數據挖掘工程師:R

如果想對資料作數據挖掘統計分析,推薦使用R語言,R內建了許多統計學以及數字分析的功能,也能利用安裝套件獲取更多工具。而R語言具有高質量的繪圖能力,如果信息量不大,可以作為你將數據可視化的一大利器;如果信息量大,R語言也提供了分散式處理的工具,不過效能方面還是有待觀察。其實python在數據挖掘領域的表現也相當不錯,所以如果你對R沒有那麼熟悉,Python也會是個不錯的選擇。


說了這麼多,如果你想當演算法工程師,個人建議Python是必須要掌握的語言,上手簡單不吃虧,有時候還可以寫個小程序處理數據。而目前你掌握的JavaC++,建議先精通Java,哪天對演算法感到厭倦了,想回到應用端,Java可以成為你的殺手鐧!


Python &> Java &> c++

機器學習最重要的幾點在於,數據預處理、模型構建與訓練、模型的部署與服務提供。

數據預處理:Python/Java/Scala配上Spark非常順手和快捷

模型構建與訓練:目前的大多數機器學習和深度學習框架都是用Python作為基礎構建語言,其他語言也有很多框架,但是快速的構建模型,快速的進行各種驗證,Python有顯著的優勢。

模型的部署與服務提供:Serving方面還是用c++和Java為主(效率考慮),使用python訓練出來的模型,其實有很多辦法可以讓其他語言進行調用。而且一些框架本身也提供原生的方法將模型保存為獨立的文件,然後再用其他語言load進來。如TensorFlow1.1開始有的官方Java API,就可以直接load保存的模型,進行預測。


優達君在這兒跟大家分享我們家老大特龍教授( @Sebastian Thrun )的回答。

進入人工智慧領域,Python是完美的。Python 是一門很棒的編程語言。對於成為一名精通人工智慧、機器學習的程序員所需處理的所有事情,我認為如果你知道如何編程,使用什麼語言並不重要。如果你知道如何編程,你應該可以輕鬆地轉換到其他語言。剛開始工作的時候,我用的是 C 和 C++,比起 Python,它們存在一些優點和許多缺點。C++ 當然更加高效。但是用來快速製作原型就會比較困難。後來的工作中,我開始使用 Python。現在,我更多的使用 Python,我也會使用 Matlab 和其他語言。在一定程度上,Python 更棒。你應該能夠以任何語言,幾乎是以同樣的方式去實現基本概念。

更多關於特龍教授( @Sebastian Thrun ) 關於人工智慧機器學習的分享,請參閱 Sebastian Thrun知乎Live實錄


必會的:python,強大的科學計算和機器學習演算法庫,可以讓你快速實現各種常見演算法,居家旅行之首選。
其他的,C++或java,各個公司要求不一樣


謝邀。
Tensorflow, Theano,Torch, Caffe選一即可。
當然keras也是很好的。


從重要性來說,我認為第一位是 Python,目前主流的庫都默認支持的
第二位是R,很多學術論文的演算法都是提供R的實現


如果從C++和Java里二選一,那我選擇Java。Java在機器學習和數據挖掘上應用面更廣,實用性更強。
此外,Python是必會的,平時爬數據、清理數據、做分析需要用到。
Hadoop, Spark等框架不求精通,但是基本的東西還是要會的。
至於深度學習相關的東西,雖然現在很火,但是真正能用到的崗位並不多,學習的優先順序可以適當降低。


謝邀。
如果只能學一種的話:Python
如果能學兩種的話:Python Java
當然最好能學三種啦!Python Java C++
題主的目標是機器學習和數據挖掘,這個方向最核心的是什麼?數學和機器學習演算法,這也是和其他計算機方向最本質的區別。
這就是我為什麼首推Python,這門語言可以不用牽扯你太多精力,你可以更多關注模型本身,在學習的過程中可以快速實現一個demo,不斷給自己正反饋,可以查查coursera和edx上大多數機器學習課程教學語言時Python。
第二個推Java是根據目前市場上機器學習崗位要求,Java崗位多餘於C++,因為企業很多事時候更多關注的是業務,熟悉java可以快速幫助你找到不錯的工作。
第三個就是C++了,目前的情況是:很多機器學習庫底層都是C++,然後給出Python和Java的介面進行調用,C++可以讓你的演算法更加高效。
總結一下,其實要看你處於一個什麼狀態以及你自己的一個定位,如果你是一個機器學習的入門者那就python,專心學模型演算法。當你覺得你模型這些東西都理解透徹了,覺得現有的包都太渣了,想自己寫或者改改他們就可以上C++和Java了。


MATLAB、R、Python、Java/C、ELM

MATLAB

數百萬軟體工程師和開發人員已經使用MATLAB來評估,分析和開發改變我們生活方式的尖端系統和產品。 MATLAB是一種基於矩陣的語言,已經成為演示計算數學的最簡單的方法。通過內置的圖形和全面的開發環境,MATLAB可以讓分析人員和開發人員輕鬆地查看數據並從中獲得有意義的見解。它是一個為開發人員提供理想的桌面環境來實驗,探索和發現新的演算法和方法的平台。除此之外,MATLAB的工具是經過測試和測試的語言,其計算能力已經被設計和測試了耐用性。

總體而言,MATLAB是用於矩陣表示和執行的完美機器學習語言。它也提供了一個完美的平台,用於在泄露給定方法學的線性代數時使用。該語言很好地自我學習演算法作為一個刷新,以及全面的了解,當試圖了解複雜的方法。目前在許多初級大學課程中,這是一種非常受歡迎的語言。 MATLAB對複雜矩陣運算的適用性由詳細的特徵矩陣補充。

R

在一段時間內,R一直是統計分析工作和機器學習的主要語言。 R機器學習語言由於其複雜的性質和廣泛的學習曲線,是為高級用戶而設計的。話雖如此,它是通過圖形來理解和探索統計數據的人的完美平台。 R擁有幾乎無數的機器學習演算法和複雜的實現,全部由演算法開發者編寫。對於想要發現,設計和測試演算法的人來說,這是一種有能力的語言。它最適合於包含文物的一次性項目,如報告,研究論文,甚至預測。 R目前是競爭對手最受歡迎的機器學習平台,如Kaggle,因為他們喜歡Python等其他語言。

R在數據分析和演算法選項方面提供更多的功能,並且由於默認存在的眾多機器學習演算法,這也是一個非常強大的工具,使其成為未來準備好的機器學習語言。唯一可能的問題是,R的所有演算法都是由第三方供應商創建的,這通常會導致開發者體驗不一致。這可能會影響生產力,因為開發人員必須學習如何建模數據,以及在每個包中重複預測每個演算法。

Python

Python機器學習語言是一種數據科學書籍,已經與製造業一起使用了一段時間,並且被用於將生產系統投入運行。 Python是一種領先的機器學習系統,可以讓用戶直接訪問預測分析,因此證明自己是世界上最重要的數據科學語言。開發人員已經成為一種機器語言,這些開發人員正在尋找更好的問題或擴大現有機器學習系統的能力。

Python是一種全面的語言,涵蓋了一系列圖書館,包括Teano,Keras和scikit學習的圖書館。它還具有易於理解的演練,甚至從意見分析到神經網路的有用提示,允許用戶找到複雜問題的答案。 Python是日益流行的科學語言之一,其用戶友好性僅僅增加了其吸引力。 Python也是一個有用的通信工具,使我們更接近於再現性的未來。在這方面,Python比其他機器語言相對分散,這可以大大降低生產力。

Java/C

機器學習是一系列複雜的演算法,而不僅僅是黑魔法,而C系列機器學習語言是設計和以用戶為中心的功能如何使序列自動化的完美示例。 對於後續的生產實施,C為用戶提供了一個強大的庫,使他們可以自定義項目特定演算法的實現。

Java / C系列機器學習語言是經驗豐富的開發人員的天堂,有時間使用綜合圖書館進行微調。 這並不奇怪,大多數當前和較舊的機器學習演算法都是用Java編寫的。 LIBLINEAR和LIBSVM的深入學習實現都是以C系列語言編寫的,其中使用Python和其他工具作為槓桿。 Java是一種功能編程語言,可以讓未來的機器學習系統具有速度,準確性和精度。

Extreme Learning Machines (ELM)

ELM是一種高度功能的編程語言,允許用戶輕鬆創建基於瀏覽器的用戶界面。 ELM使用功能強大的編程風格和圖形布局,具有高度的反應性,允許用戶設計界面而不會發生任何災難性的更新。 編程語言的使用壽命通常很短,但是極限學習機(ELM)語言是一種前景光明的語言。

在理論上,ELM被認為是一種編程語言,但是對於所有實際的目的,它可以與jQuery,CoffeeScript等平台更為緊密地進行比較。 極限學習機(ELM)由於其學習速度的前景而具有巨大的潛力,使其成為目前主導雲計算的大數據應用程序的完美語言。 只要解決了嘈雜的數據性能的基本問題,它一定會有影響力的。


GitHub 上有一個awesome-machine-learning ,是 josephmisiti 發起維護的機器學習資源列表,內容包括了機器學習領域的框架、庫以及軟體。

這個資源列表是按照編程語言排序,什麼語言在機器學習領域應用的多,在哪些細分領域應用的多,一目了然。


編程語言真的是一個很次要的問題。

自己去google搜索下面的關鍵詞吧,很多機器學習的演算法實現。

machine learning in Java

machine learning in C++

machine learning in Python

machine learning in Matlab

machine learning in R


如果是喜歡數據分析和演算法應用的,Python和R語言必須掌握一門,參加各種數據比賽或者找數據分析之類的工作一般都是有必要的;

如果是專門從事深度學習的,而且偏圖像處理的話,還是 Theano,Torch, Caffe用的多一些,Tensorflow(Python)在工業界也會經常用,但是因為它含有的現有的訓練好的模型不多,所以做遷移不是很方便,但如果不是做圖像方面的事情,可以考慮Tensorflow。這幾個工具具體的對比在Stanford的深度學習課程中的第12章有專門對比和分析。

至於所謂的C++,C這些底層的編程語言,如果不是喜歡重新造輪子,或者對於性能的要求過高,做這些底層架構的話,可以暫時不用去學;當然做分散式之類的話C/C++也經常會需要,同時MPI,Spark也得會。

當然如果希望讀博或者從事研究的話,Matlab,python,R這些是經常出現的,基本可以滿足你的需求。

不過我個人是偏向於Python的,也很推薦你學習一下python。


python 和 C++,但這裡指的python不是指用 scikit-learn 就可以的。要真正掌握一個框架的使用


node.js
一切能用js解決的問題,最終都會用js來解決。


普通工程師:C艹加大蟒,爪哇加scala
文藝工程師:R
2B工程師:Matlab


推薦閱讀:

The Elements of Statistical Learning 需要怎樣的數學基礎才能讀懂?
機器學習各種演算法怎麼調參?
深度學習caffe的代碼怎麼讀?
機器學習中常常提到的正則化到底是什麼意思?
有哪些現代分析方法可以用於解決「紅樓夢續寫爭議」?有哪些例子?

TAG:程序員 | 機器學習 |