pytorch 深度學習之資料預處理
阿新 • • 發佈:2022-04-15
讀取資料集
建立資料,寫入到 CSV 檔案中:
import os os.makedirs(os.path.join(".","data"),exist_ok=True) data_file = os.path.join(".","data","house_tiny.csv") with open(data_file,"w") as f: f.write("NumRooms,Alley,Price\n") # 列名稱 f.write("NA,Pave,127500\n") # 每行表示一個數據樣本 f.write("2,NA,106000\n") f.write("4,NA,178100\n") f.write("NA,NA,140000\n")
從建立的 CSV 檔案中載入原始資料集,我們匯入 pandas 包並呼叫 read_csv 函式。該資料集有四行三列。其中每行描述了房間數量(“NumRooms”)、巷子型別(“Alley”)和房屋價格(“Price”):
import pandas as pd
data = pd.read_csv(data_file)
print(data)
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000
處理缺失值
“NaN”項代表缺失值。 為了處理缺失的資料,典型的方法包括插值法和刪除法, 其中插值法用一個替代值彌補缺失值,而刪除法則直接忽略缺失值。
將 data 分成 inputs 和 outputs, 其中前者為 data 的前兩列,而後者為 data 的最後一列。 對於 inputs 中缺少的數值,我們用同一列的均值替換“NaN”項:
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
NumRooms Alley
0 3.0 Pave
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN
由於“巷子型別”(“Alley”)列只接受兩種型別的類別值“Pave”和“NaN”, pandas可以自動將此列轉換為兩列“Alley_Pave”和“Alley_nan”:
inputs = pd.get_dummies(inputs, dummy_na=True) print(inputs)
NumRooms Alley_Pave Alley_nan
0 3.0 1 0
1 2.0 0 1
2 4.0 0 1
3 3.0 0 1
轉換為張量格式
現在 inputs 和 outputs 中的所有條目都是數值型別,它們可以轉換為張量格式:
import torch
x,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
x,y
(tensor([[3., 1., 0.],
[2., 0., 1.],
[4., 0., 1.],
[3., 0., 1.]], dtype=torch.float64),
tensor([127500, 106000, 178100, 140000]))