编辑-滴滴算法大赛算法解决过程 - 决策树
2016-06-02 13:01
447 查看
决策树C#的实现探索
关于GBDT的概念性的文章,这里不再重复了,请自行百度一下。决策树(分类)
组委会是要求测算GAP值,是个定量问题。在这之前,我们看一下是否能够限定性分析一下GAP的高低呢?从滴滴算法大赛的数据可以知道,数据的特征值大约有这些:
天气相关:天气类型,PM2.5(离散化处理),温度(离散化处理)
交通状态:需要将原有数据重新计算为一个新的指标,例如将拥挤度进行加权平均。
POI数据:挑选特征明显的分类
有一些特征需要自己去发现
工作日/休息日
特殊天气(极端最低气温)
时间段(根据组委会的题目,可以将9个待预测时间片,变化为9个时间段)
整理出来的表格大概像这个样子的(不完全,示例)
天气类型 | 交通状态 | 工作日 | GAP分类 |
---|---|---|---|
晴 | 拥挤 | 是 | 高 |
雷暴 | 轻度拥挤 | 否 | 低 |
晴 | 拥挤 | 否 | 中 |
雪 | 拥挤 | 否 | 中 |
晴 | 重度拥挤 | 是 | 高 |
Information Gain 信息增益 和 Relative Information Gain
IG(GAP分类 | 天气类型) = H(GAP分类) - H(GAP分类 | 天气类型)
IG(GAP分类 | 交通状态) = H(GAP分类) - H(GAP分类 | 交通状态)
IG(GAP分类 | 工作日) = H(GAP分类) - H(GAP分类 | 工作日)
哪个数字最大就挑选哪个作为第一优先分类条件。
现在我们假设工作日是最高信息增益的,作为第一个决策条件
第一次分组之后就是这个样子了:
天气类型 | 交通状态 | 工作日 | GAP分类 |
---|---|---|---|
晴 | 拥挤 | 是 | 高 |
晴 | 重度拥挤 | 是 | 高 |
天气类型 | 交通状态 | 工作日 | GAP分类 |
---|---|---|---|
雷暴 | 轻度拥挤 | 节假日 | 低 |
晴 | 拥挤 | 否 | 中 |
雪 | 拥挤 | 否 | 中 |
对于节假日组,根据交通状态进行再分类
天气类型 | 交通状态 | 工作日 | GAP分类 |
---|---|---|---|
雷暴 | 轻度拥挤 | 否 | 低 |
晴 | 拥挤 | 否 | 中 |
雪 | 拥挤 | 否 | 中 |
天气类型 | 交通状态 | 工作日 | GAP分类 |
---|---|---|---|
晴 | 拥挤 | 否 | 中 |
雪 | 拥挤 | 否 | 中 |
天气类型 | 交通状态 | 工作日 | GAP分类 |
---|---|---|---|
雷暴 | 轻度拥挤 | 否 | 低 |
(当然还有一种情况是所有特征都用完了,还是不能完全分类,这个时候可以使用多数表决的方式决定分类)
决策树(定量)
上面是一个定性的过程,下面我们来看一下,如果需要定量怎么处理呢?天气类型 | 交通状态 | 工作日 | GAP数 |
---|---|---|---|
晴 | 拥挤 | 是 | 893 |
雷暴 | 轻度拥挤 | 否 | 375 |
晴 | 拥挤 | 否 | 542 |
雪 | 拥挤 | 否 | 437 |
晴 | 重度拥挤 | 是 | 753 |
(输入和输出之间的差就是误差,这里往往不是计算简单的差,而是方差)
这里的平均值就是( 893 + 375 + 542 + 437 + 753 ) / 5 = 600
天气类型 | 交通状态 | 工作日 | GAP数 | 误差 |
---|---|---|---|---|
晴 | 拥挤 | 是 | 893 | 293 |
雷暴 | 轻度拥挤 | 否 | 375 | 225 |
晴 | 拥挤 | 否 | 542 | 58 |
雪 | 拥挤 | 否 | 437 | 167 |
晴 | 重度拥挤 | 是 | 753 | 153 |
分裂的时候选取使得误差下降最多的分裂
如果我们选择工作日作为分裂条件
工作日的均值是:(893 + 753 )/ 2 = 823
天气类型 | 交通状态 | 工作日 | GAP数 | 误差 |
---|---|---|---|---|
晴 | 拥挤 | 是 | 893 | +70 |
晴 | 重度拥挤 | 是 | 753 | -70 |
节假日的均值是:(375 + 542 + 437 )/ 3 = 451
天气类型 | 交通状态 | 工作日 | GAP数 | 误差 |
---|---|---|---|---|
雷暴 | 轻度拥挤 | 否 | 375 | -76 |
晴 | 拥挤 | 否 | 542 | +91 |
雪 | 拥挤 | 否 | 437 | -14 |
按照是否为工作日分裂之后的总误差是 9800 + 14253 = 24053
当然标准做法是计算所有的总误差,然后选取最小的总误差的特征作为分类特征
(如果在这里结束,则认为工作日的预测是823,节假日的预测是541当然这还没有完)
第一颗树:
工作日:+823
休息日:+451
天气类型 | 交通状态 | 工作日 | GAP数 | 误差 |
---|---|---|---|---|
晴 | 拥挤 | 是 | 893 | +70 |
晴 | 重度拥挤 | 是 | 753 | -70 |
雷暴 | 轻度拥挤 | 否 | 375 | -76 |
晴 | 拥挤 | 否 | 542 | +91 |
雪 | 拥挤 | 否 | 437 | -14 |
如果按照拥挤分类呢?
注意这里我们使用的输入值是误差!!
天气类型 | 交通状态 | 工作日误差 |
---|---|---|
晴 | 拥挤 | +70 |
晴 | 拥挤 | +91 |
雪 | 拥挤 | -14 |
雷暴 | 轻度拥挤 | -76 |
晴 | 重度拥挤 | -70 |
轻度拥挤 : -76
重度拥挤 : -70
拥挤 : +49
(这些数字的意思是,如果你认为工作日的预测是823,节假日的预测是541,两者都需要根据拥挤程度根据上述值进行修正)
天气类型 | 交通状态 | 工作日误差 | 交通状态误差 |
---|---|---|---|
晴 | 拥挤 | +70 | +21 |
晴 | 拥挤 | +91 | + 42 |
雪 | 拥挤 | -14 | - 63 |
雷暴 | 轻度拥挤 | -76 | 0 |
晴 | 重度拥挤 | -70 | 0 |
天气类型 | 交通状态:拥挤 |
---|---|
晴 | +21 |
晴 | + 42 |
雪 | - 63 |
雪:- 63
在交通状态为拥堵的时候,如果是晴天,修正 31,雪:修正 -63
预测一下
天气类型 | 交通状态 | 工作日 | GAP数 |
---|---|---|---|
雪 | 拥挤 | 是 | ? |
拥挤:+49
拥挤 且 雪天:-63
预测:809
天气类型 | 交通状态 | 工作日 | GAP数 |
---|---|---|---|
雪 | 拥挤 | 是 | 809 |
C#代码
回归分类树节点
/// <summary> /// 回归分类树节点 /// </summary> class TreeNode { /// <summary> /// 节点属性名字 /// </summary> public string attrName { set; get; } /// <summary> /// 节点索引标号 /// </summary> public int nodeIndex { set; get; } /// <summary> /// 包含的叶子节点数 /// </summary> public int leafNum { set; get; } /// <summary> /// 节点误差率 /// </summary> public double alpha { set; get; } /// <summary> /// 父亲分类属性值 /// </summary> public string parentAttrValue { set; get; } /// <summary> /// 孩子节点 /// </summary> public TreeNode[] childAttrNode { set; get; } /// <summary> /// 数据记录索引 /// </summary> public List<string> dataIndex { set; get; } }
参考文献
GBDT的基本原理
相关文章推荐
- photoshop制作十二点钟光线金属字
- PS经典教程—使用你自己的图片制作…
- photoshop设计针脚线效果
- 利用photoshop创建一个3D绚丽的文…
- android.content.res.Resources$NotFoundException: String resource ID #0x0
- 30分钟让你成为photoshop钢笔工具…
- photoshop制作一个装水晶按钮的纸…
- Codeforces Round #355 (Div. 2) [Codeforces677]
- 5分钟完成!轻松制作一张真实感观…
- Adobe Dreamweaver CS5 中设置本地…
- Microsoft JET Database Engine 错…
- 在WINDOWS7(IIS测试时)中显示错…
- Adobe photoshop CS5 新功能官方视…
- 一张图片,可以实现各个菜单背景变…
- 注重细节!Photoshop打造Web2.0风格…
- 注重细节!Photoshop打造Web2.0风格…
- Photoshop教程:三步快速提高照片清…
- 如何用代理ip地址
- Web 设计与开发终极资源大全(上)
- Web 设计与开发终极资源大全(中)