美文网首页
实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类

实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类

作者: Conn606 | 来源:发表于2020-10-02 18:18 被阅读0次

    使用sklearn的决策树实现iris鸢尾花数据集的分类



    要求:

    1. 建立分类模型,至少包含4个剪枝参数:max_depthmin_samples_leafmin_samples_splitmax_featurescriterion参数。

    2. 运用GridSearchCV,寻找出最优参数。

    3. 绘制出在不同的max_depth下的学习曲线。


    步骤:

    • 一、导入各种我们需要的模块或者数据集等
      graphviz安装(安装完配置好路径还是不行的话重启一下电脑)
    from sklearn import tree #导入树
    from sklearn.tree import DecisionTreeClassifier #导入决策树分类器
    from sklearn.datasets import load_iris #导入鸢尾花数据集
    from sklearn.model_selection import train_test_split #分训练集测试集的类
    from matplotlib import pyplot as plt #画图用的
    from sklearn.model_selection import GridSearchCV #网格搜索
    import pandas as pd 
    import graphviz #画决策树的,需要事先安装
    

    • 二、将数据实例化,划分数据集和测试集
    iris = load_iris() #将数据集实例化,别忘了括号
    Xtrain,Xtest,Ytrain,Ytest = train_test_split(iris.data,iris.target,test_size=0.3) #将鸢尾花数据的特征矩阵和标签矩阵,按7:3的比例划分训练集和测试集,0.3是可以变的,也可以填0.4,注意X,Y的顺序
    

    • 三、建立模型(三部曲:实例化、训练、评估)
    clf = DecisionTreeClassifier() #实例化模型,括号不填criterion默认是‘gini’,也可以填criterion = 'entropy'
    clf = clf.fit(Xtrain, Ytrain) #训练数据集
    score = clf.score(Xtest, Ytest) #评估数据集
    
    score #将评估结果打印出来,因为测试集和训练集划分的不同,可能每个人的结果也不同
    
    1.PNG
    • 四、画出决策树
    feature_name = ['花萼长度','花萼宽度','花瓣长度','花瓣宽度'] #定义特征的名字,方便后面的阅读
    dot_data = tree.export_graphviz(clf
                                    ,feature_names = feature_name
                                    ,class_names=["清风藤","云芝","锦葵"] #标签名字
                                    ,filled=True #框框填充颜色(可以不写)
                                    ,rounded=True #框框角是圆圆的(可以不写)
                                   ) 
    graph = graphviz.Source(dot_data) #导出树
    graph
    

    这就得到一棵原始的树


    • 五、使用四个剪枝参数
    clf = tree.DecisionTreeClassifier(max_depth=2  #最大深度是2,这个也可以填3或4试试看
                                     ,min_samples_leaf=5 #下一个叶子节点大于5会进行,小于5就不会再分
                                     ,min_samples_split=10 #最小分支节点,当前样本大于10才会分
                                     ,max_features=3 #最大特征数,有一个重要程度为0
                                        )
    clf = clf.fit(Xtrain, Ytrain)
    score = clf.score(Xtest, Ytest)
    
    score
    

    可以把剪枝后的树画出来看看(代码和上面画树的一样)


    2.png
    dot_data = tree.export_graphviz(clf
                                   ,feature_names = feature_name
                                   ,class_names=["清风藤","云芝","锦葵"]
                                   ,filled=True
                                   ,rounded=True
                                   ) 
    graph = graphviz.Source(dot_data)
    graph
    

    • 六、绘制出在不同的max_depth下的学习曲线
    test=[] #定义一个列表放分数
    for i in range(10):       #10次循环map_depth
        clf = tree.DecisionTreeClassifier(max_depth=i+1)  
        clf = clf.fit(Xtrain, Ytrain)
        score = clf.score(Xtest,Ytest)
        test.append(score)
    plt.plot(range(1,11),test,color="red") #横坐标是1-10,纵坐标是分数,颜色是红色
    plt.xticks(range(1,11))#横坐标是1-10
    plt.xlabel("max_depth") #横坐标标签
    plt.ylabel("score") #纵坐标标签
    plt.show() #展示画好的图(由图可知当map_depth为2时分数最高)
    
    3.PNG
    • 七、运用GridSearchCV,寻找出最优参数
    parameters = {'criterion':("gini","entropy")
                  ,"max_depth":[*range(1,5)] #前面我们知道这个应该是2,所以我们给定范围1-5
                  ,'min_samples_split':[*range(5,40,5)]#最小分支节点以步长为5,在5-39循环
                 }  #定义我们要找的参数
    clf = tree.DecisionTreeClassifier()
    GS = GridSearchCV(clf, parameters, cv=10) #cv=10代表交叉验证10次
    GS.fit(Xtrain,Ytrain)
    
    GS.best_params_ #打印最好的参数
    GS.best_score_ #打印最好的分数
    

    相关文章

      网友评论

          本文标题:实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类

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