数据清洗该怎么做?
要精確建模,數據是重中之重,但是模型的輸入是受限的,如果數據有缺陷沒做清洗,那模型就不可能精準,當你得到不準確結果的時候,第一要懷疑的不是用錯模型,而是用錯了數據。那么本文就從7個關鍵性的清理步驟入手,給大家闡明如何做數據清洗。
可能破壞數據集預測有效性的最明顯就是不屬于集合的異常值。例如,iphone手機9.9元,那可能是并夕夕帶來的噪聲。為了解決這個問題,可以基于數據的四分位數范圍應用標準公式來識別異常值。為此,取代表第75百分位的數據,減去代表第25百分位的數據。該結果值被視為四分位間距(IQR)。為了識別異常值,取第25個和第75個百分位的數字,分別減去和添加1.5 x IQR。任何超出此范圍的值都被視為異常值。
無論出于何種目的,包含單個值的列在機器學習領域都是無用的。這些列稱為零方差預測值,對你的模型不會有任何積極的影響,并且可能會對建模嘗試產生意外的負面影響。要刪除這些列,可以通過手動檢查(如果數據集的列數有限),也可以通過編程方式刪除(如果希望在將來簡化此任務)。
通常情況下,數據集的格式可能是將日期存儲為字符串,或將某些數字字段存儲為文本值。要正確應用某些數據操作,需要確保數據存儲為正確的類型。
當處理大量訓練集時,不可避免地會有不完整的數據。出現這種情況時,通常有三個選項:保持原樣、填充空值或刪除空值。
如果保持這些值不變,則可能會損害創建的數據模型,并降低模型的預測有效性。如果缺少的數據為試圖預測的結果提供了至關重要的見解,那么保持現狀肯定會導致不完美的預測。因此建議填充或刪除空值。
如果可以合理地確定應該在空單元格中輸入的值,那么這是最好的解決方案。例如,如果知道“score”中具有null值的列意味著不記錄任何分數,那么可以簡單地將其替換為null值和0。通過這樣做,可以保持數據集的完整性,并保障預估的準確性。這種情況使用fillna函數即可。可以將其替換為靜態值,也可以將其填充為統計平均值。
如果無法合理預測數據,那么最好的選擇是將其從數據集中刪除。通過這樣做,可以確保只測試完全輸入的數據。為此,可以使用dropna()函數自動刪除至少包含一個空值的任何列。
清理數據最有效的方法之一就是使用正則表達式。也許有一個包含文本字符串的列,如(“1年”、“5年”、“10年”)。你不能直接把它們轉換成整數,但是你知道如果你能只提取數字,它們在關系建模中會更有用。
如果聚合了來自多個源的數據,那么還可能會遇到數據集部分重疊的風險。假設將過去3個月的銷售數據合并,但其中兩組記錄了一周的銷售數據。如果我們按原樣運行數據,那一周的銷售額將是雙重加權的,這是會導致模型預估的分布和真實分布不同。要解決此問題,請使用drop_duplicates函數。這將刪除所有整行相同的行。
然而,了解數據集中的數據是很重要的。如果存在重復行的正當原因,則刪除重復行不會改善數據集,而是會通過刪除經常發生的度量來降低數據集的質量。為了避免這個問題,使用某種類型的唯一列(如時間戳或用戶ID)將確保重復的度量仍然在唯一列中。
如果不想學習如何使用正則表達式,或者只想刪除幾個特定的單詞,那么還有其他方法可以清理數據,使其更適合于模型訓練。使用replace函數可以找到目標數據,并將其替換為預期的數據。如果有一列的值為“Paid”、“notpaid”,直接替換為二進制1或0表示即可。
總結
- 上一篇: self-attention竟然没用?
- 下一篇: 10大最受欢迎的时间序列Github项目