首頁 >後端開發 >Python教學 >特徵工程:釋放資料的力量以實現卓越的機器學習模型

特徵工程:釋放資料的力量以實現卓越的機器學習模型

WBOY
WBOY原創
2024-08-21 22:24:43506瀏覽

Feature Engineering: Unlocking the Power of Data for Superior Machine Learning Models

特徵工程是選擇、操作原始資料並將其轉換為可用於機器學習(主要是監督學習)的特徵的過程。它由五個過程組成:特徵創建、轉換、特徵提取、探索性資料分析和基準測試。 在這種情況下,“特徵”是可以在預測模型中使用的任何可測量的輸入。它可以是動物的聲音、顏色或某人的聲音。

這項技術使資料科學家能夠從資料中提取最有價值的見解,從而確保更準確的預測和可操作的見解。

特徵類型

如上所述,特徵是可以在預測模型中使用的任何可測量點。讓我們來看看機器學習的特徵工程的類型-

  • 數值特徵:這些特徵是可以在尺度上測量的連續變數。例如:年齡、體重、身高和收入。這些功能可以直接用於機器學習。

  • 分類特徵:這些是可以分組為類別的離散值。它們包括:性別、郵遞區號和顏色。機器學習中的分類特徵通常需要轉換為數值特徵,然後才能用於機器學習演算法。您可以使用 one-hot、標籤和序數編碼輕鬆完成此操作。

  • 時間序列特徵:這些特徵是隨時間推移進行的測量。時間序列特徵包括股票價格、天氣資料和感測器讀數。這些功能可用於訓練機器學習模型,以預測未來值或識別資料中的模式。

  • 文字特徵:這些是可以表示單字、片語或句子的文字字串。文字特徵的範例包括產品評論、社交媒體貼文和醫療記錄。您可以使用文字特徵來訓練機器學習模型,使其能夠理解文字的含義或將文字分類為不同的類別。

  • 機器學習管道中最關鍵的過程之一是:特徵選擇,這是選擇資料集中最相關的特徵以促進模型訓練的過程。它增強了模型的預測性能和穩健性,使其不太可能過度擬合訓練資料。這個過程至關重要,因為它有助於減少過度擬合、增強模型可解釋性、提高準確性並減少訓練時間。

特徵工程技術

插補

此技術涉及缺失值/資料的處理。這是您在準備資料進行清理甚至標準化時會遇到的問題之一。這主要是由隱私問題、人為錯誤、甚至資料流中斷引起的。它可以分為兩類:

  • 分類插補:缺失的分類變數通常會被其他記錄(模式)中最常出現的值取代。它適用於數值和分類值。然而,它忽略了特徵相關性。您可以使用 Scikit-learn 的「SimpleImputer」類別來實作此插補方法。此類別也適用於透過平均數和中位數方法進行插補,如下所示。
# impute Graduated and Family_Size features with most_frequent values

from sklearn.impute import SimpleImputer
impute_mode = SimpleImputer(strategy = 'most_frequent')
impute_mode.fit(df[['Graduated', 'age']])

df[['Graduated', 'age']] = impute_mode.transform(df[['Graduated', 'age']])
  • 數值插補:缺失的數值通常會以其他記錄中對應值的平均值取代。也稱為均值插補。此方法簡單、快速,並且適用於小型資料集。然而,這種方法有一些局限性,例如列中的異常值可能會扭曲結果平均值,從而影響 ML 模型的準確性。在估算缺失值時,它也未能考慮特徵相關性。 您可以使用「fillna」函數來估算列平均值中的缺失值。
# Impute Work_Experience feature by its mean in our dataset

df['Work_Experience'] = df['Work_Experience'].fillna(df['Work_Experience'].mean())

編碼

這是將分類資料轉換為數值(連續)資料的過程。以下是特徵編碼的一些技術:

  • 標籤編碼:標籤編碼是一種對資料集中的變數或特徵進行編碼的方法。它涉及將分類變數轉換為數值變數。

  • One-hot 編碼:One-hot 編碼是將分類變數轉換為 ML 演算法可以使用的形式的過程。

  • 二進位編碼:二進位編碼是使用二進位代碼對資料進行編碼的過程。在二進位編碼中,每個字元由 0 和 1 的組合表示。

縮放與標準化

特徵縮放是一種用於標準化自變數或資料特徵範圍的方法。在資料處理中,也稱為資料標準化,通常在資料預處理步驟中執行。例如,如果您有多個自變量,例如年齡、薪水和身高;它們的範圍分別為(18-100 年)、(25,000-75,000 歐元)和(1-2 公尺),特徵縮放將有助於它們全部處於在同一範圍內,例如- 以0 為中心或在範圍內(0,1) 取決於縮放技術。

歸一化是一種縮放技術,其中值會被移動和重新縮放,以便它們最終的範圍在 0 和 1 之間。它也稱為最小-最大縮放。這裡,Xmax和Xmin分別是特徵的最大值和最小值。

分箱

分箱(也稱為分桶)是一種特徵工程技術,它將不同的數值子範圍分組到箱子或桶中。在許多情況下,分箱將數值資料轉換為分類資料。例如,考慮一個名為 X 的特徵,其最小值為 15,最大值為 425。使用分箱,您可以用以下五個分箱表示 X:

  • Bin 1:15 至 34
  • Bin 2:35 至 117
  • Bin 3:118 至 279
  • Bin 4:280 至 392
  • Bin 5:393 至 425

Bin 1 的範圍為 15 到 34,因此 15 到 34 之間的每個 X 值都會出現在 Bin 1 中。在這些 bin 上訓練的模型對 17 和 29 的 X 值的反應沒有什麼不同,因為這兩個值都在 Bin 中1.

降維

這是一種使用較少數量的特徵(即維度)表示給定資料集的方法,同時仍然捕獲原始資料的有意義的屬性。 1這相當於刪除不相關或冗餘的特徵,或只是雜訊數據,以創建模型變數數量較少。基本上將高維資料轉換為低維資料。降維有兩種主要方法 -

  • 特徵選擇:特徵選擇涉及選擇與當前問題最相關的原始特徵子集。目標是降低資料集的維度,同時保留最重要的特徵。特徵選擇的方法有多種,包括過濾器方法、包裝器方法和嵌入方法。過濾方法根據特徵與目標變數的相關性對特徵進行排序,包裝方法使用模型性能作為選擇特徵的標準,嵌入式方法將特徵選擇與模型訓練過程結合。

  • 特徵提取:特徵提取涉及透過組合或變換原始特徵來創建新特徵。目標是創建一組特徵來捕獲低維空間中原始資料的本質。特徵提取的方法有多種,包括主成分分析(PCA)、線性判別分析(LDA)和t分佈隨機鄰域嵌入(t-SNE)。 PCA 是一種流行的技術,它將原始特徵投影到低維空間,同時保留盡可能多的變異數。

自動化特徵工程工具

有幾種用於自動化特徵工程的工具,讓我們來看看其中的一些。

FeatureTools - 這是一個流行的開源 Python 框架,用於自動化特徵工程。它適用於多個相關表,並應用各種轉換來產生特徵。整個過程是使用一種稱為「深度特徵合成」(DFS)的技術來執行的,該技術遞歸地應用跨實體集的轉換來產生複雜的特徵。

Autofeat - 這是一個 Python 函式庫,提供自動化特徵工程和特徵選擇以及諸如 AutoFeatRegressorAutoFeatClassifier 等模型。這些是透過許多科學計算建構的,需要良好的計算能力。以下是該程式庫的一些功能:

  • 使用 fit() 等函數與 scikit learn 模型類似, fit_transform()、predict() 和 Score()。
  • 可以使用 One hot 編碼處理分類特徵。
  • 包含一個特徵選擇器類,用於選擇合適的特徵。
  • 特徵的物理單位可以傳遞,相關特徵將被傳遞 被計算。
  • 包含 Buckingham Pi 定理 – 用於無量綱計算 數量。僅用於表格資料。
  • 僅用於表格資料。

AutoML - 簡單來說,自動機器學習可以定義為一個搜尋概念,使用專門的搜尋演算法來尋找 ML 管道的每個組成部分的最佳解決方案。它包括:自動化特徵工程、自動化超參數最佳化、)神經架構搜尋(NAS

特徵工程中的常見問題和最佳實踐

常見問題

  • 忽略不相關的特徵:這可能會導致模型的預測性能較差,因為不相關的特徵對輸出沒有貢獻,甚至可能會給數據增加噪音。此錯誤是由於缺乏對不同資料集與目標變數之間關係的理解和分析而造成的。

想像一家企業想要用機器學習預測每月銷售額。他們輸入的資料包括員工人數、辦公室面積等,這些資料與銷售額無關。
修復:透過進行徹底的特徵分析來了解哪些資料變數是必要的並刪除那些不是必要的,以避免這種情況。

  • 由於太多特徵而過度擬合:模型可能在訓練資料上具有完美的表現(因為它有效地「記憶」了資料),但在新的、未見過的資料上可能表現不佳。這稱為過度擬合。這種錯誤通常是由於「越多越好」的錯誤觀念造成的。在模型中添加太多特徵可能會導致巨大的複雜性,使模型更難以解釋。

考慮一個預測未來用戶成長的應用程序,該應用程式將 100 個特​​徵輸入到模型中,但其中大多數特徵共享重疊資訊。
修復:透過使用降維和特徵選擇等策略來解決這個問題,以最大限度地減少輸入數量,從而降低模型複雜性。

  • 未規範化特徵:演算法可能會為規模較大的特徵賦予更多權重,這可能導致預測不準確。這種錯誤常常是由於缺乏對機器學習演算法如何運作的理解而發生的。如果所有特徵都處於相似的規模,大多數演算法都會表現得更好。

想像一下,醫療保健提供者使用患者年齡和收入水平來預測某種疾病的風險,但沒有將這些具有不同尺度的特徵標準化。
修正:應用特徵縮放技術將所有變數調整為相似的比例以避免此問題。

  • 忽略處理缺失值 當遇到缺失值時,模型的行為可能會無法預測,有時會導致錯誤的預測。這種陷阱通常是由於疏忽或假設缺失值的存在不會對模型產生不利影響而發生的。

例如,線上零售商使用購買歷史資料來預測客戶流失,但沒有解決購買資料缺失的情況。
修復:實施處理缺失值的策略,例如資料插補,以統計估計值取代缺失值。

最佳實務

  • 確保處理輸入特徵中缺少的資料:在項目旨在預測房價的現實情況下,並非所有資料條目都可能包含有關房屋年齡的資訊。您可以使用「平均插補」等策略來插補缺失的數據,而不是丟棄這些條目,其中使用數據集中房屋年齡的平均值。透過正確處理丟失的數據而不是僅僅丟棄它,模型將有更多的數據可供學習,這可能會帶來更好的模型性能。

  • 對分類資料使用one-hot 編碼:例如,如果我們在關於汽車的資料集中有一個特徵“顏色”,可能的值為“紅色”、“藍色”和“綠色”,我們會將其轉換為三個獨立的二元特徵:「is_red」、「is_blue」和「is_green」。該策略使模型能夠正確解釋分類數據,從而提高模型的發現和預測的品質。

  • 考慮特徵縮放:作為一個真實的例子,用於預測疾病的資料集可能包含年齡(1100)和血糖值測量值(70180)。縮放將這兩個特徵置於相同的尺度上,允許每個特徵對距離計算做出同等的貢獻,就像 K 最近鄰 (KNN) 演算法一樣。特徵縮放可以提高許多機器學習演算法的效能,使它們更有效率並減少計算時間。

  • 在相關的地方創建交互功能:一個例子可以包括預測房價交互,這可能是有益的。創建一個將浴室數量乘以總平方英尺的新特徵可能會為模型提供有價值的新資訊。交互功能可以捕捉線性模型無法看到的資料模式,從而有可能提高模型效能。

  • 刪除不相關的特徵:在我們需要預測智慧型手機價格的問題中,智慧型手機的顏色可能對預測影響不大,可以刪除。刪除不相關的特徵可以簡化模型,使其更快、更易於解釋,並降低過度擬合的風險。

特徵工程不僅僅是機器學習中的預處理步驟;這是決定模型成功或失敗的基本面向。精心設計的特徵可以帶來更準確的預測和更好的泛化。數據表示:特徵是機器學習演算法運作的基礎。透過有效地表示數據,特徵工程使演算法能夠識別有意義的模式。因此,有抱負、甚至經驗豐富的資料科學家、機器學習愛好者和工程師必須認識到特徵工程在從資料中提取有意義的見解方面所發揮的關鍵作用。透過理解特徵工程的藝術並很好地應用它,人們可以釋放機器學習演算法的真正潛力,並在各個領域推動有影響力的解決方案。

如果您有任何疑問,或者有任何可以改進我的文章的方法,請在評論部分留下。謝謝!

以上是特徵工程:釋放資料的力量以實現卓越的機器學習模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn