当前位置: 首页 > news >正文

第L6周:机器学习-随机森林(RF)

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

目标
1.什么是随机森林(RF)
随机森林(Random Forest, RF)是一种由 决策树 构成的 集成算法 ,采用的是 Bagging 方法,他在很多情况下都能有不错的表现。其是由很多决策树构成的,不同决策树之间没有关联。当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果。个人理解:就是通过不维度去使用决策树去分类,每个决策树都有自己的分类结果 ,再把所有的结果进行统计,得出分类最多的那个分类就是预测的最终结果 。
2. Bagging方法:Bagging的主要思想如下图所示,首先从数据集中采样出T个数据集,然后基于这T个数据集,每个训练出一个基分类器,再讲这些基分类器进行组合做出预测。Bagging在做预测时,对于分类任务,使用简单的投票法。对于回归任务使用简单平均法。若分类预测时出现两个类票数一样时,则随机选择一个。
image.png
3.目标:从一个天气数据集去推送天气情况,这个天气数据集包含很多维度的数据,比如温度、温度、气压、风速、云量等等;
具体实现
(一)环境
语言环境:Python 3.10
编 译 器: PyCharm
**(二)具体步骤:

  1. 导入库
import pandas as pd  
import numpy as np  
import seaborn as sns  
import matplotlib.pyplot as plt  
from sklearn.preprocessing import LabelEncoder  
from sklearn.model_selection import train_test_split  
from sklearn.ensemble import RandomForestClassifier  
from sklearn.metrics import classification_report
  1. 导入数据
data = pd.read_csv('./weather_classification_data.csv')  
print(data)

image.png
字段解释:
image.png
3. 查看数据信息

# 数据检查和预处理  
print(data.info())

image.png

# 查看分类特征的唯一值  
characteristic = ['Cloud Cover', 'Season', 'Location', 'Weather Type']  
for i in characteristic:  print(f'{i}:')  print(data[i].unique())  # 过滤重复值print('-' * 50)

image.png

# 继续探索  
feature_map = {  'Temperature': '温度',  'Humidity': '湿度百分比',  'Wind Speed': '风速',  'Precipitation (%)': '降水量百分比',  'Atmospheric Pressure': '大气压力',  'UV Index': '紫外线指数',  'Visibility (km)': '能见度'  
}  
plt.figure(figsize=(15, 10))  for i, (col, col_name) in enumerate(feature_map.items(), 1):  plt.subplot(2, 4, i)  sns.boxplot(y=data[col])  plt.title(f'{col_name}的箱线图', fontsize=14)  plt.ylabel('数值', fontsize=12)  plt.grid(axis='y', linestyle='--', alpha=0.7)  plt.tight_layout()  
plt.show()

注意:

  1. 如果出现“KeyError"的错误,请一定保证features_map中的key和数据中的列名一致,否则找不到。
  2. 如果出现如下图plt无法显示中文的情况:
    image.png
    请在代码中加入这两句(加哪里?自己琢磨一下),参考:python:matplotlib绘图无法显示中文或负号,显示为框框 - 范仁义 - 博客园:
plt.rcParams["font.sans-serif"] = ["SimHei"]  
plt.rcParams["font.family"] = "sans-serif"


分析一下:
image.png

# 处理一下异常数据  
print(f"温度超过60度的数据量: {data[data['Temperature'] > 60].shape[0]}, 占比{round(data[data['Temperature']>60].shape[0] / data.shape[0] * 100, 2)}%.")  
print(f"湿度百分比超过100%的数据量:{data[data['Humidity'] > 100].shape[0]},占比{round(data[data['Humidity'] > 100].shape[0] / data.shape[0] * 100,2)}%。")  
print(f"降雨量百分比超过100%的数据量:{data[data['Precipitation (%)'] > 100].shape[0]},占比{round(data[data['Precipitation (%)'] > 100].shape[0] / data.shape[0] * 100,2)}%。")

image.png
异常数据有点高,把这些异常数据清除掉,以免影响整体训练效果:

# 处理一下异常数据,以免影响训练效果  
print("删前的数据shape:", data.shape)  
data = data[(data['Temperature'] <= 60) & (data['Humidity'] <= 100) & (data['Precipitation (%)'] <= 100)]  
print("删后的数据shape:", data.shape)

image.png

  1. 随机森林预测
# 随机森林预测  
new_data = data.copy()  
label_encoders = {}  
categorical_features = ['Cloud Cover', 'Season', 'Location', 'Weather Type']  
for feature in categorical_features:  le = LabelEncoder()  new_data[feature] = le.fit_transform(data[feature])  label_encoders[feature] = le  for feature in categorical_features:  print(f"'{feature}'特征的对应关系: ")  for index, class_ in enumerate(label_encoders[feature].classes_):  print(f" {index}: {class_}")

image.png

# 构建x, y  
x = new_data.drop(['Weather Type'], axis=1)  
y = new_data['Weather Type']  # 划分数据集  
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=15)  # 构建RF模型  
rf_clf = RandomForestClassifier(random_state=15)  
rf_clf.fit(x_train, y_train)  # 使用RF进行预测  
y_pred_rf = rf_clf.predict(x_test)  
class_report_rf = classification_report(y_test, y_pred_rf)  
print(class_report_rf)

image.png
准确率还是很高。

相关文章:

第L6周:机器学习-随机森林(RF)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 1.什么是随机森林&#xff08;RF&#xff09; 随机森林&#xff08;Random Forest, RF&#xff09;是一种由 决策树 构成的 集成算法 &#…...

【电路笔记】-差分运算放大器

差分运算放大器 文章目录 差分运算放大器1、概述2、差分运算放大器表示2.1 差分模式2.2 减法器模式3、差分放大器示例3.1 相关电阻3.2 惠斯通桥3.3 光/温度检测4、仪表放大器5、总结1、概述 在之前的文章中,我们讨论了反相运算放大器和同相运算放大器,我们考虑了在运算放大器…...

git 命令---想要更改远程仓库

在 Git 中&#xff0c;origin 是默认的远程仓库名称。可以使用以下命令查看当前 Git 仓库的 origin 名称及其对应的 URL&#xff1a; git remote -v这个命令会列出所有配置的远程仓库及其名称&#xff0c;其中 origin 通常是克隆时自动设置的默认远程仓库名称。输出示例&#…...

LeetCode:2848. 与车的相交点 一次遍历,时间复杂度O(n)

2848. 与车的相交点 today 2848. 与车的相交点 题目描述 给你一个下标从 0开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i &#xff0c;nums[i] [starti, endi] &#xff0c;其中 s t a r t i start_i starti​ 是第 i 辆车的起点&#xff0c; e n …...

Xcode 16 RC (16A242) 发布下载,正式版下周公布

Xcode 16 RC (16A242) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-16/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Xcode 16 的新功…...

git 更换远程地址的方法

需要将正在开发的代码远程地址改成新的地址&#xff0c;通过查询发现有三个方法可以实现&#xff0c;特此记录。具体方法如下&#xff1a; &#xff08;1&#xff09;通过命令直接修改远程仓库地址 git remote 查看所有远程仓库git remote xxx 查看指定远程仓库地址git remote…...

9. 什么是 Beam Search?深入理解模型生成策略

是不是总感觉很熟悉&#xff1f; 在之前第5&#xff0c;7&#xff0c;8篇文章中&#xff0c;我们都曾经用到过与它相关的参数&#xff0c;而对于早就有着实操经验的同学们&#xff0c;想必见到的更多。这篇文章将从示例到数学原理和代码带你进行理解。 Beam Search 对应的中文翻…...

Spring自定义注解

目录 一、interface 关键字 二、元注解 三、简单实现 四、使用切面执行自定义注解逻辑 1) 首先将刚才的注解修改成放在方法上的&#xff1a; 2) 定义一个切面类&#xff1a; 3&#xff09;将注解放入到接口方法中测试&#xff1a; 五、切点表达式 一、interface 关键字 …...

微信小程序:wx.login或调用uni.login时报错the code is a mock one

微信小程序&#xff0c;调用wx.login或调用uni.login方法&#xff0c;返回the code is a mock one 原因与解决 原因:没有关联真实的 appid&#xff0c;解决办法&#xff1a;绑定真实的微信小程序的appid...

URL的执行流程

基本概念&#xff1a; URL&#xff08;统一资源定位符&#xff0c;Uniform Resource Locator&#xff09;的执行流程是指当你在浏览器中输入一个URL并按下回车键时&#xff0c;从输入URL到最终在浏览器中显示网页的完整过程。 1.解析协议 URL 以协议开头&#xff0c;如 http…...

双指针算法专题(2)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; 优选算法专题 想要了解双指针算法的介绍&#xff0c;可以去看下面的博客&#xff1a;双指针算法的介绍 目录 611.有效三角形的个数 LCR 1…...

加密与安全_优雅存储用户密码的最佳实践

文章目录 Pre概述最佳实践避免使用MD5、SHA1等快速哈希算法加盐哈希 &#xff08;不推荐&#xff09;使用BCrypt、Argon2等慢哈希算法 (推荐)BCrypt Code1. 自动生成和嵌入盐2. 哈希结果的格式3. 代价因子 BCrypt特点 防止暴力破解1. 登录失败锁定2. 双因素认证&#xff08;2FA…...

【多线程】深入剖析线程池的应用

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 还记得我们一开始引入线程的概念&#xff0c;就是因为进程太“重”了&#xff0c;频繁创建销毁进程的开销是非常大的。而随着计算机的发展&#xff0c;业务上对性能的要求越来越…...

『功能项目』切换职业面板【48】

我们打开上一篇47技能冷却蒙版的项目&#xff0c; 本章要做的事情是切换职业UI面板的功能 首先双击打开Canvas预制体在左上主角面板信息中新建一个button按钮 重命名&#xff08;父物体是按钮Button&#xff0c;子物体Image即可&#xff09; 创建一个Image 设计一下布局 复制三…...

【EasyExcel】@ColumnWidth(value = 20) EasyExcel设置列宽不生效

经过测试发现&#xff0c;只有XLS&#xff0c;ColumnWidth注解才会生效&#xff0c;选择CSV和XLSX都不会生效 //对应的导出实体类 EasyExcel.write(outputStream, Result.class)//excel文件类型&#xff0c;包括CSV、XLS、XLSX.excelType(ExcelTypeEnum.XLS)...

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU &#xff1f; 什么是 GPU &#xff1f; GPU vs CPU 差异性对比分析 GPU 是如何工作的 &#xff1f; GPU 与 CPU 是如何协同工作的 &#xff1f; GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU &#xff1f; CPU&#xff08;中央处理器&#xff09;…...

【机器学习】:解锁数据背后的智慧宝藏——深度探索与未来展望

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言一、深入机器学习的内在机制二、最新进展与趋势三、对未来社会的深远影响结语 引言 在上一篇博客中&#xff0c;我们初步探讨了机器学习如何成为解锁数据背后智慧的关键工具。现在&#xff0c;让…...

【Kubernetes】常见面试题汇总(十八)

目录 55.简述 Kubernetes 共享存储的作用&#xff1f; 56.简述 Kubernetes 数据持久化的方式有哪些&#xff1f; 57.简述 Kubernetes PV 和 PVC &#xff1f; 58.简述 Kubernetes PV 生命周期内的阶段&#xff1f; 55.简述 Kubernetes 共享存储的作用&#xff1f; Kubernet…...

无限边界:现代整合安全如何保护云

尽管云计算和远程工作得到广泛采用&#xff0c;零信任网络也稳步推广&#xff0c;但边界远未消失。相反&#xff0c;它已被重新定义。就像数学分形的边界一样&#xff0c;现代网络边界现在无限延伸到任何地方。 不幸的是&#xff0c;传统工具在现代无限边界中效果不佳。现代边…...

HTML贪吃蛇游戏

文章目录 贪吃蛇游戏 运行效果代码 贪吃蛇游戏 贪吃蛇是一款经典的休闲益智游戏。本文将通过HTML5和JavaScript详细解析如何实现一个简易版的贪吃蛇游戏。游戏的主要逻辑包括蛇的移动、碰撞检测、食物生成等功能。以下是游戏的完整代码及注释解析。&#xff08;纯属好玩&#…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...