机器学习项目流程

学习MachineLearning已经有快大半年了,阅读过周志华老师的《机器学习》、李航博士的《统计学习方法》以及机器学习实战,参加了一些商业比赛以及完成kaggle上的一些简单项目。虽然学的不是很深且没有特别丰富的实战经验,但也在摸索中,基于《Hands-on Machine Learning ...》总结了机器学习项目的一般流程。

流程仅仅是一个形式,实际操作时还需根据实际情况进行变动!

目录

一、 加载数据,观察数据。

二、 探索性数据分析(EDA)

三、特征工程(数据竞赛中最重要的环节)

四、 基于性能指标选择模型,进行超参调整

五、解释模型


 

一、 加载数据,观察数据。

1. 观察数据的格式和类型,将数据转换为正确的类型,比如有些数据中会将无意义值定义为Nan值或者是其他数据特有的无意义值,常用的有pandas的info和descirbe两个函数;

2. 理解数据的每一个特征及每个特征下的取值意义。这一步特别重要,特别是在英语赛题中,多看几遍特别的说明;

3. 对于缺失值的取舍。一般情况下,一个特征的缺失值如果超过50%,我会去除这一列特征,但是有些题目又会暂时不删除,而采用其他的手段。对于缺失值的处理方法有均值填充,一般用fillna函数和mean函数;还可以用上下数据进行填充,选择fillna函数的参数method,"pad"为前一个,"bfill"为后一个;或者通过interpolate进行两点间插值;此外,还可以用算法拟合进行填充,未知部分作为测试集,已知部分作为训练集,常用RandomForest进行训练并预测缺失值;另外,还有一种是在大样本下,把缺失列的数据变量映射到高维空间,如果样本数量不够则会造成数据系数,最后训练效果不好。

 

二、 探索性数据分析(EDA)

在MachineLearning中有这么句话:“特征选的好,LR都能跑”,可知特征决定上限,因此,我们很有必要进行EDA,去深入的理解数据,知道数据背后的意义。很多时候我们只是按部就班的进行数据分析,但是我们应该着重于“探索”两字,这需要我们加深对数据的理解,去推断是否合理,是否有给出特征之外的因素存在,并且会影响我们的结果等等。可以按照逐个特征进行探索分析,从连续的、离散的特征来进行

一般情况下,我们需要知道数据的分布、样本类别是否均衡、是否需要降维、特征之间是否存在线性关系等等

1. 单变量图(检验特征的分布,并观察是否存在异常值,常用直方图观察);

2.去除异常值,可以通过箱型图进行观察;

在低端情况下,极端异常值低于 First Quartile - 1.5 * InterQuartile Range (下四分点,四分位距)

在高端情况下,极端异常值高于Third Quartile + 1.5 * Inter Quartile Range (上四分点,四分位距)

参加过一次数据挖掘比赛,是关于车辆行车轨迹的,当时只拿了个别几辆车的行车轨迹进行观察,采用三种去除异常轨迹的方法,但是总是有一些噪声点去除不掉,之后通过宏观的热力图观察所有车辆的行车轨迹,发现这些异常值是由GPS造成的,GPS采样是通过地图分格采样,格与格之间返回的经纬度都是异常值,因此,观察数据时要做到宏观和微观去观察;

3. 寻找Object变量与目标之间的关系,一般通过密度图;

4. 数字变量与目标之间的关系,量化特征和目标之间的相关性,计算皮尔森相关系数、余弦相似度等,可以通过平方根和自然对数变量,再计算相关性)

5. 探索特征之间的关系,判断特征之间是否线性相关,常用散点图,确定两变量之间是否存在线性关系,可通过SVD、tSNE等方式降维;

经过了EDA之后,我们要对数据有基本的解读,有深刻的业务理解,就是对特征之外,比如是驾驶数据,会有一些交通规定,连续驾驶超过四小时以上属于疲劳驾驶;对于手机流量套餐等,通信商运营商有自己的理解以及对某个特征的算法,这都需要我们去了解。

 

三、特征工程(数据竞赛中最重要的环节)

数据和特征决定机器学习的上限,而特征工程就是基于EDA,对数据进行处理以及对特征进行筛选,当时学习特征工程的时候是参考jasonfreak的教程。

1. 数据处理,包括无量纲化(标准化,区间放缩)、二值化(针对定量特征)、哑编码(one-hot编码)、缺失值处理、数据变换(对数、平方);

2. 特征选择,很重要的两点:

一是通过方差判断特征是否发散,如果方差接近0说明该特征对样本的区分没太大作用

二是通过计算相关性,选择该特征;

三是通过卡方或者正则方式进行特征选择;

3. 降维,降维的目的主要是特征太多,计算时间久,无关特征也加入训练,因此,可以通过像L1正则化,主成分分析,线性判别分析等方法进行降维;

4. 构造特征。在一些比赛中,有些特征是需要我们根据业务背景进行构造的,比如在交通数据中,时间特征是有效的,但是在文本挖掘中就不一定有效

四、 基于性能指标选择模型

1. 模型选择。其实机器学习项目或是比赛,大家用的模型都是差不多的,竞赛中常用的是XgBoost、lightGBM、RF等集成学习模型,都有不错的表现,因此我们只需要挑选其中一个较为合适的模型进行训练,当然,如果是想进一步提升,可以采用Bagging、Stacking等方式进行模型融合,进一步提高准确度。

2. 模型调参。即超参数的调整,一般有经验调参、网格搜索、随机搜索、贝叶斯优化、局部优化等,我最常用的方法是网格搜索,但是如果有经验的话可以根据自己对模型的理解进行调参,之后进行严格的交叉检验。

3. 模型诊断。主要针对过拟合与欠拟合,常用的方法是绘制样本个数和经验损失函数学习曲线,训练误差和验证误差,这里需要理解方差与偏差两种现象,此外,还可以从模型的角度进行防止过拟合或者欠拟合,例如减少决策树的层数,增加神经网络训练的轮次等等。

4. 模型评估。模型评价的方法有许多种,我们根据模型选择我们需要的评价指标,常用的有以下几种(参考周志华老师《机器学习》):

① MAE,RMSE;

② 精确率与错误率;

③ 查全率与查准率;

④ ROC和AUC;

分析误差的来源

5、模型提升。也加模型融合,是冲击竞赛必备之一,就是之前提到的集成学习,Bagging、Boosting、Stacking,Boosting就有Adaboost、GBDT、XGBOOST等,对残差进一步拟合,Bagging采用的有多票表决Voting等,Stacking是模型融合的强力方法。这方面我做的不是很多,还需要继续提升,但是基本上,特征工程和模型融合是重中之重,在竞赛中都是很好的工具。

 

五、解释模型

一般竞赛里面可能到第四步的精确率就差不多了,基本上看中结果,谁在比赛中对特征理解更到位、对特征工程投入有效的时间,谁就能得到更好的模型结果。

如果是写论文或其他的科研项目,需要对模型进行解释,我们可以对重要性、对特征工程时的一些工作进行解释。

 

上面如果有错误,希望大家能够指正。

对于机器学习,我个人有很多一知半解的地方,思考的较少,希望能够和更多的人交流,不断进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值