GCP — 從raw data到特徵

本文講解將原始資料(raw data)轉換為特徵、比較好的特徵和壞的特徵並呈現特徵。

預測模型是使用監督式學習演算法構建的,其中分類或回歸模型根據歷史資料進行訓練以預測未來結果。

特徵工程是預測建模過程中至關重要的一步。它涉及特定特徵的轉換,目的是減少特定目標的建模誤差。資料的底層呈現對於學習演算法的有效運作至關重要。機器學習中使用的訓練資料通常可以透過從收集的原始資料中提取特徵來強化。大多數情況下,適當的資料轉換是模型建構之前必不可少的先決步驟。

特徵工程的流程(How)

這個流程嘗試從資料中現有的原始特徵中創建額外的相關特徵,並提高學習演算法的預測能力。或者說特徵工程是將原始資料轉換為能夠更好地向預測模型呈現底層問題的特徵的流程,從而提高模型對未知資料的準確性

特徵工程可以定義為嘗試從資料中現有的原始特徵中建立額外的相關特徵並提高學習演算法的預測能力的過程。它也可以定義為結合領域知識、直覺和資料科學技能集來創建特徵的過程,使模型訓練更快並提供更準確的預測。

目的(Why)

神經網路等機器學習模型接受特徵向量並提供預測。這些模型以監督式學習的方式學習,其中提供一組具有預期輸出的特徵向量。從實際角度來看,許多機器學習模型必須將特徵表示為數字型向量,因為特徵值必須乘以模型權重。

在某些情況下,資料是原始的,必須轉換成特徵向量。特徵,即資料框(data frame)的column,是協助機器學習模型學習的關鍵。更好的特徵可以帶來更快的訓練和更準確的預測。

如上圖所示,feature column不是作為原始資料而是作為特徵列輸入到模型中的。根據提供的特徵集設計新特徵是常見的做法。這些工程特徵將強化或取代現有特徵向量的部分。特徵向量可以是數字的、分類的、bucketized、crossed的和hashed。

工程化特徵主要是一項耗時的手動作業。過程包括Brainstorm,深入研究問題。那麼深入研究這個問題又意味著什麼呢? 例如目標是解決一個問題,我們需要預測結果並從預測模型中獲得最佳結果,那麼需要確定來源資料是否有助於實現這一目標。

換句話說,如何才能最大限度地利用資料進行預測建模?這就是特徵工程的過程和實踐所解決的問題。因此,首先要查看大量數據。如果我們在一家企業工作,資料來源就是組織用於管理業務的資料。但這些資料有不同的業務面向,不同的資料格式,不同的來源。根據我們的問題和領域,我們需要利用特定於領域的工程特徵。

特徵提取是一個降維過程,透過該過程將初始原始資料集減少為更易於管理的群組以進行處理。例如,PCA(principal component analysis)是一種減少資料集中變數或特徵數量的方法。

顧名思義,這只是在分析主要成分、獨立變數或特徵,以確定它們如何預測因變數或目標,也就是想要預測的最終輸出。從技術角度來說,想減少特徵空間的維度。透過減少特徵空間的維度,需要考慮的變數之間的關係就更少,而且過度擬合模型的可能性也會更小。

Raw data到特徵向量(feature vectors)

我們以要預測房價為例,有非常多因素會影響房價。我們需要一個ML模型來把這些因素考慮進去之後進行房價預測,而這些因素就是特徵。

而這些因素必須被數字化(特徵向量)才能進行模型訓練,因為機器只會看數字。

如果我們的原始資料已經很乾淨,並且只包含我們需要的key fields,並且採用可以傳遞給 ML 模型進行訓練的格式,那不是很好嗎?其實這種情況幾乎從來不會發生。

良好的特徵工程平均可佔用我們的ML工作時間的 50% 到 75%。正確處理這件事至關重要。上面房價範例顯示了我們最終想要做的事情。向量左側是房屋的原始數據,這些數據將被映射到右側中的一個或多個fields,然後我們可以在 ML 模型訓練中使用這些數據。這可能看起來像是一個簡單的映射練習,但問題在於如何知道什麼是好的特徵呢?

好特徵?壞特徵?

什麼才是好特徵?基本上,我們需要獲取原始資料,並將其呈現為適合ML的形式。因此它與

  1. 與目標(objective)相關。這部是把隨機數據扔到ML裡。 這只會使 ML 問題變得更加困難,而我們的想法是讓 ML 問題變得更容易。讓您更輕鬆地找到解決方案。如果某事物不相關,就把去掉它
  2. 預測時已知它,但這可能非常麻煩。
  3. 需要確保它是數字
  4. 需要有足夠的資料例子
  5. 需要足夠有人類的見解

與目標(objective)相關

所以好的特徵需要與我們預測的內容有關。需要有一個合理的假設,說明為什麼某個特定特徵對於這個特定問題很重要。不要只是將亂七八糟的資料扔進去並希望其中存在某種關係。

我們不想做所謂的資料探勘(data dredging),即挖掘大型資料集並查找存在的任何虛假相關性(spurious correlations),因為資料集越大,就越有可能存在大量這些虛假相關性(或是因果?直到這一刻1/13/2025,AI仍然只能推論相關性而非因果性)。在房價例子中,僅僅因為我們有一個數據點,關於房屋照片中的客廳裡是否有椅子或走廊上有多少個混凝土塊,並不意味著它們應該包含在你的房屋模型中。

我們應該對這些事情為什麼會影響結果(outcome)有合理的認識。結果就是標籤(label)所代表的內容。我們必須對它們之間為何有關聯有一個合理的認識

好的特徵必須與我們預測的內容有關。需要對為什麼某個特定特徵對於這個特定問題很重要有一個合理的假設。在上圖這個例子中,在左邊的所有原始特徵中,我們只為我們的ML問題選擇了六個特徵。

預測時已知它

您需要知道預測時的值。請記住,建立機器學習模型的所有原因是為了能夠用它來進行預測。如果無法用它來預測,那麼建立機器學習模型就沒有意義了。

人們常犯的一個錯誤是查看他們的Data warehouse並將所有資料放入。取出所有相關欄位,並將其放入模型中。如果我們採用所有這些欄位並將其用於ML模型,那麼當我們要用它進行預測時會發生什麼?

當用它預測的時候,也許會發現Data warehouse裡有銷售資料。這是對模型的輸入。 “前一天賣了多少東西?”將成為模型的輸入。但事實證明,每日銷售數據其實是在一個月後才出來。訊息從商店發出需要一些時間。收集這些數據存在延遲。

Data warehouse擁有這些資訊,因為有人很努力取得了所有資料或join table,並將它們放入其中,但在即時預測時,我們卻沒有這些資訊。Data warehouse中的某些資訊是可以立即知道的,而有些資訊則不能即時知道。如果使用預測時未知的資料作為模型的輸入,那麼我們就沒有模型所需的該輸入的數值。

我們需要確保在預測時擁有每個輸入和每個特徵。要確保這些輸入變數可用。及時收集它。在許多情況下,還必須擔心在進行預測時收集資料是否合法或合乎道德。

確保它是數字

有足夠的資料例子

我們需要在資料集中擁有足夠的特徵值範例,所以它就是特徵的值。我們需要有足夠多這樣的例子。在經驗法則上,就是在模型中使用任何值之前,需要至少有五個該值的範例。那麼這是什麼意思呢?

如果我們的購買類別等於汽車,那麼您必須有足夠的汽車購買交易,無論是否有詐欺。因此,我們應該有有足夠的欺詐性汽車買賣交易,以及足夠的非欺詐性汽車交易。如果資料集中只有三筆汽車交易,而這三筆交易均非欺詐性,那麼模型本質上就只會知道到沒有人會在汽車交易中實施詐欺。這將會產生一個問題。我們要避免使用那些沒有足夠範例的值。對於特定column的每個值,需要至少有五個範例。請確保有足夠的範例供模型進行訓練。

特徵呈現

如上圖範例,左手邊是我們的raw data(一家冰淇淋店範例)。我們想知道冰淇淋是否由某位員工提供,或者顧客是否等待了 1.4 秒或 1.4 分鐘。我們想預測客戶評分。顧客的滿意度取決於為他們提供服務的人、他們等待的時間、他們購買了什麼、商店的位置等等。這是訓練資料。這些訓練資料將它們全部變成數字,因為神經網路至認識數字。將資料全部轉換為數字,這些就是特徵。

因此在 TensorFlow 中,左手邊是 JSON 輸入,它來自我們的 Web 應用程式,最終進入Data warehouse — 我們將它取出並建立數值。在 TensorFlow 中,每一個column都是feature column。那麼,如何取得這樣的資料並使其成為feature column呢?

有諸如價格或等待時間之類的值,這些已經是數字了,這很容易編碼。可以直接使用它們,因為它們是數字。它們具有有意義的量級 — 因此在 TensorFlow 中為 2.5,在 TFLearn 中為 1.4。這就是所謂的實值欄位( real-valued column)。因此,只需說層(Layers)是real-valued column price — — 層是real-valued column wait time。因此,使用的這些數字只是real-valued columns。

但有些值雖然是數字,但是無法使用。我們必須轉化成有意義的值,稱為 one-hot encoding。關於更多的 one-hot encoding介紹,請參閱本部落格 — 機器學習的設計模式 — 資料的呈現AWS機器學習 — 特徵工程

--

--

運用"雲端服務"加速企業的數位轉型願景
運用"雲端服務"加速企業的數位轉型願景

Written by 運用"雲端服務"加速企業的數位轉型願景

我們協助您駕馭名為"雲端運算"的怪獸,馴服它為您所用。諮詢請來信jason.kao@suros.com.tw. https://facebook.com/jason.kao.for.cloud

No responses yet