iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0
自我挑戰組

機器學習入門系列 第 14

ML_Day14(SVM Kernel-2)

簡單回顧
ML_Day13(SVM Kernel-1)有稍微介紹SVM kernel的主要觀念,簡單來說就是為了解決非線性問題,這一章節會做做一些複習並且做一點簡單練習。

使用Kernel在高維空間找到分離平面
為了用SVM解決非線性問題,必須將數據資料轉換到更高維度的空間,並對這個新的空間中的數據,訓練一個線性分類器來做分類。將數據轉換到更高維度的函數我們稱為 φ

Kernel定義
k(x,l)=⟨φ(x),φ(l)⟩ = φ(x)^T φ(l)
這個k(x,l)就是一個kernel函數,表示把數據轉換後在做內積。

其中最為廣泛使用的Kernel為Gaussian kernel(ML_Day13(SVM Kernel-1)有介紹,就是相似度 f )

k(x, l) = exp(-|x-l|²/2σ²)

https://ithelp.ithome.com.tw/upload/images/20190926/20116157w2UbO1wnmg.png

使用Kernel做分類
先用Numpy中的logical_xor函數產生數據,其中100筆數為1,另外100筆為-1。

X_xor = np.random.randn(200, 2)
y_xor = np.logical_xor(X_xor[:, 0] > 0, X_xor[:, 1] > 0)
y_xor = np.where(y_xor, 1, -1)
plt.scatter(X_xor[y_xor==1, 0], X_xor[y_xor==1, 1], c='b', marker='x', label='1')
plt.scatter(X_xor[y_xor==-1, 0], X_xor[y_xor==-1, 1], c='r', marker='s', label='-1')
plt.ylim(-3.0)
plt.legend()
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190926/201161572hfB74y2ij.png

跟前一章節 一樣,使用scikit-learn提供的SVC,並將kernel換成rbf,這裡的rbf其實就是我們前面所提到的Gaussian kernel,這邊的另一個參數gamma,就是在前一章節提到的1/ 2σ²,輸出結果如下圖所示,可以看到成功的分開了整個數據。

svm = SVC(kernel='rbf', random_state=0, gamma=0.1, C=10.0)
svm.fit(X_xor, y_xor)
plot_decision_regions(X_xor, y_xor, classifier=svm)
plt.legend(loc='upper left')
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190926/20116157KYFlcXqQsi.png


上一篇
ML_Day13(SVM Kernel-1)
下一篇
ML_Day15(Regularization(Solving overfitting))
系列文
機器學習入門28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言