用决策树(CART)解决iris分类问题

首先先看Iris数据集

Sepal.Length——花萼长度 Sepal.Width——花萼宽度

Petal.Length——花瓣长度 Petal.Width——花瓣宽度

通过上述4中属性可以预测花卉属于Setosa,Versicolour,Virginica 三个种类中的哪一类

决策树 by CART

决策树有挺多种,这里讲下CART

CART的执行过程是这样的:

  1. 用特征值k和下限tk二分子集
  2. 不断二分,直到到达最大深度或者划分不能再减少不纯度为止

这一下sklearn都会自动帮我们完成,我们调用就行了

如何避免过拟合问题

减小最大深度等等

一个tip:

? min_* 的调大

? max_*的调小

? 就是DecisionTreeClassifier里面的参数,具体看文档_(:з」∠)_

损失函数的比较

sklearn提供了两种损失函数gini和entropy

gini是通过计算每个节点的不纯度,具体公式如下↓

\(J(k,t_k) = \frac{m_{left}}{m}G_{left} + \frac{m_{right}}{m}G_{right}\)

entropy在这里就不再赘述了

sklearn默认的是调用gini,因为gini的速度会快点,而且两者最后的效果是差不多的,真要比的话entropy产生的决策树会更平衡点

接下来我们来看代码

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
import numpy as np

iris = load_iris()
X = iris.data[:, 2:] # petal length and width
y = iris.target     #目标值

tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42) #定义最大深度和确定随机种子
tree_clf.fit(X, y)  #训练
print(tree_clf.predict_proba([[5, 1.5]]))   #预测返回的是可能性

#以上代码运行后将会产生如下输出 [[ 0.          0.90740741  0.09259259]]
#分别代表属于每一种类别可能的概率
#也可以用如下代码
print(tree_clf.predict[[5,1.5]])    #直接输出属于哪一类

看下上面生成的决策树的样子

注:

? valuse是它划分到各个类的数量

? samples 指的是当前节点的数据个数

? 从左表橙色的点可以看出,gini=0意味着划分到了相同的类别里面

ps.以上代码及图片来自《Hands-On Machine Learning with Scikit-Learn》一书

如需转载请注明出处

**喜欢要不支持下_(:з」∠)_**

原文地址:https://www.cnblogs.com/MartinLwx/p/9162300.html

时间: 2024-11-05 19:28:27

用决策树(CART)解决iris分类问题的相关文章

02-23 决策树CART算法

[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ 决策树CART算法 决策树C4.5算法虽然对决策树ID3算法做了很大的改良,但是缺点也是很明显的,无法处理回归问题.使用较为复杂的熵来作为特征选择的标准.生成的决策树是一颗较为复杂的多叉树结构,CART算法针对这些问题又做了进一步的优化. 一.决策树CART算法学习目标 基尼指数和熵 CART算法对连续值和特

用二项逻辑斯蒂回归解决二分类问题

逻辑斯蒂回归: 逻辑斯蒂回归是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的, 也可以是多分类的 基本原理 logistic 分布 折X是连续的随机变量,X服从logistic分布是指X具有下列分布函数和密度函数: 其中为位置参数,为形状参数.与图像如下,其中分布函数是以为中心对阵,越小曲线变化越快 二项logistic回归模型: 二项logistic回归模型如下: 其中是输入,输出,W称为权值向量,b称为偏置, 是w和x的内积 参数估计 ? 假设: ?

逻辑回归-6.解决多分类问题

逻辑回归是使用回归的方式,来解决分类问题.之前说过,逻辑回归只能解决二分类问题,为了解决多分类问题,可以使用OVR和OVO方法 OVR(One Vs Rest) 某个分类算法有N类,将某一类和剩余的类比较作为二分类问题,N个类别进行N次分类,得到N个二分类模型,给定一个新的样本点,求出每种二分类对应的概率,概率最高的一类作为新样本的预测结果. OVO(One Vs One) 某个分类算法有N类,将某一类和另一类比较作为二分类问题,总共可分为\(C^2_n\)种不同的二分类模型,给定一个新的样本点

【火炉炼AI】深度学习005-简单几行Keras代码解决二分类问题

[火炉炼AI]深度学习005-简单几行Keras代码解决二分类问题 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, Keras 2.1.6, Tensorflow 1.9.0) 很多文章和教材都是用MNIST数据集作为深度学习届的"Hello World"程序,但是这个数据集有一个很大的特点:它是一个典型的多分类问题(一共有10个分类),在我们刚刚开始接触深度学习时,我倒是觉得

模式识别:分类回归决策树CART的研究与实现

摘 要:本实验的目的是学习和掌握分类回归树算法.CART提供一种通用的树生长框架,它可以实例化为各种各样不同的判定树.CART算法采用一种二分递归分割的技术,将当前的样本集分为两个子样本集,使得生成的决策树的每个非叶子节点都有两个分支.因此,CART算法生成的决策树是结构简洁的二叉树.在MATLAB平台上编写程序,较好地实现了非剪枝完全二叉树的创建.应用以及近似剪枝操作,同时把算法推广到多叉树. 一.技术论述 1.非度量方法 在之前研究的多种模式分类算法中,经常会使用到样本或向量之间距离度量(d

CART(决策分类树)原理和实现

前面我们了解了决策树和adaboost的决策树墩的原理和实现,在adaboost我们看到,用简单的决策树墩的效果也很不错,但是对于更多特征的样本来说,可能需要很多数量的决策树墩 或许我们可以考虑使用更加高级的弱分类器,下面我们看下CART(Classification And Regression Tree)的原理和实现吧 CART也是决策树的一种,不过是满二叉树,CART可以是强分类器,就跟决策树一样,但是我们可以指定CART的深度,使之成为比较弱的分类器 CART生成的过程和决策树类似,也是

决策树(三)分类算法小结

引言 本文主要是对分类型决策树的一个总结.在分类问题中,决策树可以被看做是if-then规则的结合,也可以认为是在特定特征空间与类空间上的条件概率分布.决策树学习主要分为三个步骤:特征选择.决策树的生成与剪枝操作.本文简单总结ID3和C4.5算法,之后是决策树的修剪. ID3算法 ID3算法和核心是:在决策树各级节点上选择属性时,用信息增益(information gain)作为属性的选择标准,具体做法是:检测所有的属性,选择信息增益最大的属性产生决策树节点,由该属性的不同取值建立分支,再对各分

决策树与随机森林分类算法(Python实现)

一.原理: 决策树:能够利用一些决策结点,使数据根据决策属性进行路径选择,达到分类的目的. 一般决策树常用于DFS配合剪枝,被用于处理一些单一算法问题,但也能进行分类 . 也就是通过每一个结点的决策进行分类,那么关于如何设置这些结点的决策方式: 熵:描述一个集合内元素混乱程度的因素. 熵的衡量公式: ? 公式中的熵值 Entropy 会随着集合中类别数量增加而快速增加,也就是说一个集合中类别越少,那么它的熵就小,整体就越稳定. 对于一个标记数据集,要合理的建立一棵决策树,就需要合理的决定决策结点

pytorch解决鸢尾花分类

半年前用numpy写了个鸢尾花分类200行..每一步计算都是手写的  python构建bp神经网络_鸢尾花分类 现在用pytorch简单写一遍,pytorch语法解释请看上一篇pytorch搭建简单网络 1 import pandas as pd 2 import torch.nn as nn 3 import torch 4 5 6 class MyNet(nn.Module): 7 def __init__(self): 8 super(MyNet, self).__init__() 9 s