任务:利用神经网络完成对二手车交易价格的预测
代码解析
导入库
import pandas as pd
import numpy as np
from torch import nn, optim
import torch
import matplotlib.pyplot as plt
配置参数
config = {
'epoch': 10,
'batch_size': 512,
'learning_rate': 8e-3,
'device': 'cuda',
"num_cols": ['regDate', 'creatDate', 'power', 'kilometer', 'v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9', 'v_10',
'v_11', 'v_12', 'v_13', 'v_14'],
"cate_cols": ['model', 'brand', 'bodyType', 'fuelType', 'gearbox', 'seller', 'notRepairedDamage']
}
- epoch:指定训练的周期数,即整个训练集被用来训练神经网络的次数
- batch_size:每次更新模型权重时使用的样本数量
- learning_rate:学习率是梯度下降算法中的一个重要参数,决定了权重更新的步长。较高的学习率意味着模型权重更新更快,但可能跳过局部最小值;较低的学习率则可能使训练过程缓慢
- device:指定用于计算的设备。如果可用,将使用GPU(通常比CPU快很多)来进行计算。
cuda
是 NVIDIA GPU 的 PyTorch 后端。 - num_cols和cate_cols: 列出了数据集中用于模型训练的特征列名。
"num_cols"
包含数值型特征,如日期、功率、里程等;"cate_cols"
包含分类型特征,如车型、品牌、车身类型、燃料类型等。
导入数据
test_data = pd.read_csv('/gemini/data-1/used_car_testB_20200421.csv', sep=' ')
train_data = pd.read_csv('/gemini/data-1/used_car_train_20200313.csv', sep=' ')
合并数据
data = pd.concat([train_data, test_data])
定义One-Hot编码函数
def oneHotEncode(df, colNames):
for col in colNames:
dummies = pd.get_dummies(df[col], prefix=col)
df = pd.concat([df, dummies],axis=1)
df.drop([col], axis=1, inplace=True)
return df
函数效果:对dataframe中的分类变量进行one-hot编码,即将每个分类变量都拆分成多个二进制的列。
eg:
Color | Size | |
---|---|---|
0 | Red | Small |
1 | Blue | Large |
2 | Green | Medium |
3 | Red | Small |
4 | Blue | Medium |
转化为
index | Color_Blue | Color_Green | Color_Red | Size_Large | Size_Medium | Size_Small |
---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 1 | 0 | 0 |
2 | 0 | 1 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 1 | 0 | 0 | 1 |
4 | 1 | 0 | 0 | 0 | 1 | 0 |
数据预处理
data = data.replace('-', '-1')
data.notRepairedDamage = data.notRepairedDamage.astype('float32')
data.loc[data['power']>600,'power'] = 600
- 处理特殊标记,将'-'转化为'-1'
- 数据类型转换,
notRepairedDamage
列的数据类型转换为 32 位浮点数,确保这一列可以进行数值运算 - 异常值处理,查找
power
列中大于 600 的所有值,并将这些值统一设置为 600,可以防止极端值对模型训练产生不良影响。
# 处理离散数据
for col in config['cate_cols']:
data[col] = data[col].fillna('-1')
data = oneHotEncode(data, config['cate_cols'])
# 处理连续数据
for col in config['num_cols']:
data[col] = data[col].fillna(0)
data[col] = (data[col]-data[col].min()) / (data[col].max()-data[col].min())
# 处理(可能)无关数据
data.drop(['name', 'regionCode'], axis=1, inplace=True)
- 处理离散数据:用-1填充缺失值,然后对分类特征进行one-hot编码
- 处理连续数据:用0填充缺失值,然后对数据进行归一化处理,即将数值范围缩放到 [0, 1] 之间。
- 处理(可能)无关数据:移除
特征缩放
在使用多指标在综合评价某事物时,可能存在各指标的数量级和量纲不同导致的数据爆炸或各指标对分析的作用不合理等情况,因此需要在数据预处理时采用特征缩放的方法来平衡各指标之间的差异,从而优化算法。
如果不进行特征缩放
假如特征\(x_1\)的数值是100左右,特征\(x_2\)的数值是1左右,方程为
标签:nn,交易价格,二手车,config,torch,笔记,train,hidden,data From: https://www.cnblogs.com/Melnis/p/18329668