向AI轉型的程式設計師都關注了這個號👇👇👇
機器學習AI算法工程 公眾號: datayx
1. 引言機器學習是朝著更高的易用性、更低的技術門檻、更敏捷的開發成本的方向去發展,且Auto-ML或者Auto-DL的發展無疑是最好的證明。因此花費一些時間學習了解了Auto-ML領域的一些知識,並對Auto-ML中的技術方案進行歸納整理。
眾所周知,一個完整的機器學習項目可概括為如下四個步驟。
其中,特徵工程(提取)往往是決定模型性能的最關鍵一步。而往往機器學習中最耗時的部分也正是特性工程和超參數調優。因此,許多模型由於時間限制而過早地從實驗階段轉移到生產階段從而導致並不是最優的。
AI項目體驗地址 https://loveai.tech
自動化機器學習(AutoML)框架旨在減少算法工程師們的負擔,以便於他們可以在特徵工程和超參數調優上花更少的時間,而在模型設計上花更多的時間進行嘗試。
本文將對Auto-ML中的自動化特徵工程模塊的現狀展開介紹,以下是目前主流的有關AUTO-ML的開源包。
獲取項目代碼
關注微信公眾號 datayx 然後回復 特徵工程 即可獲取。
自動化特徵工程旨在通過從數據集中自動創建候選特徵,且從中選擇若干最佳特徵進行訓練的一種方式。
3. 自動化特徵工程工具包3.1 FeaturetoolsFeaturetools使用一種稱為深度特徵合成(Deep Feature Synthesis,DFS)的算法,該算法遍歷通過關係資料庫的模式描述的關係路徑。當DFS遍歷這些路徑時,它通過應用於數據的操作(包括和、平均值和計數)生成綜合特徵。例如,對來自給定欄位client_id的事務列表應用sum操作,並將這些事務聚合到一個列中。儘管這是一個深度操作,但該算法可以遍歷更深層的特徵。Featuretools最大的優點是其可靠性和處理信息洩漏的能力,同時可以用來對時間序列數據進行處理。
例子:
假設有三張表,分別為clients、loans、payments。
clients :有關信用合作社客戶的基本信息表。每個客戶端在此數據框中只有一行。
loans:向客戶提供的貸款表。每筆貸款在此數據框中只有自己的行,但客戶可能有多筆貸款。
payments:貸款償還表。每筆付款只有一行,但每筆貸款都有多筆付款。
以每個client_id為對象構造特徵:
傳統的特徵工程方案是利用Pandas對所需特徵做處理,例如下表中的獲取月份、收入值的對數。
同時,也可以通過與loans表關聯獲取新的特徵(每個client平均貸款額度、最大貸款額度等)。
而Featuretools通過基於一種稱為「 深度特徵合成 」的方法,即通過堆疊多個特徵來完成特徵工程。
深度特徵合成堆疊多個轉換和聚合操作(在特徵工具的詞彙中稱為特徵基元),以通過分布在許多表中的數據創建特徵。
Featuretools有兩個主要概念:
首先,需要創建一個存放所有數據表的空實體集對象:
在添加實體和形式化關係之後,entityset就完成了。
需要注意,featuretools 是通過以下兩種操作進行特徵構造:
Aggregations:分組聚合
Transformations:列之間計算
在 featuretools 中,可以使用這些原語自行創建新特性,也可以將多個原語疊加在一起。下面是featuretools中的一些功能原語列表:
此外,我們也可以定義自定義原語,詳見: https://docs.featuretools.com/guides/advanced_custom_primitives.html。
接下來是進行特徵構造,這也是自動化特徵工程中最重要的一步:
Boruta主要是用來進行特徵選擇。所以嚴格意義上,Boruta並不是我們所需要的自動化特徵工程包。
Boruta-py是brouta特徵約簡策略的一種實現,在該策略中,問題以一種完全相關的方式構建,算法保留對模型有顯著貢獻的所有特徵。這與許多特徵約簡算法所應用的最小最優特徵集相反。boruta方法通過創建由目標特徵的隨機重排序值組成的合成特徵來確定特徵的重要性,然後在原始特徵集的基礎上訓練一個簡單的基於樹的分類器,在這個分類器中,目標特徵被合成特徵所替代。所有特性的性能差異用於計算相對重要性。
Boruta函數通過循環的方式評價各變量的重要性,在每一輪迭代中,對原始變量和影子變量進行重要性比較。如果原始變量的重要性顯著高於影子變量的重要性,則認為該原始變量是重要的;如果原始變量的重要性明顯低於影子變量的重要性,則認為該原始變量是不重要的。其中,原始變量就是我們輸入的要進行特徵選擇的變量;影子變量就是根據原始變量生成的變量
生成規則是:
使用python來實現影子特徵,類似於:
下面是Boruta算法運行的步驟:
首先,它通過創建混合數據的所有特徵(即影子特徵)為給定的數據集增加了隨機性。
然後,它訓練一個隨機森林分類的擴展數據集,並採用一個特徵重要性措施(默認設定為平均減少精度),以評估的每個特徵的重要性,越高則意味著越重要。
在每次迭代中,它檢查一個真實特徵是否比最好的影子特徵具有更高的重要性(即該特徵是否比最大的影子特徵得分更高)並且不斷刪除它視為非常不重要的特徵。
最後,當所有特徵得到確認或拒絕,或算法達到隨機森林運行的一個規定的限制時,算法停止。
3.3 tsfreshtsfresh是基於可伸縮假設檢驗的時間序列特徵提取工具。該包包含多種特徵提取方法和魯棒特徵選擇算法。
tsfresh可以自動地從時間序列中提取100多個特徵。這些特徵描述了時間序列的基本特徵,如峰值數量、平均值或最大值,或更複雜的特徵,如時間反轉對稱性統計量等。
這組特徵可以用來在時間序列上構建統計或機器學習模型,例如在回歸或分類任務中使用。
時間序列通常包含噪聲、冗餘或無關信息。因此,大部分提取出來的特徵對當前的機器學習任務沒有用處。為了避免提取不相關的特性,tsfresh包有一個內置的過濾過程。這個過濾過程評估每個特徵對於手頭的回歸或分類任務的解釋能力和重要性。它建立在完善的假設檢驗理論的基礎上,採用了多種檢驗方法。
需要注意的是,在使用tsfresh提取特徵時,需要提前把結構進行轉換,一般上需轉換為(None,2)的結構,例如下圖所示:
例子:
此外,對於進行時間序列特徵工程後的數據集進行特徵選擇,進一步提高模型指標。
這裡,可以利用tsfresh.select_features方法進行特徵選擇,然而由於其僅適用於二進位分類或回歸任務,所以對於6個標籤的多分類,我們將多分類問題轉換為6個二元分類問題,故對於每一種分類,都可以通過二分類進行特徵選擇:
注意:在Windows開發環境下,會拋出「The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.」多進程的錯誤,導致無限循環,解決方法是在代碼執行時引入」 if __name__ == '__main__』:「 。可參考: https://github.com/blue-yonder/tsfresh/issues/185 。
以下是分別使用tsfresh進行特徵工程、未進行特徵工程以及使用tsfresh進行特徵工程+特徵選擇後的模型效果:
自動化特徵工程解決了特徵構造的問題,但同時也產生了另一個問題:在數據量一定的前提下,由於產生過多的特徵,往往需要進行相應的特徵選擇以避免模型性能的降低。事實上,要保證模型性能,其所需的數據量級需要隨著特徵的數量呈指數級增長。
https://www.cnblogs.com/wkang/p/10380500.html
閱讀過本文的人還看了以下:
分享《深度學習入門:基於Python的理論與實現》高清中文版PDF+原始碼
《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼
《深度學習之pytorch》pdf+附書源碼
將機器學習模型部署為REST API
FashionAI服裝屬性標籤圖像識別Top1-5方案分享
重要開源!CNN-RNN-CTC 實現手寫漢字識別
yolo3 檢測出圖像中的不規則漢字
同樣是機器學習算法工程師,你的面試為什麼過不了?
前海徵信大數據算法:風險概率預測
【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類
VGG16遷移學習,實現醫學圖像識別分類工程項目
特徵工程(一)
特徵工程(二) :文本數據的展開、過濾和分塊
特徵工程(三):特徵縮放,從詞袋到 TF-IDF
特徵工程(四): 類別特徵
特徵工程(五): PCA 降維
特徵工程(六): 非線性特徵提取和模型堆疊
特徵工程(七):圖像特徵提取和深度學習
如何利用全新的決策樹集成級聯結構gcForest做特徵工程並打分?
Machine Learning Yearning 中文翻譯稿
螞蟻金服2018秋招-算法工程師(共四面)通過
全球AI挑戰-場景分類的比賽源碼(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(列印收藏)
python+flask搭建CNN在線識別手寫中文網站
中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程
不斷更新資源
深度學習、機器學習、數據分析、python
搜索公眾號添加: datayx
長按圖片,識別二維碼,點關注
AI項目體驗
https://loveai.tech