關於本書

本書內容

本書內容主要改寫自我在 2017 年 iT 邦幫忙鐵人賽「R 語言使用者的 Python 學習筆記」系列文章,感謝 iT 邦幫忙舉辦這樣意義非凡的技術文章比賽,第一次參賽就獲得大數據組冠軍的肯定,啟蒙自己對撰寫教學文章的興趣,直至今日;感謝博碩文化的邀稿,讓我有機會能夠重整當年的思緒脈絡。

雖然邀稿緣起於 iT 邦幫忙鐵人賽系列文章,但隨著近年資料科學、機器學習、深度學習與人工智慧的蓬勃發展,時至今日回首文章內容,已顯得左支右絀、難以搬上檯面,老實講,改寫幅度巨大到像是截然不同的一本著作。另外有趣的一點,當年(2017)還是 Python 與 R 雙雄鼎立的年代,也正因為在社群、討論區有太多的文章發問「 Python 或 R?」,才會起心動念以「R 語言使用者的 Python 學習筆記」為題參賽,提出 “Why not both?” 的論點。然而以撰寫本書的 2020 年這個時間點來說,除非專精資料處理、統計分析的使用者才有理由首選 R,Python 基本上在機器學習、深度學習與人工智慧領域處於一方獨尊的態勢。

這本書從「R 語言使用者的 Python 學習筆記」後段開始改寫,省略了原本 Python 基礎語法、網頁資料擷取(俗稱爬蟲)與 Pandas 的部分,著重在機器學習的章節,並與我在台大資訊系統訓練班的教材整合編修。

我很喜歡的資料科學家 Jeremy Howard 曾經說過,機器學習不好教、不好學的原因在於需要取捨天秤兩端的平衡:程式套件與理論,教學如果偏重其中一方就容易產生學習效果不佳的疑慮。從我個人的觀點來看,像是 UdacityKaggle Learn 就是屬於偏重程式套件的例子;而經典的機器學習教科書如 Christopher M. Bishop: Pattern Recognition and Machine LearningIan Goodfellow ,Yoshua Bengio, and Aaron Courville: Deep Learning 就是屬於偏向理論的例子。機器學習其中一個哲學稱為「配適」(Fitting),能在程式套件與理論中抓出一個巧妙的平衡,就容易產生較佳的學習效果,而這也是他之所以創辦 fast.ai 的原因之一。

撰寫本書時抱持以平衡配適作為目標,內容兼顧程式套件與理論,希望讓讀者除了懂得使用套件現成的類別與函式,也能捲起袖子,將機器學習的理論與技法透過 NumPy 以及 Python 程式設計自行定義實作正規方程、梯度遞減、羅吉斯迴歸與深度學習的演算方法類別。

If you can code it, you certainly understand it.

本書包含下列幾個章節:

  • 關於視覺化與機器學習:淺談機器學習與視覺化

  • 數列運算:認識 NumPy

  • 資料探索:認識 Matplotlib

  • 機器學習入門:認識 Scikit-Learn

  • 預測數值的任務:希望讀者除了能夠呼叫 Scikit-Learn 中已經寫好的數值預測器,也能自行定義正規方程與梯度遞減的類別

  • 預測類別的任務:希望讀者除了能夠呼叫 Scikit-Learn 中已經寫好的類別預測器,也能自行定義正規羅吉斯迴歸的類別

  • 表現的評估:認識評估任務表現的指標

  • 深度學習入門:認識深度學習與 Keras,希望讀者除了能夠以 Keras 搭建基礎的深度學習模型,也能自行定義出具備前向傳播與反向傳播演算方法的類別

如果讀者對於這本書有任何問題,請寫信與我聯絡:tonykuoyj@gmail.com

本書的目標讀者

這本書從數列運算起始到深度學習入門結尾,目標是希望走一條簡單快捷的小徑,能夠讓對機器學習完全陌生、零基礎的讀者暸解其入門理論並具備使用高階套件和自訂類別的實作能力。

  • 具備 Python 程式設計基礎,懂得如何定義函式(Functions)與類別(Classes)

  • 對於 Python 機器學習套件有興趣

  • 對於機器學習入門理論有興趣

  • 對於數學式不會感到厭惡

本書所使用的 Python 版本

[1]:
import sys

print("本書所使用的 Python 版本為:")
print(sys.version)
本書所使用的 Python 版本為:
3.6.8 (v3.6.8:3c6b436a57, Dec 24 2018, 02:04:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]

本書所使用的第三方套件模組版本

[2]:
import requests
import numpy as np
import pandas as pd
import matplotlib as mpl
import sklearn
import tensorflow as tf

library_names = ['requests', 'NumPy', 'Pandas', 'Matplotlib', 'Scikit-Learn', 'TensorFlow']
library_versions = [requests.__version__, np.__version__, pd.__version__, mpl.__version__, sklearn.__version__, tf.__version__]
for lib_n, lib_v in zip(library_names, library_versions):
    print("本書所使用的 {} 版本為 {}".format(lib_n, lib_v))
本書所使用的 requests 版本為 2.23.0
本書所使用的 NumPy 版本為 1.18.0
本書所使用的 Pandas 版本為 1.0.0
本書所使用的 Matplotlib 版本為 3.2.0
本書所使用的 Scikit-Learn 版本為 0.22
本書所使用的 TensorFlow 版本為 2.2.0

本書的筆記本

本書使用 Jupyter Notebook 編寫而成,所有的筆記本 .ipynb 與相關檔案都置放於一個可以獨立運行的雲端 Binder 之中。

延伸閱讀

  1. 郭耀仁:R 語言使用者的 Python 學習筆記(http://ithelp.ithome.com.tw/users/20103511/ironman/1077

  2. Jeremy Howard (https://www.fast.ai/about/#jeremy)

  3. fast.ai (https://www.fast.ai/)

  4. Udacity (https://www.udacity.com/)

  5. Coursera (https://www.coursera.org/)