IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 机器学习之决策树算法 -> 正文阅读

[数据结构与算法]机器学习之决策树算法

1、认识决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,就是利用这类结构分割数据的一种分类学习方法。是帮助我们进行高效决策分析的一种方法。

2、信息论基础(信息熵、信息增益)

  • 信息:消除随机不定性的东西(信息论创始人说的:香农)
  • 信息的衡量:使用信息熵,反应信息量的多少
  • 信息熵的定义
  • 决策树的划分依据之一 – 信息增益

3、决策树API

sklearn.tree.DecisionTreeClassifier(criterion="gini",max_depth=None,random_state=None)
- 决策树分类器
- criterion:默认是"gini",也可以选择信息增益的熵“entropy”
- max_depth:决策树的深度大小(不能太大,防止过拟合)
- random_state:随机树种子

4、决策树算法对莺尾花分类

from sklearn.datasets import load_iris,fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
import ssl

def decision_iris():
    """
    1)、获取数据
    2)、数据划分
    3)、数据特征提取(该步骤在本例中不需要)
    4)、使用决策树预估器进行分类
    5)、模型的选择与调优
    6)、模型评价
    :return:
    """
    # 1)、获取数据
    iris = load_iris()
    # 2)、数据划分
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target)
    # 3)、使用决策树预估器进行分类
    estimator = DecisionTreeClassifier(criterion="entropy")
    estimator.fit(x_train,y_train)
    # 4)、模型评价
    """评估方法1:直接比对真实值和预测值"""
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)
    """评估方法2:计算准确率"""
    score = estimator.score(x_test, y_test)  # 相当于计算了预估器的准确率,因为这里本来是完全一致的
    print("准确率:\n", score)
    return
    
if __name__ == '__main__':
    # knn_iris()
    ssl._create_default_https_context = ssl._create_unverified_context
    # nb_news()
    decision_iris()

准确率:
0.9210526315789473
可以可以将该结果与KNN算法进行比较

5、决策树的可视化API

  • 保存树的结构到dot文件
sklearn.tree.export_graphviz()# 该函数能够导出dot格式
- tree.export_graphviz(estimator,out_file="tree.dot",feature_names=["age","pclass "]) 
  • 下载支持dot插件,你点开那个文件,pycharm 会自动让你下载
 # 可视化决策树,直接把这一部分加入到decision_iris()中即可
    export_graphviz(estimator, out_file="iris_tree.dot")

运行结果如图

请添加图片描述

6、决策树总结

  • 优点:
    1. 简单的理解和解释,树木的可视化;
    2. 可视化,可解释能力强;
  • 缺点:
    决策树学习者可以创建不能很好地推广数据过于复杂的数据,这被称作为过拟合;
  • 改进:
    1. 减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)
    2. 随机森林

ps:在企业重要决策中,由于决策树有很好的分析能力,在决策过程中应用较多,可以选择特征

7、泰坦尼克号案例(点击此处下载数据)密码:rtp0

流程分析

  • 获取数据
  • 数据处理(要根据实际数据是否需要,对本问题来说肯定是需要的)
    1. 缺失值的处理
    2. 特征值–>字典类型
  • 划分数据集合
  • 特征工程:字典特征的抽取
  • 决策树预估器流程
  • 模型评估
    代码如下
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.feature_extraction import DictVectorizer
import pandas as pd


def titanic_demo():
    # 1)、获取数据
    titanic = pd.read_csv("/Users/dengzhao/Desktop/数据集/titanic/train.csv")
    # 2)、筛选特征值和目标值
    x = titanic[["Pclass","Age","Sex"]]
    y = titanic["Survived"]
    # 3)、缺失值处理
    x["Age"].fillna(x["Age"].mean(),inplace=True)
    # 4、转换成字典
    x = x.to_dict(orient="records")

    # 5)、数据集的划分
    x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=22)# random_state随机数种子
    # 6)、字典特征抽取
    transfer = DictVectorizer()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 7)、转换器
    estimator = DecisionTreeClassifier(criterion="entropy",max_depth=8)
    estimator.fit(x_train, y_train)
    # 8)、模型评价
    """评估方法1:直接比对真实值和预测值"""
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)
    """评估方法2:计算准确率"""
    score = estimator.score(x_test, y_test)  # 相当于计算了预估器的准确率,因为这里本来是完全一致的
    print("准确率:\n", score)
    # 9)、可视化决策树
    export_graphviz(estimator, out_file="titanic_tree.dot",feature_names=transfer.get_feature_names())
    return

if __name__ == '__main__':
    titanic_demo()
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:43:30  更:2022-03-16 22:49:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:27:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码