跳到主要內容

[Development] Deep Learning over Python 深度學習基於 Python 3/3

  用 Python 練習實作深度學習,主要包含 Tensorflow 以及 SVM,著重於實作範例,未深入涉及各 DL 演算法模型原理及其數學。

大綱

[Development] Deep Learning over Python 深度學習基於 Python 1/3
  • Basic Tools: 基於 python- numpy, matplotlib, scipy, Pandas
[Development] Deep Learning over Python 深度學習基於 Python 2/3
  • Keras (基於 Tensorflow) 
  • Tensorflow
[Development] Deep Learning over Python 深度學習基於 Python 3/3
  • Support Vector Machine (SVM) 萬用分類機
  • Reinforcement Learning (RL) 強化學習

Reference: 本篇基於 Udemy 課程 "吳佳諺- Python 深度學習" 為架構出發衍生,其他引用資料個別在段落中標示

Support Vector Machine (SVM) 萬用分類機

  SVM 就是用統計上風險最小化的方法,來產生一個分類的超平面 (hyperplane),也就是找到一個決策邊界 (decision boundary),該邊界可以讓「兩類」之間的邊界 margins 最大化。
  SVM 是一個二元分類器,也就是只能做非黑即白的分類判斷。
  如果資料只有二維,如在二維直線座標系中標記了許多點,若這些點概念上可以被分成兩類,我們就可以透過迴歸分析的幫助,找出一條線來最適當的把這兩類的點切分開來,這條線如果是直線,那就是一個一元一次方程式,如果是曲線那當然就是二次三次或更高。
  而該怎麼找出最佳的一個切割面?SVM 的提議也很簡單,他假設如果存在一個 hyperplane,這個 hyperplane 距離所有 A/B 類節點的距離總和最長,那他就是一個最佳的分割面,這裡的距離的概念也就是 margin。簡單理解就是,處在兩個點的「最中間」位置的那條線就是這兩點的最佳切割線。
  但實際上我們都知道,兩類的點很有可能不會剛好一邊一邊各自群聚一起,往往會混在一起,此時一條線根本切不開,即使再高次也不行,這也就是非線性可分割的問題。此時 SVM 導入了第三個維度的想法,我們把每個資料點都加上 z 座標,編成座落在一個 3D 坐標系,可以想像我們就因此更有可能找出一個超平面 hyperplane 能妥善的將兩類的點給切分開來。這才是 SVM 因此強大的地方,他可以做到非線性的分類,概念可見以下影片,至於每個點的 z 座標是依據什麼規則賦予的,就不在本篇敘述了。



  SVM 本身是一個二元分類器,但可以藉由組合多個二元分類器來達到多類別分類的效果。有兩種方法,一種是一對多 one-versus-rest (OVR),就是 A 一類,非A 一類,這樣 k 個類別就有 k 個 SVM,訓練時個別訓練,但判斷時要走過 k 個 SVM。另一種是一對一 one-versus-one (OVO) 或稱 pairwise,就是每兩個類別之間都訓練一個分類器,所以總共就會有 k(k-1)/2 個分類器;進行判斷時是採用投票方式,比如某樣本在 A/B, A/C, A/D 都被判斷為是 A 類,則就最有可能屬於 A 類。

範例:IRIS 鳶尾花分類
  Source code: Jupyter file Iris_svm.ipynb

Reinforcement Learning (RL) 強化學習

[TBC]




留言

這個網誌中的熱門文章

[Development] Deep Learning over Python 深度學習基於 Python 1/3

  用 Python 練習實作深度學習,主要包含 Tensorflow 以及 SVM,著重於實作範例,未深入涉及各 DL 演算法模型原理及其數學。 大綱 [Development] Deep Learning over Python  深度學習基於 Python  1/3 Basic Tools: 基於 python- numpy, matplotlib, scipy, Pandas [Development] Deep Learning over Python 深度學習基於 Python 2/3 Keras (基於 Tensorflow)  Tensorflow [Development] Deep Learning over Python 深度學習基於 Python 3/3 Support Vector Machine (SVM) 強化學習 Reinforcement Learning (RL) Reference: 本篇基於  Udemy 課程 "吳佳諺- Python 深度學習"  為架構出發衍生,其他引用資料個別在段落中標示 Basic Tools numpy import numpy as np from scipy import linalg   # linear algebra import matplotlib.pyplot as plt myarray = np.array([[1, 2, 3], [4, 5, 6]]) print('myarray:', myarray) myarray_allzero = np.zeros((3, 5), dtype = np.int16) print('myarray_allzero:', myarray_allzero) myarray_2 = np.arange(15, dtype = np.int64) print('myarray_2:', myarray_2) myarray_2 = myarray_2.reshape((3, 5)) print('myarray_2 reshape:', myarray_2) myarray: [[1 2 3...

[Development] Deep Learning over Python 深度學習基於 Python 2/3

  用 Python 練習實作深度學習,主要包含 Tensorflow 以及 SVM,著重於實作範例,未深入涉及各 DL 演算法模型原理及其數學。 大綱 [Development] Deep Learning over 深度學習基於 Python Python 1/3 Basic Tools: 基於 python- numpy, matplotlib, scipy, Pandas [ Development] Deep Learning over Python  深度學習基於 Python  2/3 Keras (基於 Tensorflow) , 使用 Sequential 模型(範例 實作 "MINST 手寫辨識") CNN (Convolutional Neural Networks) 卷積神經網路 (範例 實作 "MINST 手寫辨識") RNN (Recurrent Neural Networks) 遞歸(迴)神經網路 (範例 實作 "IMPb 評論辨識") Tensorflow 基礎應用 NN 基本作用原理 CNN (Convolutional Neural Networks) 卷積神經網路 (範例 實作 "MINST 手寫辨識") [Development] Deep Learning over Python 深度學習基於 Python 3/3 Support Vector Machine (SVM) 強化學習 Reinforcement Learning (RL) Reference: 本篇基於 Udemy 課程 "吳佳諺- Python 深度學習" 為架構出發衍生,其他引用資料個別在段落中標示 Keras Keras 是一个用 Python 编写的高级神经网络 API,它能够以  TensorFlow ,  CNTK , 或者  Theano  作为后端运行 Keras 的核心数据结构是  model ,一种组织网络层的方式。最简单的模型是  Sequential 顺序模型 ,它由多个网络层线性堆叠。对于更复杂的结构,你应该使用  Keras 函数式 API ,它允许构建任意的...