基于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())