美文网首页机器学习和人工智能入门
决策树实例(机器学习)

决策树实例(机器学习)

作者: 言雍 | 来源:发表于2017-09-10 15:55 被阅读0次

    决策树

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


    决策树优点
    • 直观、便于理解,小规模数据集有效,对中间值的确实不敏感,可以处理不相关特征数据
      决策树缺点
    • 处理连续变量不好
    • 类别较多时,错误增加的比较快
    • 可规模性一般
    预备知识
    1. 信息熵(不了解的同学,点击(http://www.jianshu.com/p/ba7199bdb36b
    2. Python

    准备

    安装Python机器学习的库:scikit - learn
    特征:

    • 简单高效的数据挖掘和机器学习分析
    • 对所用用户开放,根据不同需求高度可重用性
    • 基于Numpy、SciPy和matplotlib
    • 开源,商用级别:获的BSD许可
      覆盖问题领域:
    • 分类、回归、聚典、降维、模型选择、预处理
      温馨提示:windows下如果安装不起 Numpy、Scipy。请参考(http://blog.csdn.net/u011177305/article/details/52334023),记得一定要下载和自己使用的python版本和操作系统对应的whl文件(scipy‑0.19.1‑cp35‑cp35m‑win_amd64.whl,cp35表示Python3.5版本)

    例子:

    数据的准备(格式为.csv):


    决策树Python代码:
    需要将特征转化为0,1.例如特征age中youth为0,则除了youth,其它的都为1.好在sklearn为我们提供了preprocessing方法可以自动转化,省去了我们自己转的步骤。信息增益最大的为根节点,以此类推。

    from sklearn.feature_extraction import DictVectorizer
    import csv
    from sklearn import preprocessing
    from sklearn import tree
    from sklearn.externals.six import StringIO
    
    #决策树实例
    decisionTreeData = open('C:\\Users\\hxjd009\\Desktop\\decisionTree.csv',encoding='utf-8')
    reader = csv.reader(decisionTreeData)
    headers = next(reader)
    print(headers)
    # for row in reader:
    #     print(row)
    
    featureList = []
    lableList = []
    for rows in reader:
        lableList.append(rows[len(rows) - 1])#获取标签
        print(lableList)
        rowDict = {}
        for i in range(1,len(rows) - 1):
            rowDict[headers[i]] = rows[i]#获取特征
        featureList.append(rowDict)
    # print(featureList)
    
    #特征的装换
    vec = DictVectorizer()
    dummyX = vec.fit_transform(featureList).toarray()
    # print("dummyX:",dummyX)
    # print(vec.get_feature_names())
    # print(str(lableList))
    
    #结果的转换(转化为0,1)
    lb = preprocessing.LabelBinarizer()
    dummyY = lb.fit_transform(lableList)
    # print("dummyY:",dummyY)
    
    clf = tree.DecisionTreeClassifier(criterion='entropy')
    clf = clf.fit(dummyX,dummyY)
    # print("clf:"+str(clf))
    
    #dot文件转化为pdf文件
    with open('E:\Arduino.dot','w') as f:
        f = tree.export_graphviz(clf,feature_names = vec.get_feature_names(),out_file = f)
    
    #输入数据预测
    oneRowX = dummyX[0]
    print("newRowX:",oneRowX)
    
    newRowX = oneRowX
    newRowX[0] = 0
    newRowX[1] = 0
    
    # print("newRowX:"+str(newRowX))
    # print("shape:"+str(newRowX.shape))
    # print("reshape:"+str(newRowX.reshape(1, -1)))
    predictedY = clf.predict(newRowX.reshape(1, -1))
    print("predictedY:"+str(predictedY))
    

    相关文章

      网友评论

        本文标题:决策树实例(机器学习)

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