iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
AI & Data

紮實的ML機器學習原理~打造你對資料使用sklearn的靈敏度系列 第 17

DAY 17 「HyperOpt」分布式異步優化的Python庫~

  • 分享至 

  • xImage
  •  

通過 HyperOpt 對一個簡單的分類模型(比如邏輯回歸)進行超參數優化~

import numpy as np
from hyperopt import fmin, tpe, hp, STATUS_OK

# 導入需要的庫和模型
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 創建一個簡單的示例數據集
X, y = np.random.rand(100, 5), np.random.randint(0, 2, 100)

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定義超參數搜索空間
space = {
    'C': hp.uniform('C', 0.1, 10),
    'solver': hp.choice('solver', ['liblinear', 'newton-cg', 'sag', 'lbfgs'])
}

# 定義目標函數
def objective(params):
    # 創建邏輯回歸模型
    model = LogisticRegression(C=params['C'], solver=params['solver'], random_state=42)
    
    # 在訓練集上訓練模型
    model.fit(X_train, y_train)
    
    # 在測試集上進行預測
    y_pred = model.predict(X_test)
    
    # 計算準確率
    accuracy = accuracy_score(y_test, y_pred)
    
    return {'loss': -accuracy, 'status': STATUS_OK}

# 使用TPE算法進行優化
best = fmin(fn=objective, space=space, algo=tpe.suggest, max_evals=100, verbose=0)
print(best)

在這個示例中,我們首先導入了所需的庫,包括 numpy、hyperopt 和需要用到的模型和評估指標。

然後,我們創建了一個簡單的示例數據集(X 和 y),並將其劃分為訓練集和測試集。

接著,我們定義了超參數的搜索空間,這里以邏輯回歸模型為例,我們選擇了正則化參數 C 和求解器 solver 作為超參數。

然後,我們定義了目標函數 objective,它將根據給定的超參數訓練邏輯回歸模型,並返回準確率的相反數(因為 HyperOpt 是一個最小化問題)。

最後,我們使用 TPE 算法進行了貝葉斯優化,設置了最大叠代次數為 100 次。

最終,輸出的 best 變量將包含了找到的最優超參數組合。這個例子中,我們使用了隨機生成的數據,實際應用中,你可以將數據和模型替換成你的實際情況。


上一篇
DAY 16 「模型融合(Model Ensemble)」落地AI除了集成演算法外必學的另一種思路~
下一篇
DAY 18 「Optuna:一個用於超參數優化的Python庫」分類模型啦~
系列文
紮實的ML機器學習原理~打造你對資料使用sklearn的靈敏度30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言