Upgrade to Pro — share decks privately, control downloads, hide ads and more …

用 Jupyter Notebook 實現數學的想法

用 Jupyter Notebook 實現數學的想法

這是在台東大學應用數學系, 為大學部、尤其是大一的同學, 介紹怎麼樣用 Python 實現數學的想法。從「數學的核心是函數」這個概念開始, 介紹如果要用 Python 應該使用怎麼樣的套件, 為什麼 Jupyter Notebook (JupyterLab) 會成為數據分析的主流。然後介紹基本的 Python 程式語言, 最後介紹當紅人工智慧的技術。

[email protected]

May 21, 2018
Tweet

Other Decks in Technology

Transcript

  1. 標準折線圖 plot([0.8, 1.2, 2.1, 2.8], [2, -5, 3.2, 5]) 我們有點

    (0.8, 2), (1.2, -5), (2.1, 3.2), (2.8, 5), 把它們連起來的圖畫出來。 !47
  2. !51 ⽤選單選 Markdown 格式, 就可以⽤ Markdown 語法 做筆記! 筆記神⼿ Markdown

    請搜尋 Markdown 語法, ⽽ Jupyter Notebook 也⽀援 ⽤ LaTeX 打數學符號!
  3. 例⼦ 電池⽡時計算 假設 H 牌有個 10050 mAh, 12 V 的⾏動電源,

    換算 為⽡時是多少呢? 10050/1000 * 12 !57
  4. ⼀路到底。 重點 索引分割 L L[:] L[2:] L[:-2] ['A', 'B', 'C',

    'D', 'E'] ['C', 'D', 'E'] ['A', 'B', 'C'] !70
  5. 重點 串列的擴充 L = [1, 3, 8, 9] L.append(17) 這個串列我們想「擴充」,

    可以⽤ append。 L 會變成 [1, 3, 8, 9, 17]。 !71
  6. 練習 複利計算 深怕你不會算, ⽼闆還很親切的教你「⽐如你借 1,000 元, ⼗天後就還 1,100 就好。」你覺得好像 很合理,

    於是借了 10,000 元, 複利計算, 每⼗天複 利⼀次, 五年後你共⽋多少? 寫個可以輸⼊本⾦、年利率、每 年要複利幾次、借多少年的函 數, 計算最後本利和是多少。 !74
  7. 重點 電腦畫函數就是描點法 先來準備 x 座標的點, -10 到 10, 我們取, ⽐⽅說

    100 個點。 x = linspace(-10, 10, 100) 這會產⽣⼀個陣列 (array)。 !86
  8. 寫成程式是這樣 r = 3 t = linspace(-2*pi, 2*pi, 200) x

    = r*cos(t) y = r*sin(t) plot(x, y, lw=3) !95
  9. 重點 條件判斷 a==b False a = 3, b = 5

    特別注意相等的判斷要兩個等號! !102
  10. 例⼦ 遊戲的回應 s = 4 if s==5: print("太棒了了!") elif s>=3:

    print("不錯!") else: print("加油好嗎?") !106
  11. 重點 input ⽤法 要等使⽤者輸⼊⼀些資料, 可以⽤ input 指令。 s = input("請輸入:

    ") !108 注意這時得到的⼀定是字串, 可⽤例如 int(s) 改成 整數。
  12. 重點 梯度下降法 假設你做了⼀個神經網路, 對 w 這個參數的 loss function 如下: 起始點

    w 隨機從 0 到 5.5 選⼀個數, ⽤梯度下降 法找出 (局部) 最⼩值發⽣的地⽅。 !117
  13. Micro:bit !119 英國 BBC 推出的超⼩型 電腦, 提供給百萬學同學 習程式。 LED ⾯板

    按鈕 A 按鈕 B 還有⽅位感應、⽔平感應、加速度 感應等等...
  14. !129 紅葉 50 週年 棒球營 x 服務隊 x Micro:bit x

    瞭解原住⺠⽂化 「暑期國⼩營隊-UVAAZ營」
  15. 重點 import 法之 1 標準就是⽤ import 去讀⼊⼀個套件, 例如讀⼊ numpy 就是

    import numpy !132 只是這樣以後要⽤到 numpy 相關指令都要像這樣... y = numpy.sin(2*numpy.pi*t)
  16. 重點 import 法之 2 有趣的是很多套件有「標準」縮寫⽅式。 !134 %matplotlib inline import numpy

    as np import matplotlib.pyplot as plt import pandas as pd 這是我們推薦的資料分析「起⼿式」。
  17. 重點 矩陣計算 平時、期中、期末權重分別是 20%, 35%, 45%, 我們來算算某同學成績。 grades = np.array([85,

    70, 80]) weights = np.array([0.2, 0.35, 0.45]) np.dot(grades, weights) !140 輸出: 77.5 grades @ weights 現在其實⽐較愛⽤
  18. 重點 快速⽣ array 的⽅法之⼀ 從 0 到 10, 很均勻的找出 100

    個點。 x = np.linspace(0, 10, 100) !141 輸出: array([0., 0.1010101, …, 10.])
  19. 重點 快速⽣ array 的⽅法之⼆ np.arange 和 Python 的 range 很像,

    只是輸 出的是 array, ⽽且範圍可以⽤浮點數。 A = np.arange(10) !142 輸出: array([1, 2, …, 10])
  20. 重點 某個 array 的 shape A.shape !144 輸出: A =

    np.arange(10) 記得我們定義了 (10,)
  21. 重點 Shape 更改法之⼆ A.reshape(5,2) !146 輸出: array([[0, 1], [2, 3],

    [4, 5], [6, 7], [8, 9]]) 注意 A 本⾝ 不會變!
  22. 重點 ⼆維陣列的和 A = array([[0, 1, 2, 3, 4], [5,

    6, 7, 8, 9]]) A.sum() !150 全加! 輸出: 45
  23. 重點 ⼆維陣列的和 A = array([[0, 1, 2, 3, 4], [5,

    6, 7, 8, 9]]) A.sum(axis=0) !151 ⼀列⼀列 加起來! 輸出: array([5, 7, 9, 11, 13])
  24. 重點 array 過濾器 假設我們有個 array bool = np.array([True, False, False,

    True, True, False]) !153 我們想取出⼤於 0 的那些數。我們可以⽤另⼀個 array, 把要的標 True, 不要的標 False。 L = np.array([3, -2, -1, 5, 7, -3])
  25. 重點 array 過濾器 然後魔法出現了! L[bool] !154 L = np.array([3, -2,

    -1, 5, 7, -3]) 魔法 輸出: array([3, 5, 7]) * 但是 bool 那串是我們⾃⼰打的, 實在有點遜。
  26. 重點 array 過濾器 其實我們可以這樣找出 bool 那個 array。 L>0 !155 L

    = np.array([3, -2, -1, 5, 7, -3]) WOW! 輸出: np.array([True, False, False, True, True, False])
  27. 重點 slicing NumPy 的 slicing 和 list 的切法基本上是⼀樣的! x[2:5] !158

    x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 輸出: array([2, 3, 4])
  28. 重點 Sympy 化 !163 sp.S(1)/3 + sp.S(1)/2 有個 symplify (SymPy

    化) 的指令, 縮寫是⼤寫 S! 輸出:
  29. 準備訓練資料 ( , "台灣⿊熊") ( , "蠎蛇") , , ...

    x k+1 , y k+1 x k , y k x1 , y1 x n , y n 訓練資料 測試資料 3
  30. !190 第 t-1 年資料
 
 [Age, G, PA, AB, R,

    H, 2B, 3B, HR, RBI, SB, BB, SO, OPS+, TB] 15 個 features! f 第 t 年全壘打數 RNN
  31. !192 Mike Trout (LAA) 預測 30-39 實際 33 Mookie Betts

    (BOS) 預測 20-29 實際 24 Jose Altuve (HOU) 預測 20-29 實際 24 Kris Bryant (CHC) 預測 30-39 (第⼆⾼ 20-29) 實際 29 Daniel Murphy (WSH) 預測 20-29 實際 23 Corey Seager (LAD) 預測 20-29 實際 22 2017 預測結果 (2016 年 6 ⽉預測)
  32. !195 字1 字2 回1 EOS 回1 回2 回k EOS 注意這樣的模式,

    每次輸⼊和輸出都不是固定的⻑度!
  33. !228 x 網路路輸出 真正的 誤差 1 2 3 1 2

    5 2 -3 3 6 8 2 4 7 2 -5 5 6 6 0 6 4 8 4 7 8 9 1 總誤差怎麼算?
  34. !229 x 網路路輸出 真正的 誤差 1 2 3 1 2

    5 2 -3 3 6 8 2 4 7 2 -5 5 6 6 0 6 4 8 4 7 8 9 1 加總 = 0!! 加總可以嗎?
  35. !230 x 網路路輸出 真正的 誤差 1 2 3 1 2

    5 2 -3 3 6 8 2 4 7 2 -5 5 6 6 0 6 4 8 4 7 8 9 1 平⽅和 1 9 4 25 0 16 1 加總是 56
  36. 記得 L 是 w1 , w2 , b1 , …

    的函數 !233 希望越⼩越好
  37. !273 filter 1 filter 2 input 每個 filter 看⼀一個特徵, 掃過每

    ⼀一個點, 紀錄該點附近的「特 徵強度」。 Convolutional Neural Network (CNN)
  38. !276 2 5 5 2 5 2 0 1 2

    3 4 0 4 2 1 5 4 3 1 3 5 5 4 3 5 3 4 5 0 2 1 5 2 3 1 1 1 0 1 3 4 4 1 1 5 1 1 4 2 3 2 2 0 4 2 4 0 5 4 5 3 4 1 4 35 想成這是⼀張圖所成的矩陣 filter 內積 這學來的 W=
  39. !277 2 5 5 2 5 2 0 1 2

    3 4 0 4 2 1 5 4 3 1 3 5 5 4 3 5 3 4 5 0 2 1 5 2 3 1 1 1 0 1 3 4 4 1 1 5 1 1 4 2 3 2 2 0 4 2 4 0 5 4 5 3 4 1 4 35 27 filter 右移⼀一格 還是⼀樣的矩陣 W=
  40. !278 2 5 5 2 5 2 0 1 2

    3 4 0 4 2 1 5 4 3 1 3 5 5 4 3 5 3 4 5 0 2 1 5 2 3 1 1 1 0 1 3 4 4 1 1 5 1 1 4 2 3 2 2 0 4 2 4 0 5 4 5 3 4 1 4 35 27 44 32 36 38 36 36 37 36 36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 filter ⼀一路路到最後 W=
  41. !279 35 27 44 32 36 38 36 36 37

    36 36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 最後就是⼀個 6x6 的矩陣 有時我們會把它弄成還是 8x8 基本上和原矩陣⼀樣⼤ ⽽且我們通常 filter 會很多!
  42. !281 2 5 5 2 5 2 0 1 2

    3 4 0 4 2 1 5 4 3 1 3 5 5 4 3 5 3 4 5 0 2 1 5 2 3 1 1 1 0 1 3 4 4 1 1 5 1 1 4 2 3 2 2 0 4 2 4 0 5 4 5 3 4 1 4 35 27 44 32 36 38 36 36 37 36 36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 filter 圖⽚上的點是⼀個個輸 ⼊層神經元 W=
  43. !282 2 5 5 2 5 2 0 1 2

    3 4 0 4 2 1 5 4 3 1 3 5 5 4 3 5 3 4 5 0 2 1 5 2 3 1 1 1 0 1 3 4 4 1 1 5 1 1 4 2 3 2 2 0 4 2 4 0 5 4 5 3 4 1 4 35 27 44 32 36 38 36 36 37 36 36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 filter Conv 層也是⼀個個神經元 W=
  44. !283 2 5 5 2 5 2 0 1 2

    3 4 0 4 2 1 5 4 3 1 3 5 5 4 3 5 3 4 5 0 2 1 5 2 3 1 1 1 0 1 3 4 4 1 1 5 1 1 4 2 3 2 2 0 4 2 4 0 5 4 5 3 4 1 4 35 27 44 32 36 38 36 36 37 36 36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 filter 兩層中沒有完全相連 W=
  45. !284 2 5 5 2 5 2 0 1 2

    3 4 0 4 2 1 5 4 3 1 3 5 5 4 3 5 3 4 5 0 2 1 5 2 3 1 1 1 0 1 3 4 4 1 1 5 1 1 4 2 3 2 2 0 4 2 4 0 5 4 5 3 4 1 4 35 27 44 32 36 38 36 36 37 36 36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 filter 再來 share 同樣的 weights W=
  46. !285 35 27 44 32 36 38 36 36 37

    36 36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 最後就是⼀個 6x6 的矩陣 有時我們會把它弄成還是 8x8 基本上和原矩陣⼀樣⼤ ⽽且我們通常 filter 會很多!
  47. 35 27 44 32 36 38 36 36 37 36

    36 43 37 37 23 26 17 35 29 25 22 18 14 27 27 25 24 21 24 32 31 38 27 34 25 40 !288 36 44 43 37 26 35 38 34 40 每區投出最⼤的!!
  48. !295 Recurrent Neural Network (RNN) ht 1 = σ (w1

    xt 1 + w2 xt 2 + w3 h3 t−1 + w4 h4 t−1 + b1 ) 會加入上⼀一次的 outputs 當這次的 inputs。
  49. !309 LSTM GRU Long Short Term Memory Gated Recurrent Unit

    事實上現在⼤家說到 RNN 是想到...
  50. !319 編號 k 的
 LSTM LSTM 再⼀次 多出來的 cell state

    是屬於這個 cell 的 ⼀個 cell 的 output 還是會 和同⼀層分享
  51. !328 重點 RNN 的名字 現在說到 RNN, 其實包括原始 RNN, LSTM, GRU

    等各種變形。 特別要叫原始的 RNN, 我們習慣叫它 Vanilla RNN, 在 Keras 中是 SimpleRNN。