機器學習:聊聊Python算法自動調參神器——Hyperopt

編程語言 Python NoSQL 機器學習 銀桑的AI智能 銀桑的AI智能 2017-10-04

機器學習:聊聊Python算法自動調參神器——Hyperopt

前言

Hyperopt是Python語言中一個為算法超參數空間探索和優化的庫,可以結合MongoDB可以進行分佈式調參,快速找到相對較優的參數。

安裝的時候需要指定dev版本才能使用模擬退火調參,也支持暴力調參、隨機調參等策略。實際使用效果比較優,可以在平常小數據集測試上使用。

功能簡述

Hyperopt提供了一個優化接口,這個接口接受一個評估函數和參數空間,能計算出參數空間內的一個點的損失函數值。用戶還要指定空間內參數的分佈情況。

Hyheropt四個重要的因素

  1. 指定需要最小化的函數;

  2. 搜索的空間;

  3. 採樣的數據集(trails database)(可選);

  4. 搜索的算法(可選)。

首先,定義一個目標函數,接受一個變量,計算後返回一個函數的損失值,比如要最小化函數q(x,y) = x^2+y^2,指定搜索的算法,算法也就是hyperopt的fmin函數的algo參數的取值。

當前支持的算法由隨機搜索(對應是hyperopt.rand.suggest),模擬退火(對應是hyperopt.anneal.suggest),TPE算法。

關於參數空間的設置,比如優化函數q,輸入fmin(q,space=hp.uniform(“a”,0,1))。hp.uniform函數的第一個參數是標籤,每個超參數在參數空間內必須具有獨一無二的標籤。

安裝指南

1.pip 安裝

機器學習:聊聊Python算法自動調參神器——Hyperopt

2.額外安裝

a.分佈式調參

https://github.com/hyperopt/hyperopt/wiki/Installation-Notes

(需要安裝MongoDB才能使用全部功能,詳情見Reference)

b.安裝hyperopt-sklearn(更好配合sklearn使用)

機器學習:聊聊Python算法自動調參神器——Hyperopt

Api簡單介紹

1.可用算法

  • hyperopt.rand.suggest

  • hyperopt.anneal.suggest

  • hyperopt.tpe.suggest

2.探索空間

label : 選擇對應的特徵維度。

  • hp.choice(label, options)

    return:從options隨機選擇的元素。options可輸入一個列表或元組,供random.choice使用,e.g:hp.choice(label,range(1,10,1))

  • hp.randint(label,upper)

    return:範圍[0,upper]中的隨機整數。upper可輸入一個int

  • hp.uniform(label, low, high)

    return:一個值之間均勻low和high,輸出為float

  • hp.quniform(label, low, high, q)

    return:round(uniform(low,high)/q)*q的值

  • hp.loguniform(label, low, high)

    return:exp(uniform(low,high))繪製的值,使得返回值的對數均勻分佈,當優化時,該變量被限制在[exp(low),exp(high)]

  • hp.qloguniform(label, low, high, q)

  • hp.normal(label, mu, sigma)

    return:正態分佈的平均值和標準差σ的實數值。優化時,這是一個無約束的變量

  • hp.qnormal(label, mu, sigma, q)

  • hp.lognormal(label, mu, sigma)

  • hp.qlognormal(label, mu, sigma, q)

一個簡單的例子

機器學習:聊聊Python算法自動調參神器——Hyperopt

機器學習:聊聊Python算法自動調參神器——Hyperopt

相關推薦

推薦中...