特徵重要性分析旨在理解模型決策過程,模型解釋方法分為模型特定和模型無關兩類別,模型無關方法則透過擾動輸入資料觀察輸出變化。個別預測關注特定輸入特徵重要性,整體模型解釋則關注模型整體行為。準確性和可解釋性之間通常需要權衡,高準確度模型可能犧牲可解釋性。深度學習中,特徵重要性分析更具挑戰性,需要運用 SHAP 值、顯著性圖、擾動基礎技術及注意力機制等方法。特徵選擇則從眾多特徵中挑選最具資訊量的特徵,提升模型效能、降低運算成本並增強可解釋性。過濾法、包裝法和嵌入法是三種主要的技術,各有優缺點,需根據實際情況選擇。特徵儲存函式庫能集中管理特徵,避免重複計算,確保特徵一致性,提升團隊協作效率。設計特徵儲存函式庫需考量讀寫負載、延遲和更新頻率等因素。特徵儲存的最佳化包含預計算、版本控制、依賴關係管理和捆綁等策略,提升特徵管理效率。
11.2 特徵重要性分析
在機器學習(ML)領域中,瞭解模型的決策過程至關重要。為了實作這一點,我們需要進行特徵重要性分析。本章節將探討特徵重要性分析的方法、挑戰以及在深度學習中的應用。
瞭解模型解釋方法
模型解釋方法可以分為兩大類別:模型特定方法和模型無關方法。模型特定方法依賴於模型的內部結構,而模型無關方法則將模型視為黑箱,透過擾動輸入資料來觀察輸出結果的變化。
模型無關方法
模型無關方法包括:
- 排列特徵重要性(Permutation Feature Importance):透過隨機排列資料集中某個特徵的值,觀察模型效能的下降程度來衡量該特徵的重要性。
- SHAP 值(SHapley Additive exPlanations):透過計算每個特徵對特定預測的貢獻來估計其重要性。
個別預測與整體模型解釋
模型解釋方法還可以根據其關注的焦點分為兩類別:個別預測和整體模型解釋。個別預測方法關注特定輸入的特徵重要性,而整體模型解釋方法則關注模型的整體行為。
個別預測方法
- 區域性可解釋模型無關解釋(LIME):透過在特定輸入周圍建立一個簡單、可解釋的模型來近似決策邊界。
- 錨點解釋(Anchor Explanations):透過識別足夠「錨定」決策的規則來提供可解釋性。
準確性與可解釋性的權衡
高度可解釋的模型可能會犧牲準確性以換取透明度。相反,達到高準確性的模型往往以犧牲可解釋性為代價。現代大語言模型,如根據 Transformer 的 GPT,就是一個典型的例子。它們在各種自然語言處理任務中取得了最先進的效能,但由於其複雜性和龐大的引數數量,理解其決策過程變得困難。
深度學習中的特徵重要性
在深度學習中,尤其是在處理影像、音訊或文字等資料型別時,特徵重要性分析變得更加具有挑戰性。深度學習模型自動學習資料的分層表示,這些表示往往是高度抽象和非線性的。
深度學習中的特徵重要性分析技術
- SHAP 值:與經典特徵類別似,SHAP 值可以估計每個 token 或畫素對模型輸出的貢獻。
- 顯著性圖(Saliency Maps):顯著性圖是一種區域性解釋方法,突出顯示輸入影像中對模型輸出敏感的區域。
- 擾動基礎技術(Perturbation-based Techniques):透過改變或刪除特徵來觀察模型輸出的變化,從而確定特徵的重要性。例如,遮擋(Occlusion)技術透過系統地遮擋影像的部分割槽域並跟蹤輸出的變化來實作這一點。
- Transformer 中的注意力機制(Attention in Transformers):注意力分數指示模型在進行預測時對序列中每個 token 的權重。這些注意力權重可以被視覺化和解釋為模型的焦點。
11.3 特徵選擇
在前面的章節中,我們探討了特徵工程的藝術以及如何將原始資料轉換為有意義的特徵。然而,並非所有特徵都同樣有用;有些可能無關緊要、冗餘或過於複雜,難以被模型有效處理。
這就是特徵選擇的重要性所在。透過仔細選擇最具資訊量的特徵,我們可以提高系統的效能和可解釋性,同時降低其複雜性和訓練時間。我們將探討特徵選擇的技術、最佳實踐和潛在陷阱,並學習如何為特定的機器學習問題選擇合適的特徵。
11.3.1 特徵生成與特徵選擇
機器學習中的特徵生成和特徵選擇過程可以比作園藝。就像園丁在土壤中種植各種種子一樣,我們生成一系列特徵,探索新的資料來源,嘗試不同的特徵轉換,並構思可能提高模型效能的新想法。
然而,就像並非所有植物都能在花園中茁壯成長一樣,並非所有特徵都能使模型受益。在某個時候,我們需要修剪掉枯死或無效的植物(在我們的例子中,丟棄無關或冗餘的特徵),以維持健康的成長。這種培養和修剪、增加和減少的迴圈,是機器學習系統生命中的一個常數,因為我們不斷地改進和最佳化我們的特徵集。
古希臘哲學家赫拉克利特曾說:“對立帶來和諧。從不和諧中產生最美妙的和諧。”這在機器學習中同樣成立,我們透過保持生成新特徵和仔細選擇最具資訊量的特徵之間的平衡來實作最佳效能。
11.3.2 目標和可能的缺點
你可能會問:“好吧,但為什麼要如此關注特徵選擇?”特徵選擇有以下好處:
- 更高的準確性和更少的過擬合:選擇最具資訊量的特徵有助於模型專注於最重要的訊號。移除無關或冗餘的特徵可以降低模型過擬合的風險。
- 更容易解釋:由10個有意義的特徵做出的決策比由100個特徵做出的決策更容易解釋和理解,即使後者的模型效能更高。
- 更容易構建和除錯:如果在特徵選擇階段,我們發現嘗試的五個資料來源中有三個是冗餘的,那麼我們可以透過將它們從訓練和服務管道中移除來節省大量時間和計算資源。一個更簡單的資料管道需要更少的維護和故障排除工作。
- 更快的訓練和服務時間:隨著特徵數量的減少,模型的複雜性降低,從而縮短訓練時間並降低計算成本。
為了方便起見,我們將特徵選擇的所有好處彙總在圖11.7中。
在實時應用中,速度的需求往往優先於其他因素,即使這意味著要犧牲模型的準確性以滿足SLA。例如,在虛擬助理使用的語音識別系統中,使用者期望即時準確地將他們說的話轉錄成文字。即使是最小的延遲也可能破壞使用者經驗,使系統看起來效率低下。
完美的個人化如果使預測延遲300毫秒,也會變得毫無價值,從而導致負面感知。因此,具有中等品質的輕量級個人化比累積使用者所有可能的輸入但讓他們等待的模型更合適。
案例研究
亞馬遜進行了一系列A/B測試,以數字形式表達這種權衡:每100毫秒的延遲會導致1%的銷售額損失。對於一家擁有5000億美元年收入的企業來說,1%的損失等於50億美元——這是一個無法承受的損失(https://mng.bz/WVga)。
圖11.7 特徵選擇的原因
除了計算時間和準確性之間的平衡之外,特徵選擇還有一些潛在的風險和缺點:
- 丟失潛在的有價值訊號:移除特徵可能會導致丟失可以改善模型的重要的資訊。我們可能會忽視一些合理的預處理或聚合,並草率地得出該特徵沒有有用訊號的結論。
- 未預見的互動作用:移除某些特徵可能會在特徵之間產生未預見的互動作用,從而導致意外的行為和降低模型效能。在選擇特徵時,必須考慮特徵之間的關係以及可能出現的互動作用。
- 偏差:某些特徵可能比其他特徵更受重視,從而導致特徵選擇產生偏差預測。想像一下,如果我們只選擇與目標變數高度相關的特徵。在這種情況下,我們可能會將偏差引入模型,並且無法捕捉不高度相關但仍與預測任務相關的重要資訊。
- 過擬合風險:與超引數最佳化類別似,特徵選擇是一個學習過程。任何攝入目標變數的學習過程都需要一個適當的驗證模式(詳見第7章)。如果我們使用相同的資料來選擇特徵和評估模型的效能,那麼就存在過擬合測試資料的高風險,從而導致過於樂觀的效能估計。
除了這些問題之外,如果定期進行,特徵選擇會在訓練管道中新增一個計算密集型的階段,這也是我們應該考慮的,尤其是在使用貪婪包裝方法時。
11.3.3 特徵選擇方法概述
有多種方法可用於特徵選擇,每種方法都有其優缺點(見圖11.8)。最常見的方法是過濾器、包裝器和嵌入式方法。讓我們更詳細地瞭解這三種方法。
圖11.8 特徵選擇方法
過濾器方法透過獨立於模型的單個特徵的統計特性(單變數方法)或與其他特徵的相關性(多變數方法)使用簡單的排名規則來過濾特徵。這些方法易於擴充套件(即使對於高維資料),並在主要任務之前進行快速的特徵選擇。
單變數過濾器方法中,特徵的排名順序由其內在屬性決定,例如特徵方差、粒度、一致性、與目標的相關性等。之後,我們保留前N個特徵作為我們的子集,並擬合模型或應用更先進、計算密集型的特徵選擇方法作為第二層特徵選擇。
在多變數方法中,我們透過比較特徵之間的相關性或互資訊來分析它們。如果一對特徵代表相似的資訊,那麼其中一個可以被省略,而不會影響模型的效能。
此圖示展示了從原始資料到透過過濾器方法進行特徵選擇的流程。#### 內容解密:
- graph LR;:定義了一個從左到右(Left to Right)的圖表方向。
- A[原始資料] –>|特徵工程|> B[生成特徴];:表示原始資料經過特徵工程處理後生成了新的生成特徴。
- B –> C[過濾器方法];:生成的生成特徴被輸入到過濾器方法中進行處理。
- C –> D[單變數方法]; 和 C –> E[多變數方法];:過濾器方法包含兩種具體的方法,分別是單變數方法和多變數方法。
- D –> F[根據統計特性排名];:單變數方法根據每個特徵自身的統計特性進行排名。
- E –> G[分析特徵之間的相關性];:多變數方法則透過分析不同特徵之間的相關性來進行篩選。
- F –> H[保留前N個特徵]; 和 G –> H;:無論是透過單變數還是多變數的方法,最終都會保留最重要的前N個特徵。
- H –> I[擬合模型或進一步選擇];:最後,篩選出的特徵被用於擬合模型,或者進一步進行其他層次的特徵選擇。
這個Plantuml圖清晰地展示了特徵選擇過程中不同方法的應用及其流程,為讀者提供了直觀的理解。
包裝器方法和嵌入式方法也是重要的技術,它們透過不同的方式來最佳化特徵子集,以提高模型的效能。每種方法都有其特定的應用場景和優勢,需要根據具體的問題和資料特性進行選擇。
總之,特徵選擇是機器學習流程中的一個關鍵步驟,它能夠提高模型的效能、可解釋性和效率,同時減少計算成本。透過採用適當的特徵選擇方法,我們可以更好地理解資料,並構建出更強健的預測模型。
11.3 特徵選擇的實務應用與技術深度解析
特徵選擇是機器學習流程中的關鍵步驟,直接影響模型的效能與泛化能力。良好的特徵選擇策略不僅能提升模型表現,還能降低運算成本並提高可解釋性。本文將探討三類別主要的特徵選擇方法:過濾法(Filter Methods)、包裝法(Wrapper Methods)及嵌入法(Embedded Methods),並結合實際案例進行技術解析。
過濾法的原理與實務應用
過濾法透過統計指標評估特徵重要性,無需依賴特定學習演算法,具有計算高效的優勢。常見的評估指標包括相關係數、互資訊及特徵互動分數等。例如,特徵互動分數可用於識別特徵間的複雜關係,當該分數較高時,系統可自動觸發警告,提示潛在的模型效能下降風險。
在實際應用中,過濾法常作為初步篩選工具,用於快速剔除明顯無關的特徵。以下是一個具體的實務案例:
import pandas as pd
import numpy as np
# 模擬資料集建立
data = pd.DataFrame({
'feature1': np.random.randn(100),
'feature2': np.random.randn(100),
'target': np.random.randn(100)
})
# 計算相關係數並排序
corr_matrix = data.corr()
print(corr_matrix['target'].sort_values(ascending=False))
內容解密:
- 資料集建立:使用
pandas建立包含隨機特徵與目標變數的資料框架。 - 相關係數計算:透過
corr()函式計算各特徵與目標變數的相關性,提供篩選依據。 - 結果排序:使用
sort_values()對相關係數排序,優先選擇高相關性的特徵。
包裝法的技術挑戰與最佳化策略
包裝法透過將學習演算法視為黑盒,評估不同特徵子集對模型效能的影響。常見的包裝法包括前向選擇(Sequential Forward Selection)、後向消除(Sequential Backward Elimination)及演化演算法(如差分進化)。這些方法雖然計算密集且易陷入區域性最優,但在評估特徵子集對目標指標的影響方面表現精確。
在實際應用中,為了平衡計算成本與模型效能,可採用以下最佳化策略:
- 混合策略:結合前向選擇與後向消除,形成浮動搜尋策略,提高搜尋效率。
- 降維處理:在包裝法之前使用過濾法進行初步篩選,降低特徵維度。
- 硬體加速:利用GPU或分散式運算提升計算效率。
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import Ridge
# 建立範例模型與選擇器
model = Ridge()
sfs = SequentialFeatureSelector(model, n_features_to_select=2)
# 進行特徵選擇
sfs.fit(data.drop('target', axis=1), data['target'])
print(sfs.support_)
內容解密:
- 模型選擇:使用
Ridge迴歸作為基礎模型進行包裝法選擇。 - 選擇器建立:透過
SequentialFeatureSelector實作前向特徵選擇。 - 結果解析:
support_屬性顯示被選中的特徵,提供模型最佳特徵子集。
嵌入法的原理與實務優勢
嵌入法利用額外的模型進行特徵重要性評估,常見的方法包括Lasso迴歸與遞迴特徵消除(RFE)。Lasso透過L1正則化將不相關特徵的係數歸零,而RFE則根據模型的重要度排序逐步移除最不重要的特徵。
實務上,嵌入法因其平衡了計算效率與選擇品質而被廣泛應用。以下是一個Lasso迴歸的實作範例:
from sklearn.linear_model import Lasso
# 建立Lasso模型並訓練
lasso = Lasso(alpha=0.1)
lasso.fit(data.drop('target', axis=1), data['target'])
# 檢視特徵係數
print(lasso.coef_)
內容解密:
- 模型建立:使用
Lasso迴歸並設定正則化強度alpha。 - 訓練過程:透過
fit()方法訓練模型,自動進行特徵選擇。 - 結果分析:檢視
coef_屬性,被置零的特徵表示被排除。
特徵儲存函式庫的設計理念與技術實踐
特徵儲存函式庫(Feature Store)作為現代機器學習架構的核心元件,能集中管理特徵的計算、儲存、測試與監控,大幅提升團隊協作效率。透過特徵儲存函式庫,團隊可避免重複計算相同特徵,並確保生產環境與訓練環境的一致性。
在實際案例中,特徵儲存函式庫結合特徵工程與模型最佳化,能顯著提升系統效能。例如,在動態定價專案中,透過Lasso迴歸簡化特徵集並結合多項式特徵互動,將錯誤率降低了30%。此外,在交易分類別系統中,根據Transformer的模型結合精心設計的特徵工程,使得分類別準確率進一步提升。
特徵儲存函式庫(Feature Store)在機器學習中的重要性
在機器學習(ML)領域,特徵工程是一項耗時且需要高度專業知識的工作。試想,若團隊成員各自獨立開發相同的特徵,不僅浪費資源,也可能導致模型間的不一致性。特徵儲存函式庫的出現,正是為瞭解決這些問題。
為何需要特徵儲存函式庫?
沒有特徵儲存函式庫的情況下,不同團隊或工程師可能會重複開發相同的特徵(如圖 11.10 所示),導致資源的浪費和模型間的不一致性。相反,特徵儲存函式庫提供了一個統一的系統,讓團隊能夠分享和重用特徵,從而提高效率和模型的穩定性(如圖 11.11 所示)。
特徵儲存函式庫的優缺點
優點:
- 重用性和協作:促進團隊間的協作,避免重複開發相同的特徵。
- 簡化工作流程:讓團隊能夠根據現有的特徵快速開發新模型,加速迭代過程。
- 一致性和標準化:確保特徵計算的一致性,降低不同模型或流程間的差異。
- 檔案和透明度:提供特徵的詳細檔案,方便團隊成員瞭解和使用現有特徵。
- 可擴充套件性和可維護性:便於新增或修改特徵,適應不斷變化的需求。
缺點:
- 設計和實施成本:需要時間收集需求、設計和實施特徵儲存函式庫。
- 降低靈活性:增加團隊間的依賴性,降低了工作上的靈活性。
- 高開發成本:從零開始構建特徵儲存函式庫成本高,建議使用現成的解決方案,如 Tecton、Feast 等。
- 不一定適合所有專案:對於某些特定型別的機器學習問題(如純深度學習問題),特徵儲存函式庫的效益可能不大。
適用場景
特徵儲存函式庫特別適用於處理多源、結構化資料的場景,如表格資料。同時,隨著多模態資料的使用越來越普遍,特徵儲存函式庫的概念也變得更加通用。例如,線上上市場中,不僅使用歷史銷售和點選資料,也開始整合圖片、描述和使用者評論等資料。透過預訓練的神經網路提取嵌入向量(embeddings),並將其作為特徵儲存在特徵儲存函式庫中,可以節省處理時間,確保系統的一致性。
設計特徵儲存函式庫的關鍵考量
在設計特徵儲存函式庫時,需要考慮以下幾個重要方面:
- 讀寫負載:瞭解系統的讀寫操作負載和資料量,以設計合適的架構。
- 延遲和更新頻率:確定讀取延遲的要求和特徵更新的頻率。
此圖示說明瞭特徵儲存函式庫如何整合多源結構化資料,並透過分享和加速模型開發來提高團隊協作效率、降低成本並提升整體效能。
內容解密:
此圖表展示了特徵儲存函式庫的核心價值,包括如何透過整合多源資料來促進團隊協作、加速模型開發,最終達到提高效率、降低成本並提升整體效能的目的。圖表清晰地呈現了特徵儲存函式庫在機器學習工作流程中的關鍵角色,以及它如何幫助團隊更有效地工作。
特徵儲存的最佳化與管理
特徵工程是機器學習流程中的關鍵步驟,而特徵儲存(Feature Store)則是管理和提供這些特徵的重要基礎設施。在本章中,我們將探討特徵儲存的最佳化和管理策略,包括預計算、特徵版本控制、特徵依賴關係和特徵捆綁等。
預計算與最佳化
在程式設計中,DRY(Don’t Repeat Yourself)原則提醒我們要避免重複計算。同樣,在特徵工程中,預計算是一種重要的最佳化策略。這意味著我們應該在需要使用特徵之前就提前計算好,而不是在請求特徵儲存提供資料集時才進行計算。例如,當我們的資料函式庫完成前一天的訂單處理後,就是更新特徵的好時機。
進一步地,我們可以將計算過程拆分為多個步驟:
- 將原始資料(如點選量、價格、收入)預聚合為專案-日的總和。
- 將這些總和聚合為所需的時間視窗(如7天、14天、30天、60天)。
這種方法幫助我們重用昨天或N個月前計算出的特徵,避免每天重複幾乎相同的計算,同時合併相似特徵的計算,減少重複工作。
此圖示展示了特徵聚合的層次結構。
內容解密:
- 原始資料:指的是直接從資料倉儲中取得的原始資料,如點選量、價格等。
- 專案-日總和:將原始資料按照專案和日期進行聚合,得到每天的總和資料。
- 時間視窗總和:將專案-日總和進一步按照不同的時間視窗(如7天、30天)進行聚合。
- 最終特徵:經過多層聚合後得到的最終可用於模型訓練的特徵。
特徵版本控制
特徵的每次更新都應該被視為一個新的版本,而不是簡單地覆寫舊版本。這是因為更新可能改變了特徵的計算邏輯或資料來源,從而導致新舊特徵值之間存在顯著差異。一個設計良好的特徵儲存應該能夠自動管理不同版本的特徵,並支援回溯到舊版本。
每個資料集的元資訊中不僅應該包含所包含的特徵,還應該記錄這些特徵在計算時的版本資訊。這使得我們能夠輕易地回溯到舊版本的資料集,並完全重現舊模型的結果。
特徵依賴關係
並非所有的特徵都能直接從資料倉儲的原始資料中計算得出,有些特徵的計算依賴於其他特徵或資料來源。這種依賴關係形成了特徵層次結構,其中每個特徵都依賴於其父特徵或資料來源。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
skinparam arrow {
color #262626
thickness 2
}
skinparam package {
borderColor #262626
backgroundColor #F2F2F2
fontColor #262626
}
skinparam component {
borderColor #262626
backgroundColor #FFFFFF
fontColor #262626
}
title 特徵工程:重要性分析與選擇流程
package "1. 特徵重要性分析" {
package "模型解釋方法" {
[模型特定方法] as Specific
[模型無關方法] as Agnostic
}
package "分析技術" {
[SHAP 值] as SHAP
[排列重要性] as Permutation
[LIME] as LIME
[注意力機制] as Attention
}
}
package "2. 特徵選擇" {
package "選擇方法" {
[過濾法 (Filter)] as Filter
[包裝法 (Wrapper)] as Wrapper
[嵌入法 (Embedded)] as Embedded
}
[特徵子集] as FeatureSubset
}
package "3. 特徵管理" {
[特徵儲存函式庫 (Feature Store)] as FeatureStore
note right of FeatureStore
- 集中管理
- 版本控制
- 預計算與快取
end note
}
package "模型開發" {
[模型訓練] as Training
[模型評估] as Evaluation
}
Agnostic --> SHAP
Agnostic --> Permutation
Agnostic --> LIME
Specific --> Attention
SHAP --> Filter
Permutation --> Wrapper
LIME --> Wrapper
Attention --> Embedded
Filter --> FeatureSubset
Wrapper --> FeatureSubset
Embedded --> FeatureSubset
FeatureSubset --> FeatureStore
FeatureStore --> Training
Training --> Evaluation
@enduml此圖示展示了特徵之間的依賴關係。
內容解密:
- 原始資料:基礎資料來源。
- 父特徵:直接從原始資料或經過簡單處理得到的基礎特徵。
- 子特徵:依賴於父特徵或其他子特徵計算得到的更複雜的特徵。
- 最終特徵:經過多層依賴關係後得到的可用於模型訓練的最終特徵。
特徵捆綁
在實際應用中,我們經常需要對來自同一資料來源的相關欄位進行相同的轉換和過濾操作。這些相關的特徵具有相同的鍵和血統(lineage),可以被捆綁在一起進行統一管理。