Jiangtang's profile技止于此BlogListsNetwork Tools Help

Blog


    3/24/2007

    决策树的构造——一个手工例子

    这个数据集来自Mitchell的机器学习,叫做是否去打网球play-tennis,以下数据仍然是从带逗号分割的文本文件,复制到纪事本,把后缀直接改为.csv就可以拿Excel打开:

    *play-tennis data,其中6个变量依次为:编号、天气{Sunny、Overcast、Rain}、温度{热、冷、适中}、湿度{高、正常}、风力{强、弱}以及最 后是否去玩的决策{是、否}。一个建议是把这些数据导入Excel后,另复制一份去掉变量的数据到另外一个工作簿,即只保留14个观测值。这样可以方便地 使用Excel的排序功能,随时查看每个变量的取值到底有多少。*/

    NO. , Outlook , Temperature , Humidity , Wind , Play
    1 , Sunny , Hot , High , Weak , No
    2 , Sunny , Hot , High , Strong , No
    3 , Overcast , Hot , High , Weak , Yes
    4 , Rain , Mild , High , Weak , Yes
    5 , Rain , Cool , Normal , Weak , Yes
    6 , Rain , Cool , Normal , Strong , No
    7 , Overcast , Cool , Normal , Strong , Yes
    8 , Sunny , Mild , High , Weak , No
    9 , Sunny , Cool , Normal , Weak , Yes
    10 , Rain , Mild , Normal , Weak , Yes
    11 , Sunny , Mild , Normal , Strong , Yes
    12 , Overcast , Mild , High , Strong , Yes
    13 , Overcast , Hot , Normal , Weak , Yes
    14 , Rain , Mild , High , Strong , No

    这里我们先不讨论算法(这里用的是ID3/C4.5),把一棵决策树建立起来再说。我们要建立的决策树的形式类似于“如果天气怎么样,去 玩;否则,怎么着怎么着”的树形分叉。那么问题是用哪个属性(即变量,如天气、温度、湿度和风力)最适合充当这颗树的根节点,在它上面没有其他节点,其他 的属性都是它的后续节点。借用信息论的概念,我们用一个统计量,“信息增益”(Information Gain)来衡量一个属性区分以上数据样本的能力。信息增益量越大,这个属性作为一棵树的根节点就能使这棵树更简洁,比如说一棵树可以这么读成,如果风力 弱,就去玩;风力强,再按天气、温度等分情况讨论,此时用风力作为这棵树的根节点就很有价值。如果说,风力弱,再又天气晴朗,就去玩;如果风力强,再又怎 么怎么分情况讨论,这棵树相比就不够简洁了。计算信息增益的公式需要用到“熵”(Entropy)。名词越来越多,让我们通过手工计算记住它们的计算方 法,把Excel打开:

    1 计算熵

    我们检查的属性是是否出去玩。用Excel对上面数据的play变量的各个取值排个序(这个工作簿里把“play”这个词去掉),一共是14条记录,你能数出取值为yes的记录有9个,取值为no的有5个,我们说这个样本里有9个正例,5 个负例,记为S(9+,5-),S是样本的意思(Sample)。这里熵记为Entropy(S),计算公式为:

    Entropy(S)= -(9/14)*log(9/14)-(5/14)*log(5/14)

    解释一下,9/14是正例的个数与总记录之比,同样5/14是负例占总记录的比例。log(.)是以2为底的对数(我们知道以e为底的对数称为自然对数,记为ln(.),lg(.)表示以10为底的对数 )。在Excel里我们可以随便找一个空白的单元格,键入以下公式即得0.940:

    =-(9/14)*LOG(9/14,2)-(5/14)*LOG(5/14,2)

    这里LOG(9/14,2)中的“2”表示以2为底。类似地,如果你习惯用Matlab做数学运算本,公式为

    -(9/14)*log2(9/14)-(5/14)*log2(5/14)

    其中“2”的含义与上同。

    总结:在这个例子中,我们的输出属性(我们要检查的属性)“play”只有两个取值,同样地,如果输出属性的取值大于2,公式是对成的,一样的形式,连加就是,找到各个取值的个数,求出各自的比例。如果样本具有二元输出属性,其熵的公式为


    Entropy(S) =-(p+)*log(p+)-(p-)*log(p-)
    其中,p+、p-分别为正例和负例占总记录的比例。输出属性取值大于2的情况,公式是对称的。


    2 分别以Wind、Humidity、Outlook和Temperature作为根节点,计算其信息增益

    可以数得,属性Wind中取值为Weak的记录有Normal的记录有8条,其中正例6个,负例2个;同样,取值为Strong的记录6个,正例负例个3个。我们可以计算相应的熵为:

    Entropy(Weak)=-(6/8)*log(6/8)-(2/8)*log(2/8)=0.811

    Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0

    现在就可以计算出相应的信息增益了:

    Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048

    这个公式的奥秘在于,8/14是属性Wind取值为Weak的个数占总记录的比例,同样6/14是其取值为Strong的记录个数与总记录数之比。

    同理,如果以Humidity作为根节点:

    Entropy(High)=0.985 ; Entropy(Normal)=0.592

    Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151

    以Outlook作为根节点:

    Entropy(Sunny)=0.971 ; Entropy(Overcast)=0.0 ; Entropy(Rain)=0.971

    Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247

    以Temperature作为根节点:

    Entropy(Cool)=0.811 ; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918

    Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029

    这样我们就得到了以上四个属性相应的信息增益值:

    Gain(Wind)=0.048 ;Gain(Humidity)=0.151 ; Gain(Outlook)=0.247 ;Gain(Temperature)=0.029

    最后按照信息增益最大的原则选Outlook为根节点。子节点重复上面的步骤。这颗树可以是这样的,它读起来就跟你认为的那样:

    参考资料:

    1.王厚峰,“机器学习‘课程讲义,2007年春季学期,北京大学软件与微电子学院

    2.Mitchell,《机器学习》,曾华军等译,北京:机械工业出版社,2003

    Comments (5)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    No namewrote:
    您需要二手液晶显示屏废旧液晶屏么?我们是不折不扣的二手液晶屏、旧液晶屏大批发商,长期大量供应可再利用的旧液晶屏。我公司提供的各种尺寸的二手液晶屏, 不同厚薄如笔记本屏,均已经过我们严格的分类,检验,测试流程。请访问协力液晶屏www.sceondhandlcd.com[gheijhbcaaifeag]
    Nov. 21
    Nov. 9
    Nov. 3
    改-Karenwrote:
    在做数据库作业,参考了您的这篇文章,很详细,算法一目了然!
    Jan. 9
    英丽 常wrote:
    不错,写得很详细,对于想了解决策树的朋友来说,这无疑是个很好的讲解。加油啊!
    May 10

    Trackbacks (1)

    The trackback URL for this entry is:
    http://johnthu.spaces.live.com/blog/cns!2053CD511E6D5B1E!130.trak
    Weblogs that reference this entry