目錄
一、數據清洗:讓數據純凈如新
1、缺失值處理:
2、異常值處理
3、重復值處理
二、數據變換:重塑數據的 “形狀”
1、歸一化
2、標準化
三、總結與展望
機器學習小白必看:數據預處理實戰筆記
? ? ? 最近投身于機器學習的學習海洋,今天在學習過程中接觸到了數據預處理這個極為關鍵的板塊。一開始,我對它的重要性認識不足,總覺得直接拿數據去訓練模型就好。但深入學習后才驚覺,數據預處理簡直是機器學習模型能否良好運行的基石。原始數據往往存在各種問題,就像一塊未經雕琢的璞玉,充滿瑕疵,而數據預處理就是那精細的雕琢過程,讓數據變得干凈、整齊且易于模型 “理解”。接下來就和大家分享下我今天的學習成果。
一、數據清洗:讓數據純凈如新
? ? ? 在實際的數據集中,缺失值、異常值和重復值就像隱藏在暗處的 “小麻煩”,隨時可能影響模型的性能。
1、缺失值處理:
比如在一個記錄乘客信息的數據集中,部分乘客的年齡數據缺失。我學到了幾種處理方式:
? ? ? (1)刪除法:如果缺失值所在的行或列包含的有效信息較少,刪除這些數據對整體影響不大時,就可以采用刪除法。但要是數據本來就不多,刪除太多含缺失值的樣本,可能會導致關鍵信息丟失,所以得謹慎使用。
? ? ? (2)填充法:這是我覺得很巧妙的方法。對于像年齡這樣的數值型數據,如果有缺失,計算其他非缺失年齡的均值或中位數,然后用這個均值或中位數去填補缺失值。我用 Python 實現了均值填充,代碼如下:
import pandas as pd
data = pd.read_csv('your_data.csv')
age_mean = data['Age'].mean()
data['Age'].fillna(age_mean, inplace=True)
? ? ? 運行這段代碼,就能把數據集中缺失的年齡值用計算出的均值填充上,讓數據集在年齡這一特征上更加完整。
2、異常值處理
? ? ? 異常值就像是數據集中的 “搗蛋鬼”,會干擾模型的正常學習。在分析商品價格數據時,發現有個別價格明顯偏離正常范圍。檢測異常值可以用一些統計方法,比如計算 Z - score,它能衡量數據點偏離均值的程度。代碼實現如下:
from scipy import stats
import pandas as pd
data = pd.read_csv('product_price_data.csv')
z = np.abs(stats.zscore(data['Price']))
threshold = 3
outliers = data[(z > threshold).any(axis = 1)]
? ? ? 這里通過計算價格列的 Z - score,設置閾值為 3,把那些 Z - score 大于 3 的數據點識別為異常值。對于這些異常值,可以選擇刪除,或者用合理的值(比如中位數)進行替換。
3、重復值處理
? ? ? 重復值的出現會增加計算量,還可能干擾模型對數據真實特征的學習。在處理用戶訂單數據時,發現有重復的訂單記錄。用 pandas 庫可以輕松刪除這些重復值:
import pandas as pd
data = pd.read_csv('order_data.csv')
data = data.drop_duplicates()
? ? ? 這樣就能確保數據集中的每一條訂單記錄都是唯一的,讓數據更加簡潔有效。
二、數據變換:重塑數據的 “形狀”
? ? ? 為了讓數據更好地適配機器學習模型,需要對數據進行各種變換操作。
1、歸一化
? ? ? 歸一化能把數據的取值范圍縮放到一個特定區間,像 [0, 1] 或 [-1, 1]。在處理包含不同特征的數據時,比如既有年齡(范圍可能是 0 - 100),又有收入(可能是幾千到幾十萬),如果不進行歸一化,收入這種較大范圍的特征可能會在模型訓練中占據主導地位,掩蓋了年齡等其他特征的影響。用 Min - Max Scaler 實現歸一化的代碼如下:
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
data = pd.read_csv('your_data.csv')
scaler = MinMaxScaler()
data[['Age', 'Income']] = scaler.fit_transform(data[['Age', 'Income']])
? ? ? 這段代碼把數據集中的年齡和收入特征進行了歸一化處理,讓它們在模型訓練中能 “公平競爭”,發揮各自應有的作用。
2、標準化
? ? ? 標準化則是讓數據符合均值為 0,標準差為 1 的正態分布。對于很多機器學習算法來說,這種分布的數據能讓模型更快收斂,提高訓練效率。用 StandardScaler 實現標準化:
from sklearn.preprocessing import StandardScaler
import pandas as pd
data = pd.read_csv('your_data.csv')
scaler = StandardScaler()
data[['Feature1', 'Feature2']] = scaler.fit_transform(data[['Feature1', 'Feature2']])
? ? ? 通過標準化,數據的分布更加規整,模型在學習數據特征時會更加高效。
三、總結與展望
? ? ? 今天學習的這些數據預處理知識,看似簡單,實則是機器學習中不可或缺的重要環節。經過數據清洗和變換,數據變得更加 “優質”,為后續模型的訓練打下了堅實基礎。通過自己的實踐和代碼復現,我對這些方法有了更深刻的理解。在未來的學習中,我還會繼續深入探索數據預處理的其他方法,比如數據集成、特征選擇等,不斷提升自己對數據的處理能力,期待能在機器學習這條道路上越走越遠,用數據挖掘出更多有價值的信息。希望我的這些學習分享能給同樣在機器學習領域摸索的小伙伴們一些啟發,大家一起加油!