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
相關文章
- 04-預設引數
- 超引數
- 超引數最佳化完整指南
- 機器學習之超引數機器學習
- 7、超引數除錯、Batch正則化除錯BAT
- 超簡潔的js獲取位址列引數JS
- 自動編碼器Gridsearch超引數調整KerasKeras
- 什麼是請求引數、表單引數、url引數、header引數、Cookie引數?一文講懂HeaderCookie
- 機器學習最困難的部分:超引數除錯機器學習除錯
- 【建議使用】告別if,Java超好用引數校驗工具類Java
- python疑問5:位置引數,預設引數,可變引數,關鍵字引數,命名關鍵字引數區別Python
- 隨機森林RF模型超引數的最佳化:Python實現隨機森林模型Python
- 深度學習煉丹-超引數設定和網路訓練深度學習
- 12.MyBatis學習--對映檔案_引數處理_單個引數&多個引數&命名引數MyBatis
- 04-歸納概括題3
- 04-上拉載入更多
- 《線性代數的本質》筆記(04-附註1-05)筆記
- Java對比有引數和無引數Java
- mt引數
- COMPATIBLE引數
- 引數配置
- python引數Python
- 《Kafka實戰》之生產者API使用(引數解釋超詳細)KafkaAPI
- 引數的定義和引數的傳遞
- nginx 常見引數以及重定向引數配置Nginx
- 引數匹配模型——Python學習之引數(二)模型Python
- 常用的jvm配置引數 :永久區引數配置JVM
- c# 方法引數(傳值,傳引用,ref,out,params,可選引數,命名引數)C#
- RestTemplate超時引發的血案REST
- DDD | 04-什麼是聚合根
- Vue 框架-04-計算屬性Vue框架
- Bash變數和引數變數
- python變數和引數Python變數
- 小程式內引數和掃碼引數統一
- Python函式/動態引數/關鍵字引數Python函式
- C技巧:結構體引數轉成不定引數結構體
- vue17自定義指令(有引數,無引數)Vue
- 引數匹配順序——Python學習之引數(三)Python