数据预处理

输入

CSV

1
2
3
4
import os
import panda as pd

data = pd.read_csv(os.path.join('path', 'to', 'data.csv'))

预处理

iloc: 数据截取

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import os
import panda as pd

data = pd.read_csv(os.path.join('path', 'to', 'data.csv'))
print(data)
#    NumRooms Alley   Price
# 0       NaN  Pave  127500
# 1       2.0   NaN  106000
# 2       4.0   NaN  178100
# 3       NaN   NaN  140000

inputs, outputs = data.iloc[:, :2], data.iloc[:, 2]
print(inputs)
#    NumRooms Alley
# 0       NaN  Pave
# 1       2.0   NaN
# 2       4.0   NaN
# 3       NaN   NaN

print(outputs)
# 0    127500
# 1    106000
# 2    178100
# 3    140000

fillna: 把空值 NA 用指定值填充

1
inputs = inputs.fillna(inputs.mean()) # 用均值填充空值

get_dummies: 进行 one-hot 编码

1
2
3
4
5
6
7
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

如果 Alley 有其他值比如 Bave,则会多一列 Alley_Bave 只在值为 Bave 的行为 1

Why one-hot?

模型通常用 类型值 の差作为两个类别的差距 一般类别之间差距是两两等距的,而 label 编码不符合该特征,one-hot 编码符合

get_numpy: 转为张量

1
2
3
import torch

x = torch.tensor(inputs.to_numpy(dtype=float))