<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          還在苦惱特征工程?不妨試試這個庫

          共 3084字,需瀏覽 7分鐘

           ·

          2021-08-10 20:57


          導(dǎo)讀

          從事機(jī)器學(xué)習(xí)相關(guān)崗位的同學(xué)都知道這樣一句話:數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,而模型和算法只是逼近這個上限。在數(shù)據(jù)確定的情況下,那么特征工程就成了唯一可供發(fā)揮的關(guān)鍵步驟。廣義來講,特征工程包括特征提取、特征衍生以及特征選擇等等,今天本文就來分享Python中的一個特征工程相關(guān)的庫——featuretools,可自動化快速實現(xiàn)特征提取和特征衍生的工作,對加速機(jī)器學(xué)習(xí)建模和保證特征工程效果都非常有幫助。



          featuretools是一個python的開源庫(https://www.featuretools.com/),從其名字就可看出,這是一個用于特征相關(guān)的工具,是由featurelab團(tuán)隊最早提出設(shè)計(featurelab是美國的一家初創(chuàng)公司,目前已被Alteryx收購),發(fā)表于論文《Deep Feature Synthesis: Towards Automating Data Science Endeavors》中,想要詳細(xì)了解其設(shè)計思想和算法原理的可參考這篇文章。今天,本文主要是介紹下它的應(yīng)用和測試效果。


          • featuretools的安裝和基本使用

          featuretools的安裝過程非常簡單,和其他python庫可直接使用pip工具完成安裝一樣,featuretools也可以這樣安裝。

          pip install featuretools


          安裝完成后,調(diào)包的過程一般只需要如下一句,這就像import numpy as np一樣,而后續(xù)的所有操作都是基于ft這個主入口的:

          import featuretools as ft


          當(dāng)然,在具體使用之前,這里還是要先簡單介紹下featuretools的基本設(shè)計和原理。簡單來說,featuretools是用于從若干原始數(shù)據(jù)表中自動化提取特征的一個工具,以論文中的電商訂單的例子為例:需要統(tǒng)計對各客戶構(gòu)建特征,所使用的數(shù)據(jù)表有兩張,一個是客戶基本信息表,例如年齡、性別、工資收入等;另一個是訂單信息表,其中包含了每筆訂單的金額、產(chǎn)生訂單的客戶等。顯然,這里客戶信息表和訂單信息表之間的關(guān)聯(lián)關(guān)系是客戶ID,且一個客戶ID可對應(yīng)多筆訂單。


          以這兩張表為基礎(chǔ),如果是手工構(gòu)建特征,那么基本流程大概就是對訂單表進(jìn)行聚合統(tǒng)計,例如每個客戶的總消費金額、訂單筆數(shù)等統(tǒng)計信息,而后將該聚合統(tǒng)計表與客戶基本信息表進(jìn)行橫向join,得到特征寬表。當(dāng)然,在此基礎(chǔ)上,還可以進(jìn)一步地對客戶基本信息和訂單統(tǒng)計信息進(jìn)行交叉衍生,例如訂單消費總金額/年齡,這里先姑且不討論特征衍生的合理性與否以及量綱的問題。下圖是論文中的一幅示意圖,可供端倪一二:


          同樣的特征構(gòu)建思想,featuretools羅列了這期間的所有可能需要的特征構(gòu)建算子,并設(shè)置了迭代構(gòu)建的深度:max_depth。


          這里首先介紹特征構(gòu)建算子。在featuretools中,特征構(gòu)建算子分為兩大類:transform和aggregation,字面意思也可理解:tansform用于特征的衍生,例如從特征A和B衍生特A+B;aggregation用于聚合統(tǒng)計特征,例如在上述的訂單表中對同一客戶的所有訂單進(jìn)行count、對訂單金額進(jìn)行sum,這些都是aggregation操作。完整的特征構(gòu)建算子可用如下方法調(diào)用顯示:

          特征構(gòu)建算子在featuretools中稱作primitive——基于


          其次介紹特征構(gòu)建深度的問題:max_depth。例如對于客戶基本信息表中有A、B、C、D四個特征,那么A+B和C-D都是depth=1的衍生特征,而(A+B)*(C-D)則是depth=2的衍生特征,以此類推。正因如此,featuretools中的特征構(gòu)建算法叫做Deep Feature Synthesis,即深度特征合成。


          如上就是一些關(guān)于featuretools的基本設(shè)計的簡要介紹,更為詳盡的理論和使用還需查閱論文或其他資料。下面給出一個簡單的demo,同時測試其效果情況,這里以sklearn中的breast_cancer數(shù)據(jù)集為例:


          1.導(dǎo)入數(shù)據(jù),構(gòu)建DataFrame格式的數(shù)據(jù)集

          dataset = load_breast_cancer()X = dataset.datay = dataset.targetfeature_names = dataset.feature_names
          df = pd.DataFrame(X, columns=feature_names)


          2.調(diào)用featuretools,構(gòu)建數(shù)據(jù)集實體,并設(shè)置特征構(gòu)建基元,調(diào)用dfs方法(深度特征合成):

          es = ft.EntitySet(id='breast_cancer')  # 用id標(biāo)識實體集# 增加一個數(shù)據(jù)框,命名為irises.entity_from_dataframe(entity_id='breast_cancer',                      dataframe=df,             index='idx',             make_index=True)
          trans_primitives=['add_numeric', 'multiply_numeric'] # 取任意兩列組合的相加和相乘,衍生新的特征XNew, new_names = ft.dfs(entityset=es, target_entity='breast_cancer', max_depth=1, # max_depth=1,只在原特征上進(jìn)行運算產(chǎn)生新特征 verbose=1, trans_primitives=trans_primitives)

          3.通過train_test_split方式切分訓(xùn)練集和驗證集,調(diào)用sklearn中的決策樹算法,分別測試特征構(gòu)建前后的分類效果(這里選取10次默認(rèn)參數(shù)的平均值)
          X_train, X_test, XNew_train, XNew_test, y_train, y_test = train_test_split(X, XNew, y)
          np.mean([DecisionTreeClassifier().fit(X_train, y_train).score(X_test, y_test) for _ in range(10)])# 0.9342657342657343np.mean([DecisionTreeClassifier().fit(XNew_train, y_train).score(XNew_test, y_test) for _ in range(10)])# 0.9468531468531468

          可以看到,經(jīng)過特征合成后的數(shù)據(jù)集,分類效果相較于之前有了大約1%的提升。當(dāng)然,sklearn中的數(shù)據(jù)集本身都是比較好的數(shù)據(jù)集,即默認(rèn)情況下就能取得不錯的效果,另外這里的測試結(jié)果也具有隨機(jī)性。


          相關(guān)閱讀:


          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲人操逼视频 | 黄色性爱网站 | 狠狠撸在线观看 | 亚洲 欧美 中文 日韩a v一区 | 亚洲国产精品欧美久久 |