都說做一件事情最好的時(shí)機(jī)就是「現(xiàn)在」,但是從何開始往往會(huì)難倒一大批人,更不用說是想要入門數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的朋友了。本文是一篇科普掃盲文章,作者以初學(xué)者的視角,為同樣想「入坑」的讀者們提供了一些建議,還有一些可以獲得的學(xué)習(xí)資源。
「我想學(xué)習(xí)機(jī)器學(xué)習(xí)和人工智能,該從哪開始呢?」
從這里開始。
兩年前,我開始在網(wǎng)上自學(xué)機(jī)器學(xué)習(xí),并且通過 YouTube 和博客分享了我的學(xué)習(xí)過程。我并不知道我在做什么,在決定開始學(xué)習(xí)機(jī)器學(xué)習(xí)之前我從沒寫過代碼。
當(dāng)人們發(fā)現(xiàn)我的作品,他們通常會(huì)私信并提問。我不一定知道所有的答案,但我會(huì)盡量回復(fù)。人們最常問的問題是:「該從哪開始?」,其次是:「我需要多少數(shù)學(xué)基礎(chǔ)?」
今天早上我就回答了一堆這樣的問題。
有人告訴我他已經(jīng)開始學(xué)習(xí) Python 并打算學(xué)習(xí)機(jī)器學(xué)習(xí)了,但不知道下一步該做什么。
「我已經(jīng)學(xué)習(xí)了 Python,下一步該做什么?」
我回復(fù)了一系列學(xué)習(xí)的步驟,并且復(fù)制到了這里。如果你想成為一個(gè)機(jī)器學(xué)習(xí)從業(yè)者,卻不知道怎么寫代碼的話,可以把本文當(dāng)作一個(gè)大綱。我的學(xué)習(xí)風(fēng)格是代碼優(yōu)先:先把代碼運(yùn)行起來,再根據(jù)需要學(xué)習(xí)理論、數(shù)學(xué)、統(tǒng)計(jì)以及概率等方面的東西,而不是一開始就學(xué)理論。
記住,開始學(xué)習(xí)機(jī)器學(xué)習(xí)你會(huì)面臨很多阻礙。別急,慢慢來。把這篇文章添加到收藏夾,以便隨時(shí)參考。
我傾向于使用 Python,因?yàn)槲沂菑?Python 開始的,并且一直在持續(xù)使用它。你也可以用其他語(yǔ)言,但本文的所有步驟都是基于 Python 的。
學(xué)習(xí) Python、數(shù)據(jù)科學(xué)工具和機(jī)器學(xué)習(xí)概念
問我問題的那些郵件作者們說他們已經(jīng)學(xué)了一些 Python。但這一步也同樣適用于新手。花幾個(gè)月的時(shí)間學(xué)習(xí) Python 編程和不同的機(jī)器學(xué)習(xí)概念。這兩部分知識(shí)你都會(huì)需要。
在學(xué)習(xí) Python 編程的同時(shí),練習(xí)使用 Jupyter 和 Anaconda 等數(shù)據(jù)科學(xué)工具。花幾個(gè)小時(shí)來研究一下,它們是用來做什么的以及為什么要使用它們。
學(xué)習(xí)資源
人工智能要素 (https://www.elementsofai.com/)—人工智能和機(jī)器學(xué)習(xí)主要概念概述。Coursera 上的 Python 教程—(https://bit.ly/pythoneverybodycoursera) 從頭學(xué)習(xí) Python。通過 freeCodeCamp 學(xué)習(xí) Python (https://youtu.be/rfscVS0vtbw)—一個(gè)視頻涵蓋了 Python 所有主要概念。Corey Schafer 的 Anaconda 教程 (https://youtu.be/YJC6ldI3hWk)—一個(gè)視頻學(xué)會(huì) Anaconda(數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)需要的配置環(huán)境)。Dataquest 的新手 Jupyter Notebook 教程 (https://www.dataquest.io/blog/jupyter-notebook-tutorial/)—一篇文章學(xué)會(huì)啟動(dòng)和運(yùn)行 Jupyter Notebook。Corey Schafer 的 Jupyter Note 教程 (https://www.youtube.com/watch?v=HW29067qVWk)—一個(gè)視頻學(xué)會(huì)使用 Jupyter Notebook。
學(xué)習(xí)通過 Pandas、Numpy 和 Matplotlib 進(jìn)行數(shù)據(jù)分析、操作和可視化
一旦你已經(jīng)掌握了一些 Python 技巧,就會(huì)開始想要學(xué)習(xí)如何處理和操作數(shù)據(jù),為了實(shí)現(xiàn)這一目的,你需要熟悉 Pandas、Numpy 和 Matplotlib。
Pandas 可以幫助你處理二維數(shù)據(jù),類似 Excel 文件里的信息表,包含行和列。這類數(shù)據(jù)被稱為結(jié)構(gòu)化數(shù)據(jù)。Numpy 可以幫助你進(jìn)行數(shù)值計(jì)算。機(jī)器學(xué)習(xí)把你能想到的所有東西都轉(zhuǎn)化成數(shù)字,進(jìn)而在這些數(shù)字中尋找模式。Matplotlib 可以幫助你繪制圖形和可視化數(shù)據(jù)。理解表格中的一堆數(shù)字對(duì)人類來說可能很困難。我們更喜歡看到有一條線穿過的圖。可視化可以更好得傳達(dá)你的發(fā)現(xiàn)。
學(xué)習(xí)資源
Cousera 上的 Python 應(yīng)用數(shù)據(jù)科學(xué) (http://bit.ly/courseraDS)—開始打磨數(shù)據(jù)科學(xué)方向的 Python 技能。10 分鐘入門 pandas (https://pandas.pydata.org/pandas-docs/stable/gettingstarted/10min.html)—快速概覽 pandas 庫(kù)及其部分最有用的函數(shù)。Codebasics 的 Python pandas 教程 (https://youtu.be/CmorAWRsCAw)—該 YouTube 系列介紹了 pandas 的所有主要功能。freeCodeCamp 的 NumPy 教程 (https://youtu.be/QUT1VHiLmmI)—一個(gè) YouTube 視頻學(xué)會(huì) NumPy。Sentdex 的 Matplotlib 教程 (https://www.youtube.com/watch?v=q7Bo_J8x_dw&list=PLQVvvaa0QuDfefDfXb9Yf0la1fPDKluPF)—YouTube 系列助你學(xué)會(huì) Matplotlib 所有最有用的功能。
借助 scikit-learn 學(xué)習(xí)機(jī)器學(xué)習(xí)
現(xiàn)在你已經(jīng)掌握了操作和可視化數(shù)據(jù)的技能,是時(shí)候?qū)W習(xí)在數(shù)據(jù)中尋找模式了。scikit-learn 是一個(gè) Python 庫(kù),它內(nèi)置了許多有用的機(jī)器學(xué)習(xí)算法供你使用,它還提供了許多其他有用的函數(shù)來探究學(xué)習(xí)算法的學(xué)習(xí)效果。
重點(diǎn)在于學(xué)習(xí)都有什么樣的機(jī)器學(xué)習(xí)問題,比如分類和回歸,什么樣的算法最適合解決這些問題。現(xiàn)在還不需要從頭開始理解每個(gè)算法,先學(xué)習(xí)如何應(yīng)用它們。
學(xué)習(xí)資源
Data School 的基于 scikit-learn 的 Python 機(jī)器學(xué)習(xí) (https://www.youtube.com/watch?v=elojMnjn4kk&list=PL5-da3qGB5ICeMbQuqbbCOQWcS6OYBr5A)—一個(gè) YouTube 播放列表教你 scikit-learn 的所有主要函數(shù)。Daniel Bourke 對(duì)探索性數(shù)據(jù)分析的簡(jiǎn)要介紹 (https://towardsdatascience.com/a-gentle-introduction-to-exploratory-data-analysis-f11d843b8184)—把你在上述兩個(gè)步驟中學(xué)到的知識(shí)融合在一個(gè)項(xiàng)目中。提供代碼和視頻,助你開始第一個(gè) Kaggle 競(jìng)賽。Daniel Formosso 的基于 scikit-learn 的探索性數(shù)據(jù)分析筆記 (https://github.com/dformoso/sklearn-classification)—以上資源的更深入版本,附帶了一個(gè)實(shí)踐上述內(nèi)容的端到端項(xiàng)目。
學(xué)習(xí)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)
深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)在沒有太多結(jié)構(gòu)的數(shù)據(jù)上最有效。二維數(shù)據(jù)雖然有結(jié)構(gòu),圖像、視頻、音頻文件和自然語(yǔ)言文本也有,但不會(huì)太多。
小貼士:在大多數(shù)情況下,你會(huì)想對(duì)結(jié)構(gòu)化數(shù)據(jù)使用一組決策樹(隨機(jī)森林或 XGBoost 之類的算法),而對(duì)于非結(jié)構(gòu)化數(shù)據(jù),你會(huì)想使用深度學(xué)習(xí)或遷移學(xué)習(xí)(使用預(yù)先訓(xùn)練的神經(jīng)網(wǎng)絡(luò)并將其用于你的問題)。
你可以開始把這樣的小貼士用一張便條記錄,然后邊學(xué)習(xí)邊收集這些信息。
學(xué)習(xí)資源
Cousera 上 Andrew Ng 的 deeplearning.ai (https://bit.ly/courseradl) (https://bit.ly/courseradl)—商業(yè)上最成功的從業(yè)者之一講授的深度學(xué)習(xí)課程。Jeremy Howard 的 fast.ai 深度學(xué)習(xí)課程 (https://course.fast.ai/) (https://bit.ly/courseradl)—工業(yè)界最好的實(shí)踐者之一講授的深度學(xué)習(xí)實(shí)際操作方法。
其他課程和書籍
在學(xué)習(xí)過程中,最理想的情況是你可以用自己的小項(xiàng)目來練習(xí)所學(xué)的東西。這不必是復(fù)雜的,需要改變世界的事情,但你可以說「我用 X 做了這個(gè)」。然后通過 github 或博客分享你的工作。github 用于展示你的代碼,博客文章用于展示你如何表達(dá)自己所做的工作。你應(yīng)該為每個(gè)項(xiàng)目都發(fā)布一下這些內(nèi)容。申請(qǐng)一份工作的最好方法是你已經(jīng)做完了工作要求做的事情。分享你的工作是向未來的潛在雇主展示你能力的好方法。
在你熟悉了如何使用不同的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)框架之后,你可以嘗試通過從頭開始構(gòu)建它們來鞏固你的知識(shí)。你不必總是在生產(chǎn)或從事機(jī)器學(xué)習(xí)時(shí)這樣做,但是從內(nèi)部了解事情是如何工作的將有助于你建立自己的工作。
學(xué)習(xí)資源
Daniel Bourke 的如何開始你自己的機(jī)器學(xué)習(xí)工程 (https://towardsdatascience.com/how-to-start-your-own-machine-learning-projects-4872a41e4e9c)—開始你自己的工程可能會(huì)很難,這篇文章可以給你一些指引。Jeremy Howard 的 fast.ai 深度學(xué)習(xí)基礎(chǔ) (https://course.fast.ai/part2)—自上而下學(xué)習(xí)后,本課程將幫助你從下往上填補(bǔ)空白。Andrew Trask 的 Grokking Deep Learning (https://amzn.to/2H497My)—這本書將教你如何從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò),以及為什么你應(yīng)該知道如何構(gòu)建。Daniel Bourke 推薦的機(jī)器學(xué)習(xí)書籍 (https://www.youtube.com/watch?v=7R08MPXxiFQ)—該 YouTube 視頻整理了一些機(jī)器學(xué)習(xí)最佳書籍。
答疑
每一步需要多長(zhǎng)時(shí)間?
你可能會(huì)花 6 個(gè)月或更長(zhǎng)的時(shí)間。別著急,學(xué)習(xí)新事物需要時(shí)間。作為一名數(shù)據(jù)科學(xué)家或機(jī)器學(xué)習(xí)工程師,你正在培養(yǎng)的主要技能是如何針對(duì)數(shù)據(jù)提出好的問題,然后使用你的工具來嘗試尋找答案。
有時(shí)候你會(huì)覺得自己什么都沒學(xué)到。甚至倒退。忽略它。不要以天為單位來衡量,看看你一年后有什么樣的進(jìn)步。
我在哪里可以學(xué)到這些技能?
我在上面列出了一些資源,它們都是在線的,而且大部分都是免費(fèi)的,類似的資源還有很多。
DataCamp (http://bit.ly/datacampmrdbourke) 是一個(gè)很好學(xué)習(xí)網(wǎng)站。另外,我的 Machine Learning and Artificial Intelligence resources database (https://bit.ly/AIMLresources) 整理了免費(fèi)和付費(fèi)的學(xué)習(xí)資料。
記住,作為數(shù)據(jù)科學(xué)家或機(jī)器學(xué)習(xí)工程師,很大一部分工作是要解決問題。通過你的第一個(gè)作業(yè)探索這里的每一個(gè)步驟,并創(chuàng)建你自己的課程來幫助學(xué)習(xí)。
如果你想知道一個(gè)自我引導(dǎo)的機(jī)器學(xué)習(xí)課程的例子是什么樣子的,看看我的 Self-Created AI Masters Degree (https://bit.ly/aimastersdegree)。這是我在過去 9 個(gè)月內(nèi)從零編碼變成機(jī)器學(xué)習(xí)工程師的過程。它不是完美的,但是我的真實(shí)經(jīng)歷,因此你可以試試。
統(tǒng)計(jì)怎么辦?數(shù)學(xué)怎么辦?概率呢?
實(shí)踐過程中你會(huì)學(xué)到這些東西的。先從代碼開始。把代碼運(yùn)行起來。在運(yùn)行代碼之前,嘗試學(xué)習(xí)所有的統(tǒng)計(jì)、數(shù)學(xué)、概率知識(shí),就像是在試圖煮沸大海。它會(huì)讓你退縮。
如果代碼不運(yùn)行,統(tǒng)計(jì)、數(shù)學(xué)和概率都不重要。先運(yùn)行起來,然后用你的研究技巧來驗(yàn)證它是否正確。
證書?
證書很好,但你不是為了證書而學(xué)習(xí),而是為了提高技能。不要和我犯同樣的錯(cuò)誤,不要認(rèn)為證書越多代表技能越多,并不是這樣的。通過上述課程和資源建立知識(shí)基礎(chǔ),然后通過自己的項(xiàng)目完善專業(yè)知識(shí)(這些是課程無法傳授的知識(shí))。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
132921 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
84946 -
數(shù)據(jù)科學(xué)
+關(guān)注
關(guān)注
0文章
166瀏覽量
10082
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論