数据预处理
主要使用pandas库
import pandas as pd
- 读取数据集
# 读取。df为DataFrame结构
df = pd.read_csv('../data/adult.csv')
# pandas中unique() 函数返回每个特征的唯一值
# salary是最后要分类的结果
salary_items = df['salary'].unique()
print(salary_items) # ['>=50k' '<50k']
# 预览一小块数据 head()方法 从开头开始预览。不带参数默认显示5条数据。tail()方法 从结尾预览,默认5条。
data_pre_look = df.head()
print(data_pre_look)
# describe()对数据集进行概览,输出该数据集的计数、最大值、最小值等。
csv_des = df.describe()
print(csv_des)
- 将数据分成三个类别:
训练的结果标签:即训练的结果,通过这个结果能够明确的知道训练的任务是什么,是分类的任务,还是回归的任务。
分类数据:这类的数据是离散的,无法通过直接输入到模型中进行训练。所以在预处理的时候需要优先对这部分进行处理,这也是数据预处理的主要工作之一
数值型数据:这类数据是直接可以输入到模型中的,但是这部分数据有可能还是离散的,所以如果需要也可以对其进行处理,并且处理后会对训练的精度有很大的提升。此处省略。
# 将数据分成以下三个类别
# 训练结果
result_var = 'salary'
# 分类型数据。csv中,不是数值型数据的表头
cata_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'native-country']
# 数值型数据。CSV中,数值型数据的表头
cont_names = ['age', 'fnlwgt', 'education-num', 'capital-gain', 'capital-loss', 'hours-per-week']
- 将分类型数据转成数值型数据。并对缺失的数据进行填充。
# 将分类型数据转成数字型数据。并对缺失的数据做填充
# fillna()函数做空值填充。标识成一个与其他值不一样的值即可。
for col in df.columns:
if col in cata_names:
df[col].fillna('---')
df[col] = LabelEncoder().fit_transform(df[col].astype(str))
if col in cont_names:
# 数值型做0填充。
df[col] = df[col].fillna(0)
- 分割训练数据和标签
Y = df['salary']
Y_label = LabelEncoder()
Y = Y_label.fit_transform(Y)
X = df.drop(columns=result_var)
定义数据集
要使用pytorch处理数据,肯定要使用Dataset进行数据集的定义。
- 定义数据集
from torch.utils.data import Dataset, DataLoader
# 定义一个简单的数据集
class tabularDataset(Dataset):
def __init__(self, X, Y):
self.x = X.values
self.y = Y
def __len__(self):
return len(self.y)
def __getitem__(self, idx):
return (self.x[idx], self.y[idx])
- DataLoader 加载数据
train_ds = TabularDataSet.tabularDataset(X, Y)
# 可以直接索引
print(train_ds[0])
# 训练的过程中,使用DataLoader加载数据
train_dl = DataLoader(train_ds, batch_size=1024, shuffle=True)