在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
上篇文章刚刚说到决策树这个问题,如果我们本来就知道这些条件,那么自然就去写if……else……来构建分支选择条件就好了,但是大部分情况下,是我们根本不知道这些条件: 你做一个我就知道我要什么了……这只是一个美好的梦想,实际上: 不需要……需要……要…… 此刻,我的心情是: 遇上这种情况,怎么办呢?这就是我们今天要说,当你不知道规则的时候(客户的需求),但是你有很多设计稿已经被客户给毙了(有很多分类的样本),我们怎么来构建一颗客户的决策树。 首先,来看看下面的最简单的数据: 第一列是设计图中使用的图片数量,第二列就是客户是否接受这个设计,然后通过R语言的tree包,直接生成树: 代码见文章底部的github地址 可以很清晰的看出,这就是一个非常简单粗暴的均分法,用平均数作为分断标准。 实际上,这么简单的数据,就算不用这个包去计算,用眼睛一看也能明白,但是如果数据量非常大的话,眼睛自然就不够用了,比如下面这份北京市1978-2005年的GDP数据(数据和代码,见文章底部): 按照传统回归的方式,我们就选择GDP与年份来进行线性回归(看看随着年份的变化,GDP的变化情况是怎么样的): 可以看见,两个变量之间简单的线性回归,r方(判断系数)还是挺高的,达到了0.74,也就是说,我的全局回归模型,能解释74%的自变量对因变量的关系,这个拟合程度是比较高的。 下面我们可以试试局部回归,局部回归最大问题就是如何确定回归的窗口,过大,效果不明显,过小,又会出现过拟合,所以……我们的决策树就可以登场了,首先做一个决策树,看看分类情况以及数据分布情况: 接下去我们可以进行一下局部回归: 如果就做第一层树的窗口回归,以2006年分段,发现在2006年之后的拟合度达到了0.99,这是一个很高的拟合度了,而2006年之前,拟合度也从全局的0.74提升到0.76,不十分明显。 而2006年之前,还可以再分为2000年之前与2000年之后,再做第二层的局部回归: 可以发现,随着层数的加深,局部回归的拟合性能就越好……当然,如果你把窗口缩小到最小,那么就可能出现完全拟合,也就是所谓的过拟合了。 树的层数,决定了窗口的粒度,粒度越细,就能揭示更多的细节,而粒度越粗,就更能抽象出整体的趋势。那么我们把三条回归线都绘制上去,看看最后的结果: R语言的Tree包,实际上对于树的分层没有太好的控制,虽然可以用tree.control这个参数来控制分裂的最小样本数,但是没有办法控制树的层数,下一章,我们看看Python里面的机器学习包sklearn会不会有更好的办法。 待续未完。 文中R语言的源码和数据,大家可以到虾神的github仓库下载(点击原文也可以跳转过去): https://github.com/allenlu2008/RDemo |
请发表评论