美文网首页
(2)决策树算法及其应用

(2)决策树算法及其应用

作者: 我的章鱼小丸子呢 | 来源:发表于2020-08-04 10:55 被阅读0次

    P:机器学习中分类和预测算法的评估:

    • 准确率
    • 速度
    • 强壮性
    • 可规模性
    • 可解释性

    1、什么是决策树/判定树(decision tree)

    判定树是一个类似于流程图的树结构:其中,每个内部结点表示一个属性上的测试,每个分支代表一个属性输出,而每个树叶节点代表类或类分布。树的最顶层是根节点。


    决策树

    2、如何创建决策树

    2.1、熵的概念

    一条信息的信息量大小和它的不确定性有直接的关系,信息量的度量就等于不确定性的多少。信息量的计算公式如下所示:
    ** 变量的不确定性越大,熵越大 **


    信息量

    2.2、决策时归纳算法

    选择属性判断结点
    信息获取量(Information Gain):Gain(A)= Info(D) - Infor_A(D)通过A作为节点分类获取了多少信息。
    实例,以下是对是否购买计算机的群体的一项数据调查:


    调查

    已知从结果上来看的信息量是:


    信息量
    当知道年龄分布后的结果信息量:
    信息量
    依次类推,分别可以求得在其他条件已知的情况下的信息量
    信息量

    依次类推,当将age作为第一个结点之后,会得到新生成的三个结点,然后再次重复计算,将三个结点按照决策树原理再次进行分类,知道分类结果唯一。


    决策树

    2.2分类停止的条件:

    • 1.给定条件的结点所有样本属于同一样类
    • 2.找不到可以分类该结点的属性

    2.3算法

    算法步骤
    其它算法

    3.决策树的优点与缺点

    优点:
    直观 便于理解 小规模数据集有效
    缺点:
    处理连续性变量不好 错误增加的比较快 不适用于大规模数据集

    4、代码实现

    4.1、Python

    4.2、python机器学习的库:scikit-learn

    4.2.1:特性

    • 简单高效的数据挖掘和机器学习分析
    • 对所有用户开放,根据不同需求高度可重用性
    • 基于Numpy,SciPy和matplotlib
    • 开源,商用级别;获得BSD许可

    4.2.2:覆盖问题领域

    分类(classfication)、回归(regression)、聚类(clustering),降维(dimensionality)
    模型选择(model selection)、预处理(preprocessing)

    4.3:使用scikit-learn

    • 安装scikit-learn:pip,easy_install,windows installer
    • 安装必要package:numpy,SciPy和matplotlib,可使用Anaconda(包含numpy,scipy等科学计算常用package)
      安装注意问题:Python解释器版本(2.7or3.4-),32-bit or 64-bit系统。

    4.4、代码

    #决策时的应用算法
    """
    scikit-learn 强大的机器学习库 达到商用级别
    对数据输入的要求 
    对所有的特征值必须是数值型
    """
    # print("hello world")
    from sklearn.feature_extraction import DictVectorizer
    import csv
    from sklearn import preprocessing #需要使用到预处理
    from sklearn import tree #需要使用到树
    from sklearn.externals.six import StringIO #读写功能
    
    all_csv_data = open(r'C:\Users\25478\Desktop\Python\DT.csv','rt')  #读取表格数据
    reader = csv.reader(all_csv_data) #利用模块中的reader函数读取出来
    header = next(reader)   #取第一行
    # print(header)
    
    feature_list = []
    label_list = []
    
    for row in reader:
        label_list.append(row[len(row)-1])
        #print(row)
        row_dict = {}
        for i in range(1,len(row)-1):
            row_dict[header[i]] = row[i]
        feature_list.append(row_dict)
    #print(feature_list)
    
    vec = DictVectorizer()
    dummyX = vec.fit_transform(feature_list).toarray()
    # print("dummyX:\n" + str (dummyX)) #在特征值上将字符型的转化为数值
    # print(vec.get_feature_names())
    
    lb = preprocessing.LabelBinarizer() #在标签上进行二进制化
    dummyY = lb.fit_transform(label_list)
    # print("dummyY:\n" + str(dummyY))
    
    clf = tree.DecisionTreeClassifier(criterion = 'entropy')
    clf = clf.fit(dummyX,dummyY)
    # print("clf=:"+str(clf))
    
    with open("dt.dot",'w') as f:
        f = tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file= f)
    
    OneRowX = dummyX[0,:]
    print("OneRowX:\n"+str(OneRowX))
    newRowX = OneRowX
    newRowX[0] = 1
    newRowX[1] = 0
    print("NewRowX:\n"+str(newRowX))
    
    predY = clf.predict(newRowX)
    print("predY:"+str(predY))
    

    使用的数据文件


    数据

    得到的dot文件


    决策树dot文件

    5、将dot文件转至pdf-可视化决策树

    使用graphviz将dot文件转为png,pdf

    #转为png图片
    dot -Tpng dtc.dot -o dtc.png
    
    #转为pdf文件
    dot -Tpdf dtc.dot -o dtc.pdf
    

    相关文章

      网友评论

          本文标题:(2)决策树算法及其应用

          本文链接:https://www.haomeiwen.com/subject/rrwirktx.html