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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【机器学习】如何使用随机网格搜索,以缩短网格搜索速度?

發布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习】如何使用随机网格搜索,以缩短网格搜索速度? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨機網格搜索RandomSearchCV學習筆記,內容包括:

  • 隨機網格搜索的基本原理
  • 隨機網格搜索的skelarn應用(案例:房價數據集_python)
  • 隨機網格搜索中連續型分布的應用(案例:房價數據集_python)
    • 索引

      🔣 函數及參數

      🔑 公式

      🗣 案例

      📌 名詞解釋

      📖 摘抄

    1 隨機網格搜索的基本原理

    📖 影響枚舉網格搜索運算速度的因素

    1 參數空間的大小:參數空間越大,需要建模的次數越多

    2 數據量的大小:數據量越大,每次建模時需要的算力和時間越多


    🗣 案例:全域參數空間VS部分參數空間(示意圖)```python n_e_list=range(50,350,50) m_d_list=range(2,7)comb=pd.DataFrame([(n_estimators, max_depth)for n_estimators in n_e_listfor max_depth in m_d_list]) # 創建n_e_list和m_d_list的笛卡爾乘積fig,[ax1,ax2]=plt.subplots(1,2,dpi=100) ax1.scatter(comb.iloc[:,0],comb.iloc[:,1]) ax1.set_title('GridSearch')ax2.scatter(comb.iloc[:,0],comb.iloc[:,1]) ax2.scatter([50,250,200,200,300,100,150,150],[4,2,6,3,2,3,2,5],cmap='red',s=50) ax2.set_title('RandomSearch') plt.show() ```


    📌 隨機網格搜索
    隨機抽取參數子空間,并在自空間中進行搜索的方法。

    對比枚舉網格搜索的優勢:

    • 運算速度快
    • 覆蓋空間大
    • 最小損失與枚舉網絡的最小損失很接近

    📖 隨機網格搜索的抽樣特點

    隨機網格搜索采用“循環迭代”。

    在這一次迭代中隨機抽取1組參數進行建模,下一次迭代再隨機抽取1組參數進行建模。由于這種隨機抽樣是不放回的,因此不會出現兩次抽中同一組參數的問題。

    可以控制隨機網格搜索的迭代次數,來控制整體被抽出的參數子空間的大小,這種做法往往被稱為“賦予隨機網格搜索固定的計算量,當全部計算量被消耗完畢之后,隨機網格搜索就停止”。

    隨機網格搜索在實際運行時,并不是先抽樣出子空間,再對子空間進行搜索。


    2 隨機網格搜索實現

    🔣 skelarn中隨機網格搜索 from sklearn.model_selection import RandomizedSearchCVRandomizedSearchCV(estimator, # 評估器param_distributions, # 全域參數空間*,n_iter=10, # 迭代次數scoring=None, # 評估指標n_jobs=None, refit=True, # 是否挑選評估和最佳參數,在完整數據集上進行訓練cv=None, # 交叉驗證模式verbose=0,pre_dispatch='2*n_jobs', # 多任務并行時的任務劃分數量random_state=None,error_score=nan, # 當網格搜索報錯時返回結果,選擇'raise'時將直接報錯并中斷訓練過程,其他情況會顯示警告信息后繼續完成訓練return_train_score=False, # 是否顯示訓練集中參數得分 ) NameDescription
    estimator調參對象,某評估器
    param_distributions全域參數空間,可以是字典或者字典構成的列表
    n_iter迭代次數,迭代次數越多,抽取的子參數空間越大
    scoring評估指標,支持同時輸出多個參數
    n_jobs設置工作時參與計算的線程數
    refit挑選評估指標和最佳參數,在完整數據集上進行訓練
    cv交叉驗證的折數
    verbose輸出工作日志形式
    pre_dispatch多任務并行時任務劃分數量
    random_state隨機數種子
    error_score當網格搜索報錯時返回結果,選擇’raise’時將直接報錯并中斷訓練過程,其他情況會顯示警告信息后繼續完成訓練
    return_train_score在交叉驗證中是否顯示訓練集中參數得分

    🔣 案例:隨機網格在隨機森林上的應用_房價數據集

    📖 在相同的參數空間、模型下,隨機網格搜索速度比普通網格搜索速度更快。 運行時間≈n_iter/全域空間組合數*網格搜索 from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.model_selection import KFoldparam_grid_simple = {'n_estimators': range(50,150,10), 'max_depth': range(10,25,2), "max_features": ["sqrt",16,32,64,"auto"], "min_impurity_decrease": np.arange(0,5,2)}#計算參數空間大小def count_space(param):no_option = 1for i in param_grid_simple:no_option *= len(param_grid_simple[i])print(no_option)count_space(param_grid_simple)# 訓練模型model = RFR(random_state=7,verbose=True,n_jobs=4)cv = KFold(n_splits=5,shuffle=True,random_state=7)search = RandomizedSearchCV(estimator=model,param_distributions=param_grid_simple,n_iter = 600 #子空間的大小是全域空間的一半左右,scoring = "neg_mean_squared_error",verbose = True,cv = cv,random_state=1412,n_jobs=-1)search.fit(X,y)search.best_estimator_ # 查看模型參數結果# RandomForestRegressor(max_depth=18, max_features=16, min_impurity_decrease=0,# n_jobs=4, random_state=7, verbose=True)abs(search.best_score_)**0.5 # 查看模型RMSE分數# 29160.978459432965# 查看最優參數的模型效果from sklearn.model_selection import cross_validatead_reg=RFR(max_depth=18, max_features=16, min_impurity_decrease=0, random_state=7, n_jobs=-1)def RMSE(cvresult,key):return (abs(cvresult[key])**0.5).mean()def rebuild_on_best_param(ad_reg):cv = KFold(n_splits=5,shuffle=True,random_state=7)result_post_adjusted = cross_validate(ad_reg,X,y,cv=cv,scoring="neg_mean_squared_error",return_train_score=True,verbose=True,n_jobs=-1)print("訓練RMSE:{:.3f}".format(RMSE(result_post_adjusted,"train_score")))print("測試RMSE:{:.3f}".format(RMSE(result_post_adjusted,"test_score")))rebuild_on_best_param(ad_reg)# 訓練RMSE:10760.565# 測試RMSE:28265.808

    3 連續型參數空間

    📖 連續型可能來帶更好的取值
    網格搜索:只能使用組合好的參數組合點;
    隨機搜索:接受“分布”作為輸入

    對于網格搜索,如果損失函數的最低點位于兩組參數之間,在這種情況下,枚舉網格搜索是不可能找到最小值的;
    對于隨機網格搜索,由于是一段分布上隨機選擇參數點,因此在同樣的參數空間中,取到更好的值的可能性更大。


    📖 當參數空間中包含某個分布的時候,無法估計全域參數空間的大小。


    📖 隨機搜索中使用連續型分布的效果
    對比網格搜索,同樣搜索空間下,運行速度更快,搜索與重建交叉驗證結果RMSE略優;
    對比小空間網格搜索,運行時間較長,RMSE略優;
    對比大空間網格搜索,運行時間較長,RMSE略劣(模型效果不一定)。

    效果:連續型隨機網格>大空間隨機網格>隨機網格>網格搜索
    運算速度:網格搜索>連續型隨機網格>大空間隨機網格>隨機網格

    當枚舉網格搜索所使用的全域參數空間足夠大/足夠密集時,枚舉網格搜索的最優解是隨機網格搜索的上限,因此理論上隨機網格搜索不會得到比枚舉網格搜索更好的結果


    🗣 案例:對min_impurity_decrease進行連續分布搜索

    param_grid_simple={'n_estimators':range(50,150,10),'max_depth':range(10,25,2),'max_features':range(10,20,2),'min_impurity_decrease':scipy.stats.uniform(0,50)}model=RFR(random_state=7) cv=KFold(n_splits=5,shuffle=True,random_state=7)search=RandomizedSearchCV(estimator=model,param_distributions=param_grid_simple,n_iter=600,scoring='neg_mean_squared_error',cv=cv,random_state=7,n_jobs=4)search.fit(X,y)search.best_estimator_ # RandomForestRegressor(max_depth=18, max_features=16, # min_impurity_decrease=34.80143424780533, random_state=7)abs(search.best_score_)**0.5 # 29155.5402993104rebuild_on_best_param(search.best_estimator_) # 訓練RMSE:10733.842 # 測試RMSE:28285.986

    總結

    以上是生活随笔為你收集整理的【机器学习】如何使用随机网格搜索,以缩短网格搜索速度?的全部內容,希望文章能夠幫你解決所遇到的問題。

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