作者:韓信子@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/41
本文地址:http://www.showmeai.tech/article-detail/209
聲明:版權所有,轉載請聯系平臺與作者并注明出處
收藏ShowMeAI查看更多精彩內容
在ShowMeAI的文章 機器學習特征工程最全解讀 里,我們給大家詳細介紹了特征工程的操作,但我們實際上有很多工具可以輔助我們更快捷地完成特征工程,在本篇內容中,ShowMeAI給大家介紹Featuretools這個Python自動化特征工程的工具庫。我們會借助于BigMart Sales數據集來演示自動化特征工程的相關應用。
在機器學習的背景下,特征是用來解釋現象發生的單個特性或一組特性。當這些特性轉換為某種可度量的形式時,它們被稱為特征。
特征工程(feature engineering):利用領域知識和現有數據,創造出新的特征,用于機器學習算法;可以手動(manual)或自動(automated)。
數據與特征工程決定了模型的上限,改進算法只不過是逼近這個上限而已。
<img src="http://www.tacdiversifiedservices.com/uploads/allimg/20240129/-24012ZR2031L.jpg" referrerpolicy="no-referrer"/>
上左圖顯示了20世紀初一群人正在組裝汽車,上右圖顯示了當今一群機器人在做同樣的工作。自動化任何流程都可以使其變得更加高效和經濟。同樣,特征工程也是如此。而且,在機器學習中,常用特征的特征工程已經實現自動化。
我們有一個很好的工具可以用來幫忙完成自動化特征工程的過程,這個Python工具庫的名稱叫Featuretools。
Featuretools是一個Python自動化特征工程的工具庫。它可以幫助大家快速構建豐富的數據特征,而把更多的時間聚焦于構建機器學習模型的其他方面。
要學會使用Featuretools,我們要先了解它的三個主要組件:
外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-omwkGCGq-1647882602558)(http://image.showmeai.tech/machine_learning_in_action/209.png)
Featuretools實際上就是提供了一個框架讓我們可以方便快速的通過簡約的代碼來實現單表的轉換操作和多表的跨表連接操作,下面我們借助于BigMart Sales數據集實踐問題中來具體講解Featuretools工具。
這里的案例場景BigMart Sales要解決的是電商領域的銷量預估問題,我們希望構建模型來估算特定門店中每種商品的銷售額,這將有助于BigMart的決策者找出每一個產品或門店的重要屬性,這對提高整體銷售起著關鍵性作用。請注意,在給定的數據集中,有跨10個門店的1559種商品。
數據集如下:鏈接:https://pan.baidu.com/s/1qjJZjY56MnHBvmUQEMjq9g提取碼:show
下表給出了數據字段說明:
變量 | 描述 |
---|---|
Item_Identifier | 商品編號 |
Item_Weight | 商品重量 |
Item_Fat_Content | 是否是低脂商品 |
Item_Visibility | 該商品展示區域占門店中所有商品展示區域的比例 |
Item_Type | 商品所屬分類 |
Item_MRP | 商品最高售價 |
Outlet_Identifier | 門店編號 |
Outlet_Establishment_Year | 門店建立年份 |
Outlet_Size | 門店占地面積 |
Outlet_Location_Type | 門店所在城市類型 |
Outlet_Type | 門店類型(雜貨店或超市) |
Item_Outlet_Sales | 門店商品銷售額 (即需要預測的輸出變量) |
大家可以在命令行使用pip輕松安裝Featuretools。
pip install featuretools
import featuretools as ftimport numpy as npimport pandas as pdtrain = pd.read_csv("Train.csv")test = pd.read_csv("test.csv")
我們先從數據中提取出目標字段和特征字段,如下:
# saving identifierstest_Item_Identifier = test['Item_Identifier']test_Outlet_Identifier = test['Outlet_Identifier']sales = train['Item_Outlet_Sales']train.drop(['Item_Outlet_Sales'], axis=1, inplace=True)
接著,我們合并訓練集和測試集,以完成統一而一致的數據處理變換。
combi = train.append(test, ignore_index=True)
我們查看一下數據集的缺失值情況。
combi.isnull().sum()
我們發現字段Item_Weight
和Outlet_size
中有非常多的缺失值,先做一個快速處理:
# 缺失值處理combi['Item_Weight'].fillna(combi['Item_Weight'].mean(), inplace = True)combi['Outlet_Size'].fillna("missing", inplace = True)
我們只做一點簡單的數據預處理,這樣后續可以更充分直觀地展示Featuretools的功能。
combi['Item_Fat_Content'].value_counts()
我們發現Item_Fat_Content
只包含兩個類別:「低脂肪」和「常規」(雖然在字段取值上有多種,但其只是格式差異),這里我們對其進行二值化變換。
# 二值編碼fat_content_dict = {'Low Fat':0, 'Regular':1, 'LF':0, 'reg':1, 'low fat':0}combi['Item_Fat_Content'] = combi['Item_Fat_Content'].replace(fat_content_dict, regex=True)
下面我們使用Featuretools來實現自動化特征工程。首先我們將「商品」和「門店」信息組合,構建一個數據唯一ID。
combi['id'] = combi['Item_Identifier'] + combi['Outlet_Identifier']combi.drop(['Item_Identifier'], axis=1, inplace=True)
因為不再需要特征Item_Identifier,我們把它刪除了。我們保留了特征Outlet_Identifier,稍后會使用到它。
接下來我們創建一個特征EntitySet
,它是一種包含多個數據框及其之間關系的結構。
# 構建實體集合eses = ft.EntitySet(id = 'sales')# 添加dataframe數據 es.add_dataframe(dataframe_name = 'bigmart', dataframe = combi, index = 'id')
下面我們將使用深度特征綜合(Deep Feature Synthesis)自動創建新特征。
trans_primitives=['add_numeric', 'subtract_numeric', 'multiply_numeric', 'pide_numeric'] # 2列相加減乘除來生成新特征agg_primitives=['sum', 'median','mean']feature_matrix, feature_names = ft.dfs(entityset=es, target_dataframe_name = 'bigmart', max_depth = 1, verbose = 1, agg_primitives=agg_primitives, trans_primitives=trans_primitives, n_jobs = 8)
上述代碼中:
max_depth
控制由疊加特征基元方式生成的特征的復雜性。agg_primitives
是定義了一些統計聚合方式。trans_primitives
定義了變換計算算子。n_jobs
設定了多核并行特征計算的核數。通過上述操作,Featuretools就自行構造了許多新特征。
讓我們來看看這些新構造的特征:
feature_matrix.columns
你會發現DFS快速構建出了非常多新特征。比我們手動操作構建特征要高效得多!
我們查看一下feature_matrix
的前幾行。
feature_matrix.head()
我們對這個Dataframe做一點小調整,我們根據combi數據框中的id變量對其進行排序。
feature_matrix = feature_matrix.reindex(index=combi['id'])feature_matrix = feature_matrix.reset_index()
我們還可以通過以下代碼來對其構建出來的特征做解釋,比如我們要解釋第20個特征是如何得到的。
ft.graph_feature(feature_names[20])
下面我們就可以用構建出來的特征來建模啦,預測Item_Outlet_Sales。由于最終的數據(feature_matrix)里具有許多類別特征,我們這里使用LightGBM模型。它可以直接使用類別特征,并且本質上是可擴展的。
你可以閱讀ShowMeAI的文章 圖解機器學習 | LightGBM模型詳解 和 LightGBM建模應用詳解 了解LightGBM模型的原理和應用方法。
import lightgbm as lgbimport pandas as pd
CatBoost要求所有類別變量都采用字符串格式。因此,我們首先將數據中的類別變量轉換為字符串:
categorical_features = np.where(feature_matrix.dtypes == 'object')[0]for i in categorical_features: feature_matrix.iloc[:,i] = feature_matrix.iloc[:,i].astype('str')
然后重新把feature_matrix拆回訓練集和測試集。
feature_matrix.drop(['id'], axis=1, inplace=True)train = feature_matrix[:8523]test = feature_matrix[8523:]
# removing uneccesary variablestrain.drop(['Outlet_Identifier'], axis=1, inplace=True)test.drop(['Outlet_Identifier'], axis=1, inplace=True)
將訓練集拆成訓練和驗證兩部分,以便在本地測試算法的性能。
from sklearn.model_selection import train_test_split# splitting train data into training and validation setxtrain, xvalid, ytrain, yvalid = train_test_split(train, sales, test_size=0.25, random_state=11)
最后,訓練模型。采用RMSE(Root Mean Squared Error,均方根誤差)作為衡量指標。
# 初始化LGBMRegressor回歸器model_lgb = lgb.LGBMRegressor(iterations=5000, learning_rate=0.05, depth=6, eval_metric='RMSE', random_seed=7)# 訓練模型model_lgb.fit(xtrain, ytrain, eval_set=[(xvalid, yvalid)], early_stopping_rounds=1000)
from sklearn.metrics import mean_squared_erronp.sqrt(mean_squared_error(model_lgb.predict(xvalid), yvalid))
驗證數據集的RMSE得分是1094.7984。
在沒有任何特征工程的情況下,驗證集的得分為1163。 因此,Featuretools構造的特征不僅僅是隨機特征,而且還非常有價值的。最重要的是,它使特征工程節省了大量時間。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
成都到重慶的火車經過哪些地方?;1.如果從成都坐高鐵到重慶,高鐵經過璧山、永川、大足、榮昌、隆昌、內江、資陽,到達成都。2.景點大概是重慶的區縣,永川,大足,榮昌,永川茶山竹海,樂和樂都,大足石雕,龍水湖,榮昌路孔古鎮。資陽沒什么特別的。隆昌的石牌坊也被稱為牌坊之鄉。3.如果是高鐵,從成都到重慶,要走大成鐵路,金堂,遂寧然后向南轉到重慶。4.如果是普通列車,走成渝鐵路,簡陽,資陽,內江,隆昌,最后...
“CK香水”是什么意思?CK香水指的是Calvin Klein品牌的香水。 相關介紹: CK是美國第一大設計師品牌,曾經連續四度獲得知名的服裝獎項。Calvin Klein有“Calvin Klein Collection”(高級時裝)、“CK Calvin Klein”(高級成衣)、“Calvin Klein Jeans”(牛仔)三大品牌。 另外還經營休閑裝、襪子、內衣、睡衣、泳衣、香水、眼鏡、...
eyeBeam怎樣注冊?眼球束(www.lxvoip.net/voip-soft/eybeam.html)是一款即時通訊(IM)軟電話,可以進行實時多媒體通信,無論您是個人客戶還是中小企業客戶,您都可以輕松地與他人保持聯系和管理您的通話。Eyebeam易于使用,集成了語音、視頻、即時消息、在線狀態等多種功能。它在世界各地擁有數以萬計的用戶。無論您是簡單的電話溝通還是舉行多方電話會議,eyebeam...