【机器学习】随机森林

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

一、随机森林定义

随机森林(Random Forest, RF)是一种由 决策树 构成的 集成算法 ,采用的是 Bagging 方法,他在很多情况下都能有不错的表现。如下表。
在这里插入图片描述

二、数据读取

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_reportdata = pd.read_csv('D:/Personal Data/Learning Data/DL Learning Data/weather_classification_data.csv')
data

在这里插入图片描述

三、数据检查与预处理

# 查看数据信息
data.info()

在这里插入图片描述

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

在这里插入图片描述

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()

在这里插入图片描述

print(f"温度超过60°C的数据量:{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)}%。")

在这里插入图片描述

print("删前的数据shape:", data.shape)
data = data[(data['Temperature'] <= 60) & (data['Humidity'] <= 100) & (data['Precipitation (%)'] <= 100)]
print("删后的数据shape:", data.shape)

删前的数据shape: (13200, 11)
删后的数据shape: (12360, 11)

四、数据分析

data.describe(include='all')

在这里插入图片描述

plt.figure(figsize=(20, 15))
plt.subplot(3, 4, 1)
sns.histplot(data['Temperature'], kde=True,bins=20)
plt.title('温度分布')
plt.xlabel('温度')
plt.ylabel('频数')plt.subplot(3, 4, 2)
sns.boxplot(y=data['Humidity'])
plt.title('湿度百分比箱线图')
plt.ylabel('湿度百分比')plt.subplot(3, 4, 3)
sns.histplot(data['Wind Speed'], kde=True,bins=20)
plt.title('风速分布')
plt.xlabel('风速(km/h)')
plt.ylabel('频数')plt.subplot(3, 4, 4)
sns.boxplot(y=data['Precipitation (%)'])
plt.title('降雨量百分比箱线图')
plt.ylabel('降雨量百分比')plt.subplot(3, 4, 5)
sns.countplot(x='Cloud Cover', data=data)
plt.title('云量 (描述)分布')
plt.xlabel('云量 (描述)')
plt.ylabel('频数')plt.subplot(3, 4, 6)
sns.histplot(data['Atmospheric Pressure'], kde=True,bins=10)
plt.title('大气压分布')
plt.xlabel('气压 (hPa)')
plt.ylabel('频数')plt.subplot(3, 4, 7)
sns.histplot(data['UV Index'], kde=True,bins=14)
plt.title('紫外线等级分布')
plt.xlabel('紫外线指数')
plt.ylabel('频数')plt.subplot(3, 4, 8)
Season_counts = data['Season'].value_counts()
plt.pie(Season_counts, labels=Season_counts.index, autopct='%1.1f%%', startangle=140)
plt.title('季节分布')plt.subplot(3, 4, 9)
sns.histplot(data['Visibility (km)'], kde=True,bins=10)
plt.title('能见度分布')
plt.xlabel('能见度(Km)')
plt.ylabel('频数')plt.subplot(3, 4, 10)
sns.countplot(x='Location', data=data)
plt.title('地点分布')
plt.xlabel('地点')
plt.ylabel('频数')plt.subplot(3, 4, (11,12))
sns.countplot(x='Weather Type', data=data)
plt.title('天气类型分布')
plt.xlabel('天气类型')
plt.ylabel('频数')plt.tight_layout()
plt.show()

在这里插入图片描述

五、随机森林

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] = lefor feature in categorical_features:print(f"'{feature}'特征的对应关系:")for index, class_ in enumerate(label_encoders[feature].classes_):print(f"  {index}: {class_}")

在这里插入图片描述

# 构建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_clf = RandomForestClassifier(random_state=15)
rf_clf.fit(x_train, y_train)
# 使用随机森林进行预测
y_pred_rf = rf_clf.predict(x_test)
class_report_rf = classification_report(y_test, y_pred_rf)
print(class_report_rf)

在这里插入图片描述

六、结果分析

feature_importances = rf_clf.feature_importances_
features_rf = pd.DataFrame({'特征': x.columns, '重要度': feature_importances})
features_rf.sort_values(by='重要度', ascending=False, inplace=True)
plt.figure(figsize=(10, 8))
sns.barplot(x='重要度', y='特征', data=features_rf)
plt.xlabel('重要度')
plt.ylabel('特征')
plt.title('随机森林特征图')
plt.show()

在这里插入图片描述
随机森林模型的预测准确率很高,并且通过特征度分析,发现影响模型的主要因素有:温度、湿度、紫外线指数、能见度、大气压力。

七、总结

数据预处理对于任何模型而言都是至关重要的。其中包含了对空值的处理、去重、去除噪声数据等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发小运维-常用Linux资源监控命令

文章目录 简介常用命令/proc/meminfo&#xff08;内存&#xff09;free&#xff08;内存信息&#xff09;top&#xff08;进程动态&#xff09;df &#xff08;磁盘信息&#xff09;du&#xff08;磁盘信息&#xff09;ps&#xff08;进程状态&#xff09;vmstat&#xff08;内…

Tita的OKR :销售部 OKR案例

销售集团目标 – OKR示例 目标&#xff1a;为我们的销售团队招募世界级精英 主要成果&#xff1a; KR1&#xff1a;在10月底之前雇用10个新的AE KR2&#xff1a;在11月底之前雇用20个新SDR KR3&#xff1a;到10月底雇用5名新的销售经理 KR4&#xff1a;维持 4&#xff1a;1的…

Linux date命令

概述 date 命令用于显示或设置系统的时间与日期&#xff0c;语法格式为&#xff1a;“date [指定的格式]”。用户只需在强大的 date 命令后输入以“”号开头的参数&#xff0c;即可按照指定格式来输出系统的时间或日期。 [rootlocalroot ~]# uname -a #当前系统 Linux…

[vue] pdf.js / vue-pdf 文件花屏问题

vue-pdf内核也是pdf.js&#xff0c;修改方式一样 在pdf.worker.js中加入几行代码&#xff0c;追加到”precinct.zeroBitPlanesTree zeroBitPlanesTree;“之后。 for (var l 0; l < layerNumber; l) {if (readBits(1) ! 0) {throw new JpxError("Invalid tag tree&qu…

网络编程/在哪些场景中不必要进行网络字节序转换? Windows Sockets: Byte Ordering

文章目录 概述字节序必须转换字节序的的情况不必转换字节序的的情况字节序转换的例程字节序转换函数字节序转换可以不生硬字节序和位序 概述 本文主要讲述了在哪些场景下必须要进行大小端字节序转换&#xff0c;在哪些场景下可以不用进行大小端字节序转换&#xff0c;IP和端口…

基础第3关:LangGPT结构化提示词编写实践

提示词&#xff1a; # Role: 伟大的数学家 ## Profile - author: LangGPT - version: 1.0 - language: 中文 - description: 一个伟大的数学家&#xff0c;能够解决任何的数学难题 ## Goals: 根据关键词进行描述&#xff0c;避免与已有描述重复。 ## Background: 你正在被…

基于Java语言的高能耗企业 水-电-气-热-油等数据采集系统-能源管理系统-源码

基于Java语言的高能耗企业 水-电-气-热-油-空压机等数据采集系统-能源管理系统-在线监测系统 场景介绍 介绍 适用于建筑、工厂、商场、医院、园区、高耗能企业、城市双碳建设平台等的水、电、气、热、油等能源数据采集、加工、分析、预警、碳指标、碳排放计算等场景&#xff…

Mysql(三)---增删查改(基础)

文章目录 前言1.补充1.修改表名1.2.修改列名1.3.修改列类型1.4.增加新列1.5.删除指定列 2.CRUD3.新增(Create)3.1.单行插入3.2.指定列插入3.3.多行插入 4.数据库的约束4.1.约束的分类4.2.NULL约束4.3.Unique约束4.4.Default 默认值约束4.5.PRIMARY KEY&#xff1a;主键约束4.6.…

指挥中心控制台如何选择合适的定制厂家

在构建高效、安全的指挥中心过程中&#xff0c;选择一家合适的控制台定制厂家至关重要。控制台作为指挥中心的核心组成部分&#xff0c;不仅承载着设备集成、信息显示的重任&#xff0c;还直接关系到操作人员的舒适度和工作效率。因此&#xff0c;在挑选定制厂家时&#xff0c;…

Flask详细教程

1、Flask是什么&#xff1f; Flask是一个非常小的PythonWeb框架&#xff0c;被称为微型框架&#xff08;类似Java的SpringBoot&#xff09;&#xff1b;只提供了一个稳健的核心&#xff0c;其他功能全部是通过扩展实现的&#xff1b;意思就是我们可以根据项目的需要量身定制&a…

介绍 Kettle 的 Spoon 图形化界面工具

Kettle Spoon 集成开发环境工具启动后&#xff0c;弹出 Welcome 的欢迎页面 目录 一、界面构成二、菜单说明1. 【文件(F)】菜单2. 【编辑】菜单3. 【视图】菜单4. 【执行】菜单5. 【工具】菜单6. 【帮助】菜单7. 转换工程快捷菜单图标8. 任务工程快捷菜单图标 一、界面构成 &…

使用百度文心智能体创建AI旅游助手

百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&#xff0c;可以用来创建属于自己的智能体应用&#xff0c;访问官网链接&#xff1…

【JPCS独立出版,EI稳定检索】2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024,9月27-29)

2024年工业机器人与先进制造技术国际学术会议&#xff08;IRAMT 2024&#xff09;将于2024年9月27-29日在中国成都举办。 此次会议将围绕工业机器人、机电技术、机械及制造等领域的最新研究成果展开讨论&#xff0c;并广泛邀请了国内外领域内的著名专家与学者。会议旨在搭建一个…

[linux#39][线程] 详解线程的概念

线程&#xff1a;是进程内的一个执行分支。线程的执行粒度比进程要细 什么是线程&#xff1f; • 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程 是“一个进程内部的控制序列” • 一切进程至少都有一个执行线程 • …

基于SpringBoot的Java个人博客系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

原生HTML5、CSS、JavaScript实现简易网易云音乐播放

1.效果图 2.源码 1.index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网易云音乐</title><link rel"stylesheet" href"../CSS/index.css"> </head>…

最小路径和[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个包含非负整数的m x n网格grid&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[…

新智元 | 百万在线,大圣归来!《黑神话:悟空》石破天惊,RTX 4090D飞越花果山

本文来源公众号“新智元”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;百万在线&#xff0c;大圣归来&#xff01;《黑神话&#xff1a;悟空》石破天惊&#xff0c;RTX 4090D飞越花果山 【新智元导读】等待四年&#xff0c;《黑…

Java常用集合(List、Map)类型相关问题整理

一、背景 针对Java基础集合的部分&#xff0c;对一些常见的问题进行整理&#xff0c;方便后续能够随时复习 二、问题与回答 &#xff08;1&#xff09;Java集合类ArrayList初始化时数组的默认长度是多少&#xff1f; 答&#xff1a;在new ArrayList() 这段代码执行完后&a…

软件测试基础入门

一、基础概念 什么是软件&#xff1a;控制计算机硬件的工具&#xff0c;操作系统软件、应用软件 软件基本组成&#xff1a;客户端、服务器、数据库 软件产生过程&#xff1a;需求构思--> 需求文档 -->UI/UE -- >产品研发 -->产品测试 -- >部署上线 什么是软…