数据清洗-缺失值填充-随机森林填充

news2024/9/20 8:58:32

目录

  • 一、安装所需的python包
  • 二、采用随机森林算法进行缺失值填充
    • 2.1可直接运行代码
    • 2.2以某个缺失值数据进行实战
      • 代码运行过程截屏:
      • 填充后的数据截屏:
  • 三、随机森林算法 (Random Forest) 介绍
    • 3.1随机森林的定义
    • 3.2随机森林的基本思想
    • 3.3随机森林的工作原理
    • 3.4随机森林的优缺点
      • 3.4.1优点
      • 3.4.2缺点
    • 3.5随机森林的应用场景
    • 3.6随机森林的参数

感觉大家对原理性的东西不太感兴趣,那我就直接举例提供代码,以及详细的注释,大家自己对照改代码应用于你自己建立的模型吧。

这些代码全部是我自己做数模竞赛时候自己用的代码。可以直接运行,记得修改文件路径。

一、安装所需的python包

pip install scikit-learn
pip install numpy
pip install pandas

二、采用随机森林算法进行缺失值填充

注意代码需要把自己的数据文件格式转换为CSV文件,并且把路径修改为自己文件所在的路径,不会转换的参考我此教程文件格式转换:EXCEL和CSV文件格式互相转换。

我知道大家对原理性的东西不感兴趣,我把他的原理介绍放在文末,需要写论文的同学自己拿去用,记得修改,否则查重率过不去。

2.1可直接运行代码

"""
随机森林补充缺失值,但是精度不太够,哎先就这样吧
我想着可以对初值进行优化,但是还没弄,就现这样吧
这个速度快,精度太拉了

随机森林:优点可以处理各种类型的特征(包括二元、分类和数值特征),并且不需要对数据进行标准化或规范化

"""
from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestRegressor
import numpy as np
import pandas as pd


data = pd.read_csv('缺失值填充.csv',encoding='gbk')

data_copy = data.copy()
data_copy.drop(data_copy.columns[0], axis=1, inplace=True)
sindex = np.argsort(data_copy.isnull().sum()).values

# 进行缺失值的填补,利用随机森林进行填补缺失值
for i in sindex:
    if data_copy.iloc[:, i].isnull().sum() == 0:
        continue
    df = data_copy
    fillc = df.iloc[:, i]
    df = df.iloc[:, df.columns != df.columns[i]]

    # 在下面的是使用了0来对特征矩阵中的缺失值的填补,
    df_0 = SimpleImputer(missing_values=np.nan
                         , strategy="constant"
                         , fill_value=0
                         ).fit_transform(df)
    Ytrain = fillc[fillc.notnull()]
    Ytest = fillc[fillc.isnull()]

    Xtrain = df_0[Ytrain.index, :]
    Xtest = df_0[Ytest.index, :]

    rfc = RandomForestRegressor()
    rfc.fit(Xtrain, Ytrain)
    Ypredict = rfc.predict(Xtest)

    data_copy.loc[data_copy.iloc[:, i].isnull(), data_copy.columns[i]] = Ypredict

# print(data_copy.isnull().sum())
#保存文件
data_copy.to_csv('随机森林.csv', index=False)
print(data_copy)

注意:data = pd.read_csv('缺失值填充.csv',encoding='gbk')里面的缺失值填充.csv是你自己的缺失值的csv文件路径,data_copy.to_csv('随机森林.csv', index=False)中的随机森林.csv是你填充后的文件名,你可以自己起名。

2.2以某个缺失值数据进行实战

注意:数据量较少,由自己构建,均有规律,
如下图:
在这里插入图片描述

构造缺失值,如下图:
在这里插入图片描述

运行代码查看填充后的数据怎么样,
运行代码如下图+填充后的截图:

代码运行过程截屏:

在这里插入图片描述

填充后的数据截屏:

在这里插入图片描述

说明:对于这种数据量小的,像随机森林算法填充的效果略差,使用前面的牛顿插值法即可。对于数据量大的,可以使用神经网络遗传算法来进行缺失值填充,下面我将会介绍对随机森林算法的参数进行优化的改进算法进行缺失值填充,但是你在进行数模比赛时候,需要说明为什么你要选用该算法填充,说明他的原理即可,不必纠结填充的数据是否正确,因为你本身也不知道数据的正确性。

接下来我将继续分享其他我参加数模时候常用的几种数据填充的代码,都是我自己调试跑通过的,大家直接复制粘贴使用。

三、随机森林算法 (Random Forest) 介绍

3.1随机森林的定义

随机森林 (Random Forest) 是一种基于决策树的集成学习方法,由 Leo Breiman 和 Adele Cutler 在 2001 年提出。它通过构建多个决策树来完成分类或回归任务,并利用这些决策树的集成结果来提高模型的准确性和稳定性。随机森林的基本思想是将多个相对较弱的学习器(即决策树)结合起来,从而形成一个强大的集成模型。

3.2随机森林的基本思想

随机森林属于 Bagging (Bootstrap Aggregating) 集成方法 的一种扩展。Bagging 方法通过从原始数据集中有放回地抽样来生成多个子数据集,并在每个子数据集上训练一个弱学习器(如决策树)。在预测时,随机森林会将所有树的预测结果进行投票(分类问题)或平均(回归问题),以得到最终的预测结果。

随机森林的基本特点在于“随机性”,主要体现在以下两个方面:

  1. 数据随机性:在构建每棵决策树时,从原始数据集中随机抽取样本(有放回),构成训练数据集。
  2. 特征随机性:在每棵树的节点分裂时,随机选择部分特征来确定最佳分裂点,而不是使用所有特征。

3.3随机森林的工作原理

  1. 随机抽样:从原始数据集中有放回地随机抽取多个子样本,构建多个训练数据集。
  2. 构建决策树:对每个训练数据集,构建一棵决策树。在每个节点分裂时,随机选择一部分特征,并根据这些特征选择最佳分裂点。
  3. 集成结果:对分类问题,随机森林对所有决策树的结果进行投票,选择出现次数最多的类别作为最终分类结果;对回归问题,则取所有决策树预测值的平均作为最终预测结果。

3.4随机森林的优缺点

3.4.1优点

  • 准确性高:通过多个决策树的集成,随机森林通常比单一决策树有更高的预测准确性。
  • 防止过拟合:由于采用了随机性机制,随机森林能有效防止决策树的过拟合问题。
  • 鲁棒性强:对噪声和异常值不敏感,具有较好的鲁棒性。
  • 处理高维数据:能够处理大量特征的数据集,并能评估特征的重要性。
  • 易于并行化:各个树的构建可以独立并行进行,容易扩展到大数据场景。

3.4.2缺点

  • 模型复杂度高:由于集成了多棵决策树,随机森林的模型复杂度较高,不易解释。
  • 计算成本大:构建多棵决策树的计算开销大,特别是在数据量大或特征数量多的情况下。
  • 对单调特征不敏感:如果某个特征对于所有树来说都是有用的,则无法通过随机森林的特征重要性识别出来。

3.5随机森林的应用场景

随机森林广泛应用于以下场景:

  • 分类问题:如文本分类、图像分类、疾病诊断等。
  • 回归问题:如房价预测、销量预测等。
  • 特征选择:通过评估特征的重要性,帮助选择有意义的特征。
  • 异常检测:通过识别异常样本与正常样本的差异,应用于金融欺诈检测、网络入侵检测等领域。

3.6随机森林的参数

随机森林模型有多个参数可以调整,主要包括:

  • n_estimators(决策树的数量):构建的决策树数量,通常数量越多,模型效果越好,但计算开销也越大。
  • max_features(最大特征数):每次分裂时随机选择的特征数量,可以是特定数值或占比(如 "sqrt" 表示总特征数的平方根)。
  • max_depth(最大深度):单棵决策树的最大深度,防止树过度生长(过拟合)。
  • min_samples_split(最小分裂样本数):节点分裂所需的最小样本数,越大则越能防止过拟合。
  • min_samples_leaf(叶节点最小样本数):叶节点上所需的最小样本数。
  • bootstrap(是否有放回抽样):是否对样本进行有放回抽样构建子数据集。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国产动画《缉妖录之启程篇》定档国庆,吴承恩化身热血男主

9月15日,国产原创动画《缉妖录之启程篇》正式定档。动画由是船长影视制作,阿杰、谷江山等配音,于腾讯视频、极光TV播出,10月3日上午10:00点起更新两集,10月4日起,会员每日10:00更新一集,非会员每…

杨敏博士:基于法律大模型的智能法律系统

9月26日,杨敏博士受邀参加人工智能助力法治化营商环境发展论坛暨得理法律大模型发布会并发表了“基于法律大模型的智能法律系统”主题演讲。杨博士是香港大学计算机博士,担任中科院深圳先进院高性能数据挖掘实验室主任,是深圳市海外高层次人才…

一起对话式学习-机器学习02——机器学习方法三要素

【一】核方法 首先补充一下核方法,这应是机器学习分类中的内容。 什么是核方法呢?听起来很高级,但理解很简单: 官方定义:核方法是使用核函数表示和学习非线性模型的一种机器学习方法,可以用于监督学习和非监…

教你开发一套外卖霸王餐小程序系统

大家好,我是鲸天科技千千,大家都知道我是做小程序开发的,平时会给大家分享一些互联网相关的创业项目,感兴趣的可以跟我关注一下。 首先就是要搭建一个自己的霸王餐系统小程序,我们自己的工作就是把这个小程序推广宣传…

828华为云征文|华为云Flexus X实例Nginx性能加速评测及对比

目录 前言 一、Flexus云服务器X介绍 1.1 Flexus云服务器X实例简介 1.2 Flexus云服务器X实例特点 1.3 Flexus云服务器X实例使用场景 二、Flexus云服务器X购买 2.1 Flexus X实例购买 2.2 重置密码 2.3 登录服务器 2.4 启动Nginx 三、华为云Flexus X实例加速Nginx测评 3.1 安装测试…

书生大模型实战营学习[2]Python task

学习目标:Python学习 Python实现wordcount Vscode连接InternStudio debug笔记 学习内容: 任务1:请实现一个wordcount函数,统计英文字符串中每个单词出现的次数。返回一个字典,key为单词,value为对应单词出…

Linux-进程优先级

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1. 为什么要有优先级的概念2.进程优先级的基本…

进程间关系和守护进程

序言 当我们使用指令 ps 查看进程的相关信息时,在以前我们只是关注该进程的 PID(该进程的标识符) , PPID(其父进程的标识符) 以及 STAT(该进程的状态)。  那 PGID 和 SID 又是什么?有什么作用呢? 1. 进程组 1.1 什么是进程组&am…

最强神器Typora 2024(亲测有效)| Markdown 工具推荐

听俺讲一下 大家好,我是程序员-杨胡广,今天想给大家分享一个在编写文档时的神器——Typora。相信不少小伙伴都在寻找一款既简洁又强大的 Markdown 编辑工具,而 Typora 无疑是最值得推荐的选择。 当我在大学时偶然发现了它,直到今…

【Python 数据分析学习】Matplotlib 的基础和应用

题目 1 Matplotlib 主要特性2 Matplotlib 基础知识2.1 导入模块2.2 图形构成2.2.1 图形(Figure)2.2.2 轴 (Axes)2.2.3 轴线(axis) 2.5 中文设置2.5.1 借助rcParams修改字体实现设置2.5.2 增加一个fontprope…

计算机视觉 对比学习 串烧二

文章目录 文章列表三、CPC3.1 文章摘要3.2 实验结果3.3 文章图示图 1: 对比预测编码(CPC)的概览图 2: 语音(演讲)表示的t-SNE可视化图 3: 预测未来潜在表示的准确率图 4: 图像的对比预测编码(CPC)的可视化图…

【Qt】Qt C++ Widget中嵌入qml

1. 效果 2. 方法 使用QQuickWidget方式 QQuickWidget *view new QQuickWidget;view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));view->show();除了QQuickWidget方式还可以使用QQuickView方式,请自行查阅资料 3. 代码 3.1 工程目录 3.2 …

初始爬虫7

针对数据提取的项目实战&#xff1a; 补充初始爬虫6的一个知识点&#xff1a; etree.tostring能够自动补全html缺失的标签&#xff0c;显示原始的HTML结构 # -*- coding: utf-8 -*- from lxml import etreetext <div> <ul> <li class"item-1">…

图论篇--代码随想录算法训练营第五十八天打卡|拓扑排序,dijkstra(朴素版),dijkstra(堆优化版)精讲

拓扑排序 题目链接&#xff1a;117. 软件构建 题目描述&#xff1a; 某个大型软件项目的构建系统拥有 N 个文件&#xff0c;文件编号从 0 到 N - 1&#xff0c;在这些文件中&#xff0c;某些文件依赖于其他文件的内容&#xff0c;这意味着如果文件 A 依赖于文件 B&#xff0…

软件设计之JavaWeb(4)

软件设计之JavaWeb(4) 此篇应在MySQL之后进行学习: 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷全新JavaWeb教程&#xff0c;企业主流javaweb技术栈 资料可以去尚硅谷官网免费领取 此章节最好学完JDBC观看 学习内容&#xff1a; 会话管理…

CleanClip for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)

CleanClip&#xff1a;革新macOS剪贴板管理体验 目录 功能概览 多格式历史记录保存智能搜索功能快速复制操作拖拽功能 安装指南 前期准备安装步骤 配置与使用 功能概览 多格式历史记录保存 CleanClip支持保存文本、图片、文件等多种格式的复制历史记录&#xff0c;为用户提…

vue 在线预览word和excel

yarn add vue-office/excel vue-office/docx <template><div><vue-office-docx:src"docx"style"height: 100%; margin: 0; padding: 0"rendered"rendered"/></div> </template><script> //引入VueOfficeDoc…

C:字符串函数(续)-学习笔记

穗 一些闲话&#xff1a; 最近玩了这款饿殍-明末千里行&#xff0c;不知大家是否有听过这款游戏&#xff0c;颇有感触&#xff01;&#xff01;&#xff01; 游戏中最让我难以忘怀的便是饿殍穗线的故事&#xff0c;生在如今时代的我之前无法理解杜甫在目睹人间悲剧时的心情&…

低级编程语言和高级编程语言

一.区分低级编程语言和高级编程语言的方法 1.低级编程语言 低级编程语言,并不是简单的编程语言,而是写起来很费事的编程语言,如所有编程语言的"祖宗":汇编语言,写起来极其麻烦,说不定一个 int a1; 它就得写好几行,甚至十几行 这样麻烦的编程语言为什么还没消失那,因…

蓝桥杯省赛真题——大臣的旅费

输入样例&#xff1a; 5 1 2 2 1 3 1 2 4 5 2 5 4 输出样例&#xff1a; 135分析&#xff1a; 本题实际上要求我们去求在图中最远两点之间的距离&#xff0c;也就是树的直径 我们先从某一个点出发&#xff0c;到达离其最远的点&#xff0c;然后再重复操作一次即可 #inclu…