隨著資料科學(Data Science)技術的興起,人工智慧(Artificial Intelligence)、機器學習(Machine Learning) 成為近幾年來電腦科學界十分熱門的研究領域,如今在實體和線上的學習機器學習的資源有很多,本文整理了一些好用學習資源希望幫助初學者能更容易使用 Python 入門機器學習的領域中,從零開始學習機器學習。若是對於資料科學不熟悉的讀者可以先參考適用於初學者的資料科學影片 ,讓自己對於資料科學有初步的認識。
人工智慧的發展
「人工智慧」(Artificial Intelligence)這專有名稱正式出現在西元 1956 年,在美國達特茅斯學院 (Dartmouth College)召開的第一次人工智慧會議。根據維基百科的定義,人工智慧係指由機器所展現的智慧,一般而言人工智慧又分為「強人工智慧」(Strong AI)和「弱人工智慧」(Weak AI) 兩種不同的主張。所謂的強人工智慧指的是有自我意識、有知覺可以自己推理和解決問題的機器智慧,而「弱人工智慧」只能模擬人類的思維與行為表現,但缺乏真正的推理與解決問題的能力,也不具有自主意識。人工智慧在歷史上經歷了幾次熱潮和寒冬,從最早的邏輯推理到後來的專家系統,再到目前的機器學習/深度學習,機器學習可以視為人工智慧的一個實現方式或是發展的一個歷程。
事實上,人工智慧或是機器學習都是一門跨領域的學門,牽涉了電腦科學、數學、神經學、心理學、經濟學、統計學等層面,也有許多相關的學門:
隨著運算資源(雲端運算、GPU 等)、海量資料(目前還有許多資料還沒被創造,等待我們去發掘呢)以及機器學習/深度學習的發展,生活上許多產品已經可以看到人工智慧的應用。但人工智慧最美好的境界莫過於人機之間的互動以及相輔相成,以 AlphaGO 為例,雖然人類在圍棋領域輸給人機器,但也從機器的思考方式去重新思考了圍棋的真諦和有別於人類的思考方式。
「就因為某樣東西思考的方式跟你不一樣,就代表它沒在思考嗎?」 “Just because something thinks differently from you, does it mean it’s not thinking?” —《模仿遊戲》《Imitation Game》(2015)
什麼是機器學習(Machine Learning)?
機器學習是一種資料科學的技術也是一種實現人工智慧的一種方式,協助電腦從現有的資料學習,以便預測未來的行為、結果和趨勢。根據學習的方式又可以分為需要解答的監督式學習(Supervised learning)、非監督式學習(Unsupervised learning)和增強學習(Reinforcement learning)等(還有一種混合式的半監督式學習)等子類別。機器學習技術可以應用的範圍十分廣泛,總的來說機器學習可以解決以下幾種問題:
分類問題:這是 A 類 或 B 類嗎?
異常值判斷:這很奇怪嗎?
預測性分析:有多少?
分群問題:這是如何組織的?
增強學習協助決策:我接下來該怎麼辦?
當我們蒐集到相關、精確、連貫、足夠資料就可以挑選合適的演算法進行模型的的建置。
為什麼選擇 Python?
在資料科學和機器學習領域最重要的兩大程式語言就是 Python 和 R,Python 簡潔易學、應用範圍廣(不限於數據分析)且學習曲線平緩,適合作為第一個入門的程式語言,透過 pandas、SciPy/NumPy、sckikit-learn、matplotlib 和 statsmodels 可以進行數據分析的工作,適合工程任務和需要和網路應用程式整合的專案。至於 R 由於是統計學家開發的程式語言,則是擅長於統計分析、圖表繪製,常用於學術研究領域,建議也要有一定程度的掌握。一般情況下 Python 和 R 並非互斥,而是互補,許多資料工程師、科學家往往是在 Python 和 R 兩個語言中轉換,小量模型驗證、統計分析和圖表繪製使用 R,當要撰寫演算法和資料庫、網路服務互動等情況時在移轉到 Python。為了降低學習成本。
此外 Python 本身是一種通用語言,除了資料科學外也可以廣泛使用在網路開發、網站建置、遊戲開發、網路爬蟲等領域,當你需要整合系統產品服務時,可以擔任一站式的開發語言,更重要的是 Python 也可以當成膠水語言非常輕易和 C/C++ 等效能較佳的語言整合。簡而言之,Python 是一種簡潔易學但功能強大,值得投資的程式語言,所以我們這邊先使用 Python 進行介紹。
若對於 Python 和 R 比較,這邊有兩篇文章可以參考 数据科学界华山论剑:R与Python巅峰对决、Which is better for data analysis: R or Python?。
如何開始入門機器學習?
事實上,資料科學是個跨領域學門,在學習如何使用 Python 進行機器學習過程中通常必須掌握以下知識:
- 機器學習演算法
- Python 程式語言和資料分析函式庫
- 線性代數/統計學等相關學門
- 專業領域的領域知識(Domain Knowledge)
為了掌握以上三大領域知識(我們先把焦點放在機器學習核心技法,暫時忽略資料科學中對於領域知識的掌握),具體來說我們可以有以下步驟可以參考:
掌握基礎 Python 程式語言知識
線上學習資源:
了解基礎數學/統計學和機器學習基礎知識
知道如何使用 Python 科學計算函式庫和套件
推薦安裝 Anaconda,支援跨平台多種版本 Python,預設將數據分析、科學計算的套件裝好,自帶 spyder 編輯器、Jupyter Notebook(IPython Notebook),可以提供一個網頁版介面,讓使用者可以透過瀏覽器進行 Julia、Python 或 R 程式的開發與維護。
- numpy:科學分析,Scipy Lecture Notes 教學文件
- pandas:資料分析
- matplotlib:會製圖瞟
- scikit-learn:機器學習工具
使用 scikit-learn 學習 Python 機器學習應用
運用 Python 實作機器學習演算法
- 感知器
- 決策樹
- 線性迴歸
- k-means 分群
實作進階機器學習演算法
- SVM
- KNN
- Random Forests
- 降低維度
- 驗證模型
了解深度學習(Deep Learning)在 Python 的實作和應用
總結
以上整理了一些機器學習網路學習資源,若你累積一些小小經驗後,不妨挑戰一下 Kaggle 或是 KDD 測試一下自己的實力並累積更多數據分析的經驗。
延伸閱讀
- 7 Steps to Mastering Machine Learning With Python
- 人人都可成為資料科學大師!一整年的網路自學清單就在這了
- Analytics Vidhya
- 台灣資料科學年會
- 「2016 台灣資料科學愛好者年會」精彩資料總整理(持續更新中)
- 大數據會消失,資料科學不會!你該知道的資料科學第一堂課
- 如何選擇 Microsoft Azure Machine Learning 的演算法
- Microsoft Azure Machine Learning 機器學習服務文件
- Kdnuggets
- Bigdatafinance
- Using Python and R together: 3 main approaches
- 机器学习最佳入门学习资源
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1)
- SIRAJ RAVAL’S DEEP LEARNING
(image via respondr)