天天看點

周志華《機器學習》課後習題(第六章):支援向量機

周志華《機器學習》課後習題(第六章):支援向量機

這個問題在吳恩達老師的《機器學習》課程(斯坦福版本CS 229)裡面講解過,有興趣的可以自己去網易公開課看看,圖檔截圖自該課程課件。

6.2 試使用 LIBSVM,在西瓜資料集 3.0α 上分别用線性核和高斯核訓練一個 SVM,并比較其支援向量的差别。

答:

這裡沒用LIBSVM,用的sklearn中的sklearn.svm.svc,它的實作也是基于libsvm的。

使用不同參數的時候,支援向量是不同的(沒有對高斯核中的gamma調參)。由于西瓜資料集3.0a線性不可分,是以使用線性核時,無論懲罰系數多高 ,還是會出現誤分類的情況;而使用高斯核時在懲罰系數設定較大時,是可以完全拟合訓練資料。是以在懲罰系數設定較小時,兩者支援向量都類似,而在懲罰系數較大(支援向量機中,懲罰系數越大,正則化程度越低)時,高斯核的支援向量數目會較少,而線性核的會幾乎沒有變化。

代碼在:han1057578619/MachineLearning_Zhouzhihua_ProblemSets

C = 100時訓練情況如下:

高斯核支援向量: [ 8 9 11 12 13 14 16 2 3 4 5 6 7]

周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機

6.4 試讨論線性判别分析與線性核支援向量機在何種條件下等價。

這道題想不出很明确的答案,這僅讨論一下。

有一點很明确的是:在資料線性可分時并不會導緻線性判别分析與線性核支援向量機等價。

周志華《機器學習》課後習題(第六章):支援向量機

上圖是以iris資料中第0列和第2列資料作為訓練集。分别LDA和線性核SVM訓練,得到圖中兩者的決策邊界,可以看出在資料線性可分的情況下,兩者決策邊界還是有很大差别的。如果這裡等價了解為兩者決策邊界相同,即兩個模型決策函數是相同的,那麼兩者決策邊界重合時,兩者等價的。那麼什麼時候兩者會重疊?

周志華《機器學習》課後習題(第六章):支援向量機

查了很多資料沒找到相關資訊。感覺LDA和SVM其實沒有多大相似度。

ps.這裡解答其實就按照結果倒推了一下。貌似都是些廢話。

畫圖代碼在:han1057578619/MachineLearning_Zhouzhihua_ProblemSets

代碼有點亂。

6.5 試述高斯核 SVM 與 RBF 神經網絡之間的聯系。

其實這個題目在p145的《休息一會兒》的注釋裡面已經給出答案了。

RBF神經網絡中,将隐藏層神經元個數設定為訓練樣本數,每個樣本設定為一個神經元中心,此時RBF的預測函數和SVM激活函數相同。

個人了解,兩個模型還是有挺大差别的。

  • RBF中徑向基激活函數中控制方差的參數 
    周志華《機器學習》課後習題(第六章):支援向量機
    是由模型自動習得,而在SVM中是一個可調節的超參。
  • 目标函數、優化方式也不同。

但是如果将RBF中 

周志華《機器學習》課後習題(第六章):支援向量機

固定為和SVM一緻,最後訓練結果應該會比較相似。

以上是個人了解。就不寫代碼驗證了。。。

6.6 試析 SVM 對噪聲敏感的原因。

SVM的決策隻基于少量的支援向量,若噪音樣本出現在支援向量中,容易對決策造成影響,是以SVM對噪音敏感。

6.7 試給出式 (6.52) 的完整 KKT 條件。

6.52式是經過将完整的KKT條件

周志華《機器學習》課後習題(第六章):支援向量機

6.8 以西瓜資料集 3.0α 的"密度"為輸入"含糖率"為輸出,試使用LIBSVM 訓練一個 SVR。

關于SVR沒有了解很深,簡單了解了一下。這道題就簡單看一下不同參數,訓練結果的變換吧。

周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機

直覺上看,含糖率和密度無明顯關系。是以無論模型參數怎麼調,看上去對資料的拟合都不是很好,預測值和真實值還是有較大差異。不過還是可以看出來随着gamma或者C的增大,模型都會趨于更加複雜。

這裡代碼很簡單,還是放上來。

han1057578619/MachineLearning_Zhouzhihua_ProblemSet

6.9 試使用核技巧推廣對率回歸,産生"核對率回歸"。

周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機

可直接使用梯度下降等優化算法求解上圖的目标函數即

題目沒要求。就偷個懶不寫代碼了。

說個題外的。SVM中隻有少數支援向量對應的 

周志華《機器學習》課後習題(第六章):支援向量機

 非零,是以對于SVM來說,訓練完成後隻需要儲存個别非零的 

周志華《機器學習》課後習題(第六章):支援向量機

 和對應資料點即可;而不同于SVM, 核邏輯回歸并沒有這一性質,需要儲存所有訓練資料。就這一點來說核邏輯回歸并不高效。

6.10* 試設計一個能顯著減少 SVM 中支援向量的數目而不顯著降低泛化性能的方法。(未完成)

這個應該也是某個論文。最近時間不多,暫時不深究了就。。

6.11 自己程式設計實作SVM,并在西瓜資料集 3.0αα 測試。

自己加的題目。雖然書上沒要求,但還是自己寫了一遍。

代碼在:

han1057578619/MachineLearning_Zhouzhihua_ProblemSets

其實主要就是把SMO實作了一遍。

參考:

  • 《統計學習方法》
  • 《機器學習實戰》
  • 《Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines》
  • 《THE IMPLEMENTATION OF SUPPORT VECTOR MACHINES USING THE SEQUENTIAL MINIMAL OPTIMIZATION ALGORITHM》

寫代碼的時候參考以上資料。代碼主要根據原論文中提供的僞代碼和《機器學習實戰》的源碼寫的,《機器學習實戰》中給出的代碼和原論文有幾個地方有差異:

周志華《機器學習》課後習題(第六章):支援向量機
周志華《機器學習》課後習題(第六章):支援向量機

訓練結果和使用sklearn中結果(習題6.2)一緻,支援向量也是相同的,決策邊界差不多相同,其他資料未測試。不過速度上,sklearn會快很多,測試了一下訓練西瓜資料集,自己寫的代碼需要5e-4秒,而sklearn隻需要1e-8。還是有很大差距的。

代碼有點亂,這裡隻為深刻了解一下SMO,也不做工程使用,暫時就不優化了。。以後閑下來再看看。

以上。

繼續閱讀