zoukankan      html  css  js  c++  java
  • 决策树算法实现

    http://blog.csdn.net/gamer_gyt/article/details/51226904

    决策树算法的优点:
    1:理解和解释起来简单,且决策树模型可以想象
    2:需要准备的数据量不大,而其他的技术往往需要很大的数据集,需要创建虚拟变量,去除不完整的数据,但是该算法对于丢失的数据不能进行准确的预测
    3:决策树算法的时间复杂度(即预测数据)是用于训练决策树的数据点的对数
    4:能够处理数字和数据的类别(需要做相应的转变),而其他算法分析的数据集往往是只有一种类型的变量
    5:能够处理多输出的问题
    6:使用白盒模型,如果给定的情况是在一个模型中观察到的,该条件的解释很容易解释的布尔逻辑,相比之下,在一个黑盒子模型(例如人工神经网络),结果可能更难以解释
    7:可能使用统计检验来验证模型,这是为了验证模型的可靠性
    8:从数据结果来看,它执行的效果很好,虽然它的假设有点违反真实模型



    决策树算法的缺点:

    1:决策树算法学习者可以创建复杂的树,但是没有推广依据,这就是所谓的过拟合,为了避免这种问题,出现了剪枝的概念,即设置一个叶子结点所需要的最小数目或者设置树的最大深度
    2:决策树的结果可能是不稳定的,因为在数据中一个很小的变化可能导致生成一个完全不同的树,这个问题可以通过使用集成决策树来解决
    3:众所周知,学习一恶搞最优决策树的问题是NP——得到几方面完全的优越性,甚至是一些简单的概念。因此,实际决策树学习算法是基于启发式算法,如贪婪算法,寻求在每个节点上的局部最优决策。这样的算法不能保证返回全局最优决策树。这可以减轻训练多棵树的合奏学习者,在那里的功能和样本随机抽样更换。
    4:这里有一些概念是很难的理解的,因为决策树本身并不难很轻易的表达它们,比如说异或校验或复用的问题。
    5:决策树学习者很可能在某些类占主导地位时创建有有偏异的树,因此建议用平衡的数据训练决策树



    Classification  简单示例

    >>> from sklearn import tree
    >>> X = [[0, 0], [1, 1]]
    >>> Y = [0, 1]
    >>> clf = tree.DecisionTreeClassifier()
    >>> clf = clf.fit(X, Y)
    
    >>> clf.predict([[2., 2.]])
    array([1])

     

    Regression 简单示例

     

    >>> from sklearn import tree
    >>> X = [[0, 0], [2, 2]]
    >>> y = [0.5, 2.5]
    >>> clf = tree.DecisionTreeRegressor()
    >>> clf = clf.fit(X, y)
    >>> clf.predict([[1, 1]])
    array([ 0.5])

     

     

     

    决策树算法使用 示例

    数据集如下图:
     
    程序如下:
    [python] view plain copy
     
    1. <span style="font-size:18px;">#-*- coding: UTF-8 -*-   
    2. ''''' 
    3. Created on 2016/4/23 
    4.  
    5. @author: Administrator 
    6. '''  
    7. from sklearn.feature_extraction import DictVectorizer  
    8. import csv  
    9. from sklearn import preprocessing  
    10. from sklearn import tree  
    11. from sklearn.externals.six import StringIO  
    12.   
    13. #Read in the csv File and put feature in a list of class label  
    14. allElectronicsData = open(r"example.csv","rb")  
    15. reader = csv.reader(allElectronicsData)  
    16. headers = reader.next()  
    17. #print headers  
    18.   
    19. featureList = []    
    20. labelList = []  
    21. #存放在两个元祖中  
    22. for row in reader:  
    23.     labelList.append(row[len(row)-1])  
    24.     rowDic = {}  
    25.     for i in range(1,len(row)-1):  
    26.         rowDic[headers[i]] = row[i]  
    27.     featureList.append(rowDic)  
    28.       
    29. # print featureList  
    30. # print labelList  
    31.   
    32. # Vector Feature  
    33. vec = DictVectorizer()  
    34. dummyX = vec.fit_transform(featureList) .toarray()  
    35. # print "dummyX:",dummyX  
    36. # print vec.get_feature_names()  
    37. # print "labelList:"+str(labelList)  
    38.   
    39. lb = preprocessing.LabelBinarizer()  
    40. dummyY = lb.fit_transform(labelList)  
    41. #print "dummyY:" + str(dummyY)  
    42.   
    43. #using desicionTree for classfication  
    44. clf = tree.DecisionTreeClassifier(criterion="entropy"#创建一个分类器,entropy决定了用ID3算法  
    45. clf = clf.fit(dummyX, dummyY)  
    46. print "clf:"+str(clf)  
    47.   
    48. #Visulize model  
    49. with open("allEallElectronicInfomationGainori.txt","w") as f:  
    50.     f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file = f)  
    51.   
    52. #预测      
    53. oneRowX = dummyX[0,:]  
    54. #print "oneRowX:" +str(oneRowX)  
    55.   
    56. newRowX = oneRowX  
    57. newRowX[0] = 1  
    58. newRowX[2] = 0  
    59. print "newRowX:" +str(newRowX)  
    60.   
    61. predictedY = clf.predict(newRowX)  
    62. print "predictedY:" + str(predictedY)</span>  


    使用命令导出图形为pdf:dot -T pdf ex.txt -o output.pdf.txt  (windows cmd的命令)

     

  • 相关阅读:
    EurekaLog 6 安装在XE3中
    有趣的python精短程序
    python中的map,filter,reduce,lambda (转)
    python自动下载太平洋电脑网上的壁纸
    ASP.NET MVC Preview3 bug 及期望 [集]
    中小网站在域名、服务器等选择上的一点总结
    为ASP.NET MVC开发一些常用插件(三)——Repeater
    为ASP.NET MVC开发一些常用插件(二)—— 实现无刷新文件上传
    Implementing the Singleton Pattern in C#
    [原创]开发一个适合Ajax+JSON+jQuery环境使用的多功能页码栏——jPagerBar1.1.1
  • 原文地址:https://www.cnblogs.com/pkuwdp/p/7513216.html
Copyright © 2011-2022 走看看