04-超引數
超引數
超引數:可以簡單的理解為執行機器學習演算法之前需要指定的這個引數,kNN 演算法中的 k 就是一個最為典型的超引數。
與超引數相對應的還有一個模型引數。模型引數是在演算法過程中學習的引數。前面我們所學習的 kNN 演算法沒有模型引數,只有超引數,k 就是一個典型的超引數。後面要學習的線性迴歸法和邏輯迴歸法都包含有大量的模型引數,到時候就可能會對模型引數有更深刻的理解。
下面,我們將對超引數進行學習。
我們可能會聽過機器演算法工程師要做的一個很重要的工作就是調參。通常來講,調參調的這個引數就是超引數,因為它是在演算法執行前就需要我們決定的引數。
那麼,通常我們怎麼尋找一個好的超引數?首先,由於機器學習演算法是要應用在不同的領域中,那麼在不同的領域中領域的知識
那麼另外一點就是經驗數值。對於很多問題有很多比較好的經驗數值被人們所採用,很多機器學習的庫中有很多預設的數值,通常這些預設的數值都是相對來講比較好的一個經驗數值。比如在 sklearn 中 kNN 演算法中的 k 預設是5,那麼這個5就是經驗上 kNN 演算法比較好的一個數值,但是即使如此,面對具體要處理的問題,還是有可能最好的解決你這個問題的超引數是和經驗數值不一樣的。那麼在這種情況下,我們就可能只能使用實驗搜尋這樣的方式。
換句話說,我們嘗試測試幾組不同的超引數。比如說,我們對不同的 k 的值進行測試,最終來取效果最好的 k 的值作為我們實際模型所使用的超引數的值。
下面我們具體實驗一下,尋找最好的 k。
其實 kNN 演算法中,不止 k 這麼一個超引數,還潛藏著一個非常重要的超引數。
到現在為止,對於 kNN 演算法,比如 k = 3,我們就找到離判斷的這個點(綠色)最近的三個點,如下圖為1個紅色,2個藍色,然後進行投票,藍色:紅色=2:1,所以藍色獲勝。
這個過程我們只考慮了離綠色節點最近的三個節點,可是卻忽略了最近的三個節點相應的距離,其實綠色節點離紅色節點最近,那麼是不是在這種情況下,離紅色的節點的權重是不是要比藍色節點的權重更重,那麼這就是 k 近鄰演算法的另外一種用法,就是考慮距離的權重。通常而言,我們考慮的距離的權重是將這個距離的倒數作為權重,相應的,距離越近,倒數就越大,相應的權重也就越大。所以在這種情況下,我們計算一下,紅色為1,藍色為 1/3+1/4=7/12,紅色更大,所以紅色勝出。
如果我們考慮了距離,其實還有另外一個優點,我們之前一直沒有談一個問題,就是我們使用普通的 k 近鄰演算法的話,比如說,k=3,如果分類的樣本數最終也有3類的話,就會產生一個平票的情況,那麼普通的 k 近鄰演算法就只能隨機的選取一個結果,那麼顯然是不合理的。而當我們考慮了距離之後,就可以非常好的解決平票的問題。
下面我們用程式碼來實現。
更多關於距離的定義
之前我們在我們的 kNN 演算法中談到了尤拉距離。
那麼,還有一個非常著名的距離為曼哈頓距離。(即兩個點在每個維度上的差值,即在x軸上的差值加上在y軸上的差值)
上圖中紅色、紫色、黃色的線距離都是相同的,為曼哈頓距離,綠色的線代表尤拉距離。
我們可以發現曼哈頓距離和尤拉距離在形式上是有一定相似的,通過下面推導,我們可以推匯出明可夫斯基距離(Minkowski Distance)。
那麼在這種情況下,我們相當於又獲得了一個新的超引數 p。對於明可夫斯基距離 p 大於等於3的時候,這個距離具體表達數學上的意義是什麼,我們就不深究。
下面我們使用程式碼來實現。
具體程式碼參考05 超引數.ipynb