动手学习深度学习9-二手车交易kaggle竞赛

一. 理解数据

1、导入数据

train_df = pd.read_csv(config['train_path'],sep=' ')
test_df = pd.read_csv(config['test_path'],sep=' ')
df = pd.concat([train_df,test_df],axis=0).reset_index(drop=True)

2、分析数据

1)power:发动机功率:范围 [ 0, 600 ]

#将超出范围的处理为600
df.loc[df['power']>600,'power'] = 600

2)处理nan值

df[col] = df[col].fillna('-1')

3)连续特征标准化

#连续特征
for col in config['num_cols']:
    df[col] = df[col].fillna(0)
    df[col] = (df[col]-df[col].min()) / (df[col].max()-df[col].min())

4)较大的值进行log变换

train_df['price'] = np.log(train_df['price'])

5)绘制密度图、频次图等

# 离散特征
for col in config['cate_cols']:
    # 统计特征频次
    counts = df[col].value_counts()

    # 绘制条形图
    counts.plot(kind='bar')

    # 设置图形标题和标签
    plt.title(f'{
     col} Frequencies')
    plt.xlabel(col)
    plt.ylabel('Frequency')

    # 显示图形
    plt.show()

3、批量读取数据

注意事项:

  1. 理解数据原始形式,比如,数据是有什么分隔的,数据的字段类型等
  2. 理解数据编码方式,比如连续还是离散。
  3. 理解数据字段,比如哪些是特征列,哪些是预测列
  4. 理解如何进行数据IO
#Dataset构造,继承dataset
class SaleDataset(Dataset):
    def __init__(self,df,cate_cols,num_cols):
        self.df = df
        self.feature_name = cate_cols + num_cols
            
    def __getitem__(self, index):
        data = dict()
        ### 特征列处理
        for col in self.feature_name:
            data[col] = torch.Tensor([self.df[col].iloc[index]]).squeeze(-1)
        ### 预测列
        if 'price' in self.df.columns:
            data['price'] = torch.Tensor([self.df['price'].iloc[index]]).squeeze(-1)
        return data

    def __len__(self):
        return len(self.df)
    
def get_dataloader(df, cate_cols ,num_cols, batch_size=256, num_workers=2, shuffle=True):
    dataset = SaleDataset(df,cate_cols,num_cols)
    dataloader = D.DataLoader(dataset, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers)
    return dataloader

4、定义模型

可以将模型拆解为各个子模块,单独定义,最后整合

  1. embedding层,对离散特征进行处理
# Embedding层:用于对离散特征进行编码映射
class EmbeddingLayer(nn.Module):
    def __init__(self,
                 vocab_map = None,
                 embedding_dim = None):
        super(EmbeddingLayer, self).__init__
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值