<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【機器學習基礎(chǔ)】一文歸納AI調(diào)參煉丹之法

          共 5936字,需瀏覽 12分鐘

           ·

          2021-03-08 00:33

          1  超參數(shù)優(yōu)化

          調(diào)參即超參數(shù)優(yōu)化,是指從超參數(shù)空間中選擇一組合適的超參數(shù),以權(quán)衡好模型的偏差(bias)和方差(variance),從而提高模型效果及性能。常用的調(diào)參方法有:

          • 人工手動調(diào)參
          • 網(wǎng)格/隨機搜索(Grid / Random Search)
          • 貝葉斯優(yōu)化(Bayesian Optimization)

          注:超參數(shù) vs 模型參數(shù)差異 超參數(shù)是控制模型學習過程的(如網(wǎng)絡層數(shù)、學習率);模型參數(shù)是通過模型訓練學習后得到的(如網(wǎng)絡最終學習到的權(quán)重值)。

          2  人工調(diào)參

          手動調(diào)參需要結(jié)合數(shù)據(jù)情況及算法的理解,選擇合適調(diào)參的優(yōu)先順序及參數(shù)的經(jīng)驗值。

          不同模型手動調(diào)參思路會有差異,如隨機森林是一種bagging集成的方法,參數(shù)主要有n_estimators(子樹的數(shù)量)、max_depth(樹的最大生長深度)、max_leaf_nodes(最大葉節(jié)點數(shù))等。(此外其他參數(shù)不展開說明) 對于n_estimators:通常越大效果越好。參數(shù)越大,則參與決策的子樹越多,可以消除子樹間的隨機誤差且增加預測的準度,以此降低方差與偏差。對于max_depth或max_leaf_nodes:通常對效果是先增后減的。取值越大則子樹復雜度越高,偏差越低但方差越大。

          3 網(wǎng)格/隨機搜索

          • 網(wǎng)格搜索(grid search),是超參數(shù)優(yōu)化的傳統(tǒng)方法,是對超參數(shù)組合的子集進行窮舉搜索,找到表現(xiàn)最佳的超參數(shù)子集。
          • 隨機搜索(random search),是對超參數(shù)組合的子集簡單地做固定次數(shù)的隨機搜索,找到表現(xiàn)最佳的超參數(shù)子集。對于規(guī)模較大的參數(shù)空間,采用隨機搜索往往效率更高。
          import numpy as np
          from sklearn.model_selection import GridSearchCV
          from sklearn.model_selection import RandomizedSearchCV
          from sklearn.ensemble import RandomForestClassifier

          # 選擇模型 
          model = RandomForestClassifier()
          # 參數(shù)搜索空間
          param_grid = {
              'max_depth': np.arange(1, 20, 1),
              'n_estimators': np.arange(1, 50, 10),
              'max_leaf_nodes': np.arange(2, 100, 10)

          }
          # 網(wǎng)格搜索模型參數(shù)
          grid_search = GridSearchCV(model, param_grid, cv=5, scoring='f1_micro')
          grid_search.fit(x, y)
          print(grid_search.best_params_)
          print(grid_search.best_score_)
          print(grid_search.best_estimator_)
          # 隨機搜索模型參數(shù)
          rd_search = RandomizedSearchCV(model, param_grid, n_iter=200, cv=5, scoring='f1_micro')
          rd_search.fit(x, y)
          print(rd_search.best_params_)
          print(rd_search.best_score_)
          print(rd_search.best_estimator_)

          4 貝葉斯優(yōu)化

          貝葉斯優(yōu)化(Bayesian Optimization) 與網(wǎng)格/隨機搜索最大的不同,在于考慮了歷史調(diào)參的信息,使得調(diào)參更有效率。(但在高維參數(shù)空間下,貝葉斯優(yōu)化復雜度較高,效果會近似隨機搜索。)

          4.1 算法簡介

          貝葉斯優(yōu)化思想簡單可歸納為兩部分:

          • 高斯過程(GP):以歷史的調(diào)參信息(Observation)去學習目標函數(shù)的后驗分布(Target)的過程。

          • 采集函數(shù)(AC):由學習的目標函數(shù)進行采樣評估,分為兩種過程:1、開采過程:在最可能出現(xiàn)全局最優(yōu)解的參數(shù)區(qū)域進行采樣評估。2、勘探過程:兼顧不確定性大的參數(shù)區(qū)域的采樣評估,避免陷入局部最優(yōu)。

          4.2 算法流程

          for循環(huán)n次迭代:
              采集函數(shù)依據(jù)學習的目標函數(shù)(或初始化)給出下個開采極值點 Xn+1;
              評估超參數(shù)Xn+1得到表現(xiàn)Yn+1;
              加入新的Xn+1、Yn+1數(shù)據(jù)樣本,并更新高斯過程模型;
          """
          隨機森林分類Iris使用貝葉斯優(yōu)化調(diào)參
          "
          ""
          import numpy as np
          from hyperopt import hp, tpe, Trials, STATUS_OK, Trials, anneal
          from functools import partial
          from hyperopt.fmin import fmin
          from sklearn.metrics import f1_score
          from sklearn.ensemble import RandomForestClassifier

          def model_metrics(model, x, y):
              """ 評估指標 """
              yhat = model.predict(x)
              return  f1_score(y, yhat,average='micro')

          def bayes_fmin(train_x, test_x, train_y, test_y, eval_iters=50):
              """
              bayes優(yōu)化超參數(shù)
              eval_iters:迭代次數(shù)
              "
          ""
              
              def factory(params):
                  """
                  定義優(yōu)化的目標函數(shù)
                  "
          ""
                  fit_params = {
                      'max_depth':int(params['max_depth']),
                      'n_estimators':int(params['n_estimators']),
                      'max_leaf_nodes': int(params['max_leaf_nodes'])
                      }
                  # 選擇模型
                  model = RandomForestClassifier(**fit_params)
                  model.fit(train_x, train_y)
                  # 最小化測試集(- f1score)為目標
                  train_metric = model_metrics(model, train_x, train_y)
                  test_metric = model_metrics(model, test_x, test_y)
                  loss = - test_metric
                  return {"loss": loss, "status":STATUS_OK}

              # 參數(shù)空間
              space = {
                  'max_depth': hp.quniform('max_depth', 1, 20, 1),
                  'n_estimators': hp.quniform('n_estimators', 2, 50, 1), 
                  'max_leaf_nodes': hp.quniform('max_leaf_nodes', 2, 100, 1)
                      }
              # bayes優(yōu)化搜索參數(shù)
              best_params = fmin(factory, space, algo=partial(anneal.suggest,), max_evals=eval_iters, trials=Trials(),return_argmin=True)
              # 參數(shù)轉(zhuǎn)為整型
              best_params["max_depth"] = int(best_params["max_depth"])
              best_params["max_leaf_nodes"] = int(best_params["max_leaf_nodes"])
              best_params["n_estimators"] = int(best_params["n_estimators"])
              return best_params

          #  搜索最優(yōu)參數(shù)
          best_params = bayes_fmin(train_x, test_x, train_y, test_y, 100)
          print(best_params)



          閱讀原文可訪問Github源碼

          往期精彩回顧





          本站qq群704220115,加入微信群請掃碼:

          瀏覽 75
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜臀色欲aa | 91白丝喷水自慰网站 | 一级无码高清 | 精品无码免费一区二区 | 亚洲色无码专区观看在线观 |