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

机器学习——Bagging

Bagging

方法:集成n个base learner模型,每个模型都对原始数据集进行有放回的随机采样获得随机数据集,然后并行训练。

回归问题:n个base模型进行预测,将得到的预测值取平均得到最终结果。

分类问题:n个base模型进行预测,投票选择出n个分类结果中出现次数最对的结果作为最终分类结果

代表模型:随机森林是Bagging的一个代表。它基于自助采样法从原始数据集中抽取多个样本子集,

并在每个子集上训练一个决策树,最后通过投票或平均的方式得到最终的预测结果。

随机森林在鸢尾花数据集的分类实现,代码可直接运行,数据集在文章顶部免费下载

# 导入所需的库
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.preprocessing import StandardScaler
import seaborn as sns# 加载鸢尾花数据集
data = pd.read_excel('../data/鸢尾花分类数据集/Iris花分类.xlsx')
X = data.iloc[:, :4].values  # 选取前4列作为特征
y = data.iloc[:, 4:].values.ravel()  # 选取最后1列作为标签# 特征缩放(标准化)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 将数据集划分为训练集和测试集
# 通常我们使用80%的数据作为训练集,20%的数据作为测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=66)# 创建随机森林分类器实例
# n_estimators表示森林中树的数量,可以调整以获得更好的性能
randomForest = RandomForestClassifier(n_estimators=100, random_state=42)# 使用训练数据来拟合(训练)随机森林模型
randomForest.fit(X_train, y_train)# 使用训练好的模型对测试集进行预测
y_pred = randomForest.predict(X_test)# 计算预测结果的准确度
accuracy = accuracy_score(y_test, y_pred)# 打印出准确度
print("随机森林分类精度为: {:.4f}%".format(accuracy * 100))# 获取特征重要性
feature_importances = randomForest.feature_importances_
# 获取特征名称
feature_names = data.columns[:4].tolist()
# 打印特征重要性
print("特征重要性:")
for feature, importance in zip(feature_names, feature_importances):print(f"{feature}: {importance:.4f}")
# 可视化特征重要性
# 创建一个DataFrame来存储特征重要程度
importances_df = pd.DataFrame({'Feature': feature_names, 'Importance': feature_importances})# 按重要程度降序排序
importances_df = importances_df.sort_values(by='Importance', ascending=False)# 绘制条形图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10, 5))
plt.bar(importances_df['Feature'], importances_df['Importance'])
plt.title('Feature Importances')
plt.ylabel('Importance')
plt.xlabel('Feature')
plt.show()# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)# 绘制混淆矩阵图
plt.figure(figsize=(7, 5))
sns.heatmap(cm, annot=True, fmt=".0f", linewidths=.5, square=True, cmap='Blues')
plt.ylabel('实际标签', fontproperties='SimHei', size=14)
plt.xlabel('预测标签', fontproperties='SimHei', size=14)
plt.title('随机森林分类器混淆矩阵', fontproperties='SimHei', size=15)
plt.show()

结果为:

http://www.lryc.cn/news/444162.html

相关文章:

  • 日志体系结构与框架:历史、实现与如何在 Spring Cloud 中使用日志体系
  • 图文深入理解SQL语句的执行过程
  • ubuntu安装StarQuant
  • 学习篇 | Jupyter 使用(notebook hub)
  • 【裸机装机系列】8.kali(ubuntu)-虚拟内存swap交换分区扩展
  • 异步请求的方法以及原理
  • SpringCloud入门(六)Nacos注册中心(下)
  • 【RDMA】mlxlink检查和调试连接状态及相关问题--驱动工具
  • QT For Android开发-打开PPT文件
  • SpringBoot教程(三十) | SpringBoot集成Shiro权限框架
  • [ffmpeg] 视频格式转换
  • git-repo系列教程(3) git-repo https证书认证问题
  • 中序遍历二叉树全过程图解
  • 设计模式 组合模式(Composite Pattern)
  • 在vue中嵌入vitepress,基于markdown文件生成静态网页从而嵌入社团周报系统的一些想法和思路
  • 神经网络面试题目
  • C语言题目之单身狗2
  • Vue2学习笔记(03关于VueComponent)
  • 微服务架构中常用技术框架
  • [深度学习]Pytorch框架
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 5 发送通知消息
  • [Meachines] [Medium] Querier XLSM宏+MSSQL NTLM哈希窃取(xp_dirtree)+GPP凭据泄露
  • 新版ssh客户端无法连接旧版服务器sshd的方法
  • MyBatis操作数据库-XML实现
  • 华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互
  • 解决DockerDesktop启动redis后采用PowerShell终端操作
  • react + antDesign封装图片预览组件(支持多张图片)
  • 逻辑回归 和 支持向量机(SVM)比较
  • GS-SLAM论文阅读笔记--TAMBRIDGE
  • [Redis面试高频] - zset的底层数据结构