【数据挖掘】分类之decision tree(转载)

【数据挖掘】分类之decision tree

1. ID3 算法

ID3 算法是一种典型的决策树(decision tree)算法,C4.5, CART都是在其基础上发展而来。决策树的叶子节点表示类标号,非叶子节点作为属性测试条件。从树的根节点开始,将测试条件用于检验记录,根据测试结果选择恰当的分支;直至到达叶子节点,叶子节点的类标号即为该记录的类别。

ID3采用信息增益(information gain)作为分裂属性的度量,最佳分裂等价于求解最大的信息增益。

信息增益=parent节点熵 - 带权的子女节点的熵

ID3算法流程如下:

1.如果节点的所有类标号相同,停止分裂;

2.如果没有feature可供分裂,根据多数表决确定该节点的类标号,并停止分裂;

3.选择最佳分裂的feature,根据选择feature的值逐一进行分裂;递归地构造决策树。

源代码(从[1]中拿过来):

from math import log
import operator
import matplotlib.pyplot as plt  

def calcEntropy(dataSet):
    """calculate the shannon entropy"""
    numEntries=len(dataSet)
    labelCounts={}
    for entry in dataSet:
        entry_label=entry[-1]
        if entry_label not in labelCounts:
            labelCounts[entry_label]=0
        labelCounts[entry_label]+=1  

    entropy=0.0
    for key in labelCounts:
        prob=float(labelCounts[key])/numEntries
        entropy-=prob*log(prob,2)  

    return entropy  

def createDataSet():
    dataSet = [[1, 1, ‘yes‘],
            [1, 1, ‘yes‘],
            [1, 0, ‘no‘],
            [0, 1, ‘no‘],
            [0, 1, ‘no‘]]
    labels = [‘no surfacing‘,‘flippers‘]
    return dataSet, labels  

def splitDataSet(dataSet,axis,pivot):
    """split dataset on feature"""
    retDataSet=[]
    for entry in dataSet:
        if entry[axis]==pivot:
            reduced_entry=entry[:axis]
            reduced_entry.extend(entry[axis+1:])
            retDataSet.append(reduced_entry)
    return retDataSet  

def bestFeatureToSplit(dataSet):
    """chooose the best feature to split """
    numFeatures=len(dataSet[0])-1
    baseEntropy=calcEntropy(dataSet)
    bestInfoGain=0.0; bestFeature=-1
    for axis in range(numFeatures):
        #create unique list of class labels
        featureList=[entry[axis] for entry in dataSet]
        uniqueFeaList=set(featureList)
        newEntropy=0.0
        for value in uniqueFeaList:
            subDataSet=splitDataSet(dataSet,axis,value)
            prob=float(len(subDataSet))/len(dataSet)
            newEntropy+=prob*calcEntropy(subDataSet)
        infoGain=baseEntropy-newEntropy
        #find the best infomation gain
        if infoGain>bestInfoGain:
            bestInfoGain=infoGain
            bestFeature=axis
    return bestFeature  

def majorityVote(classList):
    """take a majority vote"""
    classCount={}
    for vote in classList:
        if vote not in classCount.keys():
            classCount[vote]=0
        classCount+=1
    sortedClassCount=sorted(classCount.iteritems(),
            key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]  

def createTree(dataSet,labels):
    classList=[entry[-1] for entry in dataSet]
    #stop when all classes are equal
    if classList.count(classList[0])==len(classList):
        return classList[0]
    #when no more features, return majority vote
    if len(dataSet[0])==1:
        return majorityVote(classList)  

    bestFeature=bestFeatureToSplit(dataSet)
    bestFeatLabel=labels[bestFeature]
    myTree={bestFeatLabel:{}}
    del(labels[bestFeature])
    subLabels=labels[:]
    featureList=[entry[bestFeature] for entry in dataSet]
    uniqueFeaList=set(featureList)
    #split dataset according to the values of the best feature
    for value in uniqueFeaList:
        subDataSet=splitDataSet(dataSet,bestFeature,value)
        myTree[bestFeatLabel][value]=createTree(subDataSet,subLabels)
    return myTree  

分类结果可视化

2. Referrence

[1] Peter Harrington, machine learning in action.

时间: 2024-09-30 17:50:54

【数据挖掘】分类之decision tree(转载)的相关文章

转载:算法杂货铺——分类算法之决策树(Decision tree)

作者:张洋 算法杂货铺——分类算法之决策树(Decision tree) 2010-09-19 16:30 by T2噬菌体, 44346 阅读, 29 评论, 收藏, 编辑 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法.这两种算法都以贝叶斯定理为基础,可以对分类及决策问题进行概率推断.在这一篇文章中,将讨论另一种被广泛使用的分类算法——决策树(decision tree).相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际

CART分类与回归树与GBDT(Gradient Boost Decision Tree)

一.CART分类与回归树 资料转载: http://dataunion.org/5771.html Classification And Regression Tree(CART)是决策树的一种,并且是非常重要的决策树,属于Top Ten Machine Learning Algorithm.顾名思义,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree).模型树(Model Tree),两者在建树的过程稍有差异.CAR

机器学习算法实践:决策树 (Decision Tree)(转载)

前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决策树种涉及到的 算法进行总结并附上自己相关的实现代码.所有算法代码以及用于相应模型的训练的数据都会放到GitHub上(https://github.com/PytLab/MLBox). 本文中我将一步步通过MLiA的隐形眼镜处方数集构建决策树并使用Graphviz将决策树可视化. 决策树学习 决策树

数据挖掘-决策树 Decision tree

数据挖掘-决策树 Decision tree 目录 数据挖掘-决策树 Decision tree 1. 决策树概述 1.1 决策树介绍 1.1.1 决策树定义 1.1.2 本质 1.1.3 决策树的组成 1.1.4 决策树的分类 1.1.5 决策过程 1.2 决策树的优化 1.2.1 过拟合 1.3.1 剪枝 2. 理论基础 2.1 香农理论 2.1.1 信息量 2.1.2 平均信息量/信息熵 2.1.3 条件熵 2.1.4 信息增益(Information gain) 2.1.5 信息增益率

机器学习分类实例——SVM(修改)/Decision Tree/Naive Bayes

机器学习分类实例--SVM(修改)/Decision Tree/Naive Bayes 20180427-28笔记.30总结 已经5月了,毕设告一段落了,该准备论文了.前天开会老师说,希望我以后做关于语义分析那一块内容,会议期间还讨论了学姐的知识图谱的知识推理内容,感觉也挺有趣的,但是感觉应该会比较复杂.有时间的话希望对这块了解一下.其实吧,具体怎么展示我还是不太清楚... 大概就是图表那个样子.我先做一个出来,让老师看看,两个礼拜写论文.24/25答辩,6月就可以去浪哈哈哈哈哈哈. 一.工作

【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 决策书算法是一种逼近离散数值的分类算法,思路比較简单,并且准确率较高.国际权威的学术组织,数据挖掘国际会议ICDM (the IEEE International Conference on Data Mining)在2006年12月评选出了数据挖掘领域的十大经典算法中,C4.5算法排名第一.C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. 算法的主要思想就是将数据集依照特

机器学习实战之第三章 决策树(Decision Tree)

第3章 决策树 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script> 决策树 概述 决策树(Decision Tree)算法主要用来处理分类问题,是最经常使用的数据挖掘算法之一. 决策树 场景 一个叫做 "二十个问题" 的游戏,游戏的规则很简单:参与游戏的一

机器学习中的算法:决策树模型组合之GBDT(Gradient Boost Decision Tree)

[转载自:http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/random-forest-and-gbdt.html] 前言 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如说有Boosting,Bagging等

机器学习技法总结(六)Decision Tree Hypothesis

这里先再次提出我们利用aggregation获取更好性能的Hypothesis G所涉及的方法:blending,就是在得到g_set之后进行融合:learning呢?就是在线online的获取g并融合.下面就是关于整个aggregation所涉及到的方法总结: 其中Bagging.AdaBoost我们都已经探讨,它们分别是基于uniform(voting / average)和non-uniform(linear)的aggregation type,那么下面就开始介绍一个基于condition