如果您最近一直在研究某些數學,統計或計算模型,那麼您一定聽說過機器學習是一種「GIGO」類型的東西。這意味著,如果你把垃圾送到垃圾場,那麼你也應該期望它的垃圾概率很高。如果你真的想避免你的機器學習模型產生垃圾結果的尷尬局面,你需要理解標題所暗示的「有效數據預處理和特徵工程」的重要性。為簡單起見,我們將標題劃分為單獨的模塊。
數據預處理
數據預處理是一個巨大的主題,因為預處理技術因數據而異。不同類型的數據(圖像,文本,聲音,視頻,csv文件等)具有不同的預處理方法,但有一些方法幾乎適用於任何類型的數據。這些方法中最重要的一個恰好是:
- 轉化為載體
- 標準化
- 處理缺失的值
轉化為載體
所有ML模型都需要輸入數據以向量的形式。如果你有原始文本數據,你需要一些機制將這些字元串轉換成一些有意義的數字表示,如tf-idf,word2vec等。如果你有圖像,它們被處理為像素矩陣,如果你有聲音,他們需要要從模擬波轉換為數字信號,如果您在csv文件中獲得了分類數據,則可能需要應用標籤編碼或單熱編碼。您基本上將所有數據轉換為float(或者在某些情況下,整數),以便您的ML模型可以輕鬆處理所有這些。每個記錄(每個句子,如果它是文本;聲波,如果它是聲音)表示您的輸入的單行,並且對於多個記錄,您獲得輸入矩陣(通常用X表示)。
趨勢AI文章:
標準化
強烈建議您的數據正確縮放,這意味著您的數據不應該對每個列(功能)有很大的偏差。如果您的列的值介於0-1之間,並且您有另一個值介於100-1000之間的功能,那麼這些值範圍的差異可能會導致優化程序進行大的梯度更新,並且您的網路/模型可能不會收斂。因此,一種好的方法是將您的值標準化,介於100-1000之間,將它們縮放到0-1之間。分解步驟,應該應用以下步驟以獲得標準化的最大好處:
- 較小的值:嘗試將所有值設置為0到1或-1到1。
- 同質性:所有列的值應大致相同。
- 均值:標準化,使每列的平均值為0。
- 標準偏差:標準化,使每列的標準偏差為1。
處理缺失的值
您的數據可能並不總是理想的數據。在數據集中缺少值是非常常見的,並且處理缺失值的有效方法導致更好的模型訓練。一種方法是將所有缺失值替換為0,前提是0尚未表示數據中的有意義信息。如果數據中有很多缺失值,並且用0替換它們,模型最終將會知道所有0都沒有在模型的決策過程中發揮任何建設性作用,並且幾乎會忽略它們通過賦予它們較低的權重。如果您的數據相當一致,特別是在時間序列或基於序列的數據集的情況下,數據的插值也會成為一個有意義的選項。否則,大多數缺失值都被替換為平均值,
特色工程
如果你認為這些數據是21世紀的原油,那麼這一步就是精鍊的地方,並且會提升其價值。特徵工程基本上意味著您從原始數據中推導出一些隱藏的見解,並從中提取一些有意義的特徵。如果要有效地完成,這一步需要一些大量的領域知識。例如,如果您要使用外匯數據設計新功能,您需要對外匯,全球經濟和貨幣的實際運作方式有一個很好的理解。
考慮一個非常簡單的例子,你想要開發一個需要一些輸入的系統,並輸出一天的時間。現在,您可以通過多種方式執行此操作。這樣做的一種粗略方法是,您將模型的幾個圖像傳遞給模型,並標記當天的時間。你的模型可以瀏覽成千上萬的圖像,學習時鐘指針和給定時間之間的視覺關係,並最終學會告訴你一天的時間估計。聽起來夠厲害?對?
另一種方法是,你了解時間實際如何工作,並將圖像數據轉換為數字,只存儲時鐘’手’的x和y坐標。現在將其與之前的原始圖像方法進行比較。假設您傳遞256×256個時鐘圖像,這意味著需要處理65,536個值,但是當您設計坐標功能時,您只需要處理4個值!不僅這個特徵工程將使模型更準確,而且速度也快數千倍。
現在,讓我們先行一步,並說你已經獲得了關於時鐘實際如何工作的非常詳細的見解,並且你能夠測量兩個時鐘指針的角度。在這種情況下,你只需要兩個角度(每隻手一個),就是這樣!當你獲得角度,並且對測量時間所涉及的所有數學有深入的了解時,你可能只是編寫一些方程的代碼,因此不需要機器學習模型(但這只是一個非常簡單的例如;對於更複雜的場景,ML將是一種更好的方法,而不是編碼所有可能的規則)。
最後,總結一切,
- 好的功能可以讓您使用更少的計算資源更優雅地解決問題。
- 良好的功能將讓您訓練一個有效數據很少的模型。
本文轉自medium,原文地址
Comments