当前位置:编程学习 > 网站相关 >>

集体智慧编程学习之决策树

常用的沟通工具,比如手机,QQ是和已经认识的朋友交流的工具。现在出现了一大批自诩的约炮神器,非诚勿扰挺好看的,宅男腐女的问题操碎了爸妈的心,世纪佳缘都上市了,看来大家对想认识不认识的人有巨大的热情。我也听说非诚勿扰牵手成功后最后走到一起的并不多,这些方式到底靠不靠谱?如果我去参加非诚勿扰,我会不会牵手成功?这里面是不是有一些规律可循,趁着今天被毁容不能出门,我就来学习一下决策树。

高中老师隔三差五让我们填一些表,各种性格和IQ测验。这些测验里很多是十几道题目,每道题目选择“是”或者“否”,这就是决策树的基本原型了。十几道题目相当于十几种要考察的因素,每道题目的选择就是决策树的一个决策,如果题目一选择了“是”,那就跳到题目2,如果选择“否”,那就跳到题目3,决策树也就是这个样子,这个因素的判断调试是否成立,成立了就走成立的分支,不成立就走不成立的分支,这样下来,决策树就像是以树状形式排列的一系列if-else语句。


[python]
if (因素A成立): 
    if (因素B1成立): 
        ... 
            if (因素N11成立): 
                你可以参加非诚勿扰 
            else: 
                你不可以参加非诚勿扰 
    else: 
        ... 
            if (因素N12成立): 
                你可以参加非诚勿扰 
            else: 
                你不可以参加非诚勿扰 
else: 
    if (因素B2成立): 
        ... 
            if (因素N21成立): 
                你可以参加非诚勿扰 
            else: 
                你不可以参加非诚勿扰 
    else: 
        ... 
            if (因素N22成立): 
                你可以参加非诚勿扰 
            else: 
                你不可以参加非诚勿扰 

if (因素A成立):
    if (因素B1成立):
        ...
            if (因素N11成立):
                你可以参加非诚勿扰
            else:
                你不可以参加非诚勿扰
    else:
        ...
            if (因素N12成立):
                你可以参加非诚勿扰
            else:
                你不可以参加非诚勿扰
else:
    if (因素B2成立):
        ...
            if (因素N21成立):
                你可以参加非诚勿扰
            else:
                你不可以参加非诚勿扰
    else:
        ...
            if (因素N22成立):
                你可以参加非诚勿扰
            else:
                你不可以参加非诚勿扰


我们的目的就是根据已知的数据,构建出这棵树。

概念理清楚了,我来一点一点实现这个算法。


[python] 
my_data=[['beijing','yes','yes',28,'yes'], 
        ['hebei','no','no',23,'no'], 
        ['henan','yes','no',24,'yes'], 
        ['hubei','no','yes',28,'no'], 
        ['hunan','yes','yes',39,'no']] 

my_data=[['beijing','yes','yes',28,'yes'],
        ['hebei','no','no',23,'no'],
        ['henan','yes','no',24,'yes'],
        ['hubei','no','yes',28,'no'],
        ['hunan','yes','yes',39,'no']]
上面是我捏造的的数据,下面根据这五条数据来构建决策树。用户A,北京人,有房有车,28岁,牵手成功;用户B,河北人,没房没车,23岁,牵手失败;用户C,河南人,有房没车,24岁,牵手成功;用户D,湖北人,没房有车,23岁,牵手失败;用户E,湖南人,有车有房,39岁,牵手失败。

第一步:定义节点结构;第二步:对输入数据分组;第三步:选择拆分数据的评价模型;第四步:构造决策树;第五步:用决策树进行判断;第六步:剪枝;第七步:数据缺失处理。

 


第一步:定义节点结构:

每个节点必须表明自己代表的那个考察因素,一个成立或者不成立的判断条件,一个指向条件成立后的要执行下一个节点,一个指向条件不成立后要判断的下一个节点。如果是末级叶子节点,还需要一个结果节点,来指明要不要参加非诚勿扰。


[python]
class decisionnode: 
  def __init__(self,col=-1,value=None,results=None,tb=None,fb=None): 
    self.col=col 
    self.value=value 
    self.results=results 
    self.tb=tb 
    self.fb=fb 

class decisionnode:
  def __init__(self,col=-1,value=None,results=None,tb=None,fb=None):
    self.col=col
    self.value=value
    self.results=results
    self.tb=tb
    self.fb=fb其中,col代表的要考察的因素是输入数据的那一列;valus就是判断条件;results是叶子节点保存最后判断结果的变量;tb,fb分别是条件value成立指向的分支和条件value不成立指向的分支。

 


第二步:分组输入数据:

我们考虑因素有四个,祖籍,房,车和年龄。祖籍是字符型,年龄是整数型,是否有车有房是布尔型;假设

补充:Web开发 , Python ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,