日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LESSON 10.3 Halving网格搜索

發(fā)布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LESSON 10.3 Halving网格搜索 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

三 對半網(wǎng)格搜索HalvingSearchCV

  • 基本原理

在講解隨機網(wǎng)格搜索之前,我們梳理了決定枚舉網(wǎng)格搜索運算速度的因子:

1 參數(shù)空間的大小:參數(shù)空間越大,需要建模的次數(shù)越多
2 數(shù)據(jù)量的大小:數(shù)據(jù)量越大,每次建模時需要的算力和時間越多

面對枚舉網(wǎng)格搜索過慢的問題,sklearn中呈現(xiàn)了兩種優(yōu)化方式:其一是調整搜索空間,其二是調整每次訓練的數(shù)據(jù)。調整搜索空間的方法就是隨機網(wǎng)格搜索,而調整每次訓練數(shù)據(jù)的方法就是對半網(wǎng)格搜索。

假設現(xiàn)在存在數(shù)據(jù)集𝐷,我們從數(shù)據(jù)集𝐷中隨機抽樣出一個子集𝑑。如果一組參數(shù)在整個數(shù)據(jù)集𝐷上表現(xiàn)較差,那大概率這組參數(shù)在數(shù)據(jù)集的子集𝑑上表現(xiàn)也不會太好。反之,如果一組參數(shù)在子集𝑑d上表現(xiàn)不好,我們也不會信任這組參數(shù)在全數(shù)據(jù)集𝐷上的表現(xiàn)。參數(shù)在子集與全數(shù)據(jù)集上反饋出的表現(xiàn)一致,如果這一假設成立,那在網(wǎng)格搜索中,比起每次都使用全部數(shù)據(jù)來驗證一組參數(shù),或許我們可以考慮只帶入訓練數(shù)據(jù)的子集來對超參數(shù)進行篩選,這樣可以極大程度地加速我們的運算。

但在現(xiàn)實數(shù)據(jù)中,這一假設要成立是有條件的,即任意子集的分布都與全數(shù)據(jù)集D的分布類似。當子集的分布越接近全數(shù)據(jù)集的分布,同一組參數(shù)在子集與全數(shù)據(jù)集上的表現(xiàn)越有可能一致。根據(jù)之前在隨機網(wǎng)格搜索中得出的結論,我們知道子集越大、其分布越接近全數(shù)據(jù)集的分布,但是大子集又會導致更長的訓練時間,因此為了整體訓練效率,我們不可能無限地增大子集。這就出現(xiàn)了一個矛盾:大子集上的結果更可靠,但大子集計算更緩慢。對半網(wǎng)格搜索算法設計了一個精妙的流程,可以很好的權衡子集的大小與計算效率問題,我們來看具體的流程:

1、首先從全數(shù)據(jù)集中無放回隨機抽樣出一個很小的子集𝑑0,并在𝑑0上驗證全部參數(shù)組合的性能。根據(jù)𝑑0上的驗證結果,淘汰評分排在后1/2的那一半?yún)?shù)組合

2、然后,從全數(shù)據(jù)集中再無放回抽樣出一個比𝑑0大一倍的子集𝑑1,并在𝑑1上驗證剩下的那一半?yún)?shù)組合的性能。根據(jù)𝑑1上的驗證結果,淘汰評分排在后1/2的參數(shù)組合

3、再從全數(shù)據(jù)集中無放回抽樣出一個比𝑑1大一倍的子集𝑑2,并在𝑑2上驗證剩下1/4的參數(shù)組合的性能。根據(jù)𝑑2上的驗證結果,淘汰評分排在后1/2的參數(shù)組合……

持續(xù)循環(huán)。如果使用S代表首次迭代時子集的樣本量,C代表全部參數(shù)組合數(shù),則在迭代過程中,用于驗證參數(shù)的數(shù)據(jù)子集是越來越大的,而需要被驗證的參數(shù)組合數(shù)量是越來越少的:

備選參數(shù)組合只剩下一組,或剩余可用的數(shù)據(jù)不足,循環(huán)就會停下,具體地來說,當(1/n)*C <= 1或者nS > 總體樣本量,搜索就會停止。在實際應用時,哪一種停止條件會先被觸發(fā),需要看實際樣本量及參數(shù)空間地大小。同時,每次迭代時增加的樣本量、以及每次迭代時不斷減少的參數(shù)組合都是可以自由設定的。

在這種模式下,只有在不同的子集上不斷獲得優(yōu)秀結果的參數(shù)組合能夠被留存到迭代的后期,最終選擇出的參數(shù)組合一定是在所有子集上都表現(xiàn)優(yōu)秀的參數(shù)組合。這樣一個參數(shù)組合在全數(shù)據(jù)上表現(xiàn)優(yōu)異的可能性是非常大的,同時也可能展現(xiàn)出比網(wǎng)格/隨機搜索得出的參數(shù)更大的泛化能力。

  • 對半網(wǎng)格搜索的局限性

然而這個過程當中會存在一個問題:子集越大時,子集與全數(shù)據(jù)集D的分布會越相似,但整個對半搜索算法在開頭的時候,就用最小的子集篩掉了最多的參數(shù)組合。如果最初的子集與全數(shù)據(jù)集的分布差異巨大的化,在對半搜索開頭的前幾次迭代中,就可能篩掉許多對全數(shù)據(jù)集D有效的參數(shù),因此對半網(wǎng)格搜索最初的子集一定不能太小

在對半網(wǎng)格搜索過程中,子集的樣本量時呈指數(shù)級增長:

n = 10 for i in range(15):print(i,n*3**i) #0 10 #1 30 #2 90 #3 270 #4 810 #5 2430 #6 7290 #7 21870 #8 65610 #9 196830 #10 590490 #11 1771470 #12 5314410 #13 15943230 #14 47829690

在初始子集樣本量為10的前提下,7、8次迭代就會消耗掉2500+數(shù)據(jù)資源。在初始子集一定不能太小、且對半搜索的抽樣是不放回抽樣的大前提下,整體數(shù)據(jù)的樣本量必須要很大從經驗來看,對半網(wǎng)格搜索在小型數(shù)據(jù)集上的表現(xiàn)往往不如隨機網(wǎng)格搜索與普通網(wǎng)格搜索,事實上,如果我們在Kaggle房價數(shù)據(jù)集上使用對半網(wǎng)格搜索,會發(fā)現(xiàn)其搜索結果還不如枚舉網(wǎng)格搜索、且搜索時間長于之前我們嘗試過的任何一種搜索方式。但在大型數(shù)據(jù)集上(比如,樣本量過w的數(shù)據(jù)集上),對半網(wǎng)格搜索則展現(xiàn)出運算速度和精度上的巨大優(yōu)勢。

因此在對半網(wǎng)格搜索實現(xiàn)時,我們使用一組拓展的房價數(shù)據(jù)集,有2w9條樣本。

data2 = pd.read_csv(r"D:\Pythonwork\2021ML\PART 2 Ensembles\datasets\House Price\big_train.csv",index_col=0) X = data2.iloc[:,:-1] y = data2.iloc[:,-1] X.shape #(29062, 80) y.describe() #count 29062.000000 #mean 182798.864703 #std 72379.404452 #min 34900.000000 #25% 139000.000000 #50% 169092.000000 #75% 203009.750000 #max 755000.000000 #Name: SalePrice, dtype: float64 X.head()

  • 對半網(wǎng)格搜索的實現(xiàn)

在sklearn當中,我們可以使用HalvingGridSearchCV類來實現(xiàn)對半網(wǎng)格搜索。Halving搜索是sklearn 1.0.1版本才新增的功能,因此現(xiàn)在該功能還處于實驗階段,在導入該類的時候需要同時導入用以開啟對半網(wǎng)格搜索的輔助功能enable_halving_search_cv。當且僅當該功能被導入時,HalvingGridSearchCV才能夠被導入和使用。

import re import sklearn import numpy as np import pandas as pd import matplotlib as mlp import matplotlib.pyplot as plt import time from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.experimental import enable_halving_search_cv from sklearn.model_selection import KFold, HalvingGridSearchCV, cross_validate, RandomizedSearchCV

對半網(wǎng)格搜索的類如下所示:

class?sklearn.model_selection.HalvingGridSearchCV(estimator, param_grid, *, factor=3, resource='n_samples', max_resources='auto', min_resources='exhaust', aggressive_elimination=False, cv=5, scoring=None, refit=True, error_score=nan, return_train_score=True, random_state=None, n_jobs=None, verbose=0)

全部參數(shù)如下所示:

  • factor

每輪迭代中新增的樣本量的比例,同時也是每輪迭代后留下的參數(shù)組合的比例。例如,當factor=2時,下一輪迭代的樣本量會是上一輪的2倍,每次迭代后有1/2的參數(shù)組合被留下。如果factor=3時,下一輪迭代的樣本量會是上一輪的3倍,每次迭代后有1/3的參數(shù)組合被留下。該參數(shù)通常取3時效果比較好。

  • resource

設置每輪迭代中增加的驗證資源的類型,輸入為字符串。默認是樣本量,輸入為"n_samples",也可以是任意集成算法當中輸入正整數(shù)的弱分類器,例如"n_estimators"或者"n_iteration"。

  • min_resource

首次迭代時,用于驗證參數(shù)組合的樣本量r0。可以輸入正整數(shù),或兩種字符串"smallest" ,"exhaust"。
輸入正整數(shù)n,表示首次迭代時使用n個樣本。
輸入"smallest",則根據(jù)規(guī)則計算r0:

當資源類型是樣本量時,對回歸類算法,r0 = 交叉驗證折數(shù)n_splits * 2
當資源類型是樣本量時,對分類算法,r0 = 類別數(shù)量n_classes_ * 交叉驗證折數(shù)n_splits * 2
當資源類型不是樣本量時,等于1

輸入"exhaust",則根據(jù)迭代最后一輪的最大可用資源倒退r0。例如,factor=2, 樣本量為1000時,一共迭代3次時,則最后一輪迭代的最大可用資源為1000,倒數(shù)第二輪為500,倒數(shù)第三輪(第一輪)為250。此時r0 = 250。"exhaust"模式下最有可能得到好的結果,不過計算量會略大,計算時間會略長。

現(xiàn)在,我們依然使用網(wǎng)格搜索最初的,空間大小為1536的參數(shù)空間:

param_grid_simple = {"criterion": ["squared_error","poisson"], 'n_estimators': [*range(20,100,5)], 'max_depth': [*range(10,25,2)], "max_features": ["log2","sqrt",16,32,64,"auto"], "min_impurity_decrease": [*np.arange(0,5,10)]}count_space(param_grid_simple) #1536X.shape #(29062, 80)

哪一種停止條件會被觸發(fā)?

#2.9w個樣本在factor=2, min_resource = 100的情況下可以迭代多久? for i in range(100):if 100*2**i > 29062:breakprint(i+1,100*2**i) #1 100 #2 200 #3 400 #4 800 #5 1600 #6 3200 #7 6400 #8 12800 #9 25600#1536種參數(shù)組合在factor=2的情況下可以迭代多久? for i in range(100):if 1536//2**i < 1:breakprint(i+1,int(1536//2**i+1)) #向上取整 #1 1537 #2 769 #3 385 #4 193 #5 97 #6 49 #7 25 #8 13 #9 7 #10 4 #11 2

不難發(fā)現(xiàn),當factor=2的時候,數(shù)據(jù)集不足的條件會先被觸發(fā),最多只能迭代9次。也就是說,最終我們將在7組參數(shù)中選擇表現(xiàn)最好的一組參數(shù),而不會一直讓搜索持續(xù)直到找出唯一最優(yōu)的參數(shù)。如果我們無論如何都希望能夠找到唯一最后的參數(shù),那我們可以使用下面的參數(shù):

  • aggressive_elimination

輸入布爾值,默認False。當數(shù)據(jù)總樣本量較小,不足以支撐循環(huán)直到只剩下最后一組備選參數(shù)時,可以打開該參數(shù)。

參數(shù)設置為True時,會重復使用首次迭代時的樣本量,直到剩下的數(shù)據(jù)足以支撐樣本量的增加直到只剩下最后一組備選參數(shù)
參數(shù)設置為False時,以全部樣本被用完作為搜索結束的指標

對于對半網(wǎng)格搜索應用來說,最困難的部分就是決定搜索本身復雜的參數(shù)組合。在調參時,如果我們希望參數(shù)空間中的備選組合都能夠被充分驗證,則迭代次數(shù)不能太少(例如,只迭代3次),因此factor不能太大。但如果factor太小,又會加大迭代次數(shù),同時拉長整個搜索的運行時間。同時,迭代次數(shù)還會影響我們最終能夠使用的數(shù)據(jù)量,以及迭代完畢之后我們還需進一步驗證的參數(shù)組合數(shù)量,兩者都不能太少。因此,我們一般在使用對半網(wǎng)格搜索時,需考慮以下三個點:

1、min_resources的值不能太小,且在全部迭代過程結束之前,我們希望使用盡量多的數(shù)據(jù)
2、迭代完畢之后,剩余的驗證參數(shù)組合不能太多,10以下最佳,如果無法實現(xiàn),則30以下也可以接受
3、迭代次數(shù)不能太多,否則時間可能會太長

factor = 1.5 n_samples = X.shape[0] min_resources = 500 space = 1536for i in range(100):if (min_resources*factor**i > n_samples) or (space/factor**i < 1):breakprint(i+1,"本輪迭代樣本:{}".format(min_resources*factor**i),"本輪驗證參數(shù)組合:{}".format(space//factor**i + 1)) # 1 本輪迭代樣本:500.0 本輪驗證參數(shù)組合:1537.0 # 2 本輪迭代樣本:750.0 本輪驗證參數(shù)組合:1025.0 # 3 本輪迭代樣本:1125.0 本輪驗證參數(shù)組合:683.0 # 4 本輪迭代樣本:1687.5 本輪驗證參數(shù)組合:456.0 # 5 本輪迭代樣本:2531.25 本輪驗證參數(shù)組合:304.0 # 6 本輪迭代樣本:3796.875 本輪驗證參數(shù)組合:203.0 # 7 本輪迭代樣本:5695.3125 本輪驗證參數(shù)組合:135.0 # 8 本輪迭代樣本:8542.96875 本輪驗證參數(shù)組合:90.0 # 9 本輪迭代樣本:12814.453125 本輪驗證參數(shù)組合:60.0 # 10 本輪迭代樣本:19221.6796875 本輪驗證參數(shù)組合:40.0 # 11 本輪迭代樣本:28832.51953125 本輪驗證參數(shù)組合:27.0#建立回歸器、交叉驗證 reg = RFR(random_state=1412,verbose=True,n_jobs=-1) cv = KFold(n_splits=5,shuffle=True,random_state=1412)#定義對半搜索 search = HalvingGridSearchCV(estimator=reg,param_grid=param_grid_simple,factor=1.5,min_resources=500,scoring = "neg_mean_squared_error",verbose = True,random_state=1412,cv = cv,n_jobs=-1) #訓練對半搜索評估器 #=====【TIME WARNING: 30~50min】=====# start = time.time() search.fit(X,y) end = time.time() - start print(end/60) # n_iterations: 11 # n_required_iterations: 19 # n_possible_iterations: 11 # min_resources_: 500 # max_resources_: 29062 # aggressive_elimination: False # factor: 1.5 # ---------- # iter: 0 # n_candidates: 1536 # n_resources: 500 # Fitting 5 folds for each of 1536 candidates, totalling 7680 fits # ---------- # iter: 1 # n_candidates: 1024 # n_resources: 750 # Fitting 5 folds for each of 1024 candidates, totalling 5120 fits # ---------- # iter: 2 # n_candidates: 683 # n_resources: 1125 # Fitting 5 folds for each of 683 candidates, totalling 3415 fits # ---------- # iter: 3 # n_candidates: 456 # n_resources: 1687 # Fitting 5 folds for each of 456 candidates, totalling 2280 fits # ---------- # iter: 4 # n_candidates: 304 # n_resources: 2531 # Fitting 5 folds for each of 304 candidates, totalling 1520 fits # ---------- # iter: 5 # n_candidates: 203 # n_resources: 3796 # Fitting 5 folds for each of 203 candidates, totalling 1015 fits # ---------- # iter: 6 # n_candidates: 136 # n_resources: 5695 # Fitting 5 folds for each of 136 candidates, totalling 680 fits # ---------- # iter: 7 # n_candidates: 91 # n_resources: 8542 # Fitting 5 folds for each of 91 candidates, totalling 455 fits # ---------- # iter: 8 # n_candidates: 61 # n_resources: 12814 # Fitting 5 folds for each of 61 candidates, totalling 305 fits # ---------- # iter: 9 # n_candidates: 41 # n_resources: 19221 # Fitting 5 folds for each of 41 candidates, totalling 205 fits # ---------- # iter: 10 # n_candidates: 28 # n_resources: 28832 # Fitting 5 folds for each of 28 candidates, totalling 140 fits # [Parallel(n_jobs=-1)]: Using backend ThreadingBackend with 16 concurrent workers. # [Parallel(n_jobs=-1)]: Done 18 tasks | elapsed: 0.4s # 25.638246742884316 # [Parallel(n_jobs=-1)]: Done 90 out of 90 | elapsed: 1.2s finished#查看最佳評估器 search.best_estimator_ #RandomForestRegressor(max_depth=22, max_features=16, min_impurity_decrease=0, # n_estimators=90, n_jobs=-1, random_state=1412, # verbose=True)#查看最佳評估器 abs(search.best_score_)**0.5 #1068.281607238587#驗證最佳參數(shù)組合的效力 rebuild_on_best_param(search.best_estimator_) #訓練RMSE:475.740 #測試RMSE:1082.916

以隨機網(wǎng)格搜索作為對比,我們來看看隨機網(wǎng)格搜索的結果:

param_grid_simple = {"criterion": ["squared_error","poisson"], 'n_estimators': [*range(20,100,5)], 'max_depth': [*range(10,25,2)], "max_features": ["log2","sqrt",16,32,64,"auto"], "min_impurity_decrease": [*np.arange(0,5,10)]}reg = RFR(random_state=1412,verbose=True,n_jobs=-1) cv = KFold(n_splits=5,shuffle=True,random_state=1412)#定義隨機搜索 search = RandomizedSearchCV(estimator=reg,param_distributions=param_grid_simple,n_iter = 800 #使用全域空間的一半作為子空間,scoring = "neg_mean_squared_error",verbose = True,random_state=1412,cv = cv,n_jobs=-1)#訓練隨機搜索評估器 #=====【TIME WARNING: 1個半小時~2小時】=====# start = time.time() search.fit(X,y) end = time.time()-start print(end/60) #103.20144965251286#查看最佳評估器 search.best_estimator_ #RandomForestRegressor(max_depth=24, max_features=16, min_impurity_decrease=0, # n_estimators=85, n_jobs=-1, random_state=1412, # verbose=True) #查看最終評估指標 abs(search.best_score_)**0.5 #1055.5552571413887 #驗證最佳參數(shù)組合的效力 rebuild_on_best_param(search.best_estimator_) #訓練RMSE:465.198 #測試RMSE:1054.359

可以看到,隨機網(wǎng)格搜索的結果略微占優(yōu),但能夠嘗試的參數(shù)組合只有800個,且耗費的時間是對半搜索的4倍(1小時45分鐘)。對于對半搜索,我們可以繼續(xù)精細化調整整體的參數(shù)空間,進一步尋找更優(yōu)的參數(shù),但面對上萬樣本量的數(shù)據(jù)集,隨機搜索的運算速度不足以支撐精細化調參,就更別提網(wǎng)格搜索了。之后,我們會給大家更詳細地講解更快速、更高效的優(yōu)化方法。?

總結

以上是生活随笔為你收集整理的LESSON 10.3 Halving网格搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美粗暴se喷水 | www.brazzers.com | 国产精品免费无码 | 久久久毛片 | 自拍视频第一页 | 色婷婷久久综合中文久久蜜桃av | 青青久在线视频 | 免费av一区二区三区 | 性欧美xxxx | 四虎精品视频 | 国产午夜无码视频在线观看 | 国产精品自拍片 | 无码日本精品xxxxxxxxx | 狠狠躁18三区二区一区传媒剧情 | 欧美成人免费视频 | 色妞ww精品视频7777 | av簧片 | 天天碰天天 | 亚洲精品乱码久久久久久麻豆不卡 | 人人九九 | 国产毛片毛片毛片毛片毛片 | 少妇人妻一级a毛片 | 91热精品 | 日韩在线免费av | 欧美一级二级视频 | 深夜激情影院 | 国产av无码专区亚洲av毛片搜 | 美女流白浆视频 | 在线爱情大片免费观看大全 | 樱花影院电视剧免费 | 久久噜噜色综合一区二区 | 极品美女被c | 国产精品高潮呻吟 | 免费亚洲一区 | 黄色av免费播放 | 在线观看福利网站 | 亚洲黄色免费 | 黄色福利视频 | 亚洲精品88 | 日韩免费看 | 不卡视频一区二区 | 亚洲专区免费 | 日韩在线视频网站 | 亚洲综合久久av一区二区三区 | 日韩欧美国产精品综合嫩v 国产小毛片 | 17c在线| av免费网站观看 | 欧美午夜三级 | 中国丰满熟妇xxxx性 | 丰腴饱满的极品熟妇 | 日韩欧美一二区 | 黄色avv| 国产小视频免费 | 欧美日韩系列 | 在线观看aaa | 国内激情视频 | 在线看黄色网址 | 国产孕妇一区二区三区 | 521av在线| 色就是色欧美色图 | 日本大乳美女 | 欧美日韩免费观看视频 | 爱福利视频一区二区 | 偷拍女澡堂一区二区三区 | 嫩草亚洲 | 九色porny原创自拍 | 日韩一区二区三区在线看 | 精品国产1区 | 久色 | 肉丝美足丝袜一区二区三区四 | 午夜做爰xxxⅹ性高湖视频美国 | 黄色高潮视频 | 草久久免费视频 | 久色 | 日韩av片免费观看 | 亚洲精品乱码久久久久久蜜桃91 | 美女大bxxxxn内射 | av大全网站 | 在线永久看片免费的视频 | 俺去日| 亚洲综合在线一区二区 | 精品无码av一区二区三区不卡 | 天堂在线观看视频 | 在线观看亚洲专区 | 中文字字幕码一二三区 | 国产精品18久久久久久无码 | 成人自拍视频在线观看 | 少妇无套内谢久久久久 | 性色浪潮av| 欧美日韩一区二区三区四区五区 | 亚洲欧美一二三 | 一区二区三区不卡视频在线观看 | 2021毛片 | 夜夜嗨av一区二区三区四区 | 911毛片| 91在线免费观看网站 | 蜜桃91麻豆精品一二三区 | 黄色片视频免费 | 天天射天天干天天色 |