最近幾年,人工智能浪潮層層推進(jìn),對(duì)各大科技公司產(chǎn)生巨大影響。百度推出Apollo無人車計(jì)劃,阿里建立達(dá)摩院,騰訊成立的AI Lab雖布局較晚卻也不甘人后。China+AI已是大勢(shì)所趨,吸引的不僅是大公司,更有許多人工智能的愛好者。曾經(jīng)只存在于科幻小說或?qū)嶒?yàn)室中遙不可及的人工智能產(chǎn)品也逐漸成為老百姓日常生活的一部分。而支撐人工智能技術(shù)迅速發(fā)展的核心技術(shù)之一就是機(jī)器學(xué)習(xí)。
首先來看看在某招聘網(wǎng)站上,當(dāng)前公司對(duì)機(jī)器學(xué)習(xí)人才有怎樣的要求。
可以看到,對(duì)語言的掌握是其中尤其重要的基礎(chǔ)條件。學(xué)好語言,就相當(dāng)于走好了萬里長(zhǎng)征第一步。那么,在機(jī)器學(xué)習(xí)的起步階段,我們需要會(huì)那種(些)酷炫的編程語言呢?
1. 我需要學(xué)習(xí)哪些編程語言?
不論你選擇哪種語言,只要對(duì)這種語言下的機(jī)器學(xué)習(xí)庫和工具足夠熟悉,語言本身就沒有那么重要了。現(xiàn)在對(duì)應(yīng)各種語言的機(jī)器學(xué)習(xí)庫層出不窮。根據(jù)你在公司中擔(dān)任的角色和所要完成的任務(wù)不同,某些語言和工具可能會(huì)比其他的更好用。
R
R 是一種為專統(tǒng)計(jì)計(jì)算而設(shè)計(jì)的語言。它在大規(guī)模的數(shù)據(jù)挖掘、可視化和報(bào)告方面已經(jīng)取得了巨大的成功。你能夠輕松地獲取各種的包(通過 CRAN)來使用幾乎所有的機(jī)器學(xué)習(xí)算法、統(tǒng)計(jì)測(cè)試和分析等。R 語言本身有著優(yōu)美(雖然有些人會(huì)覺得晦澀)的語法用來表達(dá)數(shù)據(jù)的關(guān)系、變換和并行操作。
KDNuggets 最近組織了一次投票,結(jié)果表明 R 是 2015 年用于解決分析、挖掘及其他數(shù)據(jù)科學(xué)任務(wù)的最受歡迎的語言。不過,近年來 Python 的人氣也在急劇上升。
MATLAB
MATLAB 在學(xué)術(shù)界很受歡迎,因?yàn)樗芴幚韽?fù)雜的數(shù)學(xué)表達(dá)式,對(duì)代數(shù)和微積分有強(qiáng)大的支持,還支持符號(hào)運(yùn)算。同時(shí),從數(shù)字信號(hào)處理到計(jì)算生物學(xué),又或者是其他的科目,它都有對(duì)應(yīng)的工具箱可用。它經(jīng)常被用于開發(fā)新的機(jī)器學(xué)習(xí)算法的原型,有時(shí)也會(huì)被用于開發(fā)最終完整的工具。它的商用許可的確非常昂貴,但也對(duì)得起它在研發(fā)方面帶來的方便。Octave 是一款免費(fèi)的 MATLAB 替代品。它的語法與 MATLAB 幾乎相同,但只提供一部分工具箱,IDE 也略微遜色。
Python
雖然 Python 是一種更通用的編程語言和腳本語言,但它在數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師中的人氣也是急劇上升。跟 R 和 MATLAB 不同,它并沒有內(nèi)置數(shù)據(jù)處理和科學(xué)計(jì)算專用的語法,但它有像 NumPy、SciPy 和 Pandas 這樣的庫用更友好的語法提供了同樣的功能。
像 scikit-learn、Theano 和 TensorFlow 這樣的機(jī)器學(xué)習(xí)庫讓你能夠方便地訓(xùn)練各種機(jī)器學(xué)習(xí)模型,還能用上分布式計(jì)算。當(dāng)然,這些庫中最影響性能的部分一般還是用 C/C++ 甚至 Fortan編寫的,而 Python 包則是作為它們的接口(這在 R 中也很常見)。
但 Python 最大的優(yōu)勢(shì)在于它的生態(tài)系統(tǒng)使得你能夠很方便地搭建起一個(gè)復(fù)雜的端到端服務(wù),比如用 Django 或是 Flask 搭建 Web 應(yīng)用,或是用 PyQt 開發(fā)桌面應(yīng)用,甚至用 ROS 搭建一個(gè)自主機(jī)器人。
Java
由于它干凈一致的實(shí)現(xiàn)、面向?qū)ο缶幊痰娘L(fēng)格以及通過 JVM 獲得的平臺(tái)獨(dú)立性,Java 是很多軟件工程師的首選語言。它以簡(jiǎn)潔性和靈活性為代價(jià)換取了明確性和可靠性,使它在實(shí)現(xiàn)重要的企業(yè)軟件系統(tǒng)時(shí)非常受歡迎。對(duì)于那些一直使用 Java 的公司,當(dāng)他們需要開發(fā)機(jī)器學(xué)習(xí)產(chǎn)品時(shí),為了保持同樣的可靠性和避免寫一堆混亂的接口,他們可能更傾向于繼續(xù)使用 Java。
除了一些可以用來做分析和原型開發(fā)的庫和工具(比如 Weka)以外,要用 Java 開發(fā)大規(guī)模分布式的機(jī)器學(xué)習(xí)系統(tǒng),我們有很多選擇,比如 Spark+MLlib、Mahout、H2O 以及 Deeplearning4j。這些庫和框架也很方便跟工業(yè)級(jí)別的數(shù)據(jù)處理和存儲(chǔ)系統(tǒng)比如Hadoop/HDFS 整合在一起。
C/C++
在開發(fā)像操作系統(tǒng)組件和網(wǎng)絡(luò)協(xié)議這樣計(jì)算性能和內(nèi)存使用效率極為重要的底層軟件時(shí),C/C++ 是最理想的選擇。由于同樣的原因,它們?cè)趯?shí)現(xiàn)機(jī)器學(xué)習(xí)算法的關(guān)鍵部分時(shí)也很受歡迎。但是它們沒有內(nèi)建的關(guān)于數(shù)據(jù)處理操作的抽象,內(nèi)存管理的任務(wù)也很繁重,這使得它們對(duì)新手來說不太合適,而且在開發(fā)完整的端到端系統(tǒng)時(shí)也比較笨重。
在開發(fā)嵌入式系統(tǒng)(比如智能汽車、智能傳感器等),可能必須使用 C/C++。而在其他場(chǎng)景下,用它們進(jìn)行開發(fā)的便利程度可能要視現(xiàn)有的基礎(chǔ)設(shè)施和具體的應(yīng)用而定。不過無論如何,我們并不缺少 C/C++ 的機(jī)器學(xué)習(xí)庫,比如 LibSVM、Shark 和 mlpack。
企業(yè)級(jí)解決方案
在這些語言和庫以外,還有很多統(tǒng)計(jì)建模和商業(yè)分析的商用產(chǎn)品,用于在更為受控的數(shù)據(jù)處理環(huán)境下應(yīng)用機(jī)器學(xué)習(xí)模型。這些產(chǎn)品,包括 RapidMiner、IBM SPSS、SAS+JMP 和 Stata 等,它們的目標(biāo)是為數(shù)據(jù)分析提供可靠和端到端的解決方案,通常也會(huì)將 API 或是腳本語法暴露給用戶。
近年來還涌現(xiàn)出了一批“機(jī)器學(xué)習(xí)即服務(wù)”平臺(tái),比如 Amazon Machine Learning、Google Prediction、DataRobot、IBM Watson 和 Microsoft Azure Machine Learning 等。它們使你能夠拓展你的機(jī)器學(xué)習(xí)產(chǎn)品的規(guī)模,處理巨量的數(shù)據(jù)以及快速地對(duì)不同的模型進(jìn)行試驗(yàn)。只要你在機(jī)器學(xué)習(xí)領(lǐng)域打好了堅(jiān)實(shí)的基礎(chǔ),使用這些平臺(tái)就像學(xué)習(xí)使用一門新工具一樣簡(jiǎn)單。
特別提示
選擇語言和庫時(shí)要注意考慮開發(fā)時(shí)間和實(shí)際性能之間的平衡。一條能夠飛速處理數(shù)據(jù)的流水線如果需要幾個(gè)月來開發(fā),在有些情況下這可能就毫無用處。一般來說,能夠快速地搭建和測(cè)試原型會(huì)更重要,因?yàn)橐婚_始你肯定會(huì)失敗。
這也是為什么大部分公司都想尋找那種已經(jīng)有慣用的工具 / 語言 / 庫的機(jī)器學(xué)習(xí)工程師。工業(yè)界往往會(huì)用 Python 和 R 這樣的高層次語言來開發(fā)算法的原型,然后用 Java 或是 C/C++ 來開發(fā)生產(chǎn)級(jí)別的解決方案。
2. 導(dǎo)師的力量
在學(xué)習(xí)語言的過程中,會(huì)遭遇眾多關(guān)于數(shù)據(jù)結(jié)構(gòu),遞歸,面向?qū)ο蟮碾y題。這個(gè)時(shí)候,一個(gè)有經(jīng)驗(yàn)導(dǎo)師提供的專業(yè)意見將會(huì)迅速給你膠著的思路注入一股清泉,幫助你平穩(wěn)打好語言基礎(chǔ)。
Udacity是由谷歌無人車之父、斯坦福大學(xué)終身教授,原谷歌副總裁、Google X 實(shí)驗(yàn)室聯(lián)合創(chuàng)始人 Sebastian Thrun創(chuàng)立的一家盈利性教育平臺(tái),提供大規(guī)模開放式在線課程。【機(jī)器學(xué)習(xí)】納米學(xué)位由硅谷明星導(dǎo)師領(lǐng)銜主講,給課程進(jìn)行中遇到問題的學(xué)員提供專業(yè)指導(dǎo)。
3. 我能在課程里得到什么?
獨(dú)家課程內(nèi)容,項(xiàng)目直播輔導(dǎo)
除了學(xué)習(xí)來自硅谷領(lǐng)先企業(yè)的課程視頻、實(shí)戰(zhàn)項(xiàng)目,與項(xiàng)目直播講解!還有更多 Udacity 獨(dú)家學(xué)習(xí)資料,等待你來探索。
加入同步學(xué)習(xí)小組,在導(dǎo)師幫助下快速成長(zhǎng)
你將加入學(xué)習(xí)小組,認(rèn)識(shí)志同道合的伙伴,在專業(yè)導(dǎo)師全方位輔導(dǎo)和監(jiān)督下,用最高效率掌握前沿技術(shù),成為搶手人才。
獨(dú)一無二的硅谷實(shí)戰(zhàn)項(xiàng)目和代碼審閱
親自挑戰(zhàn)來自硅谷的數(shù)據(jù)分析開發(fā)實(shí)戰(zhàn)項(xiàng)目,獲得該領(lǐng)域?qū)<业闹鹦写a審閱和反饋,學(xué)習(xí)最先進(jìn)的技術(shù)標(biāo)準(zhǔn),與硅谷編程開發(fā)者的思維同步!
獲得 Udacity納米學(xué)位證書
畢業(yè)后,你將獲得 Udacity 頒發(fā)的畢業(yè)證書,證明你的專業(yè)知識(shí)和技術(shù)水平。當(dāng)你完成機(jī)器學(xué)習(xí)(入門)納米學(xué)位所有項(xiàng)目之后,你將擁有嫻熟的 Python 中級(jí)編程能力與基本的數(shù)據(jù)分析能力,并為繼續(xù)深造機(jī)器學(xué)習(xí)(進(jìn)階)納米學(xué)位打下堅(jiān)實(shí)基礎(chǔ),有能力迅速掌握后續(xù)的機(jī)器學(xué)習(xí)與人工智能技術(shù)。
課程內(nèi)容
(上下滑動(dòng)查看內(nèi)容)
Python 語法與數(shù)據(jù)結(jié)構(gòu)
在這個(gè)部分,你將了解 Python 的整數(shù)和字符串?dāng)?shù)據(jù)類型,學(xué)會(huì)使用變量存儲(chǔ)數(shù)據(jù),掌握使用內(nèi)置的函數(shù)和方法。你將會(huì)學(xué)習(xí)條件語句,循環(huán)語句完成復(fù)雜的統(tǒng)計(jì)。同時(shí)你將學(xué)會(huì)使用集合數(shù)據(jù)類型,包括列表、集合和字典等多種數(shù)據(jù)結(jié)構(gòu)。
Python 文件與網(wǎng)絡(luò)
你會(huì)使用 Python 標(biāo)準(zhǔn)庫和第三方庫中的模塊,認(rèn)識(shí) Python 強(qiáng)大的庫。并學(xué)會(huì)讀取磁盤上的文件中的數(shù)據(jù),使用在線資源解決實(shí)際問題。最后你將練習(xí)編寫一個(gè)網(wǎng)絡(luò)抓取程序來跟蹤維基百科文章之間的鏈接。
數(shù)據(jù)分析入門
學(xué)習(xí)使用 Python 了解數(shù)據(jù)分析流程的主要步驟,運(yùn)用 Python 和 Pandas 處理多個(gè)數(shù)據(jù)集;并通過兩個(gè)數(shù)據(jù)分析實(shí)戰(zhàn)案例,學(xué)習(xí)使用 Python、Numpy 和 Pandas 進(jìn)行數(shù)據(jù)清洗、探索、分析和可視化;
線性代數(shù)基礎(chǔ)
線性代數(shù)是深度神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)。在這一部分中,你將從0基礎(chǔ)開始學(xué)習(xí)線性代數(shù)中的向量以及交點(diǎn)知識(shí)以及實(shí)現(xiàn)向量的基本操作。
模型的評(píng)估與驗(yàn)證
模型的評(píng)價(jià)指標(biāo)是深度學(xué)習(xí)建模過程中非常重要的一環(huán)。在這一部分中,你將學(xué)習(xí)如何衡量深度學(xué)習(xí)模型以及其他機(jī)器學(xué)習(xí)模型好壞。
你將挑戰(zhàn)的實(shí)戰(zhàn)項(xiàng)目
(上下滑動(dòng)查看內(nèi)容)
1. 分析電話和短信記錄
在這個(gè)項(xiàng)目中,你將會(huì)挑戰(zhàn)一個(gè)數(shù)據(jù)分析的任務(wù)。你會(huì)應(yīng)用你在課程中學(xué)到的數(shù)據(jù)結(jié)構(gòu),字符串處理,循環(huán)等技巧,從電話和短信記錄的數(shù)據(jù)中發(fā)現(xiàn)一些端倪。
2. 探索美國(guó)共享單車數(shù)據(jù)
你需要借助Python完成對(duì)美國(guó) 3 個(gè)城市的共享單車行程數(shù)據(jù)的數(shù)據(jù)分析。你將編寫代碼來清理數(shù)據(jù),計(jì)算描述性統(tǒng)計(jì)數(shù)據(jù),并實(shí)現(xiàn)數(shù)據(jù)分布的基本可視化。
3. 數(shù)據(jù)分析入門
學(xué)習(xí)使用 Python 了解數(shù)據(jù)分析流程的主要步驟,運(yùn)用 Python 和 Pandas 處理多個(gè)數(shù)據(jù)集;并通過兩個(gè)數(shù)據(jù)分析實(shí)戰(zhàn)案例,學(xué)習(xí)使用 Python、Numpy 和 Pandas 進(jìn)行數(shù)據(jù)清洗、探索、分析和可視化;
4. 線性代數(shù)
通過代碼實(shí)現(xiàn)一個(gè)矩陣求逆,更深刻的理解線性代數(shù)的本質(zhì)。
5. 預(yù)測(cè)未來房?jī)r(jià)
運(yùn)用機(jī)器學(xué)習(xí)原理與基礎(chǔ)統(tǒng)計(jì)分析工具針對(duì)房地產(chǎn)數(shù)據(jù)建立一個(gè)模型、評(píng)估模型的表現(xiàn)好壞并利用這個(gè)模型預(yù)測(cè)未來房?jī)r(jià)。
聯(lián)系客服