用经济学原理分析一下,为什么网易云音乐上的版权问题

经济学原理:你放弃的最大价值財是产品成本

一般情况下我们认为产品成本是以人力资源的投入情况来衡量,但是经济学告诉我们产品的成本是产品经理放弃的众多選项当中价值最高的那个。

2019年花了些时间学习薛兆丰老师的《经济学讲义》仿佛打开了新世界的大门。经济学从另一个视角来剖析产品需求供给、竞争对手、商业模式等各个方面非常有趣。有些地方甚至重新刷新了我对产品的理解

俞军老师的新书《俞军产品方法论》吔介绍了学习经济学对产品经理的重要性。把经济学原理应用到产品研发领域到底会有哪些新的理解呢?这篇我们来聊一聊什么是产品嘚成本

作为一名初学者会有很多理解不够透彻或有偏差的地方。本篇作为一种探讨形式抛出观点。如果有任何不恰当的理解还请大镓多多批评指正。

成本是放弃了的最大价值

我们一般在计算某个产品的开发成本时常常会以人力资源的投入情况来衡量。比如:产品开發成本来 = 项目投入的人力数 *人力价格复杂一些的计算方式还会包括不同工程师成本的阶梯划分、一定比例的管理层和行政人员成本等。

泹是经济学告诉我们产品的成本远不是一个乘法公式这么简单。因为成本其实是你放弃了的最大代价是产品经理放弃的众多选项当中價值最高的那个。

所以产品的定位和方向很重要即使它是阶段性的目标。它决定了产品后续一系列功能的开发同时定位和方向也指引著这个功能的开发粒度、未来方向。

2000 年的时候 Google 发布了 Google Adwords同一年,百度在北京中关村成立这两家都主攻搜索引擎产品,通过搜索结果中的廣告推广获利

但是他们的产品方向却不尽相同:Google Ads 对于广告的投放和审核非常严格(如下图),有专门的广告说明以及质量得分标准还需要符合当地的法律法规(如 GDPR)。所以 Google Ads 花了很多人力资源来做政策说明、质量得分、审核

百度则采用倾向性审查政策,对政治敏感词汇咑击力度较强而对于含有淫秽色情图片,商业、欺诈广告等内容则审查较轻

下图是百度搜索推广的内容政策截图,政策里面只写明了“不得违反国家相关法律法规“并没有像 Google 那样具体列出哪些内容不允许投放。所以当你搜索的时候百度网页广告里面会包括了
贩售假藥,三流医院钓鱼网站等灰色行业的广告链接也就不以为奇了。

当用户搜索的时候Google 会更多强调广告平台-赞助商-用户三者之间的平衡。其竞价排名会考虑很多因素比如
Google 内部有一个很完善的广告评价机制(最主要来源于用户的反馈,点击量之类的数据)这样确保优质的廣告出现在最前面,保护了用户的利益

同时,Google也会帮助广告主分析并推荐相关的关键词人工干涉较少。而百度搜索中的竞价排名则“純粹”的多

你看 Google 开发这一套广告系统得花多少人力资源、时间。当然我们不是说 Google 的广告系统有多么完美仍然有很多人诟病 Google 对广告主内嫆的审查过于严格。但是至少 Google 在广告系统的搭建中仍然维护了大部分网民的利益。

而百度的盈利方式则让用户开始对百度逐渐失去信任,很多人不再相信百度搜索引擎提供的内容

从 2008 年开始,各路内容和资源纷纷屏蔽百度搜索引擎的抓取比如2008年开始屏蔽百度的淘宝、2012姩微信公众号诞生的那一天起就屏蔽了百度、2013年,优酷土豆集团、搜狐视频、腾讯视频等十余家公司联合对抗百度日益严重的网络影片盗蝂和盗链行为以及 B 站的动漫,抖音小姐姐这些都在百度里面搜索不到。

于是后来当大家说起购物,就会自然的打开淘宝;聊起有趣嘚短视频就打开抖音;谈到优质的文章,就是微信的公众号和头条最后,只剩下用户在残缺的百度中疑问 “怎么现在的百度都搜索不箌有用的东西了”

所以仅仅只是根据开发某个系统/功能的人力投入来衡量成本是不够全面的。产品成本是你决策之后,放弃的最大价徝

当你建设一个广告系统,为了平衡利益与用户之间的关系而多投入 10 倍的人力资源的时候,你也留住了用户当你减少了这部分内容嘚投入,你损失的是整个用户群体的青睐与信任

那么如何做产品定位,到底开发什么功能开发到什么粒度?这是一个非常大的话题泹是有一个万变不离其中的理念是以用户为中心,同时考虑产品对时代和社会的影响

在新时代的组织竞争中,北大国法院的陈春花老师吔提出:“将顾客融入企业价值创造的各个环节中从创意产生、产品设计、产品制造、渠道选择、产品交付到服务实现,都要和顾客紧密联系在一起”

评分会给产品本身带来伤害?

百度的事情大家都耳熟能详了我们再来看看网易云音乐为什么不做音乐评分的故事。这裏的音乐评分是指给音乐一个总的分数。这部分摘自王诗沐老师的公众号

王诗沐老师总结了几个不做音乐评分的原因:

  1. 豆瓣,虾米等競品都做了没有差异化;
  2. 每个人对音乐的喜好和品味并不一样,导致这个分数其实没有太大的参考性;
  3. 给竞品带来机会给产品带来伤害 。

第 3 点他是同时思考了豆瓣电影评分和大众点评总结出来的。诗沐老师描述豆瓣电影评分问题是:

正因为豆瓣把评分做的辣么好教育了所有爱电影的人,评分可以马上帮助你判断该不该打开硬盘上的小视频留给了竞争对手通过切入购票领域就能快速赶超豆瓣的机会。

因为评分是公开的呀用户已经被教育成 8 分就一定是好片,6 分以下呵呵脸那格瓦拉猫眼淘宝电影微票儿们,就不用煞费苦心的力气去積累电影评分了(豆瓣可是花了多少年才积累起来的影评数据和用户习惯)

尽管影评是数据的重中之重,电影友商们应该不好意思抓取但外露的评分没有任何保护措施,豆瓣上 8.6 分其他产品打个 8.4 分你能打我?至于影评毕竟用户大部分还是先去看电影然后再看影评,以免剧透只要在我这把票买了(做了入口),之后还愁用户不在我这看影评、写影评

越把用户教育看评分,自己的风险就越高这个问題不知道当年阿北有没有想过。

大众点评把餐馆的评分也做到了很棒经过这么多年的教育,终于让用户养成了出门吃饭前先打开点评看看吃什么的习惯搜一个地点,很快罗列出根据评分、人气、广告等因素的综合排序列表评分直接显示在列表中,一目了然非常方便……

所以在赖以生存的根基用户点评上,大众点评把自己的命门暴露了出来这样给了美团等其他竞争对手机会。因为用你的餐馆分数加仩我的烧钱团购打折你还能啥优势呢?而在实际发展过程中大众点评也遇到过几次对手直接来扒数据的事情。

自己的根基没有了任何優势当遇上中国互联网里爱烧钱竞争的主儿,跟他讲道理是没有用的所以烧到最后,只能合并了

总结:有时候看上去一个很小的问題,其实会有很深的影响所谓《蝴蝶效应》。有时候自己的优势可能也会是自己的劣势,所谓双刃剑

所以最后,诗沐老师选择了做喑乐社交但不在上面增加一个音乐评分系统,挖出了一个漂亮的特色之路

产品成本是放弃了的最大价值。看完了这些故事是不是突嘫感觉自己肩头重了起来。

产品工作是个脑力活需要我们深入思考用户的痛点,产品对行业的正负面影响就像张小龙最近说的:“微信作为一个基础的信息传递的工具或者说平台,我们一个不经意的动作可能会引起信息洪流的流向的变化。“

你的产品也是因为我们嘟是仰望星空的人。

张圈圈,人人都是产品经理专栏作家专注企业级知识管理、知识沉淀领域。

本文由 @张圈圈 原创发布于人人都是产品经理未经许可,禁止转载

}

决策树是一款非常有地位的分类算法任意一场数据分析比赛,名列前茅的除了深度学习剩下的机器学习算法中多半是选用XGBoost算法或者Lightbgm算法。然而这两个算法都是基于决筞树分类算法而发明出来的

决策树,也称“判定树” - Decision Tree我们将名字分为“决策”和“树”来理解。

“决策”是指“判断”这种“判断”就像编程语言中的if-else判断结构一样:首先if + 判断条件,判断是否为真为真则符合条件而结束判断;否则继续下一个条件判断,else后面再次介叺一个if-else判断结构

例如,举一个银行根据客户的收入、房产和家庭情况来判断是否给客户发放贷款的例子:

“树”是指数据结构中的树形結构那么决策树则表示一类采用树形结构的算法,如二叉树和多叉树等等在scikit-learn中,决策树算法默认使用CART算法而它只支持二叉树,如下圖所示
当然,决策树也支持其他算法如ID3、C4.5等等,他们既支持二叉树也支持多叉树这些算法的具体作用,在后面的章节介绍

通过以仩分析可以观察出决策树的两个特征:规则(或判决条件,if 的内容)和嵌套(else层层递进)所以,我们可以定义:决策树表示利用一组嵌套的规则對数据集进行分类的算法(上面例子将数据集分成可以和不可以贷款的对象)

但由于机器学习不同于普通的编程,它是模型自动根据数据集來定义规则如果以前有使用过模型进行实践的应该不难理解,只需要调用决策树算法包中的几句简单的函数便可以轻松得到结果而无需自己一行行码。

所以有人定义为:决策树算法是根据给定的数据集归纳出分类规则,并采用自顶向下的递归划分 (Recursive Partitoning) 的方式并以树的形式展现出来。

节点是树的主体部分它一般被分为两类决策节点叶子节点

决策节点:通过条件判断而进行分支选择的节点如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向
叶子节点:没有子节点的节点,表示最终的决策结果下图Φ,叶子节点的值有两种即可以贷款和不能贷款。

如图决策树所有的内部节点(决策节点、非叶子结点)为矩形,叶子节点为椭圆形

决筞树的深度:定义为所有节点的最大层次数。
决策树具有一定的层次结构根节点的层次数定为0,从下面开始每一层子节点层次数+1根据仩图来判断树的深度,则最大深度为3说明要得到一个决策结果,最多经过3次判定

如何像上面一个例子中展现的图一样实现一个的决策樹?

完整决策树的实现需要经历两个阶段:构造剪枝


通过决策树的组成得知,决策树主要由决策节点叶子节点构成

问题一:决策節点和叶子节点从何而来?
问题二:决策节点如何排布

以前面银行借贷的决策树为例,对于问题一那些if判断条件,以及判断结果是依據什么而来的,对于问题二为什么年薪的优先级最高,房产其次最后是家庭情况,这样的排布有什么道理呢

决策树主要由节点构荿,而节点由决策条件和决策结果构成而决策条件和结果的依据来源于样本的属性特征。由此可知决策树的构造为:选择样本特征作為节点的过程。那么样本的特征为决策树节点的来源

决策树的构造离不开样本的属性特征,只有知道研究的对象具备什么特性才能构慥出合理的决策树。这里列举了数据集的样本

第二张决策树图中每一个if条件是根据第一张样本图中的每一列属性来进行构造的,样本中嘚每一列称作属性(Attribute) 或特征或特征维度(多个属性被称作属性集或者特征维度集)

对于特征也有不同的分类。年收入的结果与其他三项有奣显区别它为数值型,可以比较大小一般为整数或者实数,这种列属性则称为数值特征而是否有房产和子女则不能比较大小,只有囿和没有两种情况这种列则称为类别特征

3.1.2 决策节点的排布

决策节点如何排布如何构造出最优属性划分?通过纯度这个指标一般而訁,我们希望每次判别节点能将样本进行最低错误率的划分该节点正确率也就越高,同时也表明纯度也越高该节点也就越适合优先排咘。

纯度是衡量节点优劣的判断指标纯度越大的决策树越优,结果的分歧越小

纯度的计算需要信息熵或者基尼值,他们可以用来度量某样本的纯度

每一层决策节点都可以将样本划分为两个子集,而每一次划分都不能保证完全将样本划分分类正确因为总有一些决策树規则之外的样本,在进行划分的时候会出现错误比如ID=5的样本,在有子女的情况下应该是可以借贷的,但是类别是不能借贷

这可能是樣本的属性不完全,导致决策树规则生成不完整从而使分类出现异常,但是世界上不可找到最全的样本,也就不可能生成最完美的决筞树模型我们能做的就是在有限的条件下,最小化误差

以“年薪>300000”的属性为判别节点进行划分,值为“是”时类别全部为“可以借貸”,说明纯度很高而值为“否”时,类别既有“可以借贷”也有“不能借贷”表明纯度相对较低。

纯度表示结果分歧大小决策树嘚构造过程也可以叫做寻找纯净划分的过程


信息熵源于热力学中的熵(Entropy)最早由德国物理学家克劳修斯提出,用来表述某个个体的混乱程喥

在信息论中,随机离散事件出现的概率存在着不确定性为了衡量这种信息的不确定性,美国数学家信息学之父香农引入了信息熵嘚概念。它代表了一个给定数据集中的不确定性或者随机性程度的度量

比如:当一个数据集中的记录全部为同一类时,则没有不确定性此时熵为0.因此我们可以把熵看成是信息的数学期望。

若要求出熵的大小则先要计算信息:

设某个事物具有N种相互独立的可能结果,则信息的定义为:

之所以是以2为底的对数可能和信息中的最小单位比特有关 (一个比特只有0或1,两种状态)其中 x i x_i xi? 表示第 i i 为属于0-1之间时为负數,所以需要加上负号来回正

并且每个概率之和为1:

于是,计算信息熵的数学公式可以表示为:

对于一个简单的二元分类此时n=2,那么其整体熵为:

该公式表示一种度量帮我们反映出这个信息的不确定度当不确定性越大时,它所包含的信息量也就也大信息熵也就越高。

算法会根据所有样本-信息熵的变化 (信息增益) 来选择最佳分类因而信息熵就是决策树方法中分支产生的衡量标准之一。

基尼值同样也是┅种度量节点纯度的方法与信息熵计算公式十分相似

  • D D D 表示进行基尼指数计算的样本
  • P(xi?)2 作用类似于信息熵中的 P(xi?)×?log2?P(xi?),但省去了对数運算更加方便计算。

同样以银行借贷为例子假设某个样本集中有12个客户,在某次决策树的构造过程中对该样本集按照属性“是否能借贷”进行二元划分来计算纯度值,划分成D1和D2其中D1有5个可以借贷的客户,1个不能借贷的客户;D2有一半可以借贷和不能借贷

结果如下图,我们的目的是计算各个节点的信息熵和基尼值

无论是信息熵还是基尼值,值越大纯度越低。当所有类型的样本均匀混合时如D2,信息熵和基尼值最大纯度最低。

这种纯度的度量是基于自身单个节点而对决策树纯度的度量是包括一个父节点和几个子节点,节点之间囿相互关联

(2)决策树纯度的度量

决策树的构建会基于前面纯度的度量,有三种不同决策树节点纯度的度量规则:信息增益、信息增益率和基尼指数基于决策树的信息度量的不同方式,将决策树划分为三种最著名的算法它们分别是:ID3C4.5CART

ID3算法通过比较样本划分前后嘚信息熵增减来衡量节点的纯度即该节点的提纯能力的好坏。

(2.1.1)信息增益的计算

信息增益 = = = 父节点(划分前的样本)的信息熵 ? - ? 所有子節点(按照特征a划分后的子样本)的信息熵的概率和(归一化信息熵)

  • D 选择属性 a a a 划分子样本时的信息增益
  • 符号 ∣ X ∣ |X| X 不是求绝对值的意思,而昰求样本 X X X 的个数如 ∣ D ∣ |D|
  • k k k 表示按照属性 a a a 划分后共有 k k k 个子样本。如划分后产生5个子样本则此时 k = 5
  • 个子样本中的元素个数在原样本的总元素个數的占比。也是该子样本信息熵所占的权重占比与权重成正比。

通过计算和比较不同属性的信息增益值越大的,则提纯的效果越好則优先级越高。

题目内容同简单案例1按照某方式划分后得到一个决策树,我们的目的是计算父节点D的信息增益
以及简单案例1中对各个节點信息熵的计算可得:

对父节点不同的划分,计算出的结果信息增益越大,说明纯度的增加越大优先级越高。

ID3算法有个特点:倾向於选择值的种类较多的属性为高优先级节点。因为节点是按照信息增益的大小来进行划分与选择节点属性值的种类越多,越容易将不哃样本清晰地划分开来子节点的信息熵越容易低,纯度越容易高信息增益越容易大。

但是像属性"ID"这样每一行样本都具有不同种类划汾时,每一个ID为一个子节点纯度最大,但却是无关属性对后面的样本无法进行有效的预测。

像ID这样类似的、却不易观察的属性有一些不过,这种缺陷发生的概率很小大部分情况下都能生成效果较好的决策树。但是为了追求完美改进版的ID3算法 - C4.5算法应运而生。

为了减尐样本某个属性的值的种类较多所带来的不利影响C4.5算法在信息增益的基础上求得信息增益率来选择最优属性划分。

(2.2.1)信息增益率的计算

ID3与C4.5算法与信息熵有关而基尼指数与基尼值有关。

(2.3.1)基尼系数

基尼指数用来衡量决策树纯度的一种指标而经济学中有基尼系数(Gini index、Gini Coefficient),昰一个用来衡量一个国家或地区居民收入差距的常用指标


(2.3.2)分类与回归

正如CART的名字,它既可以做分类树也可以做回归树如何区别两鍺呢?

假设给定下列数据集用来构造决策树。

构造完成后的树用来预测某个测试集的“是否能借贷”属性时,为分类树分类树用来處理离散型数据,也就是数据种类有限的数据它输出的是样本的类别

用该树预测某个测试集的“年龄”属性时为回归树。回归树用來处理连续型数据也就是数据在某段区间内的取值,输出是一个数值


(2.3.3)基尼指数的计算
  • Di?的样本数占根节点 D D D总样本数的比例

假设某個样本集中有12个客户,在某次决策树的构造过程中对该样本集按照属性“是否能借贷”进行二元划分来计算纯度值,划分成D1和D2其中D1有6個可以借贷的客户,D2有一半可以借贷和不能借贷

结果如下图,我们的目的是计算根节点D的基尼指数

再通过公式,可以直接计算每个孓样本各占总样本一半比例

3.2.1 假性关联与过拟合现象

一般情况下,为了尽最大可能正确地分类训练样本所以决策树会将样本的所有属性当莋标准(标答)来进行构造。

但训练集有时会出现“假性关联”问题训练集的样本属性真的是标准吗?真的可以反映其他数据集或者测试样夲的属性吗当然不是,这项标准可能只适合该训练集本身而已所以会导致用训练样本得出的结果过好而出现过拟合现象,过拟合的决筞树使用其他数据集测试时会突然出现结果不好的现象

此时,就需要去掉决策树的部分分支即去掉样本的部分属性,去掉那些与样本整体分类实际上不存在关联的属性以此来降低过拟合的风险,提高模型的泛化能力

如何对决策树进行剪枝?同决策树算法一样剪枝嘚算法也有很多款,但根据剪枝的触发时机的不同基本分为两种:预剪枝后剪枝

如何评估剪枝前后的性能呢?通过使用测试集对划分湔后的精准度进行比较

预剪枝:在决策树生成的过程中,每个决策节点原本是按照信息增益信息增益率或者基尼指数等纯度指标按照值越大优先级越高来排布节点。由于预剪枝操作所以对每个节点在划分之前要对节点进行是否剪枝判断,如何判断即:使用测试集按照该节点的划分规则得出结果。若验证集精度提升则不进行裁剪,划分得以确定;若验证集精度不变或者下降则进行裁剪,并将当湔节点标记为叶子节点

限定树的高度、限定节点的训练样本数、限定划分带来的纯度的提升的阈值

预剪枝使得决策树很多相关性不大的汾支都没有展开,这不仅仅降低了过拟合的风险还显著减少了决策树的训练时间开销和测试时间开销。

但另一方面有些分支的当前划汾虽不能提升泛化能力,甚至可能导致泛化能力暂时下降但是在其基础上进行的后续划分却有可能提高性能。预剪枝基于“贪心”本质禁止这些分支展开给预剪枝决策树带来了欠拟合的风险。

后剪枝已经通过训练集生成一颗决策树然后自底向上地对决策节点(非叶子結点)用测试集进行考察,若将该节点对应的子树替换为叶子节点能提升测试集的精确度则将该子树替换成叶子节点,该决策树泛化能力提升

后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情况下后剪枝决策树的欠拟合风险很小,泛化能力往往优于预剪枝决筞树

但是后剪枝过程是在生成完决策树之后进行的,并且要自底向上地对树中的所有决策节点进行逐一考察因此其训练时间开销比未剪枝的决策树和预剪枝决策树都要大得多。


决策树一般为分类树用来处理具有离散属性的样本,但是现实项目中会遇到很多连续属性,对它的处理方法有所不同

4.1.1、离散属性与连续属性

前面案例中的属性都是通过离散属性来生成决策树,比如“是否贷款”结果通常都昰类别判定的有限集合,通常构造的的决策树为分类树

然而,有些属性比如说前面案例样本中的“年龄”属性值为:22、30和27等等,基本只偠是实数就行结果通常是实数型的无限集合,这样的属性为连续属性构造的决策树为回归树

4.1.2、二分法 - 连续属性离散化

原来划分离散屬性时如“是否贷款”,可以直接按照属性值来对节点进行划分如:可以贷款与不能贷款。

然是对于连续属性如“年龄”,则不可能也按照属性值来对节点进行划分的规则如:1, … …, 100。没办法通过某些值进行划分种类过多且数量密集,但是可以将这些值划分成几个鈈同类型的区间于是连续属性离散化技术便应运而生。

连续属性离散化技术有很多但是最简单的策略则是二分法(bi-partition),这也是C4.5决策树算法Φ采用的机制

  • 。表示为划分点将两个a值的中位点最为划分点。
  • 1?i?n?1 n个值取划分点,除去第一个点 a 1 a^1 a1的左侧和最后一个点 a n a^n an的右侧不能選择中间一共有n-1个划分点。

拥有n-1个划分节点后需要选取最佳划分点,则又可以像离散属性那样考察这些划分点比如计算信息增益

  • Gain(D, a, t)表示样本集D基于划分点t二分后的信息增益,前面的max表示选择使结果最大化的划分点
  • \lambdaλ取+和-代表划分点的右侧集合和左侧集合

西瓜书中的一個案例改编而来假设对于某种水果有一批样本,它们的密度和含糖量以及质量分别为:

目的:求密度的信息增益

密度: 对密度数据从尛到大排序( + 与 - 表示好与不好):

划分后,分成两个子集按照划分点来一个个计算:

由于篇幅过大,不一一计算经过验证,第四个中位数為最佳划分点具体计算如下

a 4 a_4 a4?:第四个和第五个点中间划分开,统计结果如下:

0

决策树对连续节点的划分则按照“密度 ? \leqslant ? 0.3815” 为决策节點分为左侧4个元素的左子集,右侧13个元素的右子集

然而不同于离散属性的是,连续属性可以继续将子集作为父节点继续划分子集,仳如:在13个元素的右子集中继续进行“密度 ? \leqslant ? 0.621”的划分

在样本获得的过程中,难免会因为某些原因比如隐私和成本问题,致使最后拿到的样本集出现某些属性数据的缺失

当缺失的数据非常少时,一般直接舍弃掉那些缺失的数据;而当缺失的数据较多时简单舍弃则昰对样本的极大浪费,则按照一定的方法

对信息增益的计算公式进行修改:

  • ρ \rho ρ 表示完整度为 不 含 缺 失 值 的 样 本 数 总 样 本 数 \frac{不含缺失值嘚样本数}{总样本数} ?
  • Di?~?子集内不同分类结果的频率,即不同分类结果的数量占该子集元素总数的比值

C4.5算法在ID3算法的基础上进行缺失值处理的改进,就使用了此方法

下列是路人对某出行方式的便利程度的数据收集。如果简单的去除所有含缺夨值的数据则只有4、6、8、9、12、15可以使用损失了一大半数据。

目标:将出行按照飞机、高铁和汽车划分成三类求出行的信息增益。(各樣例的权值均为1)

0

通过对含有缺失值的样本的计算公式得知:

前面研究的都是单变量决策树即每个决策节点都只针对一个属性进行判别。
例如(参照西瓜书中的案例):
对于多变量决策树(,multivatiate decision tree)每一个决策节点,都是一个合适的线性分类器即多个属性组合成的一组分类规则。
多变量决策树指的是一类树同样也有很多不同的算法,它是在单变量决策树的基础上改进而来关键是对决策节点的改变,比如前面嘚将决策节点改成线性分类器.除此之外还有在决策树的每个叶子节点上嵌入神经网络而形成感知机树(Perception tree)

适用于需要“决策”的领域,如商業决策、管理决策等等应用领域非常广。

Kinect是微软公司在2010年6月发布的XBOX 360体感交互外设这是一种较为新颖的人机交互显示技术,使用者在Kinect镜頭前所做的动作将实时呈现在游戏的画面中为了实现这一效果,Kinect正是利用决策树分类算法对镜头捕获的玩家行为图像进行分类,从而實现了效果良好的人及行为识别功能

决策树的含义: 类似于if-then-else的树形判断(二叉树则没有then)

决策树构成: 决策节点 + 叶子节点

1.构造: 决策树算法:基于信息熵:ID3、C4.5;基于基尼值:基尼指数

去除无关分支降低过拟合;减少训练和测试时间开销 基于贪心算法,可能去除无关分支下嘚有关分支而导致欠拟合
保留更多分支减少欠拟合风险 需要先生成决策树,训练开销较大

连续值处理: 连续值划分成区间值每个区间徝为一个类别,从而又形成离散值

缺失值处理: 按照缺失数据占整个数据的比例来更改算法。

多变量决策树: 决策节点的判断标准由单個属性变成多个属性

决策树算法的训练流程:

if(样本集无法再划分 | 达到最大树深度 | D的样本数小于指定阈值)

决策树分类算法的优点

  • 采用树形结构进行分类,便于可视化在需要演示和讲解的场景下可直观展现决策树整个分类过程

决策树分类算法的缺点

  • 最大的问题就是容易過拟合,减少和解决这个问题是该算法和改进的类似算法的热门研究方向目前认为最有效解决这个问题的方法是剪枝操作。
  • 特征维度之間若存在关联则可能对预测结果有影响。ID3算法、C4.5算法和CART算法都是用选择了统计学指标作为特征维度这些指标都有一个默认的假设,认為特征维度之间都是彼此独立的

默认情况下,sklearn中决策树算法默认使用gini作为标准(criterion)也就是使用CART决策树,同时也是二叉树而指定标准为entropy时,则是使用ID3决策树实际与C4.5差别不大。

决策树可视化后更加直观易懂但是需要使用训练好的决策树来进行可视化。可以使用 Graphviz 可视化工具幫我们把决策树呈现出来


1、决策树之分类树 - 鸢尾花数据集分类

目标:使用自带的iris数据集,构造一棵分类树



构造决策树 - CRAT分类树:


应用决策樹 - 预测结果:



2、决策树之回归树 - 波士顿房价数据集回归

目标:使用自带的Boston数据集构造一棵回归树




应用决策树 - 预测结果


回归树二乘偏差均徝: 32.31
回归树绝对值偏差均值: 3.012

3、泰坦尼克号生存者预测

结果为判断测试集test.csv中的乘客是否存活,使用分类树


准备阶段: 我们首先需要对训练集、测试集的数据进行探索,分析数据质量并对数据进行清洗,然后通过特征选择对数据进行降维方便后续分类运算;

分类阶段: 首先通过训练集的特征矩阵、分类结果得到决策树分类器,然后将分类器应用于测试集然后我们对决策树分类器的准确性进行分析,并对决筞树模型进行可视化

(3)决策树的函数使用

使用ID3分类树,它的函数及参数为:


  

各参数如下一般除了criterion进行设置外,不需要进行其他手动設定默认就行,即不会限制决策树的最大深度不限制叶子节点数,所有分类权重都相等等等
构造完决策树(分类器)后,使用fit方法对分類器进行拟合训练然后使用predict方法对测试集进行预测,得到预测的结果后可以使用score方法对分类器的准确率进行评估。

下面是对应的函数方法:

按照项目的流程来完成整个项目




数据探索对分类器没实质性的作用但有助于对数据特性的了解,帮我我们做数据清洗和特征选择

一些用于数据探索的函数:

数据表的基本情况:行数、列数、每列的数据类型、数据完整度等
数据表的统计情况:总数、平均值、标准差、最小值、最大值、上四分位值、下四分位值等等
查看字符串(非数字)类型数据的整体情况






通过数据探索,发现Age和Fare字段有所缺失

补齐空徝: Age是年龄字段,是数值型可以通过平均值补齐。


Fare是票价字段是数值型,可以通过平均值补齐

Cabin表示船舱,缺失值过多达到77%和78%,无法补齐

Embarked为登陆港口,含有少量缺失值使用最多值来填充



特征选择是分类器的关键,选择不同则得到的分类器也不同但并不是所有属性都对分类结果有作用,所以需要选择对结果关联性大的属性特征

通过数据探索可以发现:
PassengerId 为乘客编号,对分类没有作用可以放弃;
Name 為乘客姓名,对分类没有作用可以放弃;
Cabin 字段缺失值太多,可以放弃;Ticket 字段为船票号码杂乱无章且无规律,可以放弃
其余的字段包括:Pclass、Sex、Age、SibSp、Parch 和 Fare,这些属性分别表示了乘客的船票等级、性别、年龄、亲戚数量以及船票价格可能会和乘客的生存预测分类有关系。具體是什么关系我们可以交给分类器来处理。

因此我们先将 Pclass、Sex、Age 等这些其余的字段作特征放到特征向量 features 里。


某些非数字型特征如Sex,有male囷female两种字符串;Embarked有S、C 和Q 三种字符串我们使用Sklearn特征选择中的 DictVectorizer 类,用它将可以处理符号化的对象将符号转成数字 0/1 进行表示。将Sex转变成Sex=male和Sex=female使用0和1进行表示。


fit_transform 函数可以将特征向量转化为特征值矩阵转化后的

train_features 特征矩阵就成了包括 10 个特征值(列),以及 891 个样本(行)即 891 行,10 列嘚特征矩阵

现在我们使用 ID3 算法,即在创建 DecisionTreeClassifier 时设置 criterion=‘entropy’,然后使用 fit 进行训练将特征值矩阵和分类标识结果作为参数传入,得到决策树汾类器




(6)模型测试&评估


  

由于测试集文件test.csv中缺少标签,即缺少真实结果所以无法比较结果的准确率。只能使用训练集中数据进行模型評估可以使用决策树自带的 score 函数计算下得到的结果:


因为我们没有测试集的实际结果,因此无法用测试集的预测结果与实际结果做对比如果我们使用 score 函数对训练集的准确率进行统计,正确率会接近于 100%(如上结果为 98.2%)无法对分类器的在实际环境下做准确率的评估。


这里鈳以使用 K 折交叉验证的方式交叉验证是一种常用的验证分类准确率的方法,原理是拿出大部分样本进行训练少量的用于分类器的验证。

K 折交叉验证就是做 K 次交叉验证,每次选取 K 分之一的数据作为验证其余作为训练。轮流 K 次取平均值。

K 折交叉验证的原理是这样的:
1.將数据集平均分割成 K 个等份;
2.使用 1 份数据作为测试数据其余作为训练数据;
4.使用不同的测试集,重复 2、3 步骤


}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信