一、學習背景與目的
在機器學習流程中,數據預處理是保障模型訓練效果的關鍵環節。原始數據常存在缺失值、量綱不一致、特征格式不匹配等問題,直接影響模型對數據規律的學習。本次學習圍繞 Pandas 與 Scikit-learn(sklearn)工具庫,系統掌握數據預處理的核心技術,包括缺失值處理、數據標準化、特征編碼及數據二值化,為后續機器學習建模奠定基礎。
二、核心知識點總結
(一)缺失值處理
缺失值是數據集中常見問題,需先識別再通過刪除或填充解決,核心工具包括 Pandas 內置函數與 sklearn 的SimpleImputer
。
1. 缺失值識別(Pandas)
- 關鍵函數:
isnull()
功能:判斷數據框(DataFrame)或 Series 中每個單元格是否為空,返回布爾值(True
表示空值,False
表示非空值)。 注意事項:Pandas 默認僅識別NaN
為缺失值,需通過na_values
參數手動指定其他缺失值格式(如"n/a"
、"na"
、"-"
),確保識別全面性。 示例代碼:python
運行
import pandas as pd missing_values = ["n/a", "na", "-"] df = pd.read_csv('property-data.csv', na_values=missing_values) print(df['NUM_BEDROOMS'].isnull()) # 查看該列空值情況
2. 缺失值處理方法
處理方式 | 工具 / 函數 | 核心邏輯 | 適用場景 |
---|---|---|---|
刪除法 | Pandas?dropna() | 刪除包含空值的行 / 列,參數how="any" (有一個空值即刪)、how="all" (全為空才刪) | 數據量較大、空值占比低,且刪除后不影響數據分布 |
填充法 - Pandas | fillna() | 用指定值(如常數666 )、均值(mean() )、中位數(median() )填充空值 | 數據量較小,需保留樣本完整性 |
填充法 - sklearn | SimpleImputer | 支持 4 種策略: -?strategy="mean" (均值填充,適用于正態分布數據) -?strategy="median" (中位數填充,適用于含異常值數據) -?strategy="constant" (常數填充,需指定fill_value ) -?strategy="most_frequent" (眾數填充,適用于分類數據) | 標準化處理流程,適配 sklearn 建模 pipeline |
(二)數據標準化
標準化旨在解決 “不同特征量綱不一致導致模型偏向方差大的特征” 問題,核心是將數據轉換為統一規格(無量綱化),常用兩種方法。
1. 核心概念
- 定義:將特征分布調整為特定形式(如標準正態分布),消除量綱影響,使不同特征具備可比性。
- 無量綱化類型:
- 中心化:數據平移(減去固定值,如均值);
- 縮放:數據壓縮 / 擴張(除以固定值,如標準差、最大值)。
2. 常用標準化方法
方法 | 工具 / 函數 | 計算公式 | 特點 |
---|---|---|---|
最大最小值標準化 | preprocessing.MinMaxScaler() | \(X_{scaled} = \frac{X - X_{min}}{X_{max} - X_{min}}\) | 可通過feature_range 指定目標范圍(默認[0,1] ),適用于需要固定數據范圍的場景(如神經網絡輸入) |
Z 值標準化 | preprocessing.StandardScaler() | \(X_{scaled} = \frac{X - \mu}{\sigma}\)(\(\mu\)為均值,\(\sigma\)為標準差) | 轉換后數據均值為 0、方差為 1,保留原始數據分布關系,適用于線性模型(如邏輯回歸、SVM) |
(三)特征編碼
將非數值型分類特征轉換為數值型,根據特征類型(名義 / 有序 / 有距)選擇不同編碼方式。
1. 特征類型劃分
- 名義變量:無順序關系(如性別:男 / 女、血型:A/B/AB/O);
- 有序變量:有順序但不可計算(如學歷:小學 < 初中 < 高中);
- 有距變量:有順序且可計算(如分數:100/90/60)。
2. 核心編碼方法
編碼方式 工具 / 函數 適用特征類型 原理與示例 獨熱編碼 preprocessing.OneHotEncoder()
名義變量 用 N 位二進制向量表示 N 個類別(如血型 A→[1,0,0,0],B→[0,1,0,0]),避免引入虛假順序關系 序號編碼 preprocessing.OrdinalEncoder()
有序變量 將類別按順序映射為整數(如學歷:小學→1,初中→2,高中→3),保留原有順序 目標標簽編碼 preprocessing.LabelEncoder()
目標變量(y) 將目標標簽映射為 0~n_classes-1 的整數(如 “存活”→1,“死亡”→0),僅用于目標值,不用于輸入特征(X) (四)數據二值化
- 定義:根據閾值將連續數據分為兩類(0 或 1),實現 “非黑即白” 的簡化表達。
- 工具 / 函數:
preprocessing.Binarizer()
核心參數:threshold
(閾值,大于閾值為 1,否則為 0)。
示例:將年齡二值化(閾值 30),年齡 > 30→1,年齡≤30→0:python
運行
from sklearn.preprocessing import Binarizer X = data.iloc[:,0].values.reshape(-1,1) # 年齡列 transformer = Binarizer(threshold=30).fit_transform(X)
三、關鍵工具函數速查表
工具庫 函數 核心功能 Pandas isnull()
識別缺失值(布爾判斷) Pandas dropna()
刪除含空值的行 / 列 Pandas fillna()
填充缺失值(常數 / 均值 / 中位數) sklearn.preprocessing MinMaxScaler()
最大最小值標準化 sklearn.preprocessing StandardScaler()
Z 值標準化(均值 0、方差 1) sklearn.preprocessing OneHotEncoder()
名義變量獨熱編碼 sklearn.preprocessing OrdinalEncoder()
有序變量序號編碼 sklearn.preprocessing LabelEncoder()
目標標簽編碼 sklearn.preprocessing Binarizer()
數據二值化 sklearn.impute SimpleImputer()
標準化填充缺失值(均值 / 中位數 / 眾數 / 常數) 四、學習總結與應用建議
- 流程優先級:數據預處理需遵循 “先識別缺失值→處理缺失值→標準化→特征編碼” 的順序,確保每一步輸出符合下一步輸入要求。
- 方法選擇原則:
- 缺失值:數據量大用刪除法,數據量小用填充法(正態分布用均值,異常值多用中位數,分類數據用眾數);
- 標準化:線性模型用 Z 值標準化,神經網絡用 MinMaxScaler;
- 編碼:名義變量用獨熱編碼,有序變量用序號編碼,目標值用 LabelEncoder。
- 工具適配:Pandas 適合快速數據清洗(如缺失值初步處理),sklearn 適合標準化流程(便于與后續建模整合為 pipeline)。