基于深度学习的人数预测
目录
前言
本文仅为个人学习中的体会,非专业人士
一、定义一个数据集类
代码如下(示例):
class CovidDataset(Dataset):
def __init__(self,file_path,mode="train",all_feature=True,feature_dim=6):
with open(file_path,"r") as f:
ori_data = list(csv.reader(f))#打开并读取csv文件,并将内容存储在ori_data中
column = ori_data[0]#column中存储csv文件的第一行
csv_data = np.array(ori_data[1:])[:,1:].astype(float)#把ori_data转化为矩阵,去除第一行和第一列的数据,把数据转换为浮点数,存储在csv_data中
feature = np.array(ori_data[1:])[:,1:-1]#提取除了最后一列之外的所有特征
lable_data = np.array(ori_data[1:])[:,-1]#提取最后一列作为标签
if all_feature:
col = np.array([i for i in range(0,93)])#如果all_feature为True,则使用所有特征(假设总共有93个特征)
else:
_,col = get_feature_importance(feature,lable_data,feature_dim,column)#如果all_feature为False,则使用feature_dim个特征
col = col.tolist()#把col转换为列表
self.mode = mode
if mode == "train":#每5个样本中取4个作为训练集。
indices = [i for i in range(len(csv_data)) if i % 5 != 0]
data = torch.tensor(csv_data[indices, :-1])#取出指定行中除了最后一列的所有数据
self.y = torch.tensor(csv_data[indices, -1])
elif mode == "val":#每5个样本中取1个作为验证集。
indices = [i for i in range(len(csv_data)) if i % 5 == 0]
data = torch.tensor(csv_data[indices, :-1])#取出指定行中除了最后一列的所有数据
self.y = torch.tensor(csv_data[indices, -1])
else:#使用所有样本作为测试集。
indices = [i for i in range(len(csv_data))]
data = torch.tensor(csv_data[indices])#选择指定行的所有数据
data = data[:,col]#选择特征列
self.data = (data - data.mean(dim=0,keepdim=True))/data.std(dim=0,keepdim=True)#对数据进行标准化处理,使每个特征的均值为0,标准差为1。
def __getitem__(self, idx):
if self.mode != "test":#如果是训练模式或验证模式,返回第idx个样本的特征和标签
return self.data[idx].float(),self.y[idx].float()
else:
return self.data[idx].float()#如果是测试模式,则只返回第idx个样本的特征
def __len__(self):
return len(self.data)#返回数据集的长度
二、是否使用所有特征
代码如下(示例):