python决策树分类鸢尾花_基于决策树—鸢尾花分类

决策树算法广泛应用于:语音识别、医疗诊断、客户关系管理、模式识别、专家系统等,在实际工作中,必须根据数据类型的特点及数据集的大小,选择合适的算法。

本文选择经典案例——《鸢尾花分类》

一、决策树定义

决策树算法是一种基于实例的自上而下的算法,常用于分类与预测。利用树型结构二分类,问题主要集中在剪枝与训练样本。

决策树思维是一种逻辑思考方式,逐层的设定条件对事物进行刷选判断,每一次刷选判断都是一次决策,最终得到达到目的;整个思考过程,其逻辑结构类似分叉的树状,因此称为决策树思维;

决策树森林由几种决策树的预测组合成一个最终的预测,为应用集成思想提高决策树的准确率。

例:公式招聘时的决策树思维

此过程形成了一个树的结构,树的叶子(录用 / 考察)节点位置是做出的决定,也可以理解为是对输出(也就是应聘者的信息)的分类:录用、考察——这样的逻辑思考的过程就叫决策树。

二、决策树分类的基本流程

2.1基本算法流程

2.2特征选择与算法选择

首先要考虑哪个变量是树根,哪个是树节点,为此,我们需要考虑变量的重要性。

怎么衡量?,或者说怎样选择?有三种算法:

- ID3算法 :使用信息增益(作为不纯度)——适合大规模数据处理

- C4.5算法 :使用信息增益率(作为不纯度)——适合大规模数据处理(相较于ID3算法更好,但是计算资源占用大)

- CART 算法:使用基尼系数(作为不纯度)——适合小样本数据处理

不同的方法形成不同的决策树,决策树方法会把每个特征都试一遍,最后选取能够使分类分的最好的特征(e.g. 将A属性作为父节点,产生的纯度增益(GainA)要大于B属性作为父节点,则A作为优先选取的属性)。

2.3划分选择与剪枝

三、案例分析

基于决策树对鸢尾花分类

#基于决策树的鸢尾花分类

'''

- 描述:“代码实操”以及内容延伸部分源代码

- 时间:2019-07-24

- 作者:欧XX(Alan Ou)

- 程序开发环境:win10 64位

- Python版本:64位 3.7

- 依赖库:numpy、pandas、sklearn、matplotlib

- 程序输入:iris.cvs

- 程序输出:iris_classification_result.xlsx

# -*- coding: utf-8 -*-

'''

导入模块

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.datasets import load_iris

from sklearn import tree

读取数据

iris = load_iris()

iris_feature = iris.data #特征数据

iris_target = iris.target #分类数据

#鸢尾花数组长度为150,共3种类别。

#种类为:Iris Setosa(山鸢花)、Iris Versicolour(杂色鸢尾)Iris Virginica(维吉尼亚鸢尾),分别用0、1、2标签代表

print (iris.data) #输出数据集

print ('-----------------------------')

print (iris.target) #输出真实标签

print (len(iris.target) )

print ('-----------------------------')

print (iris.data.shape ) #150个样本 每个样本4个特征

print ('-----------------------------')

打印返回值:

[[5.1 3.5 1.4 0.2]

[4.9 3. 1.4 0.2]

[4.7 3.2 1.3 0.2]

[4.6 3.1 1.5 0.2]

[5. 3.6 1.4 0.2]

[5.4 3.9 1.7 0.4]

[4.6 3.4 1.4 0.3]

[5. 3.4 1.5 0.2]

[4.4 2.9 1.4 0.2]

[4.9 3.1 1.5 0.1]

[5.4 3.7 1.5 0.2]

[4.8 3.4 1.6 0.2]

[4.8 3. 1.4 0.1]

[4.3 3. 1.1 0.1]

[5.8 4. 1.2 0.2]

[5.7 4.4 1.5 0.4]

[5.4 3.9 1.3 0.4]

[5.1 3.5 1.4 0.3]

[5.7 3.8 1.7 0.3]

[5.1 3.8 1.5 0.3]

[5.4 3.4 1.7 0.2]

[5.1 3.7 1.5 0.4]

[4.6 3.6 1. 0.2]

[5.1 3.3 1.7 0.5]

[4.8 3.4 1.9 0.2]

[5. 3. 1.6 0.2]

[5. 3.4 1.6 0.4]

[5.2 3.5 1.5 0.2]

[5.2 3.4 1.4 0.2]

[4.7 3.2 1.6 0.2]

[4.8 3.1 1.6 0.2]

[5.4 3.4 1.5 0.4]

[5.2 4.1 1.5 0.1]

[5.5 4.2 1.4 0.2]

[4.9 3.1 1.5 0.2]

[5. 3.2 1.2 0.2]

[5.5 3.5 1.3 0.2]

[4.9 3.6 1.4 0.1]

[4.4 3. 1.3 0.2]

[5.1 3.4 1.5 0.2]

[5. 3.5 1.3 0.3]

[4.5 2.3 1.3 0.3]

[4.4 3.2 1.3 0.2]

[5. 3.5 1.6 0.6]

[5.1 3.8 1.9 0.4]

[4.8 3. 1.4 0.3]

[5.1 3.8 1.6 0.2]

[4.6 3.2 1.4 0.2]

[5.3 3.7 1.5 0.2]

[5. 3.3 1.4 0.2]

[7. 3.2 4.7 1.4]

[6.4 3.2 4.5 1.5]

[6.9 3.1 4.9 1.5]

[5.5 2.3 4. 1.3]

[6.5 2.8 4.6 1.5]

[5.7 2.8 4.5 1.3]

[6.3 3.3 4.7 1.6]

[4.9 2.4 3.3 1. ]

[6.6 2.9 4.6 1.3]

[5.2 2.7 3.9 1.4]

[5. 2. 3.5 1. ]

[5.9 3. 4.2 1.5]

[6. 2.2 4. 1. ]

[6.1 2.9 4.7 1.4]

[5.6 2.9 3.6 1.3]

[6.7 3.1 4.4 1.4]

[5.6 3. 4.5 1.5]

[5.8 2.7 4.1 1. ]

[6.2 2.2 4.5 1.5]

[5.6 2.5 3.9 1.1]

[5.9 3.2 4.8 1.8]

[6.1 2.8 4. 1.3]

[6.3 2.5 4.9 1.5]

[6.1 2.8 4.7 1.2]

[6.4 2.9 4.3 1.3]

[6.6 3. 4.4 1.4]

[6.8 2.8 4.8 1.4]

[6.7 3. 5. 1.7]

[6. 2.9 4.5 1.5]

[5.7 2.6 3.5 1. ]

[5.5 2.4 3.8 1.1]

[5.5 2.4 3.7 1. ]

[5.8 2.7 3.9 1.2]

[6. 2.7 5.1 1.6]

[5.4 3. 4.5 1.5]

[6. 3.4 4.5 1.6]

[6.7 3.1 4.7 1.5]

[6.3 2.3 4.4 1.3]

[5.6 3. 4.1 1.3]

[5.5 2.5 4. 1.3]

[5.5 2.6 4.4 1.2]

[6.1 3. 4.6 1.4]

[5.8 2.6 4. 1.2]

[5. 2.3 3.3 1. ]

[5.6 2.7 4.2 1.3]

[5.7 3. 4.2 1.2]

[5.7 2.9 4.2 1.3]

[6.2 2.9 4.3 1.3]

[5.1 2.5 3. 1.1]

[5.7 2.8 4.1 1.3]

[6.3 3.3 6. 2.5]

[5.8 2.7 5.1 1.9]

[7.1 3. 5.9 2.1]

[6.3 2.9 5.6 1.8]

[6.5 3. 5.8 2.2]

[7.6 3. 6.6 2.1]

[4.9 2.5 4.5 1.7]

[7.3 2.9 6.3 1.8]

[6.7 2.5 5.8 1.8]

[7.2 3.6 6.1 2.5]

[6.5 3.2 5.1 2. ]

[6.4 2.7 5.3 1.9]

[6.8 3. 5.5 2.1]

[5.7 2.5 5. 2. ]

[5.8 2.8 5.1 2.4]

[6.4 3.2 5.3 2.3]

[6.5 3. 5.5 1.8]

[7.7 3.8 6.7 2.2]

[7.7 2.6 6.9 2.3]

[6. 2.2 5. 1.5]

[6.9 3.2 5.7 2.3]

[5.6 2.8 4.9 2. ]

[7.7 2.8 6.7 2. ]

[6.3 2.7 4.9 1.8]

[6.7 3.3 5.7 2.1]

[7.2 3.2 6. 1.8]

[6.2 2.8 4.8 1.8]

[6.1 3. 4.9 1.8]

[6.4 2.8 5.6 2.1]

[7.2 3. 5.8 1.6]

[7.4 2.8 6.1 1.9]

[7.9 3.8 6.4 2. ]

[6.4 2.8 5.6 2.2]

[6.3 2.8 5.1 1.5]

[6.1 2.6 5.6 1.4]

[7.7 3. 6.1 2.3]

[6.3 3.4 5.6 2.4]

[6.4 3.1 5.5 1.8]

[6. 3. 4.8 1.8]

[6.9 3.1 5.4 2.1]

[6.7 3.1 5.6 2.4]

[6.9 3.1 5.1 2.3]

[5.8 2.7 5.1 1.9]

[6.8 3.2 5.9 2.3]

[6.7 3.3 5.7 2.5]

[6.7 3. 5.2 2.3]

[6.3 2.5 5. 1.9]

[6.5 3. 5.2 2. ]

[6.2 3.4 5.4 2.3]

[5.9 3. 5.1 1.8]]

-----------------------------

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

2 2]

150

-----------------------------

(150, 4)

-----------------------------

导入数据集

#导入数据集iris

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']

dataset = pd.read_csv(url, names=names) #读取csv数据

print(dataset.describe())

print ('-----------------------------')

打印返回值:

sepal-length sepal-width petal-length petal-width

count 150.000000 150.000000 150.000000 150.000000

mean 5.843333 3.054000 3.758667 1.198667

std 0.828066 0.433594 1.764420 0.763161

min 4.300000 2.000000 1.000000 0.100000

25% 5.100000 2.800000 1.600000 0.300000

50% 5.800000 3.000000 4.350000 1.300000

75% 6.400000 3.300000 5.100000 1.800000

max 7.900000 4.400000 6.900000 2.500000

数据可视化

#4种特征维度分布情况

#直方图 histograms

dataset.hist()

plt.show()

训练分类

from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier() # 所以参数均置为默认状态

clf.fit(iris.data, iris.target) # 使用训练集训练模型

print(clf)

print ('-----------------------------')

predicted = clf.predict(iris.data)

print(predicted)

print ('-----------------------------')

打印返回值

DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,

max_features=None, max_leaf_nodes=None,

min_impurity_decrease=0.0, min_impurity_split=None,

min_samples_leaf=1, min_samples_split=2,

min_weight_fraction_leaf=0.0, presort=False,

random_state=None, splitter='best')

-----------------------------

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

2 2]

# 获取花卉两列数据集

X = iris.data

L1 = [x[0] for x in X]

print(L1)

print ('-----------------------------')

L2 = [x[1] for x in X]

print (L2)

print ('-----------------------------')

打印返回值:

[5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4,

5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5.0, 5.0, 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5,

4.9, 5.0, 5.5, 4.9, 4.4, 5.1, 5.0, 4.5, 4.4, 5.0, 5.1, 4.8, 5.1, 4.6, 5.3, 5.0, 7.0,

6.4, 6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5.0, 5.9, 6.0, 6.1, 5.6, 6.7, 5.6, 5.8,

6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7, 6.0, 5.7, 5.5, 5.5, 5.8, 6.0, 5.4,

6.0, 6.7, 6.3, 5.6, 5.5, 5.5, 6.1, 5.8, 5.0, 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8,

7.1, 6.3, 6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5, 7.7, 7.7,

6.0, 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2, 7.4, 7.9, 6.4, 6.3, 6.1, 7.7,

6.3, 6.4, 6.0, 6.9, 6.7, 6.9, 5.8, 6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9]

-----------------------------

[3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3.0, 3.0, 4.0, 4.4, 3.9,

3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3.0, 3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2,

3.1, 3.2, 3.5, 3.6, 3.0, 3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3.0, 3.8, 3.2, 3.7, 3.3, 3.2,

3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9, 3.1, 3.0, 2.7,

2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3.0,

3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7, 3.0, 2.9, 2.9, 2.5, 2.8, 3.3, 2.7,

3.0, 2.9, 3.0, 3.0, 2.5, 2.9, 2.5, 3.6, 3.2, 2.7, 3.0, 2.5, 2.8, 3.2, 3.0, 3.8, 2.6,

2.2, 3.2, 2.8, 2.8, 2.7, 3.3, 3.2, 2.8, 3.0, 2.8, 3.0, 2.8, 3.8, 2.8, 2.8, 2.6, 3.0,

3.4, 3.1, 3.0, 3.1, 3.1, 3.1, 2.7, 3.2, 3.3, 3.0, 2.5, 3.0, 3.4, 3.0]

-----------------------------

绘图

plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o', label='setosa')

plt.scatter(X[50:100, 0], X[50:100, 1], color='blue', marker='x', label='versicolor')

plt.scatter(X[100:, 0], X[100:, 1], color='green', marker='s', label='Virginica')

#中文乱码解决

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus']=False

plt.title("DTC基于决策数的鸢尾花分类")#标题

plt.xlabel('Sepal length')

plt.ylabel('Sepal width')

plt.xticks(())

plt.yticks(())

plt.legend(loc=2)

plt.show()

学习心得:

决策树优点:简单直观,生成决策树很直观,基本不需要提前归一化、处理缺失值。

使用决策树预测的代价是O(

)。m为样本数。

既可以处理离散值也可以处理连续值,易解释。

可处理多维度输出的分类问题。

对于异常点的容错能力好,可交叉验证的剪枝(后剪枝)来选择模型,从而提高泛化能力。

决策树缺点:决策树算法会过拟合,导致泛化能力不强,可以通过设置节点最少样本数量和限制决策树深度来改进。

决策树易受到样本变动,导致树结构改变。通过集成算法学习之类的方法优化。

有比较复杂的关系,决策树很难学习,比如异或。一般用神经网络分类方法来解决。

特征样本比例过大,生成决策树容易偏向这些特征。这个通过调节样本权重来改善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

希捷宣布出货双碟装1TB硬盘 单碟500GB上市

希捷今天宣布,单碟容量高达500GB的Barracuda 7200.12 1TB硬盘已经出货。 现有的1TB硬盘产品一般都是三碟装(此前也有四碟装),包括希捷自家的ST31000340AS,但希捷一进率先将其升级为双碟装,存储密度也达到了329Gb每平方英寸。这样一…

P1334 瑞瑞的木板

题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏。他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000)。于是,他神奇地买了一根足够长的木板,长度为所需的N…

FFMpeg的output_example.c例子分析

该例子讲了如何输出一个libavformat库所支持格式的媒体文件。 (1)av_register_all(),初始化libavcodec库,并注册所有的编解码器和格式。 (2)guess_format(),根据文件名来获取输出文件格式&#…

大量数据+同步+多线程_Vulkan 多线程渲染

1. Overview of Vulkan1.1 计算机图形软件图形软件有两个大类:专用软件包(special-purpose packages)和通用编程软件包(general programming packages)。专用软件包通常提供一种UI设计语言,让用户直接生成想…

飞康任命Gartner前分析师担任亚洲区市场总监

在虚拟化、数据保护和数据迁移领域具备15年创新经验的美国飞康软件公司(FalconStor Software, Inc.,NASDAQ:FALC)近日宣布任命张瑾(Jimmie Chang)先生担任该公司亚洲区市场部门负责人。 飞康公司近日面向全…

12_登陆案例

13131转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7044846.html

如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器

http://blog.csdn.net/eplaylity/archive/2008/12/05/3454431.aspx http://www.cnblogs.com/konyel/tag/SDLGuide%E4%B8%AD%E6%96%87%E8%AF%91%E7%89%88/ ffmpeg文档http://blog.sina.com.cn/s/blog_46dc65a90100a91b.html http://dranger.com/ffmpeg/ffmpeg.html VLC核心功能部…

Flask 概述

什么是Web Framework? Web Application Framework(Web应用程序框架)或简单的Web Framework(Web框架)表示一个库和模块的集合,使Web应用程序开发人员能够编写应用程序,而不必担心协议&#xff0…

(五)Maven中的聚合和继承

一、为什么要聚合? 定义:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们…

python堆栈反向输出列表_python - IPython:将Python脚本的输出重定向到文件(如bash) - 堆栈内存溢出...

IPython有自己的上下文管理器来捕获stdout / err ,但它没有重定向到文件,它重定向到一个对象:from IPython.utils import iowith io.capture_output() as captured:%run my_script.pyprint captured.stdout # prints stdout from your script…

关于datagrid

基本在公司使用的datagrid不需要自己写前台代码,只需要自己给grid明确id,url以及列属性即可。 后台需要返回一个数据类型:{recordsFiltered2, data[], drawnull, recordsTotal2},通常返回这个数据类型的话,只需要调用d…

M-JPEG、MPEG4、H.264都有何区别 依维安防论坛

压缩方式是网络视频服务器和网络摄像机的核心技术,压缩方式很大程度上决定着图像的质量、压缩比、传输效率、传输速度等性能,它是评价网络视频服务器和网络摄像机性能优劣的重要一环。 随着多媒体技术的发展,相继推出了许多压缩编码标准&…

Django/Flask/Tornado三大web框架性能分析

写在前面:本文的数据涉及到之前遇到过的问题,大概一次 http 请求到收到响应需要多少时间。这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析。这里使用之前的一个报告数据: Pythons Web Framework Ben…

python urllib模块学习笔记

这个模块是最基本最常用的,以前看过,总结一下 #coding : utf-8import urlliburl http://cnblogs.com#代理服务器proxies {http:http://127.0.0.1:8087}#使用代理服务器打开r urllib.urlopen(url,proxies proxies)print r.info()print r.getcode()pri…

hibernate基础工具findBySQL学习

public List<Map<String,Object>> findBySQL(String sql,Map<String,Object> param,int start,int max) {log.debug("finding List by hql");try {       //最后返回map map的key可为别名和数据库字段SQLQuery querysessionFactory.getCurr…

python处理ini文件_python对ini配置文件处理

>>> cf.read("test.ini") #读取配置文件[test.ini]>>> cf.sections() #片段名[base, callback]>>> cf.options("callback") #配置…

Python实现自动推本地github博客到远程仓库

Python实现自动推本地github博客到远程仓库 以前的简单版本 通过python中的os模块操作系统命令 详情可参考:Python实现一行代码推本地git到远程仓库 升级版本 本次加入了监听文件修改功能 这样脚本只需在后台运行,即可检测到对应的文件夹中的内容是否变化 如果变化,则调用…

H.264/MPEG-4 AVC

维基百科&#xff0c;自由的百科全书跳转到&#xff1a; 导航, 搜索 跳过字词转换说明 汉漢▼▲为了阅读方便&#xff0c;本文使用全文手工轉換。转换内容&#xff1a;本文采用电脑和信息技术组全文转换 [查看] • [编辑] • [强制刷新] 以下為本條目單獨的全文轉換&#xff0c…

JavaScript 专题之函数柯里化

JavaScript 专题系列第十三篇&#xff0c;讲解函数柯里化以及如何实现一个 curry 函数 定义 维基百科中对柯里化 (Currying) 的定义为&#xff1a; In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes m…

机器学习模板

根据心情补充&#xff0c;语言都是Python hash&#xff0c;把所有的文本转化成数字 from sklearn.preprocessing import LabelEncoder for c in train.columns:if train[c].dtype object:lbl LabelEncoder()lbl.fit(list(train[c].values) list(test[c].values))train[c] l…