FeatureTools是2017年9月上線的github項目,是一個自動生成特徵的工具,應用於關係型數據。html
github連接:https://github.com/Featuretools/featuretools git
項目官網:https://www.featuretools.com/github
API doc:https://docs.featuretools.com/api_reference.html算法
最近看了一下這個開源工具,對生成關係型特徵有一些幫助,把這個項目簡單總結一下。api
這個項目起源於Deep Feature Systhesis 這篇文章,連接是 http://www.jmaxkanter.com/static/papers/DSAA_DSM_2015.pdf ,官網上也有相似資料,可是沒有文章介紹的詳細。工具
Feature Tools是 Deep Feature Systhesis (DFS) 算法的開源實現,實現原理以下。ui
假定咱們有四個Entity,即四張表(Table):Customer, Order, Order Product 和 Product。他們之間的關係是這樣的:htm
1個Customer對應多個Order,其他的以此類推。blog
咱們的目標是給Customer創建特徵。遞歸
DFS方法把特徵分爲兩類:
1. Entity feature, 僅依據Customer表中的數據計算特徵,計算出的特徵簡稱efeat;
2. Ralated feature, 依據Customer表和其餘表的關係計算特徵,relation又爲兩類,一是forward relation, 即一對一的關係,好比 一個Order只對應一個Customer,二是 backward relation,即一對多的關係,好比 一個Customer對應多個Order。
假設咱們不是對Customer計算特徵,而是對Order計算特徵,這時Customer和Order是forward relation,能夠直接把Customer的字段加到Order表中,而後再計算各類特徵,這樣計算獲得的特徵簡稱 dfeat;
若是是針對Customer計算特徵,Customer和Order是backward relation,此時就須要先計算相同Customer的不一樣Order的特徵值(好比 sum, max, min, mean, std等),計算獲得的特徵簡稱rfeat。
DFS把Entity之間的關係稱爲parent-child關係,好比 Customer和Order是一對多的關係,因此Customer是parent,Order是child。這是FeatureTools的輸入參數之一。
上面的概念都搞清楚了,就能天然理解DFS計算特徵的過程了:根據parent-child關係,計算rfeat和dfeat,把rfeat和dfeat合併到parent表中,計算parent的efeat,以遞歸方式執行這些操做便可,也就是自底向上累積計算特徵。
附上文中給出的僞代碼:
文中提到了一個注意點:通常先計算rfeat,後計算dfeat,同一個Entity通常只使用一次。
通常來講,rfeat包含的信息量更多,也更經常使用,因此rfeat相比dfeat更重要一些,這是個人理解。
featureTools的使用比較簡單,能夠參考5-minutes demo實操一下:https://docs.featuretools.com/#minute-quick-start
要把這個工具的全部api都瞭解清楚,能夠參考上面的api連接,下載數據,跑demo,把全部特徵都計算一遍。
p.s. 這個工具備兩個弱點:
1. 使用這種多層全排列的方式容易形成特徵維數過多,實踐中必須作特徵篩選,下降特徵維數。
2. 這種暴力搜索獲得的特徵,可解釋性可能偏弱,須要深刻研究那些優質特徵的可解釋性。懂業務的人搞出幾個解釋性強的特徵,可能秒殺暴力搜索獲得的全部特徵。因此,實際應用時,能夠用暴力搜索法做爲特徵挖掘的輔助算法。
3. 從官網文檔看,FeatureTools只有單機版,處理的數據量有限。