决策树基本原理&sklearn实现

1. 什么是决策树

决策树算法是一种有监督学习算法,利用分类的思想,根据数据的特征构建数学模型,从而达到数据的筛选,决策的目标。

决策树( Decision Tree) 又称为判定树,是数据挖掘技术中的一种重要的【分类与回归方法】,它是一种以树结构(包括二叉树和多叉树)形式 来表达的预测分析模型。

其每个非叶节点表示一个特征 属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别

复制代码
决策树(Decision Tree)是一个树结构
1. 结点和有向边组成
2. 结点分为:内部结点 和 叶子结点
3. ### 内部结点表示一个特征; 叶子结点表示一个分类 ###

2. 决策树算法

复制代码
1. ID3算法(只能处理分类问题,不能处理回归问题)
    核心思想:在各级结点上,使用 ### **【信息增益】** ### 的方法作为属性的选择标准,以此来确定每个结点所采用的合适的属性;
    缺点:
        1)仅支持离散数据;
        2)不能处理缺失值
        3)不能剪枝
2. C4.5算法(只能处理分类问题,不能处理回归问题)
    核心思想:
        相对于ID3的改进是使用 ### 【信息增益率】 ### 的方法;
    改进ID3的点:
        1)C4.5算法既能处理离散的描述属性,也可以处理连续的描述属性
        2)能处理缺失值
        3)可以剪枝
3. CART算法(Classification and Regression Tree,即分类与回归树,既可以用于分类,也可以用于回归)
    处理分类问题--使用 **基尼系数(基尼杂质系数 或 基尼不纯系数)** 选择特征
    CART建立的分类树是 **二叉树** ,不是多叉树

3 决策树优缺点

优点:

速度快 】:计算量相对较小,且容易转化成分类规则。只要沿着树根向下一直走到叶,沿途的分裂条件就能够唯一确定一条分类的谓词。

准确性高 】:挖掘出的分类规则准确性高,便于理解,决策树可以清晰的显示哪些字段比较重要。
计算量 相对不是很大
非参数学习,不需要设置参数。

缺点:

决策树很容易【过拟合】 ,很多时候即使进行后剪枝也无法避免过拟合的问题,因此可以通过设置树深或者叶节点中的样本个数来进行预剪枝控制;

决策树属于【样本敏感型】,泛化能力较差,即使样本发生一点点改动,也会导致整个树结构的变化,可以通过集成算法来解决;

4 skearn 决策树 api

sklearn.tree.DecisionTreeClassifier()

特征选择标准,可选参数,默认是gini,可以设置为entropy。

gini是基尼不纯度,是将来自集合的某种结果随机应用于某一数据项的预期误差率,是一种基于统计的思想。

entropy是香农熵,是一种基于信息论的思想。

Sklearn把gini设为默认参数,应该也是做了相应的斟酌的,精度或许会更高一些。

接口: sklearn.tree.DecisionTreeClassifier()

根据传入参数的不同调用不同的决策树算法

参数:

1)当参数为entropy,启动ID3算法:

sklearn.tree.DecisionTreeClassifier("entropy")

2)当参数为gini,启用CART算法:

sklearn.tree.DecisionTreeClassifier("gini")

5 实例

1) 导入sklearn的tree包

from sklearn import tree

2)准备数据,特征集X_train,标签集 y_train

3)实例化模型,

model = tree.DecisionTreeClassifier(criterion="entropy") # criterion="gini"为CART算法

4)模型训练(拟化)

model.fit(X_train,y_train)

score=model.score(x_train,y_train) # 模型对于测试集的平均精度

5)模型应用,预测 model.predict(X_新特征集)

python 复制代码
# 导入相关库
from sklearn.model_selection import train_test_split
from sklearn import tree
from sklearn.datasets import load_wine
import pandas as pd

# 导入数据集
wine = load_wine()

X = wine.data
Y = wine.target
features_name = wine.feature_names
print(features_name)
print(pd.concat([pd.DataFrame(X), pd.DataFrame(Y)], axis=1))
# 打印数据
# 划分数据集,数据集划分为测试集占20%;
x_train, x_test, y_train, y_test = train_test_split(
    X, Y, test_size=0.2, random_state=0)

# 采用ID3算法进行计算;
# criterion: 标准
# entropy:熵,混乱,无序
# gini:基尼
# criterion="entropy" 代表ID3算法;不传任何参数,即默认值为gini,代表CART算法
clf = tree.DecisionTreeClassifier(criterion="entropy")  # criterion="entropy" 代表ID3算法

# 采用CART算法进行计算
# clf = tree.DecisionTreeClassifier(criterion="gini") # criterion="gini" 代表CART算法
# 获取模型
clf.fit(x_train, y_train)

# 返回测试集预测的平均精度
score = clf.score(x_test, y_test)
print('准确率为:', score)

y_predict = clf.predict(x_test)

# 对测试集的预测类别标签和真实标签进行对比
print(pd.concat([pd.DataFrame(x_test), pd.DataFrame(y_test), pd.DataFrame(y_predict)], axis=1))
相关推荐
智驱力人工智能3 小时前
工厂智慧设备检测:多模态算法提升工业安全阈值
人工智能·算法·安全·边缘计算·智慧工厂·智能巡航·工厂设备检测
2501_924731476 小时前
城市路口识别准确率↑31%!陌讯时空建模算法在交通拥堵识别中的突破
人工智能·算法·目标检测·计算机视觉·目标跟踪
熬了夜的程序员6 小时前
【华为机试】208. 实现 Trie (前缀树)
数据结构·算法·华为od·华为
小O的算法实验室8 小时前
2024年ESWA SCI1区TOP,自适应种群分配和变异选择差分进化算法iDE-APAMS,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
西猫雷婶9 小时前
scikit-learn/sklearn学习|岭回归解读
开发语言·人工智能·机器学习·支持向量机·回归·scikit-learn·sklearn
不吃洋葱.9 小时前
左子树之和
算法
金融小师妹10 小时前
基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
大数据·人工智能·算法
数据智能老司机11 小时前
图算法趣味学——最短路径
数据结构·算法·云计算
快去睡觉~11 小时前
力扣109:有序链表转换二叉搜索树
算法·leetcode·链表
是Dream呀11 小时前
YOLOv8深度解析:从架构革新到应用实践
人工智能·算法