如果您最近一直在研究某些數學,統計或計算模型,那麼您一定聽說過機器學習是一種「GIGO」類型的東西。這意味着,如果你把垃圾送到垃圾場,那麼你也應該期望它的垃圾概率很高。如果你真的想避免你的機器學習模型產生垃圾結果的尷尬局面,你需要理解標題所暗示的「有效數據預處理和特徵工程」的重要性。為簡單起見,我們將標題劃分為單獨的模塊。

數據預處理

數據預處理是一個巨大的主題,因為預處理技術因數據而異。不同類型的數據(圖像,文本,聲音,視頻,csv文件等)具有不同的預處理方法,但有一些方法幾乎適用於任何類型的數據。這些方法中最重要的一個恰好是:

  1. 轉化為載體
  2. 標準化
  3. 處理缺失的值

轉化為載體

所有ML模型都需要輸入數據以向量的形式。如果你有原始文本數據,你需要一些機制將這些字符串轉換成一些有意義的數字表示,如tf-idfword2vec等。如果你有圖像,它們被處理為像素矩陣,如果你有聲音,他們需要要從模擬波轉換為數字信號,如果您在csv文件中獲得了分類數據,則可能需要應用標籤編碼或單熱編碼。您基本上將所有數據轉換為float(或者在某些情況下,整數),以便您的ML模型可以輕鬆處理所有這些。每個記錄(每個句子,如果它是文本;聲波,如果它是聲音)表示您的輸入的單行,並且對於多個記錄,您獲得輸入矩陣(通常用X表示)。

趨勢AI文章:

1.從感知器到深度神經網絡

2.用於求解微分方程的神經網絡

3.將您的Raspberry Pi變成自製的Google Home

4. AI和NLP研討會

標準化

強烈建議您的數據正確縮放,這意味着您的數據不應該對每個列(功能)有很大的偏差。如果您的列的值介於0-1之間,並且您有另一個值介於100-1000之間的功能,那麼這些值範圍的差異可能會導致優化程序進行大的梯度更新,並且您的網絡/模型可能不會收斂。因此,一種好的方法是將您的值標準化,介於100-1000之間,將它們縮放到0-1之間。分解步驟,應該應用以下步驟以獲得標準化的最大好處:

  1. 較小的值:嘗試將所有值設置為0到1或-1到1。
  2. 同質性:所有列的值應大致相同。
  3. 均值:標準化,使每列的平均值為0。
  4. 標準偏差:標準化,使每列的標準偏差為1。

處理缺失的值

您的數據可能並不總是理想的數據。在數據集中缺少值是非常常見的,並且處理缺失值的有效方法導致更好的模型訓練。一種方法是將所有缺失值替換為0,前提是0尚未表示數據中的有意義信息。如果數據中有很多缺失值,並且用0替換它們,模型最終將會知道所有0都沒有在模型的決策過程中發揮任何建設性作用,並且幾乎會忽略它們通過賦予它們較低的權重。如果您的數據相當一致,特別是在時間序列或基於序列的數據集的情況下,數據的插值也會成為一個有意義的選項。否則,大多數缺失值都被替換為平均值,

特色工程

如果你認為這些數據是21世紀的原油,那麼這一步就是精鍊的地方,並且會提升其價值。特徵工程基本上意味着您從原始數據中推導出一些隱藏的見解,並從中提取一些有意義的特徵。如果要有效地完成,這一步需要一些大量的領域知識。例如,如果您要使用外匯數據設計新功能,您需要對外匯,全球經濟和貨幣的實際運作方式有一個很好的理解。

考慮一個非常簡單的例子,你想要開發一個需要一些輸入的系統,並輸出一天的時間。現在,您可以通過多種方式執行此操作。這樣做的一種粗略方法是,您將模型的幾個圖像傳遞給模型,並標記當天的時間。你的模型可以瀏覽成千上萬的圖像,學習時鐘指針和給定時間之間的視覺關係,並最終學會告訴你一天的時間估計。聽起來夠厲害?對?

另一種方法是,你了解時間實際如何工作,並將圖像數據轉換為數字,只存儲時鐘’手’的x和y坐標。現在將其與之前的原始圖像方法進行比較。假設您傳遞256×256個時鐘圖像,這意味着需要處理65,536個值,但是當您設計坐標功能時,您只需要處理4個值!不僅這個特徵工程將使模型更準確,而且速度也快數千倍。

現在,讓我們先行一步,並說你已經獲得了關於時鐘實際如何工作的非常詳細的見解,並且你能夠測量兩個時鐘指針的角度。在這種情況下,你只需要兩個角度(每隻手一個),就是這樣!當你獲得角度,並且對測量時間所涉及的所有數學有深入的了解時,你可能只是編寫一些方程的代碼,因此不需要機器學習模型(但這只是一個非常簡單的例如;對於更複雜的場景,ML將是一種更好的方法,而不是編碼所有可能的規則)。

時鐘讀取時間的特徵工程

最後,總結一切,

  1. 好的功能可以讓您使用更少的計算資源更優雅地解決問題。
  2. 良好的功能將讓您訓練一個有效數據很少的模型。

本文轉自medium,原文地址