李宏毅2023机器学习作业1--homework1——数据集操作

一、下载数据

下载训练数据covid.train.csv

测试数据covid.test.csv

!wget -O covid_train.csv https://www.dropbox.com/s/lmy1riadzoy0ahw/covid.train.csv?dl=0
!wget -O covid_test.csv https://www.dropbox.com/s/zalbw42lu4nmhr2/covid.test.csv?dl=0

二、划分训练集和验证数据集

将下载的训练数据集covid.train.csv,按照比例,划分为训练train_set和验证集valid_set


# 划分训练数据集和验证数据集
def train_valid_split(data_set, valid_ratio, seed):
    '''Split provided training data into training set and validation set'''
    valid_set_size = int(valid_ratio * len(data_set))
    train_set_size = len(data_set) - valid_set_size
    train_set, valid_set = random_split(data_set, [train_set_size, valid_set_size], generator=torch.Generator().manual_seed(seed))
    return np.array(train_set), np.array(valid_set)

三、创建Dataset

class COVID19Dataset(Dataset):
    '''
    x: Features.
    y: Targets, if none, do prediction.
    '''
    def __init__(self, x, y=None):
        if y is None:
            self.y = y
        else:
            self.y = torch.FloatTensor(y)
        self.x = torch.FloatTensor(x)
 
    def __getitem__(self, idx):
        if self.y is None:
            return self.x[idx]
        else:
            return self.x[idx], self.y[idx]
 
    def __len__(self):
        return len(self.x)

四、选择特征数据

因为提供的csv文件中有89个维度特征,很多冗余数据,为了优化模型,选择一定的 特征数据。

这里删除了belife和mental 的特征

def select_feat(train_data, valid_data, test_data, select_all=True):
    '''Selects useful features to perform regression'''
    # [:,-1]第一个维度选择所有,选取所有行,第二个维度选择-1,-1是倒数第一个元素,也就是标签label
    y_train, y_valid = train_data[:,-1], valid_data[:,-1]   # 选择标签元素
    # [:,:-1]第一个维度选择所有,所有行,第二个维度从开始元素到倒数第一个元素(不包含倒数第一个元素)
    raw_x_train, raw_x_valid, raw_x_test = train_data[:,:-1], valid_data[:,:-1], test_data
 
    if select_all:
        feat_idx = list(range(raw_x_train.shape[1]))
    else:
        # feat_idx = list(range(35, raw_x_train.shape[1])) # TODO: Select suitable feature columns.
        """删除了belife和mental 的特征
        [0, 38, 39, 46, 51, 56, 57, 64, 69, 74, 75, 82, 87]是belife和mental所在列
        """
        del_col = [0, 38, 39, 46, 51, 56, 57, 64, 69, 74, 75, 82, 87]  
        raw_x_train = np.delete(raw_x_train, del_col, axis=1) # numpy数组增删查改方法
        raw_x_valid = np.delete(raw_x_valid, del_col, axis=1)
        raw_x_test = np.delete(raw_x_test, del_col, axis=1)
 
        return raw_x_train, raw_x_valid, raw_x_test, y_train, y_valid
        
    return raw_x_train[:,feat_idx], raw_x_valid[:,feat_idx], raw_x_test[:,feat_idx], y_train, y_valid

五、创建DataLoader

将dataset数据放入Dataloader,创建训练、验证和测试数据集

1、读取下载的文件covid.train.csv和covid.test.csv

2、切分读取文件,生成训练集train_data和验证集,valid_data,查看数据尺寸

3、选择特征维度,生成数据集x_train, x_valid, x_test, y_train, y_valid,打印特征维度

4、生成dataset

5、DataLoader加载dataset,加载训练、验证和测试数据集

# Set seed for reproducibility
same_seed(config['seed'])
 
 
# train_data size: 3009 x 89 (35 states + 18 features x 3 days)  
# train_data共3009条数据,每条数据89个维度
# test_data size: 997 x 88 (without last day's positive rate)
# test_data共997条数据,每条数据88个维度,没有最后一天的最后一列数据positive rate
 
# pands读取csv数据
train_data, test_data = pd.read_csv('./covid_train.csv').values, pd.read_csv('./covid_test.csv').values     
 
# train_valid_split切分训练集和验证集
train_data, valid_data = train_valid_split(train_data, config['valid_ratio'], config['seed'])
 
# Print out the data size.打印数据尺寸
print(f"""train_data size: {train_data.shape}
valid_data size: {valid_data.shape}
test_data size: {test_data.shape}""")
 
# Select features 选择特征
x_train, x_valid, x_test, y_train, y_valid = select_feat(train_data, valid_data, test_data, config['select_all'])
 
# Print out the number of features. 打印特征数
print(f'number of features: {x_train.shape[1]}')
 
# 生成dataset
train_dataset, valid_dataset, test_dataset = COVID19Dataset(x_train, y_train), \
                                            COVID19Dataset(x_valid, y_valid), \
                                            COVID19Dataset(x_test)
 
 
# Pytorch data loader loads pytorch dataset into batches.
# pytorch的dataloder加载dataset
train_loader = DataLoader(train_dataset, batch_size=config['batch_size'], shuffle=True, pin_memory=True)
valid_loader = DataLoader(valid_dataset, batch_size=config['batch_size'], shuffle=True, pin_memory=True)
test_loader = DataLoader(test_dataset, batch_size=config['batch_size'], shuffle=False, pin_memory=True)

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值