数据挖掘实践(智慧海洋)
-
掌握基本工具,可视化分析
- geopandas的安装,根据对应的系统以及版本下载对应包,离线逐个安装,下载网址link
- gdal
- fiona
- pyproj
- shapely
- pip install geopandas
- kepler和folium的可视化
- 可视化分析
- 首先地图的经纬度存在一定偏差,但不影响彼此的相对位置关系以及轨迹,不影响最后的结论。
- 总体来看,围网和拖网较厚,刺网较薄
- 刺网的形状总体呈现毛絮状,会出现缠绕的样式
- 围网的形状总体较长,且会产生回环
- 拖网的路线相对比较平滑,呈现线性趋势
- geopandas的安装,根据对应的系统以及版本下载对应包,离线逐个安装,下载网址link
-
数据分析
- 了解数据的整体分布情况
- 查看数据集的样本个数和原始特征维度
- 查看数据集中特征缺失值、唯一值等
- 渔船轨迹可视化
- 把训练集的所有数据,根据类别存放到不同的数据文件中
- 分别从三个类别的数据文件中,随机读取某三个渔船的数据
- 每个类别中随机三个渔船的轨迹进行可视化
- 可以看到不同轨迹虽然有不同的变化,但是仍然不具有很强的区分性。
- 刺网的轨迹偏向于具有规则多边形的情形。
- 围网的部分轨迹偏向于围城一个圈的情形。
- 拖网的轨迹偏向于点到点,没有拐角的情形。
- 整体上来说,不同类别的轨迹仍然不具有很强的区别分性。
- 通过取不同的随机数,发现存在异常轨迹,轨迹中只存在几个点。
- 可以看到不同轨迹虽然有不同的变化,但是仍然不具有很强的区分性。
- 坐标序列可视化
- 通过对坐标x和坐标y序列的可视化,发现两个序列存在同时不变的情况,也就是速度数据一直在该序列中一直接近于0,因此可以判断存在POI点
- 三类渔船速度和方向可视化
- 不同轨迹速度的数据分布,均存在连续的低值,因此强化了对POI点存在的判断。
- 每个类别的渔船方向变化很快,可以判定为渔船在海上漂泊造成,因此此特征对于类别的判断不具有很强的区分性。
- 通过以上的数据分析,我们可以得到以下结论
- 每个特征中不存在缺失值和唯一值。
- 存在异常轨迹,该轨迹只含有几个点。
- 虽然不同类别的轨迹有不同的变化倾向,但是整体来说,不具有很强的区分性通过对坐标序列的分析,发现存在POI点。
- 通过对不同类别的速度数据分布可视化,发现速度具有很强的区分性。通过对不同类别的方向数据分布可视化,发现方向的区分性不是特别强。
- 作业
- 请尝试用Task1中的异常处理代码对异常数据进行删除之后,再分别绘制速度和方向的数据分布图、速度和方向的分位图。(代码相同,跳过)
- 在前面我们已经进行了绘制速度和方向的数据分布图。由Task1的keperl.gl可知,不同地理位置和船舶类型的相关性较大。请尝试将相同类型船舶的轨迹给拼接起来并绘制经度和纬度的总体分布特征。
- 了解数据的整体分布情况
-
特征工程
- 赛题特征工程
- 与固定点的距离
- 对时间,小时进行白天、黑天进行划分,5-20为白天1,其余为黑天0
- 根据月份划分季度
- 动态速度,速度变化,角度变化,xy相似性等特征
- 给速度一个等级,统计每个ship的对应速度等级的个数
- 方位进行16均分
- 统计速度为0的个数,以及速度不为0的统计量
- 加入x,v,d,y的中位数和各种位数
- 分箱特征
- v、x、y的分箱特征
- 将x、y进行分箱并构造区域
- Dataframe特征
- 各个区域的各id船的总的访问数量和有几类ID船的数量
- 对x,y坐标进行时间平移 1 -1 2
- 统计特征
- 一系列基本统计量特征 每列执行相应的操作
- 划分数据后统计
- embedding特征
- Word2vec构造词向量
- NMF提取文本的主题分布
- 参考
- 通过数据EDA、查阅对应赛题的参考文献,寻找并构建有实际意义的业务特征
- 分箱的原理
- DataWhale的joyful pandas
- Word2vec的学习
- 赛题特征工程
-
模型建立
- 模型训练与预测
- 随机森林
随机森林参数介绍 - lightGBM模型
lightGBM的学习可参见这篇文章
lightGBM中文文档这个对超参数的讲解较为详细,建议仔细阅读 - Xgboost模型
XGBoost基础介绍
XGBoost参数介绍
XGboost参数调优方法
- 随机森林
- 交叉验证
- 简单交叉验证(cross validation)
简单交叉验证是将原始数据分为两组,一组作为训练集,另一组作为验证集,利用训练集训练分类器,然后利用验证集验证模型,将最后的分类准确率作为此分类器的性能指标。通常是划分30%的数据作为测试数据 - K折交叉验证(K-Fold cross validation)
K折交叉验证是将原始数据分为K组,然后将每个子集数据分别做一次验证集,其余的K-1组子集作为训练集,这样就会得到K个模型,将K个模型最终的验证集的分类准确率取平均值,作为K折交叉验证分类器的性能指标。通常设置为K为5或者10. - 留一法交叉验证(Leave-One-Out Cross Validation,LOO-CV) 留一法交叉验证是指每个训练集由除一个样本之外的其余样本组成,留下的一个样本组成检验集。这样对于N个样本的数据集,可以组成N个不同的训练集和N个不同的验证集,因此该方法会得到N个模型,用N个模型最终的验证集的分类准确率的平均是作为分类器的性能指标。
- 留P法交叉验证
该方法与留一法类似,是从完整数据集中删除P个样本,产生所有可能的训练集和验证集。
- 简单交叉验证(cross validation)
- 模型调参
- 网格搜索
- 贝叶斯优化 贝叶斯优化介绍
- 模型训练与预测
-
模型融合
-
https://mlwave.com/kaggle-ensembling-guide/
-
https://github.com/MLWave/Kaggle-Ensemble-Guide
-
模型融合主要方法。
- 简单加权融合:
回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);
分类:投票(Voting) - boosting/bagging(在xgboost,Adaboost,GBDT中已经用到):
多树的提升方法 - stacking/blending:
构建多层模型,并利用预测结果再拟合预测。- stacking
- blending
- 简单加权融合:
-