前言

最近在学习深度学习,就用DNN试着跑了个天池赛二手车价格预测,特征还是用之前集成模型跑的特征,通过不断调试模型的学习率、隐藏层数量、神经元数量、优化器、激活函数、迭代次数、batchsize,KFold,最终达到与之前集成模型差不多的分数,但训练时间比catboost及lightgbm要快很多,毕竟只用了很少的迭代次数就能达到差不多的效果,接着在与集成模型进行融合,将之前的成绩从422提高到406,算是一次DNN的练习吧,毕竟模型的上限还是取决于特征工程,下面附上DNN完整代码,经过交叉验证取平均,线上可以达到428左右,需要的朋友自取。


import pandas as pd
import numpy as np
import Meancoder
from datetime import datetime
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import KFold
import torch
import torch.nn as nn
from torch.autograd import Variable
df = pd.read_csv('/train.csv', sep=' ')
test= pd.read_csv('/test.csv', sep=' ')def date_process(x):year = int(str(x)[:4])month = int(str(x)[4:6])day = int(str(x)[6:8])if month < 1:month = 1date = datetime(year, month, day)return date
df['regDate'] = df['regDate'].apply(date_process)
df['creatDate'] = df['creatDate'].apply(date_process)
df['regDate_year'] = df['regDate'].dt.year
df['regDate_month'] = df['regDate'].dt.month
df['regDate_day'] = df['regDate'].dt.day
df['creatDate_year'] = df['creatDate'].dt.year
df['creatDate_month'] = df['creatDate'].dt.month
df['creatDate_day'] = df['creatDate'].dt.day
df['car_age_day'] = (df['creatDate'] - df['regDate']).dt.days
df['car_age_year'] = round(df['car_age_day'] / 365, 1)df['notRepairedDamage']=df['notRepairedDamage'].replace('-',0.0).astype('float64')
df['power'][df['power']>600] = 600
df['power'][df['power']<1] = 1
df['v_13'][df['v_13']>6] = 6
df['v_14'][df['v_14']>4] = 4
df['fuelType'] = df['fuelType'].fillna(0)
df['gearbox'] = df['gearbox'].fillna(0)
df['bodyType'] = df['bodyType'].fillna(0)
df['model'] = df['model'].fillna(0)test['regDate'] = test['regDate'].apply(date_process)
test['creatDate'] = test['creatDate'].apply(date_process)
test['regDate_year'] = test['regDate'].dt.year
test['regDate_month'] = test['regDate'].dt.month
test['regDate_day'] = test['regDate'].dt.day
test['creatDate_year'] = test['creatDate'].dt.year
test['creatDate_month'] = test['creatDate'].dt.month
test['creatDate_day'] = test['creatDate'].dt.day
test['car_age_day'] = (test['creatDate'] - test['regDate']).dt.days
test['car_age_year'] = round(test['car_age_day'] / 365, 1)test['notRepairedDamage']=test['notRepairedDamage'].replace('-',0).astype('float64')
test['power'][test['power']>600] = 600
test['power'][test['power']<1] = 1
test['v_13'][test['v_13']>6] = 6
test['v_14'][test['v_14']>4] = 4
test['fuelType'] = test['fuelType'].fillna(0)
test['gearbox'] = test['gearbox'].fillna(0)
test['bodyType'] = test['bodyType'].fillna(0)
test['model'] = test['model'].fillna(0)num_cols = [0,2,3,6,8,10,12,14]
for index, value in enumerate(num_cols):for j in num_cols[index+1:]:df['new'+str(value)+'*'+str(j)]=df['v_'+str(value)]*df['v_'+str(j)]df['new'+str(value)+'+'+str(j)]=df['v_'+str(value)]+df['v_'+str(j)]df['new'+str(value)+'-'+str(j)]=df['v_'+str(value)]-df['v_'+str(j)]test['new'+str(value)+'*'+str(j)]=test['v_'+str(value)]*test['v_'+str(j)]test['new'+str(value)+'+'+str(j)]=test['v_'+str(value)]+test['v_'+str(j)]test['new'+str(value)+'-'+str(j)]=test['v_'+str(value)]-test['v_'+str(j)]
for i in range(15):df['new'+str(i)+'*year']=df['v_'+str(i)] * df['car_age_year']test['new'+str(i)+'*year']=test['v_'+str(i)] * test['car_age_year']num_cols1 = [3,5,1,11]
for index, value in enumerate(num_cols1):for j in num_cols1[index+1:]:df['new'+str(value)+'-'+str(j)]=df['v_'+str(value)]-df['v_'+str(j)]test['new'+str(value)+'-'+str(j)]=test['v_'+str(value)]-test['v_'+str(j)]X=df.drop(columns=['price','SaleID','seller','offerType', 'name','creatDate','regionCode','regDate'])
test=test.drop(columns=['SaleID','seller','offerType', 'name','creatDate','regionCode','regDate'])
Y=df['price']class_list = ['model','brand','power','v_0','v_3','v_8','v_12']#+date_cols  'v_6','v_10','v_14','v_2'
MeanEnocodeFeature = class_list
ME = Meancoder.MeanEncoder(MeanEnocodeFeature,target_type='regression')
X = ME.fit_transform(X,Y)
test = ME.transform(test)df_concat = pd.concat([X, test], ignore_index = True)
df_concat=StandardScaler().fit_transform(df_concat)
X1=df_concat[:150000]
test1=df_concat[150000:]# 模型设置
input_size = 143
hidden_size = 320
num_classes = 1
batch_size = 2048
learning_rate = 0.05
x=torch.tensor(X1,dtype=torch.float32)
y=torch.FloatTensor(Y.to_numpy())
y=Variable(y.view(-1, 1))
test=torch.tensor(test1,dtype=torch.float32)  class Net(nn.Module):def __init__(self, input_size, hidden_size, num_classes):super(Net, self).__init__()self.fc1 = nn.Linear(input_size, hidden_size)self.relu = nn.ReLU()self.fc2 = nn.Linear(hidden_size, num_classes)def forward(self, x):out = self.fc1(x)out = self.relu(out)out = self.fc2(out)return outnet = Net(input_size, hidden_size, num_classes)
print(net)criterion = nn.L1Loss()
optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)result = []
mean_score = 0
n_folds=5
kf = KFold(n_splits=n_folds ,shuffle=True,random_state=2022)
for train_index, test_index in kf.split(x):x_train = x[train_index]y_train = y[train_index]x_test = x[test_index]y_test = y[test_index]for i in range(2000):for start in range(0, len(x_train), batch_size):  end = start + batch_size if start + batch_size < len(x_train) else len(x_train)xx = x_train[start:end]yy = y_train[start:end]outputs = net(xx)loss = criterion(outputs, yy)net.zero_grad()loss.backward()optimizer.step()y_pred = net.forward(x_test)loss1 = criterion(y_test, y_pred)mean_score += loss1.item()/ n_foldsprint('验证集loss:{}'.format(loss1.item()))test_pred = net.forward(test)result.append(test_pred)
# 模型评估
print('mean 验证集Auc:{}'.format(mean_score))
cat_pre=sum(result)/n_folds
cat_pre=cat_pre.detach().numpy()
ret=pd.DataFrame(cat_pre,columns=['price'])
ret.to_csv('/DNN.csv')

DNN二手车价格预测完整代码相关推荐

  1. Python二手车价格预测(一)—— 数据处理

    文章目录 前言 一.数据 二.处理过程 1.引入库 2.读入数据 3.删除无效列与填充空值 4.数值型数据处理 5.日期型数据处理 6.二值型数据处理 7.One-Hot型数据处理 结语 前言 一年半 ...

  2. 数据挖掘二手车价格预测 Task05:模型融合

    模型融合是kaggle等比赛中经常使用到的一个利器,它通常可以在各种不同的机器学习任务中使结果获得提升.顾名思义,模型融合就是综合考虑不同模型的情况,并将它们的结果融合到一起.模型融合主要通过几部分来 ...

  3. 基于机器学习的二手车价格预测及应用实现(预测系统实现)

    1.摘要 随着中国汽车工业的迅速发展,国内的汽车数量也在迅速增长.新车销售市场已经逐渐饱和,而二手车交易市场正在兴起.但是,由于中国的二手车市场尚未成熟,与发达国家相比仍存在较大差距.其中一个重要原因 ...

  4. 【组队学习】【24期】河北邀请赛(二手车价格预测)

    河北邀请赛(二手车价格预测) 开源内容: https://github.com/datawhalechina/team-learning-data-mining/tree/master/SecondH ...

  5. 基于二手车价格预测——特征工程

    特征工程 特征工程 分析: 第一步:异常值处理 箱型图法: 第二步:特征构造 第三步:数据分桶 数据分桶详解 删除不需要的数据 特征归一化 总结--特征 1.特征构造: 2.异常类型处理 3.构造新特 ...

  6. 二手车价格预测task03:特征工程

    二手车价格预测task03:特征工程 1.学习了operator模块operator.itemgetter()函数 2.学习了箱线图 3.了解了特征工程的方法 (内容介绍) 4.敲代码学习,加注解 以 ...

  7. Python二手车价格预测(二)—— 模型训练及可视化

    系列文章目录 一.Python数据分析-二手车数据获取用于机器学习二手车价格预测 二.Python二手车价格预测(一)-- 数据处理 文章目录 系列文章目录 前言 一.明确任务 二.模型训练 1.引入 ...

  8. Datawhale task4打卡——二手车价格预测

    Datawhale task4打卡--二手车价格预测 1. 线性回归模型 1.1 *特征要求(易忽略) 1.2 *处理长尾分布(易忽略) 2. 模型性能验证 2.1 目标函数 2.2 交叉验证 2.2 ...

  9. 二手车价格预测--EDA

    二手车价格预测--EDA 二. EDA-数据探索性分析分析 2.1 EDA 目标 2.2 内容介绍 2.3 代码实例 2.3.1 导入函数工具包 2.3.2 载入数据: 所有特征集均脱敏处理(方便大家 ...

最新文章

  1. 使用Spring-data-jpa(1)(三十)
  2. jsp EL表达式比较两个字符串
  3. Mysql安装两种方法
  4. P3992 [BJOI2017]开车
  5. 2020蓝桥杯省赛---java---B---5(排序)
  6. 通过分区在Kafka中实现订单保证人
  7. 惹恼程序员的10件事
  8. 【LeetCode】【HOT 100】2. 两数相加
  9. 第二周 SCRUM站立会议
  10. 只允许选中三级选择框的方法
  11. 数据可视化常见的错误有哪些
  12. 双系统下Mac可以这样卸载windows系统
  13. 扇贝有道180909每日一句
  14. 概率论与数理统计(第四版) 第一章:概率论的基本概念(总结)
  15. R语言画图——添加数学表达式和R2
  16. YOLO v2 学习与研究
  17. 【阿里云】阿里云跨账号内网互通
  18. 触发器的使用,通过这个案例让你完全掌握
  19. c# Windows窗体应用程序设计(三)
  20. 文献综述怎么弄和书写格式

热门文章

  1. 承接机器视觉项目到底应该选哪个解决方案?传统机器视觉 vs 人工智能
  2. OpenCV基本图形绘制之填充连接区域内部
  3. 智能证件照怎么ps?自己就能在家制作
  4. 2019年09月11日星期三 恒指/美原油/美黄金 走势分析
  5. 五子棋人人对弈——Easyx的第一次使用
  6. chessboard
  7. java jasperException异常
  8. 实验二 HDFS实验操作
  9. 故障排除: rpmdb: BDB0113 Thread/process 21869/140531746672 failed: BDB1507 Thread died
  10. Ubuntu 16.04或14.04里下安装搜狗输入法(图文详解)(全网最简单)