利用python决策树分析iris数据及树状图绘制

利用python决策树分析iris数据及树状图绘制

      • 数据说明
      • 数据划分
      • 模型训练及评估
        • 模型训练代码
        • 模型大致评估
      • 树状图绘制
        • Graphviz安装配置及入门
      • 代码汇总
      • 基地部门公众号

数据说明

  • 数据来源:https://archive.ics.uci.edu/ml/index.php

  • 4个变量,分别为:
    'feature_names': ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

  • 分类类标有:'setosa', 'versicolor', 'virginica'三种花型

    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.datasets import load_iris
    from sklearn.tree import DecisionTreeClassifier
    #载入数据
    iris=load_iris() 
    
  • 如果下载的数据是txt文件存储的,类似如下图,需要对分类标签数值化,用到函数LabelEncoder进行标签编码:
    利用python决策树分析iris数据及树状图绘制_第1张图片

    import pandas as pd
    from sklearn.tree import DecisionTreeClassifier
    import sklearn.preprocessing as sp
    from sklearn.model_selection import train_test_split
    import numpy as np
    data=pd.read_table(r'G:\机器学习\书籍阅读\python爬虫\iris.txt',sep=',',header=None)  #数据导入
    category = pd.Categorical(data[4])
    lab = sp.LabelEncoder()   #标签编码器  
    type_d = lab.fit_transform(data[4])  #用标签编码器对样本编码
    X=list(zip(data[0],data[1],data[2],data[3]))
    

数据划分

  • 方法一
    利用Numpy库中的concatenate()函数,对数据进行选择。

    #没有一一列举,举一个使用方法
    train_data=np.concatenate((np.array(X)[0:40,:],np.array(X)[50:90,:],np.array(X)[100:140,:]),axis=0)
    
  • 方法二
    导入模块,随机选择多少比例

    from sklearn.model_selection import train_test_split
    X_tr,X1_te,type_tr,type1_te= train_test_split(X, type_d,test_size=0.2) #训练集占80%,测试集占20%
    

模型训练及评估

模型训练代码
clf=DecisionTreeClassifier()
clf.fit(X_tr, type_tr)  
score=clf.score(X1_te,type1_te)  #正确率
pre_data=clf.predict(X1_te)  #对测试集数据,预测其类别标签
模型大致评估
  • 检测数据与预测数据比较
    方法一:cop=sum(type1_te==pre_data) #求出模型预测测试集正确个数
    方法二:

    #使用循环结构求解模型预测测试集正确个数
    for i in range(len(pre_data)):
        if pre_data[i]==type1_te[i]:
            a=1
            compare.append(a)
        else:
            a=0
            compare.append(a)
    
  • 性能评估

    #输出准确率,召回率,F特征值和支持度
    from sklearn import metrics
    from sklearn.tree import export_graphviz    # 导入的是一个函数
    a=metrics.classification_report(type1_te,pre_data)
    b=metrics.confusion_matrix(type1_te,pre_data)
    

树状图绘制

Graphviz安装配置及入门
  • 安装包下载:graphviz-2.38.msi

    with open('G:/机器学习/书籍阅读/iris.dot', 'w', encoding='utf-8') as f:
        f = export_graphviz(clf,  out_file=f,filled=True,rounded=True) #filled=True,rounded=True :前面一个设置是填充颜色,后面一个是圆形框
    
  • 使用下面这个软件打开iris.dot文件
    利用python决策树分析iris数据及树状图绘制_第2张图片

  • 决策树的效果图
    利用python决策树分析iris数据及树状图绘制_第3张图片

代码汇总

"决策树"
#分类及回归树(CART)ID3算法、C4.5算法,随机森林算法,梯度推进机(GBM)
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import sklearn.preprocessing as sp
from sklearn.model_selection import train_test_split
import numpy as np
data=pd.read_table(r'G:\机器学习\书籍阅读\python爬虫\iris.txt',sep=',',header=None)
category = pd.Categorical(data[4])
lab = sp.LabelEncoder()   #标签编码器
type_d = lab.fit_transform(data[4])  #用标签编码器对样本编码
clf=DecisionTreeClassifier()
X=list(zip(data[0],data[1],data[2],data[3]))
#数据集划分 方法一
X_tr,X1_te,type_tr,type1_te= train_test_split(X, type_d,test_size=0.2)
#方法二划分数据集
train_data=np.concatenate((np.array(X)[0:40,:],np.array(X)[50:90,:],np.array(X)[100:140,:]),axis=0)
clf.fit(X_tr, type_tr)
score=clf.score(X1_te,type1_te)
pre_data=clf.predict(X1_te)
#检测数据与预测数据比较
#方法一
all=sum(type1_te==pre_data)
# 方法二
compare=[]
for i in range(len(pre_data)):
    if pre_data[i]==type1_te[i]:
        a=1
        compare.append(a)
    else:
        a=0
        compare.append(a)
#输出准确率,召回率,F特征值和支持度
from sklearn import metrics
from sklearn.tree import export_graphviz    # 导入的是一个函数
a=metrics.classification_report(type1_te,pre_data)
b=metrics.confusion_matrix(type1_te,pre_data)
with open('G:/机器学习/书籍阅读/iris.dot', 'w', encoding='utf-8') as f:
    f = export_graphviz(clf,  out_file=f,filled=True,rounded=True)

基地部门公众号

利用python决策树分析iris数据及树状图绘制_第4张图片

利用python决策树分析iris数据及树状图绘制_第5张图片

你可能感兴趣的:(机器学习,python,python,决策树)