Auto Machine Learning初探

前言

最近在看AutoML檩咱,業(yè)界在 automl 上的進展還是很不錯的,個人比較看好這個方向胯舷,所以做了一些了解:

  • Google: Cloud AutoML, Google’s Prediction API
  • Microsoft: Custom Vision, Azure Machine Learning
  • Amazon: Amazon Machine Learning
  • BaiDu:EasyE
  • Alibaba Group:PAI
  • others: BigML.com, Wise.io, SkyTree.com, RapidMiner.com, Dato.com, Prediction.io, DataRobot.com,H2O.AI

github上的開源項目也是有不少的刻蚯,我所看到的包括:

  • tpot
    • 多項式特征組合
    • 無監(jiān)督特征篩選
    • 集成分類
  • auto_ml
    • 集成分類
    • 可選深度模型前置
  • auto_sklearn
    • 特征清洗
    • 特征篩選
    • 元學習前置
    • 超參數(shù)自動學習
    • 自動集成分類

auto_sklearn

上述開源項目中,我主要看了auto_sklearn桑嘶,對他的架構設計炊汹,算法設計還是很感興趣的,論文在這邊Efficient and Robust Automated Machine Learning

image
  • meta-learning

    • 這邊auto_sklearn已經(jīng)內置諾干個參數(shù)選配好了的模型(可能是手動調參數(shù)逃顶,也有可能是也通過貝葉斯優(yōu)化的方法在小樣本上選擇)讨便,我們實際去用的時候是根據(jù)元特征相似度進行選擇即可
      • 《Initializing Bayesian Hyperparameter Optimization via Meta-Learning》指出可以用L1和特征協(xié)方差來篩選,聰明的你一定發(fā)現(xiàn)口蝠,對離散值真不友好
    • 元特征就是站在常規(guī)數(shù)據(jù)之上的匯總信息:
      image
  • 常規(guī) ML framework 如下圖灰色部分:導入數(shù)據(jù)-數(shù)據(jù)清洗-特征工程-分類器-輸出預測值

  • Bayesian optimizer

    • 這個等下細講妙蔗,是這個論文中最有價值的地方之一
  • build-ensemble

    • 模型集成

Bayesian optimizer

通常我們在參數(shù)嘗試的時候都是依賴如下:

  • 暴力法
    • Grid Search 網(wǎng)格搜索/窮舉搜索
    • Random Search 隨機搜索
  • Bayesian Optimization
    • 能利用先驗知識高效地調節(jié)超參數(shù)傲霸,通過減少計算任務而加速尋找最優(yōu)參數(shù)的進程。不依賴人為猜測所需的樣本量為多少,優(yōu)化技術基于隨機性昙啄,概率分布
  • Neural Network
    • 用深度神經(jīng)網(wǎng)絡代替常規(guī)配置穆役,通過線性+非線性變化擬合任何曲線

Bayesian optimizer在實際被應用的過程中使用的較多,是實現(xiàn)自動參數(shù)選擇的核心梳凛,讓我們來仔細看下耿币,偽代碼:

  1. 構建超參數(shù)與優(yōu)化函數(shù)的關系(代理函數(shù)):比如gbdt中的樹數(shù)量與output的AUC之間的函數(shù)f,這一般都是模型韧拒,黑盒的
  2. 隨機初始化原始數(shù)據(jù)集合
  3. 通過高斯過程/隨機森林等對代理函數(shù)進行建模
  4. 設計acquisition function淹接,(EI,UCB叛溢,TS等)塑悼,獲取最大acquisition function對于假設數(shù)據(jù)集作為新增數(shù)據(jù)集
  5. 把新增數(shù)據(jù)集擴充到2中的數(shù)據(jù)集中重復更新整個過程

上述代碼實現(xiàn),非常簡單楷掉,完整代碼自取GP_Bayes_Optimizaion

init

init_xs = np.random.uniform(bound_dict.get("x", [0, 0])[0],bound_dict.get("x", [1, 1])[1],size=self.init_point_number)
init_ys = np.random.uniform(bound_dict.get("y", [0, 0])[0], bound_dict.get("y", [1, 1])[1],size=self.init_point_number)
init_points = zip(init_xs, init_ys)
init_labels = map(self.target_loss_function, init_xs)
train_features = np.asarray(list(init_points))
train_negative_loss = np.asarray(list(init_labels))
current_max_negative_loss = max(train_negative_loss)

Acquision function computes the max value

x_tries = np.random.uniform(bounds[:, 0], bounds[:, 1], size=(100000, bounds.shape[0]))
mean, std = gp.predict(x_tries, return_std=True)
acquisition_fucntion_values = self.Acquision_function(mean, std)
x_max = x_tries[np.argmax(acquisition_fucntion_values)]
max_acquision_fucntion_value = max(acquisition_fucntion_values)
x_max = np.clip(x_max, bounds[:, 0], bounds[:, 1])

因為我寫的是簡單的高斯過程這種形式厢蒜,很多人對高斯過程為什么能擬合出方差均值不清楚,我手寫了一些推導過程高斯過程回歸烹植。

Bayesian optimizer來解決這類問題斑鸦,有很多的優(yōu)點的:

  • 利用先驗知識高效地調節(jié)超參數(shù),每個試驗不獨立草雕,有點boost味道
  • 通過高效的猜測而加速尋找最優(yōu)參數(shù)的進程
  • 數(shù)據(jù)要求低巷屿,在目標函數(shù)未知且計算復雜度高的情況下極其強大
  • 泛化性/魯棒性好,不易陷入局部最優(yōu)

其他優(yōu)秀資料

  • Efficient and Robust Automated Machine Learning
  • User Modeling and Hierarchical Reinforcement Learning
  • Practical Bayesian Optimization of Machine Learning Algorithms
  • Initializing Bayesian Hyperparameter Optimization via Meta-Learning
  • A Conceptual Explanation of Bayesian Hyperparameter Optimization for Machine Learning
  • Automated Machine Learning Hyperparameter Tuning in Python

auto-sklearn快速體驗

>>> import autosklearn.classification
>>> import sklearn.model_selection
>>> import sklearn.datasets
>>> import sklearn.metrics
>>> X, y = sklearn.datasets.load_digits(return_X_y=True)
>>> X_train, X_test, y_train, y_test = \
        sklearn.model_selection.train_test_split(X, y, random_state=1)
>>> automl = autosklearn.classification.AutoSklearnClassifier()
>>> automl.fit(X_train, y_train)
>>> y_hat = automl.predict(X_test)
>>> print("Accuracy score", sklearn.metrics.accuracy_score(y_test, y_hat))

歡迎大家關注我的個人bolg墩虹,知乎攒庵,更多代碼內容歡迎follow我的個人Github,如果有任何算法败晴、代碼疑問都歡迎通過郵箱發(fā)消息給我浓冒。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尖坤,隨后出現(xiàn)的幾起案子稳懒,更是在濱河造成了極大的恐慌,老刑警劉巖慢味,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件场梆,死亡現(xiàn)場離奇詭異,居然都是意外死亡纯路,警方通過查閱死者的電腦和手機或油,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驰唬,“玉大人顶岸,你說我怎么就攤上這事腔彰。” “怎么了辖佣?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵霹抛,是天一觀的道長。 經(jīng)常有香客問我卷谈,道長杯拐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任世蔗,我火速辦了婚禮端逼,結果婚禮上,老公的妹妹穿的比我還像新娘污淋。我一直安慰自己裳食,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布芙沥。 她就那樣靜靜地躺著,像睡著了一般浊吏。 火紅的嫁衣襯著肌膚如雪而昨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天找田,我揣著相機與錄音歌憨,去河邊找鬼。 笑死墩衙,一個胖子當著我的面吹牛务嫡,可吹牛的內容都是我干的。 我是一名探鬼主播漆改,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼心铃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挫剑?” 一聲冷哼從身側響起去扣,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樊破,沒想到半個月后愉棱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡哲戚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年奔滑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顺少。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡朋其,死狀恐怖王浴,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情令宿,我是刑警寧澤叼耙,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站粒没,受9級特大地震影響筛婉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜癞松,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一爽撒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧响蓉,春花似錦硕勿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至想幻,卻和暖如春粱栖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脏毯。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工闹究, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人食店。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓渣淤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吉嫩。 傳聞我的和親對象是個殘疾皇子价认,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容