AI時代系列(1) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
11/100 第二週:資料處理與特徵工程
11. 資料清理與前處理 🧹 去除錯誤與不完整數據,讓 AI 更加「聰明」!
1️⃣ 資料清理與前處理 🧹
去除錯誤與不完整數據,讓 AI 更加「聰明」! 🚀
資料處理是機器學習的核心步驟之一,因為 高品質數據決定 AI 的準確度。如果數據有缺失值、異常值、重複數據或不一致的格式,即使是最強大的模型也可能產生錯誤結果!
今天,我們將介紹 數據清理 (Data Cleaning) 與前處理 (Preprocessing),確保你的 AI 模型擁有最乾淨的數據來學習! 💡
________________________________________
📌 1.1 為什麼數據清理很重要?
❌ 髒數據的影響
如果數據沒有經過清理,可能會產生以下問題:
• 模型無法學習正確的模式
• 演算法過擬合或無法收斂
• 錯誤的預測結果
• 影響模型的可解釋性與決策準確度
例如,假設我們在訓練房價預測模型時,數據如下:
房屋面積 (㎡) 房價 (萬元)
120 500
90 350
-100 600
NaN 400
80 "三百五十"
這樣的數據如果不先清理,AI 可能會學到錯誤的規則,導致預測不準確! 😱
________________________________________
📌 1.2 資料清理的主要步驟
我們將使用 Pandas 來處理數據,這是一個 Python 中最常用的數據分析庫。
🔹 1️⃣ 處理缺失值 (Missing Values)
缺失值是指數據中某些欄位沒有填寫,常見的處理方法有:
✅ 刪除缺失值 (dropna())
✅ 填補缺失值 (fillna()) - 以均值、中位數或眾數填補
📌 Python 實作
import pandas as pd
import numpy as np
# 創建數據
data = {'房屋面積': [120, 90, np.nan, 80, -100],
'房價': [500, 350, 400, "三百五十", 600]}
df = pd.DataFrame(data)
print("原始數據:")
print(df)
# 方法 1:刪除含有 NaN 的列
df_cleaned = df.dropna()
print("\n刪除缺失值後的數據:")
print(df_cleaned)
# 方法 2:填補 NaN(以平均值填補)
df["房屋面積"].fillna(df["房屋面積"].mean(), inplace=True)
print("\n填補缺失值後的數據:")
print(df)
________________________________________
🔹 2️⃣ 處理異常值 (Outliers)
異常值是數據中與其他數據差異極大的值,例如:
• 房屋面積出現 負數 (-100)
• 工資數據顯示為 1000 萬 (明顯超出範圍)
📌 處理方法 ✅ 使用四分位數 (IQR) 或標準差法移除異常值
✅ Winsorization (剪裁法),將異常值限制在合理範圍內
📌 Python 實作
# 透過 IQR 方法移除異常值
Q1 = df["房屋面積"].quantile(0.25)
Q3 = df["房屋面積"].quantile(0.75)
IQR = Q3 - Q1
# 設定異常值範圍 (通常 IQR*1.5 之外的值被視為異常)
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 移除異常值
df_filtered = df[(df["房屋面積"] >= lower_bound) & (df["房屋面積"] <= upper_bound)]
print("\n移除異常值後的數據:")
print(df_filtered)
________________________________________
🔹 3️⃣ 處理數據類型不一致 (Data Format Issues)
某些數據可能格式錯誤,例如:
• 數字存成字串 ("三百五十" 應轉為 350)
• 日期格式錯誤 ("2024/01/01" 變成 "01-01-2024")
📌 處理方法 ✅ 轉換數據格式 (astype())
✅ 使用 pd.to_datetime() 處理日期數據
📌 Python 實作
# 轉換 "三百五十" 為數字
df["房價"] = df["房價"].replace("三百五十", 350)
df["房價"] = df["房價"].astype(float)
print("\n修正數據格式後:")
print(df)
________________________________________
🔹 4️⃣ 處理重複數據 (Duplicate Data)
如果數據庫中有重複的數據 (例如相同 ID 的客戶資料出現多次),可能會影響 AI 訓練。
📌 處理方法
✅ 使用 drop_duplicates() 移除重複數據
📌 Python 實作
df = pd.DataFrame({"ID": [1, 2, 2, 3, 4], "房價": [500, 350, 350, 400, 600]})
print("\n原始數據:")
print(df)
# 移除重複值
df_no_duplicates = df.drop_duplicates()
print("\n移除重複數據後:")
print(df_no_duplicates)
________________________________________
📌 1.3 總結:AI 數據清理步驟
當我們進行 AI 數據清理時,通常會依循幾個主要步驟:首先,針對缺失值部分,可以選擇刪除(使用 dropna())或適當填補(如均值、中位數填補,使用 fillna());其次,處理異常值時,可採用 IQR 四分位距方法、標準差法,或 Winsorization(縮尾法)來減少極端值對模型的影響;再來,若數據格式錯誤,可以透過 astype() 函數轉換數據類型,確保數據一致性;最後,為避免重複數據干擾分析結果,使用 drop_duplicates() 去除重複項目。透過這樣系統性的清理流程,可以有效提升數據質量,為後續模型訓練打下良好基礎。
💡 數據乾淨了,AI 學得才準確!
________________________________________
📌 1.4 測驗:你掌握數據清理了嗎?
📝 單選題
1️⃣ 如果數據中存在 NaN,最好的做法是?
A. 直接刪除所有 NaN
B. 用 0 來填補
C. 根據數據特性,使用均值或眾數填補
D. 忽略 NaN,讓 AI 自行處理
✅ 答案:C
📌 解析:直接刪除可能會丟失太多信息,而用均值或眾數填補可以保持數據完整性。
________________________________________
2️⃣ 如何處理極端異常值?
A. 直接刪除
B. 使用 IQR 方法或 Winsorization
C. 忽略異常值
D. 讓 AI 自己解決
✅ 答案:B
📌 解析:IQR 方法 (四分位距) 或 Winsorization 可以讓數據更穩定,不會因為極端值影響模型。
________________________________________
🎯 你已完成數據清理入門!
🎉 恭喜!現在你已經掌握了數據清理的基本概念與技巧! 🎉
💡 下一步:學習特徵工程,讓 AI 更加「敏銳」! 🚀