数据挖掘导论——综合实验(下)

简介: 数据挖掘导论——综合实验

二、数据预处理


1、缺失值处理:


通过上面数据重复度的统计,发现有缺失值的特征大多数值重复度都比较高,故使用众数填充的方法补充缺失值。


30492050932a4b6ea17db071813a39c9.png

2、数值化非数值特征


非数值特征只有“notRepairedDamage”,它有‘-’,‘0.0’,‘1.0’三种值。将值‘-’用‘0.0’来代替,并把特征值转为浮点数类型。

0a40cc3db15f4162a0f32c2b301bb371.png


3、异常值处理


功率特征power的范围在1 ~ 600之间,因此将超出范围的值截断在正常范围内。

8baf64a796d1428daaf0163fbf99c8a1.png

发现匿名特征v_13、v_14的特征值集中分布在一定范围内,因此将超出范围的少数异常点进行截断。

1afc0f8d154f4b2ab925e982de8e146b.png


三、特征工程


1、组合匿名特征:

一些匿名特征与价格的相关度比较高,说明匿名特征很重要。通过匿名特征之间的组合、匿名特征与其他特征的组合构造新特征,方便后续使用分析。

e7cc9565eade49a38d44a8611700a86e.png


2、提取日期信息

日期信息有“regDate”、“creatDate”两个特征,通过定义日期解析函数date_tran(),将日期拆分为年、月、日。

82a0f11760e741ffad5864be3eb7928e.png

0b54e4928c1e442397c66a3dd1e8c359.png


3、特征的count编码

统计一些特征的值的数量,将特征与其值的数目构成新的特征。定义函数count_coding()统计特征值的数目。

4c391d52f98d4f6c811e672fd7cf3738.png

8df241c774774a35b98db58c8f0ebbb9.png


4、日期的特征构造

基于注册日期和创建日期两个特征,构造更有意义的特征,如汽车的使用时长、注册日期与现在日期的天数、创建日期与现在日期的天数。由于得到的这些天数是离散值,需要对它们进行分桶处理。定义函数cut_group()进行分桶。

6da66c8be80445b1827738d89fba17cc.png

fdcd8c0cd9bd4716a033151096b89e22.png


5、特征交叉

用数值特征对类别特征做统计刻画,这里选择了与价格相关度最高的几个匿名特征。定义函数cross_cat_num()进行一阶交叉。

930ec3cf33e44a68a54505ee41a05b80.png

8add494586a64758b4712aec91a8e1f2.png


6、特征编码

由于存在汽车名称、汽车品牌、区域编码等类别特征,而这些特征都是高基数定性的特征,因此需要对这些类别特征进行编码。常见的方法使用独热编码和标签编码的方法,但这两种方法过于简单,不易产生好的效果,而且容易消耗大量内存和训练时间,所以这里我使用了更加适合高基数定性特征的两种编码方式:平均数编码和目标编码。

①平均数编码

定义平均数编码的类,声明需要编码的特征,调用函数对训练集的特征和标签进行拟合,最后对测试集进行编码即可。

c4b2b63f6bf4421faf5857ead4ce19c4.png

②目标编码

首先给出每种编码的默认值。这里选择了最大值、最小值、平均值这三种编码。通过与类别特征的组合进行目标编码。

1ff3b817950049c097d1ae8b5ba3e220.png

③特征归一化

合并训练集和测试集,使用MinMaxScaler对数据进行归一化。

90e355eee1a74b0492aad496796eb61c.png

④特征降维

使用PCA对特征进行降维处理,最后将处理完的数据分配回给训练集和测试集。

6959f2730def46fca6f392b1a837ccb9.png


四、预测模型

1、问题分析

本问题属于对二手车的交易价格的预测,属于典型的有监督回归问题,可以使用回归模型、集成方法等多种算法进行处理。


2、可用模型

针对本问题,可以使用lightgbm、catboost、neural network等模型进行训练预测。lightgbm和catboost都属于树模型,它们的优点是训练收敛速度很快,可以在训练过程中调整正则化系数和学习率,缺点是占用内存空间大、耗时比较长。本次实验我采用了neural network的方法进行训练预测,神经网络不仅在训练时可以使用小规模的数据,而且它的收敛速度的收益大,精度与树模型接近。另外加上Adam优化器等优化方案,可以降低内存消耗,提升计算效率,可以很好地处理特征。


3、训练模型与预测

①定义神经网络模型构造函数,这里我使用了六层神经网络结构

8295d1ebe0ca4485b929ddfb8eb04a34.png


②定义学习率调整函数,每隔100个epoch,学习率减小为原来的1/10

9b0877ed193e4de7a16a2e4b516a1ce0.png

③开始训练和预测。训练过程中使用正则化防止过拟合。同时对训练过程的误差进行分析,选择学习率下降的时机对学习率进行调整。另外使用六折交叉验证,减小过拟合。这里我还使用了Adam对梯度下降进行优化。并将loss比较小的保存为提交文件

b48b940e24b3469a83e253bb2f710b89.png


五、调参并测试


本次预测的模型中含有epoch,batch,learnRate,以及网络层数等参数,为了获取更好的结果,我查阅资料,进行了多次调参。由于提交次数有限,我选择本地测试后loss比较小的几组进行提交,进行调优上分。


467902ffcf20422aa0c3372daa0d6bf8.png



六、最终提交结果:


经过一系列的调整,发现当batch为2000,epoch为145,采用大小分别为300,64,32,8,1的五层神经网络模型时上分效果最好。从比赛网站中提交最后的预测结果,最终我的分数为400.3377分,排名为119名。


bc99fdb2961343cfa47b809cae19c99b.png


5e9675f47c6044efa36f156a4ef90d3b.png


实验收获


本次实验中,我参加了阿里天池举办的《二手车价格预测比赛》,我学会了通过查阅资料与书籍,独立的进行数学分析,数据清洗并选择合适的模型进行预测。这使我对数据挖掘有了比较全面的认识,在此,我掌握了几种常见的数据分析,数据清洗的方法,学会,理解并实战了常用的预测模型。

此外,对于本次实验中所用的参数(学习率,batch,epcho等)没有一个比较合理的概念,我手动调参,并选择结果比较好的进行多次提交刷榜,最后取得了不错的成绩。


相关文章
|
5月前
|
机器学习/深度学习 人工智能 算法
04 机器学习 - 数据挖掘与机器学习导论
04 机器学习 - 数据挖掘与机器学习导论
96 0
|
机器学习/深度学习 数据可视化 数据挖掘
数据挖掘导论——综合实验(上)
数据挖掘导论——综合实验
108 0
数据挖掘导论——综合实验(上)
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘导论——分类与预测(三)
数据挖掘导论——分类与预测
214 0
数据挖掘导论——分类与预测(三)
|
数据挖掘
数据挖掘导论——分类与预测(二)
数据挖掘导论——分类与预测
155 0
数据挖掘导论——分类与预测(二)
|
数据挖掘
数据挖掘导论——分类与预测(一)
数据挖掘导论——分类与预测
219 0
数据挖掘导论——分类与预测(一)
|
数据可视化 数据挖掘 Linux
数据挖掘导论——可视化分析实验
数据挖掘导论——可视化分析实验
116 0
数据挖掘导论——可视化分析实验
|
数据挖掘 数据安全/隐私保护 索引
数据挖掘导论——Python练习
数据挖掘导论——Python练习
237 0
数据挖掘导论——Python练习
|
数据采集 运维 算法
【数据挖掘导论】书籍小册(一)绪论
【数据挖掘导论】书籍小册(一)绪论
108 0
【数据挖掘导论】书籍小册(一)绪论