機器學習入門 4-6 網格搜索與k近鄰演算法中更多超參數

  • 2019 年 11 月 13 日
  • 筆記

本系列是《玩轉機器學習教程》一個整理的影片筆記。本小節主要介紹使用sklearn網格搜索尋找最好的超參數以及kNN計算兩個數據點距離的其他距離定義。

sklearn網格搜索

使用網格搜索的方式來找最好的超參數。在前面一個小節中,我們通過自己寫的for循環來尋找最好的超參數。但是超參數之間並不都是相互獨立的,有些超參數之間是存在相互依賴的關係的。比如在前一小節中超參數p,只有在weights參數為"distance"的時候才有意義。

為了更方便的讓我們通過網格搜索的方式來尋找最好的超參數,sklearn為我們封裝了一個專門進行網格搜索的方式叫:「Grid Search」。

在使用Grid Search之前,我們要定義需要進行搜索的參數。將搜索的參數定義在一個param_grid列表中:

  1. 列表中每一個元素是一個字典;
  2. 字典中定義的是一組網格搜索,字典中鍵名稱為參數名,鍵對應的值是一個列表,列表中元素是鍵所對應的參數中所有可能的範圍。

超參數之間的依賴關係,通過定義在相同字典中來表示的。只有在weights = "distance"的時候超參數p才有意義。

通過grid_search獲取最優分類精度以及分類參數:

獲取網格搜索後最好的模型,其實看第9個cell已經看出,grid_search.best_estimater_返回的是擁有通過網格搜索得到最好超參數的kNN對象,因此可以將其直接賦值,通過賦值後的對象進行一些列kNN操作。

sklearn的Grid Search其他參數

Sklearn中Grid Search中其他重要參數:

  1. n_jobs:其實grid Search簡單來說就是創建很多個分類器,然後通過交叉驗證的方式,看看那個超參數對應的分類器更好,創建很多分類器的這個過程是可以並行處理的。n_jobs就決定了為你的電腦分配幾個核來進行這種並行處理的過程,n_jobs參數默認為1,也就是使用單核的方式進行處理,如果你的電腦有多個核可以傳入相應的使用核的數量,同時可以傳入-1,此時電腦中的所有核全都應用網格搜索的過程。
  2. verbose:在搜索的過程中進行一些輸出,整數值,對應的整數值越大,輸出的資訊也就越詳細。

kNN更多距離定義

定義訓練集中的數據點與新的數據點之間的距離,默認使用的是明科夫斯基距離,對應的p = 2,也就是歐拉距離的定義,當然kNN中還有其他距離可以使用:

在定義kNN對象的時候,有一個metric的參數,默認使用的是明科夫斯基距離,我們可以傳入其他的值來定義其他的距離。傳入的參數是一個字元串,此時在sklearn中被DistanceMetric這個類定義。