DecisionTreeClassifier实例:Iris莺尾花分类

Decision Trees决策树

决策树是一种监督学习算法(具有预定义的目标变量),主要用于分类,也可用于回归。sklearn.tree.DecisionTreeClassifier 可用于决策树分类问题:sci-kit learn Documentation Examples 1.10. Decision Trees

后面会专门补一篇决策树的原理等基础内容,这里主要介绍sklearn库中DecisionTreeClassifier类的使用。

DecisionTreeClassifier 参数

class sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best',max_depth=None,min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,random_state=None, max_leaf_nodes=None,
class_weight=None,presort=False)

参数表

名称 功能 描述
criterion 特征选择标准 ‘gini’ or ‘entropy’ (default=”gini”),即基尼系数或信息熵,两种算法的准确率差异不大,信息熵的效率更低一些(因为它有对数运算);一般使用默认的基尼系数”gini”即CART算法,除非你更喜欢类似ID3, C4.5的最优特征选择方法。
splitter 特征划分标准 ‘best’ or ‘random’ (default=”best”) 前者是在特征的所有划分点中找出最优的划分点,后者是随机的在部分划分点中找局部最优的划分点。 默认的”best”适合样本量不大的情况,而如果样本数据量非常大,此时决策树构建推荐”random”
max_depth 决策树最大深度 int or None, optional (default=None) 一般来说,数据少或者特征少的时候采用默认值None,那么决策树将扩展节点直到所有叶子都是纯的或直到所有叶子包含少于min_samples_split样本;如果模型样本量多,特征也多的情况下,推荐限制这个最大深度;深度越大,越容易过拟合,推荐树的深度为:5-20之间
min_samples_split 内部节点再划分所需最小样本数 int, float, optional (default=2) 如果是 int,则取传入值本身作为最小样本数; 如果是 float,则取ceil(min_samples_split * 样本数量) 的值作为最小样本数,即向上取整。
min_samples_leaf 叶子节点最少样本数 int,float,optional(default = 1)这个值限制了叶子节点所需的最少样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。
max_leaf_nodes 最大叶子节点数 int or None, optional (default=None) 通过限制最大叶子节点数,可以防止过拟合,默认是”None”,即不限制最大的叶子节点数。如果加了限制,算法会在最大叶子节点数内建立最优的决策树,具体的值可以通过交叉验证得到。
min_impurity_decrease 节点划分最小不纯度 float, optional (default=0.)这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点,即为叶子节点
min_impurity_split 信息增益的阀值 float, (default=1e-7)决策树在创建分支时,信息增益必须大于这个阀值,否则不分裂,成为叶子节点。从版本0.19开始改用min_impurity_decrease
class_weight 类别权重 dict, list of dicts, “balanced” or None,(default=None),指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重,如果使用“balanced”,则算法会自己计算权重,与各个类别的样本量成反比。如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的”None”

模型调参注意事项

1.当样本数量少但样本特征非常多的时候,决策树很容易过拟合,一般来说,样本数比特征数多一些更容易建立健壮的模型;
2.如果样本数量少但是样本特征非常多,在拟合决策树模型前,推荐先做维度规约,比如主成分分析(PCA),特征选择(Losso)或者独立成分分析(ICA),这样特征的维度会大大减小,再来拟合决策树模型效果会好;
3.推荐使用决策树的可视化,同时先限制决策树的深度(比如最多3层),这样可以先观察生成的决策树里数据的初步拟合情况,然后再决定是否要增加深度;
4.在训练模型之前,注意观察样本的类别情况(主要指分类树),如果类别分布非常不均匀,就要考虑用class_weight来限制模型过于偏向样本多的类别;
5.决策树的数组使用的是numpy的float32类型,如果训练数据不是这样的格式,算法会先做copy再运行;
6.如果输入的样本矩阵是稀疏的,推荐在拟合前调用csc_matrix稀疏化,在预测前调用csr_matrix稀疏化。


属性表
在这里插入图片描述
常用属性:
classes_:分类的标签值
n_classes_:给出了分类的数量


方法表
在这里插入图片描述
常用方法:
fit(X, y[, sample_weight, check_input, …]):训练模型
predict(X[, check_input]):用模型进行预测,返回预测值
predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值
predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值
score(X,y[,sample_weight]):返回模型的预测性能得分

实例:Iris鸢尾花数据集的决策树分类

Iris 鸢尾花数据集包含 3 类共 150 条记录(每类各 50 条),每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于3类(iris-setosa, iris-versicolour, iris-virginica)中的哪一类品种。

先来看一看数据集长什么样子,更多可视化参考链接【3】Iris数据集可视化

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris

# Load data
iris = load_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)
print(dataset.describe())

在这里插入图片描述

接下来使用Sklearn中的DecisionTreeClassifier类进行分类

基础版本


                
  • 32
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值