隨機搜尋randomizedsearchcv原理
(1)超引數優化也就是常說的調參,python-sklearn裡常用的有gridsearchcv和randomizedsearchcv可以用。其中gridsearchcv的原理很簡明,就是程式去挨個嘗試每一組超引數,然後選取最好的那一組。可以想象,這個是比較費時間的,面臨著維度災難。因此james bergstra和yoshua bengio在2023年提出了超引數優化的randomsearch方法。
(2)randomizedsearchcv是在**的基礎上加入了cross-validation,**示例如下(選自官方文件):
import numpy as np
from scipy.stats import randint as sp_randint
from sklearn.model_selection import randomizedsearchcv
from sklearn.datasets import load_digits
from sklearn.ensemble import randomforestclassifier
# 載入資料
digits = load_digits(
)x, y = digits.data, digits.target
# 建立乙個分類器或者回歸器
clf = randomforestclassifier(n_estimators=20)
# 給定引數搜尋範圍:list or distribution
param_dist =
#給定list
# 用randomsearch+cv選取超引數
n_iter_search =
20random_search = randomizedsearchcv(clf, param_distributions=param_dist,
n_iter=n_iter_search, cv=
5, iid=
false
)random_search.fit(x, y)
考察其源**,其搜尋策略如下:
(a)對於搜尋範圍是distribution的超引數,根據給定的distribution隨機取樣;
(b)對於搜尋範圍是list的超引數,在給定的list中等概率取樣;
(c)對a、b兩步中得到的n_iter組取樣結果,進行遍歷。
(補充)如果給定的搜尋範圍均為list,則不放回抽樣n_iter次。
更詳細的可以參考sklearn-randomizedsearchcv的parametersampler類的**。
下圖是原**裡說明為何隨機搜尋在某些情況下會更有效的原理示意圖:
(a)目標函式為 f(x,y)=g(x)+h(y),其中綠色為g(x),黃色為h(y),目的是求f的最大值。
(b)其中由於g(x)數值上要明顯大於h(y),因此有f(x,y)=g(x)+h(y)≈g(x),也就是說在整體求解f(x,y)最大值的過程中,g(x)的影響明顯大於h(y)。
(c)兩個圖都進行9次實驗(搜尋),可以看到左圖實際探索了各三個點(在橫軸和縱軸上的投影均為3個),而右圖探索了9個不同的點(橫軸縱軸均是,不過實際上橫軸影響更大)。
(d)右圖更可能找到目標函式的最大值。
因此引入隨機因素在某些情況下可以提高尋優效率。
參考文獻: bergstra j , bengio y . random search for hyper-parameter optimization[j]. journal of machine learning research, 2012.
隨機搜尋RandomizedSearchCV原理
文章目錄 一 問題描述及 示例 二 randomsearchcv是如何 隨機搜尋 的 三 randomsearch為什麼會有效 四 其他 內容整理自randomizedsearchcv源 和 random search for hyper parameter optimization,供有需要的同學...
隨機搜尋(Random Searching)演算法
個人理解,隨機搜尋是一種在巨大資料規模下執行乙個耗時上無法接受的程式的優化方法。它可以用以對乙個搜尋演算法施展優化的前提是 1 資料規模大,精確的結果難以在一定時間計算出。2 結果的些許的不精確能夠被接受。3 求取的結果是最優化 optimization 問題,有乙個成本計算模型。以上自己總結,歡迎...
隨機化搜尋
參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 nn 個深埋在地下的寶藏屋,也給出了這 nn 個寶藏屋之間可供開發的mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發寶藏屋之間的道路 則相...