數據饋送機器學習模型,越多越好,對嗎?好吧,有時數字數據不太適合提取,因此,本文將介紹多種方法,可以將原始數字轉換為更可口的東西。
數值數據幾乎是福氣。為什麼差不多?好吧,因為它已經採用了機器學習模型可以攝取的格式。但是,如果我們將其翻譯成與人類相關的術語,僅僅因為博士級別的教科書是用英語寫的(我會說,讀和寫英語),並不意味著我有足夠的理解能力來獲得有用的見解。使教科書對我有用的是,如果它以一種考慮我的心理模型假設的方式來概括最重要的信息,例如「數學是神話」(順便說一句,自從我以後就不再是我的觀點了)真的開始享受它)。同樣,良好的功能應代表數據的顯著方面,並採用由機器學習模型做出的假設的形式。
特徵工程是從原始數據中提取特徵並將其轉換為可由機器學習模型攝取的格式的過程。通常需要進行轉換以減輕建模的難度並提高模型的結果。因此,設計數值數據類型的技術是數據科學家(無論是機器學習工程師)還是其炮兵的基本工具。
「數據就像 機器學習的原油一樣 ,這意味著必須將其精煉為 特徵(預測變量)才能對訓練模型有用。」 — 威爾·科森
在我們努力精通掌握的過程中,重要的是要指出,僅僅知道一種機制為什麼起作用以及它可以做什麼還遠遠不夠。Mastery知道如何做某事,對基本原理有直覺,並具有神經連接,使得面對挑戰時,繪製正確的工具成為無縫的過程。這不是從閱讀本文中得出的,而是從本文的有意實踐中提供的技術直覺為您打開了大門,使您可以理解這些技術的使用方式和時間。
數據中的功能將直接影響您使用的預測模型和可獲得的結果。」 — 傑森·布朗利( Jason Brownlee)
有時可能會在累積的要素上收集數據,從而具有無限的上限。這種連續數據的示例可能是跟蹤系統,該系統監視我的所有博客帖子每天收到的訪問次數。這種類型的數據很容易吸引異常值,因為可能會有一些不可預測的事件影響到我的文章所累積的總流量。當可以快速,大量地收集數據時,很可能其中包含一些需要工程設計的極端值。
一些處理此實例的方法是:
量化
此方法通過將值分組到bin中來包含數據的規模。因此,量化將連續值映射為離散值,並且從概念上講,這可以認為是有序的bin序列。要實現這一點,我們必須考慮我們創建的垃圾箱的寬度,其解決方案分為兩類:固定寬度垃圾箱或自適應垃圾箱。
注意:這對於線性模型特別有用。在基於樹的模型中,這是沒有用的,因為基於樹的模型會自行進行拆分。
在固定寬度方案中,該值是自動或自定義設計的,可將數據分割為離散的bin-它們也可以線性縮放或指數縮放。一個流行的示例是按十年間隔將人們的年齡劃分為多個分區,以使bin 1包含0–9歲,bin 2具有10–19歲,依此類推。
請注意,如果值跨較大的數值範圍,則更好的方法可能是將值分組為常數的冪,例如10:0–9、10–99、100–999、1000的冪–9999。請注意,bin寬度呈指數增長,因此,在1000–9999的情況下,bin寬度為O(10000),而0–9為O(10)。取計數的日誌以從計數映射到數據的bin。
當計數中的間隙較大時,自適應垃圾箱更適合。當計數值之間有較大的邊距時,某些固定寬度的紙槽將為空。
要進行自適應裝倉,我們可以利用數據的分位數-將數據劃分為相等部分(例如中位數)的值。
動力轉換
我們已經看到了這樣一個例子:對數變換是方差穩定變換族(稱為冪變換)的一部分。Wikipedia將冪變換描述為 「用於穩定方差,使數據更像正態分布,提高關聯度量(例如變量之間的Pearson相關性以及其他數據穩定程序)的有效性的技術」。
為什麼我們要轉換數據以適合正態分布?好問題!您可能要使用參數模型(一種對數據進行假設的模型)而不是非參數模型。當數據呈正態分布時,參數模型將很強大。但是,在某些情況下,我們需要的數據可能需要幫助才能顯示出正態分布的漂亮鐘形曲線。例如,數據可能會偏斜,因此我們應用冪變換來幫助使我們的特徵看起來更呈高斯分布。
下面的代碼利用了諸如pandas,scipy和numpy之類的數據科學框架來演示冪轉換,並使用Plotly.py框架對交互式繪圖進行可視化。所使用的數據集是 Kaggle 的 房屋價格:高級回歸技術。
注意:Box-cox轉換僅在數據為非負數時起作用
「其中哪一個最好?您無法事先知道。您必須嘗試它們,並評估結果以實現算法和性能指標。」 — 傑森·布朗利
功能縮放
顧名思義,要素縮放(也稱為要素歸一化)與更改要素的縮放比例有關。當數據集的特徵在比例上差異很大時,對輸入特徵的比例敏感的模型(即線性回歸,邏輯回歸,神經網絡)將受到影響。確保功能在相似的範圍內勢在必行。而基於樹的模型(即決策樹,隨機森林,梯度增強)之類的模型並不關心規模。
縮放特徵的常用方法包括最小-最大縮放,標準化和L標準化。以下是python的簡要介紹和實現。
最小-最大縮放 -將特徵縮放到固定範圍(通常在0–1之間),這意味著我們將減少標準偏差,因此可以抑制離群值對特徵的影響。其中x是實例的個體值(特徵1,特徵2),max(x),min(x)是特徵的最大值和最小值—請參見下圖。有關此的更多信息,請參見 sklearn文檔。
標準化-將對特徵值進行重新縮放,以使其適合均值為0且標準偏差為1的正態分布的屬性。為此,我們從所有實例中減去特徵的均值-在所有實例中功能實例值,然後除以方差—參見下圖。 有關標準化,請參閱sklearn文檔。
L2歸一化 -此技術將原始特徵值除以L2範數(也是歐幾裡德距離)下圖中的第二個等式。L範數取所有實例中特徵集中值的平方和。請參考sklearn 文檔 中的L2範數(請注意,也可以通過將norm參數設置為「 L1」來進行L1歸一化)。
可視化特徵縮放的效果將更好地顯示正在發生的事情。為此,我使用了可以從sklearn數據集導入的wine數據集。
功能互動
我們可以使用要素之間成對交互的乘積來創建邏輯AND函數。在基於樹的模型中,這些交互是隱式發生的,但是在假定要素相互獨立的模型中,我們可以顯式聲明要素之間的交互,以改善模型的輸出。
考慮一個簡單的線性模型,該模型使用輸入要素的線性組合來預測輸出y:
我們可以擴展線性模型以捕獲要素之間發生的相互作用。
注意:線性函數使用起來很昂貴,並且具有成對交互作用的線性模型的評分和訓練會從O(n)到O(n)。但是,您可以執行特徵提取來克服此問題(特徵提取不在本文討論範圍之內,但是我將在以後的文章中進行討論)。
讓我們用python編寫代碼,我將利用scitkit-learn PolynomialFeatures類,您可以在文檔中了解更多信息
這篇文章的靈感來自《面向機器學習的特徵工程:面向數據科學家的原理和技術》一書 ,我絕對建議閱讀。儘管它於2016年發布,但即使對於沒有數學背景的人,它仍然非常有用,而且解釋清楚。
結論
在本文中,我們討論了用於處理數字特徵的技術,例如量化,冪轉換,特徵縮放和交互特徵(可應用於各種數據類型)。這絕不是功能工程的千篇一律,而且每天都有很多東西要學習。特徵工程是一門藝術,需要實踐,因此,有了直覺,您就可以開始練習了。