数据挖掘一般流程(数据清洗,特征提取,建模,调参)

来源:互联网 发布:高级研修班 知乎 编辑:程序博客网 时间:2024/05/17 08:13

最近一直在实习,好长时间没更新博客了。哎,懒惰之心不可有啊!!

实习的岗位是数据挖掘相关的,所以正好把到目前为止实习期间遇到的一些问题、学到的一些东西总结一下,并参考了一些博客,自我提升。嘿嘿嘿~


数据挖掘的一般流程:


1.问题定义:属于分类问题还是回归问题


2.数据获取:根据数据挖掘任务的具体要求,从相关数据源中抽取相关数据集。(以前在实验室的时候用到的都是现成的数据,直接拿过来用就行了,到公司发现想要获取数据还需要掌握LINUXSQL的相关知识,于是抓紧时间恶补了一番,掌握了一些LINUX和SQL的基本命令和操作)


3.数据清洗:清除重复样本,清除疑似错误异常的样本,清除偏离样本整体分布的样本。(这一步对建立线性模型来说尤为重要,感觉这一步基本靠人肉)


4.缺失值处理:

(1)样本缺失值较少时,使用均值/众数值填充,当样本顺序与时间相关的话,填充可以参考相关时间信息;

(2)把是否缺失直接当作一种特征输入到模型中,比如说各种树模型;

(3)缺失样本较多时,可以考虑直接清洗掉这些样本。(实习项目 预测的是价格,出现了好多价格的缺失值,所以直接删除,美滋滋~)


5.特征选择:

(1)意义:避免维度灾难,降低模型复杂度,提高模型的可解释性。

(2)a.嵌入式选择:将特征选择和学习器结合,让模型训练过程中自动进行特征选择,比如各种树模型;b.包裹式选择:以模型最终的学习性能作为特征集的评估准则,选择好的特征集,但因为需要训练多个模型,开销很大,不推荐;c.过滤式选择:计算每个特征与相应变量的相关性,过滤掉相关性较低的特征,但实际应用中,一般会逐个特征分析与预测变量的关系,在Pandas中有很多相关函数(describe,value_counts()等等)可以很清晰的表示出两者关系,也可以通过画图,美滋滋~d.降维,用相关算法处理数据集,对特征重要性进行排序,取重要性大的特征,例如PCA等。


6.数据集划分:测试集和训练集(实习中用到的数据与时间相关,所以数据集顺序不能打乱,一般训练:测试比例在7:3  6:4  都行)


7.模型建立:

(1)数据归一化:一般的模型都需要归一化,原因:将数据维度都调整到某范围内。注意点:训练集归一化的时候要计算最大值和最小值,测试集归一化的时候也要用训练集的最大和最小值进行归一化。(很重要!!实习过程中犯的第一大错误,包括后续要产生某些新特征时,测试集一定要以训练集的指标划分!)

(2)模型选择:不管怎么样先用随机森林(Random Forest)试试,效果总不会太差,可以以这个为度量来评估后续模型的好坏。一般越复杂的模型效果越高,GBDT,XGBOOST等,但如果需求是解释性模型较高时,还是线性模型好;

(3)建模:这个就很easy了,尤其是现在各种开源的机器学习包,建模也就几行代码的事儿,推荐Sklearn,不能更方便;

(4)调参:交叉验证!先大范围的调,然后再小范围的调参,直到找到相对较好的参数。


8.学习总结:

(1)Python:由一知半解到有一个整体的认识,包括代码的规范书写(等号两边空格,变量常量命名规范等等)、类的定义使用、函数的封装等等;

(2)Pandas:数据分析工具,分析特征间、特征与预测变量间的关系,整理数据,包括切片、联合等等,常用的函数crosstab、groupby、join等等,产生新特征(dummy特征);

(3)Sklearn:简单模型(线性回归)、复杂模型(GBDT,Random Forest)的使用,调参(交叉验证等),构造新特征(利用GBDT每棵树的叶子节点的状态作为某个样本的新特征,与线性回归特征结合训练);


先到这里吧,还得继续干活了,以后有时间随时更!Mua~