天天看點

ML之FE:基于BigMartSales資料集利用Featuretools工具實作自動特征工程之詳細攻略daiding

基于BigMartSales資料集利用Featuretools工具實作自動特征工程

設計思路

更新……

輸出結果

train.shape: (500, 12)

test.shape: (200, 11)

after drop, train.shape: (500, 11)

data_all.shape: (700, 11)

-------------------data_all_CountNull: Item_Identifier                0

Item_Weight                  136

Item_Fat_Content               0

Item_Visibility                0

Item_Type                      0

Item_MRP                       0

Outlet_Identifier              0

Outlet_Establishment_Year      0

Outlet_Size                  202

Outlet_Location_Type           0

Outlet_Type                    0

dtype: int64

-------------------after fillna,data_all_CountNull:

Item_Identifier              0

Item_Weight                  0

Item_Fat_Content             0

Item_Visibility              0

Item_Type                    0

Item_MRP                     0

Outlet_Identifier            0

Outlet_Establishment_Year    0

Outlet_Size                  0

Outlet_Location_Type         0

Outlet_Type                  0

-------------------Item_Fat_Content feature value_count:

Low Fat    436

Regular    221

LF          23

low fat     12

reg          8

Name: Item_Fat_Content, dtype: int64

----------data_all.shape: (700, 11)

Entityset: sales

 Entities:

   bigmart [Rows: 700, Columns: 7]

   outlet [Rows: 10, Columns: 5]

 Relationships:

   bigmart.Outlet_Identifier -> outlet.Outlet_Identifier

核心代碼

#2、利用Featuretools工具實作自動特征工程

#(1)、建立一個實體集EntitySet:實體集是一種包含多個資料幀及其之間關系的結構。

es = ft.EntitySet(id = 'sales')

es.entity_from_dataframe(entity_id = 'bigmart', dataframe = data_all, index = 'id')   # adding a dataframe

#(2)、規範化實體集:資料中包含兩個級别的資訊,即 item商品級别和 outlet門店級别。

#Featuretools能把一個資料集拆分成多個表格。我們根據outlet ID Outlet_Identifier從BigMart表中建立一個新表“outlet”。

es.normalize_entity(base_entity_id='bigmart',

                   new_entity_id='outlet',

                   index = 'Outlet_Identifier',

                   additional_variables =  

                   ['Outlet_Establishment_Year', 'Outlet_Size',  

                    'Outlet_Location_Type', 'Outlet_Type'])

print(es)  

'''

輸出實體集EntitySet的組成

它包含兩個實體,為bigmart和outlet。這兩個表之間也形成了一種關系,用Outlet_Identifier連接配接。

這種關系将在生成新特征中發揮關鍵作用。

#(3)、使用DFS來自動建立新特征:DFS使用特征基元和實體集中給出的多個表來建立特征。

target_entity隻是建立新特征的實體ID,這種情況下為實體“bigmart”。

參數max_depth控制着通過堆疊基元生成的要素複雜性。

參數n_jobs通過使用多個核心來輔助并行特征計算。

這就是使用Featuretools的過程,它已經産生了許多新特征。

feature_matrix, feature_names = ft.dfs(entityset=es,target_entity = 'bigmart',

                                      max_depth = 2,verbose = 1, n_jobs = -1)

print(feature_matrix.columns)

print(feature_matrix.head())

繼續閱讀