机器学习8-决策树

决策树(Decision Tree)是一种强大且灵活的机器学习算法,可用于分类回归问题。它通过从数据中学习一系列规则来建立模型,这些规则对输入数据进行递归的分割,直到达到某个终止条件

决策树的构建过程:

1. 选择特征:从所有特征中选择一个最佳的分裂标准,以将数据集分成两个子集。

2. 分裂数据:使用选定的特征和分裂标准将数据集分成两个子集。这个过程会递归地应用于每个子集,形成树的分支。

3. 终止条件:在每个节点处,都会检查是否满足某个终止条件,例如节点中的样本数量小于阈值,或者树的深度达到预定的最大深度。

4. 重复:重复上述步骤,不断分裂和构建树,直到达到终止条件。

决策树的特点:

1. 可解释性:决策树的规则易于理解,可视化呈现直观的分裂过程,使决策过程变得透明。

2. 适应性:能够适应不同类型的数据,包括离散型和连续型特征。

3. 非参数性:不对数据的分布做出具体假设,因此对于不同类型的数据集都具有灵活性。

4. 特征重要性:决策树可以提供每个特征的重要性,帮助识别影响预测的关键因素。

5. 处理缺失值:能够处理缺失值,不需要对数据进行特殊的处理。

应用领域:

  • 分类问题:例如,判断邮件是否为垃圾邮件、病患是否患有某种疾病等。
  • 回归问题:预测房价、销售额等连续性输出的问题。
  • 特征选择:通过查看特征的重要性,可以辅助进行特征选择。
  • 异常检测:可用于检测数据中的异常值。

决策树的一个主要缺点是容易过拟合,特别是当树的深度很大时。为了缓解过拟合,可以通过剪枝等技术来调整树的复杂度。

需求:

判断用户是否会购买SUV

代码:

# Decision Tree Classification

### Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd


### Importing the dataset
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

### Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)


### Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

### Fitting Decision Tree Classification to the Training set
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(criterion = 'entropy', random_state = 0)
classifier.fit(X_train, y_train)

### Predicting the Test set results
y_pred = classifier.predict(X_test)

### Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

# Visualising the Training set results
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Decision Tree Classification (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

# Visualising the Test set results
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Decision Tree Classification (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

结果:

结论:

预测准确度还是比较高的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘

Selenium更新到 4.x版本后,以前的一些常用的代码的语法发生了改变 from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.baidu.com) input browser.find_element_by_id(By.ID,kw) input.send_keys(Python)目标:希望通…

Python静态方法和类方法的区别和应用

实际上,Python 完全支持定义类方法,甚至支持定义静态方法。Python 的类方法和静态方法很相似,它们都推荐使用类来调用(其实也可使用对象来调用)。 类方法和静态方法的区别在于,Python会自动绑定类方法的第…

第三节:基于 InternLM 和 LangChain 搭建你的知识库(课程笔记)

视频链接:https://www.bilibili.com/video/BV1sT4y1p71V/?vd_source3bbd0d74033e31cbca9ee35e111ed3d1 文档地址: https://github.com/InternLM/tutorial/tree/main/langchain 课程笔记: 1.仅仅包含训练时间点之前的数据,无法…

Redis篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、什么是 Redis?二、Redis 与其他 key-value 存储有什么不同?三、Redis 的数据类型?四、使用 Redis 有哪些好处?五、Redis 相比 Memcached 有哪些优势?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住…

wordpress外贸成品网站模板

首页大图slider轮播,橙色风格的wordpress外贸网站模板 https://www.zhanyes.com/waimao/6250.html 蓝色经典风格的wordpress外贸建站模板 https://www.zhanyes.com/waimao/6263.html

智能汽车专题:智能驾驶2023年度报告

今天分享的是智能汽车系列深度研究报告:《智能汽车专题:智能驾驶2023年度报告》。 (报告出品方:量子位智库) 报告共计:30页 来源:人工智能学派 顶天立地:技术进阶路线明晰 根据…

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G题解

题目 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所…

物联网技术的崛起:驱动智慧景区的新篇章

随着科技的飞速发展,物联网技术逐渐成为推动各行各业创新的重要力量。在旅游业中,物联网的应用为智慧景区的建设提供了有力支持,为游客带来了更加便捷、智能的旅游体验。本文将探讨物联网技术在智慧景区中的应用及其对旅游业的影响&#xff0…

vue3-深入响应式系统

Vue 最标志性的功能就是其低侵入性的响应式系统。组件状态都是由响应式的 JavaScript 对象组成的。当更改它们时,视图会随即自动更新。这让状态管理更加简单直观,但理解它是如何工作的也是很重要的,这可以帮助我们避免一些常见的陷阱。在本节…

DDD爱好者通病-《软件方法》自测题解析37

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《软件方法》第5章自测题2 5 [ 单选题 ] 我们经常会听到有人说“系统分为几个功能模块”。针对“功能模块”,以下说法正确的是:  A) 它把外部和内部混在一…

蓝桥杯:C++二分算法

在基本算法中,二分法的应用非常广泛,它是一种思路简单、编程容易、效率极高的算法。蓝桥杯软件类大赛中需要应用二分法的题目很常见。 二分法有整数二分和实数二分两种应用场景 二分法的概念 二分法的概念很简单,每次把搜索范围缩小为上一…

Linux POSIX信号量 线程池

Linux POSIX信号量 线程池 一. 什么是POSIX信号量?二. POSIX信号量实现原理三. POSIX信号量接口函数四. 基于环形队列的生产消费模型五. 线程池 一. 什么是POSIX信号量? POSIX信号量是一种用于同步和互斥操作的机制,属于POSIX(Po…

WINCC如何新增下单菜单,切换显示页面

杭州工控赖工 首先我们先看一下,显示的效果,通过下拉菜单,切换主显示页面。如图一: 图1 显示效果 第一步: 通过元件新增一个组合框,见图2; 组合框的设置,设置下拉框的长宽及组合数…

[java基础揉碎]数组 值拷贝和引用拷贝的赋值方式

目录 数组的介绍 为什么有数组 数组的三种使用方式 动态初始化: 静态初始化: 数组使用注意事项和细节 值拷贝和引用拷贝的赋值方式 数组反转: 数组拷贝: 数组的介绍 数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。 即:数组…

解决ubuntu登录密码问题

解决ubuntu登录密码问题 不要随便删除密码,不要随便改密码,很容导致密码过期,或者密码无效。参考了很多人的做法,都没有得到解决。下面的过程,够详细了,我就是这么搞好的。 1、重启虚拟机,不停…

Ubuntu忘记登录密码重置步骤

Ubuntu忘记登录密码重置步骤 1.开机界面长按shitf键,进入grub,并选择Advanced options for ubuntu,按下回车 2.选择一个较新版本的recovery mode,按下回车 3.会跑一些数据,等待跑完后会出现下面的界面,选择…

SG7050VEN(晶体振荡器SPXO)输出:LVDS低相位抖动

SG7050VEN 提供了从25 MHz到500 MHz的宽广频率范围,2.5V和3.3V供电电压,可以轻松集成到各种电源中,7.0 5.0 1.5 mm 的封装,LVDS输出已成为高速数据传输的首选,它提供了低功耗和高速率的优势,同时还能最小化电磁干扰。…

基于BP算法的SAR成像matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 BP算法的基本原理 4.2 BP算法的优点与局限性 5.完整工程文件 1.课题概述 基于BP算法的SAR成像。合成孔径雷达(SAR)是一种高分辨率的雷达系统,能够在各种天气和光…

幻兽帕鲁服务器创建私服教程(新版教程更简单)

幻兽帕鲁官方服务器不稳定?自己搭建幻兽帕鲁服务器,低延迟、稳定不卡,目前阿里云和腾讯云均推出幻兽帕鲁专用服务器,腾讯云直接提供幻兽帕鲁镜像系统,阿里云通过计算巢服务,均可以一键部署,鼠标…

Linux第58步_备份busybox生成rootfs根文件系统

备份busybox生成rootfs根文件系统 打开终端 输入“ls回车” 输入“cd linux/回车” 输入“ls回车”,产看“linux”目录下的文件和文件夹 输入“cd nfs/回车”,切换到“nfs”目录 输入“ls回车”,产看“nfs”目录下的文件和文件夹 输入…