SlideShare a Scribd company logo
Hands on data analysis 101
classification (SVM)
徐凡耘
2015-11-15
問答題:
Big data 處裡甚麼問題?
Recap Big data process stage
今天我們
講分析的
做法
Mahout 支援這些分類演算法
https://mahout.apache.org/users/basics/algorithms.html
1. 分類可以解決甚麼問題?
2. 資料怎麼來?
http://scikit-learn.org/stable/tutorial/machine_learning_map/
Recap Clustering
分群與分類的差別?
Agenda
• 讓你聽懂 SVM
• SVM (SVC) 實作
• 評估分類模型
SVM (1)
• 支持向量機器 (Support Vector Machine)
• 機器學習 (Machine learning)
• 監督式學習 (Supervised Learning)
• 分類 (Classification)和回歸 (Regression)
1. Regression 是找到一個函數,盡量符合
所有數據,讓間距平方和盡量小
2. Classification 是找到一個函數,盡量分
開所有數據,讓最小間距盡量大
SVM (2)
• 監督式學習
– 是一個機器學習中的技巧,可以由訓練資料
中學到或建立一個模式(sigmoid
function/ learning model),並依此模式
推測新的實例 (instances)
– 訓練資料(training data)是由輸入物件
(通常是向量)和預期輸出所組成
– 函數的輸出可以是一個連續的值(稱為迴歸
分析),或是預測一個分類標籤(稱作分類)
SVM (3)
• 在解決小樣本、『非線性』及高維模式
識別問題中表現出許多特有的優勢
• 應用於手寫體識別、三維目標識別、人
臉識別、文本圖像分類等問題,性能優
於已有的學習方法,表現出良好的學習
能力
• 從有限訓練樣本得到的決策
• 規則對獨立的測試集仍能夠得到較小的
誤差
SVM (4)
• 出一個超平面(hyperplane)
使之將兩個不同的集合分開
• 為什麼使用超平面這個名詞?
因為實際資料可能是屬於高維
度的資料,而超平面意指在高
維中的平面 (向量表示)
SVM (5)
SVM (6)
• Hard margin
• Soft margin
• 誤差資料容許範圍,
我們調整成本(cost
function)
損失函數值越小,模型就越好
SVM (7)
SVM(8)
• 上面我們討論的都是資料為線性的情形,如果是非線性資料的情
形我們又該如何?
– 解決的方法是把資料投射到更高維度的空間或是特徵空間
(feature space)
• 使用的 kernel (φ 是映射函數:) 決定分析結果
• 映射函數φ: 可能是一個很複雜,不容易求值的函數,但其內積型
式卻可能變得很簡單,例如: radial based function (RBF)
SVM (9)
• SVM 的兩個重要參數
– kernel => K(x,y)
– cost (C)
• SVM kernel 的選擇
– linear: K(x,y) 參數: 無
– polynomial: K(x,y) 參數: gamma、degree、coefo
– radial basis: K(x,y) 參數: gamma
– sigmoid: K(x,y) 參數: gamma、coefo
SVM (10)
• linear 與 rbf 的差別
SVM (11)
• 以 rbf 的 gamma 為例 (10 與 100)
1. 一般來說,gamma 值為資料筆數分之一。例如: 144筆資料,gamma = 1/144
2. 放大的 gamma 反而有 overfitting 結果
林仁智老師的 demo
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
Overfitting
• 訓練資料應思考適用一般情況下的資料,
而不是只有訓練資料的完美
• 拉太緊反而沒有空間
– 不具有自由度
• 以決策數例子補充說明
digits 測試資料集
Sample code (1)
• from sklearn import datasets
• from sklearn import svm
• import matplotlib.pyplot as plt
• digits = datasets.load_digits()
• print(digits.data)
• print(digits.target)
• print(digits.images[0])
• print(len(digits.data))
• clf=svm.SVC(gamma=0.001, C=100)
• X,y=digits.data[:-10], digits.target[:-10]
• clf.fit(X,y)
• print('Predicition:',clf.predict(digits.data[-1]))
• plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation="nearest")
1. 嘗試調整訓練資料集 => digits.data[:-10]
2. 嘗試調整 gamm => gamma = 100
引入函式庫
引入訓練資料集
檢視訓練資料集
設定參數
輸入訓練資料集
擬合訓練資料
看預測結果
看該數字長像
K-fold cross-validation
K折交叉驗證
• 舉例來說一份資料分為 10 堆:
– 分類器只看過其中9堆,另外1堆拿來測試結果,
了解分類的準確度如何
– 接下來重新(之前的記憶洗掉)繼續做9次
– 拿第2堆來測試分類器,而其它9堆分類器看過
– 拿第3堆來測試分類器,而其它9堆分類器
– 最後將10次測試的準確度平均,就是分類器的
準確度
Sample code (2)
• from sklearn.svm import SVC
• from sklearn.datasets import load_digits
• digits = load_digits()
• X, y = digits.data, digits.target
• clf = SVC()
• clf.fit(X,y)
• clf.predict(X)
• clf.score(X,y)
說說看為
何是 1.0
(100%)
Sample code (3)
• from sklearn.svm import SVC
• from sklearn.datasets import load_digits
• from sklearn.cross_validation import KFold
• Import numpy as np
• digits = load_digits()
• X, y = digits.data, digits.target
• scores = []
• for train, test in KFold(len(X), n_folds=5, shuffle=True):
• X_train, y_train = X[train], y[train]
• X_test, y_test = X[test], y[test]
• clf = SVC()
• scores.append(clf.score(X_test, y_test))
• np.mean(scores))
說說看為
何是 0.44
(44%)
Sample code (4)
• from sklearn.svm import SVC
• from sklearn.datasets import load_digits
• from sklearn.cross_validation import Kfold
• import matplotlib.pyplot as plt
• import numpy as np
• digits = load_digits()
• X, y = digits.data, digits.target
• parameters = np.linspace(0.0001, 0.01, num=10)
• scores = []
• for value in paramters:
• clf = SVC(gamma=value)
• s = cross_val_score(clf, X, y, cv=5)
• scores.append(np.mean(s, axis=0))
• np.max(scores)
• plt.figure()
• plt.xlabel(“Gamma”)
• plt.ylable(“Accuracy”)
• plt.plot(parameters, scores)
• plt.savefig(“c:aaagrid.png”)
說說看為
何是 0.97
(97%)
辨別分類模型好壞
其他經典的分類演算法
• ID3 (Iterative Dichotomiser)
• C4.5/ C5
• CART (Classification and Regression Tree)
• CHAID (Chi-Square Automatic Interaction Detector)
經過這門課你要懂
• 分類是啥?
• 分類在大數據中的應用
• 分類有哪些演算法?
• SVM 演算法的精神
• 如何檢定分類器的好壞
• 計算分類器準確度常用的方法為何?
補充 (1)
• 持續優化議題
– gamma 值與 cost function 的關係
補充 (2)
• 十大經典演算法
– C4.5 (分類)
– K-means (分群)
– SVM (分類)
– Apriori (關聯分析)
– EM (分群)
– PageRank (圖論: 分群)
– AdaBoost (分類)
– kNN (分類)
– Naive Bayes (分類)
– CART (分類)
補充 (3)
• 在 Andrew NG 講義提到
– 如果 Feature 的數量很大,樣本數量也很大,
選用 linear kernel
– 如果 Feature 的數量較少,樣本數量一般,
選用 Gaussian kernel
– 如果 Feature 的數量較少,樣本數量很大,
則需要手工新增一些 features,變成第一種
情況
補充 (4)
• Python 教學 (list)
補充 (5)
• Python 教學 (dict)
補充 (6)
• Python 教學 (key-value)
補充 (7)
• Python 教學 (控制迴圈)
補充 (8)
• Python 教學 (控制迴圈)
補充 (9)
• Python 教學 (類別)
補充 (10)
• Python 教學 (引入函示庫)
補充 (11)
• Python 教學 (numpy)
補充 (12)
• Python 教學 (numpy)
補充 (13)
• 回歸方程式
• 成本函數
– 最小平方法 (預測值與觀
察值最小)
補充 (14)
• 回歸模型與成本函數的關係
θ為迴歸係數,要求得θ的最小值
收斂過程採各點偏
微分,若 > 0 表示斜
率為正,因此在右邊
。接近0表示接近谷
底(收斂)
補充 (15)
• 收斂方法很多,以時間複雜度為衡量指標
– Learning rate 決定好壞
– 笨方法: 一個點一個點偏微分
– 好方法: Stochastic gradient descent
補充 (16)
• (SVR) 迴歸模型的預測績效方法
– MAPE: 衡量真實值與預測值的差異,當該
值越小表示相當接近真實值
– NMSE: 同上
– R值: 評估真實值與預測值的逼近水準與相關
程度
http://libwri.nhu.edu.tw:8081/Ejournal/3082040106.pdf
補充 (17)
• Radial basis function kernel (RBF)
– 映射函數φ
– 徑向基函數核
– 核函數 (也是某種轉換函數)
– SVM 當中最常用的
• 以座標轉換解釋(投影)
– 二維轉三維
– 三維轉二維

More Related Content

More from FEG (20)

PDF
Sequence Model with practicing hands on coding.pdf
FEG
 
PDF
Seq2seq Model introduction with practicing hands on coding.pdf
FEG
 
PDF
AIGEN introduction with practicing hands on coding.pdf
FEG
 
PDF
資料視覺化_Exploation_Data_Analysis_20241015.pdf
FEG
 
PDF
Operation_research_Linear_programming_20241015.pdf
FEG
 
PDF
Operation_research_Linear_programming_20241112.pdf
FEG
 
PDF
Sequence Model pytorch at colab with gpu.pdf
FEG
 
PDF
資料視覺化_透過Orange3進行_無須寫程式直接使用_碩士學程_202403.pdf
FEG
 
PDF
Pytorch cnn netowork introduction 20240318
FEG
 
PDF
2023 Decision Tree analysis in business practices
FEG
 
PDF
2023 Clustering analysis using Python from scratch
FEG
 
PDF
2023 Data visualization using Python from scratch
FEG
 
PDF
2023 Supervised Learning for Orange3 from scratch
FEG
 
PDF
2023 Supervised_Learning_Association_Rules
FEG
 
PDF
202312 Exploration Data Analysis Visualization (English version)
FEG
 
PDF
202312 Exploration of Data Analysis Visualization
FEG
 
PDF
Transfer Learning (20230516)
FEG
 
PDF
Image Classification (20230411)
FEG
 
PDF
Google CoLab (20230321)
FEG
 
PDF
Supervised Learning
FEG
 
Sequence Model with practicing hands on coding.pdf
FEG
 
Seq2seq Model introduction with practicing hands on coding.pdf
FEG
 
AIGEN introduction with practicing hands on coding.pdf
FEG
 
資料視覺化_Exploation_Data_Analysis_20241015.pdf
FEG
 
Operation_research_Linear_programming_20241015.pdf
FEG
 
Operation_research_Linear_programming_20241112.pdf
FEG
 
Sequence Model pytorch at colab with gpu.pdf
FEG
 
資料視覺化_透過Orange3進行_無須寫程式直接使用_碩士學程_202403.pdf
FEG
 
Pytorch cnn netowork introduction 20240318
FEG
 
2023 Decision Tree analysis in business practices
FEG
 
2023 Clustering analysis using Python from scratch
FEG
 
2023 Data visualization using Python from scratch
FEG
 
2023 Supervised Learning for Orange3 from scratch
FEG
 
2023 Supervised_Learning_Association_Rules
FEG
 
202312 Exploration Data Analysis Visualization (English version)
FEG
 
202312 Exploration of Data Analysis Visualization
FEG
 
Transfer Learning (20230516)
FEG
 
Image Classification (20230411)
FEG
 
Google CoLab (20230321)
FEG
 
Supervised Learning
FEG
 

Hands on data analysis 101