数学建模:数据的预处理
🔆 文章首发于我的个人博客:欢迎大佬们来逛逛
文章目录
- 数据预处理
- 数据变换
- 数据清洗
- 缺失值处理
- 异常值处理
数据预处理
数据变换
常见的数据变换的方式:通过某些简单的函数进行数据变换。
x ′ = x 2 x ′ = x x ′ = log ( x ) ∇ f ( x k ) = f ( x k + 1 ) − f ( x k ) \begin{aligned}&x^{\prime}=x^2 \\&\begin{aligned}x^{\prime}=\sqrt{x}\end{aligned} \\&x'=\log(x) \\\nabla f\left(x_{k})\right.&=f(x_{k+1})-f(x_k) \end{aligned} ∇f(xk)x′=x2x′=xx′=log(x)=f(xk+1)−f(xk)
- 数据指标的一致化处理:
- 极小型
- 极大型
- 中间型
- 区间型
- 数据指标的无量纲化处理:
-
零 - 均值规范化:也叫做标准差规范化,经过处理后的数据平均值为 0,标准差为1。 x ‾ \overline x x 为原数据的均值, σ \sigma σ 为标准差。
x ∗ = x − x ‾ σ x^*=\frac{x-\overline{x}}\sigma x∗=σx−x
-
极值差法:又叫最小 - 最大规范化,离差标准化,将数据映射到 [ 0 , 1 ] [0,1] [0,1] 之间。
x ∗ = x − m i n m a x − m i n x^*=\frac{x-min}{max-min} x∗=max−minx−min
-
功效系数法:就是上一步极值差法然后加了一个偏移量: c c c ,使得最后结果落于 [ c , c + n ] [c,c+n] [c,c+n] 中
-
数据变换的应用方式:数据的标准化,目的是为了消除指标之间的量纲和大小不一的影响,需要进行数据标准化处理。
因此可以将数据按照比例进行缩放,使之落入一个据标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,从而进行综合分析。如将工资收入属性值映射到[-1,1]或者[0,1]之间。
function data1=mfunc_calculate(data,zhibiao_label)% 指标的正向化处理 1 2 极大型;3 4 5 极小型;6 单点最优;7 区间最优if isa(data,'double')for i=1:length(zhibiao_label)if (zhibiao_label(i)==1)data1(:,i)=zheng1(data(:,i));elseif (zhibiao_label(i)==2)data1(:,i)=zheng2(data(:,i));elseif (zhibiao_label(i)==3)data1(:,i)=fu3(data(:,i));elseif (zhibiao_label(i)==4)data1(:,i)=fu4(data(:,i));elseif (zhibiao_label(i)==5)data1(:,i)=fu5(data(:,i));elseif (zhibiao_label(i)==6)prompt = '这是单点最优,请输入单点最优值 ';a = input(prompt);data1(:,i)=qu6(data(:,i),a);elseif (zhibiao_label(i)==7)prompt = '这是区间最优,请输入单点最区间如[5,10] ';aa=input(prompt);data1(:,i)=qu7(data(:,i),aa(1),aa(2));endendelseif isa(data,'cell')% data2=data;for j=1:length(data)data2=data{j};if size(zhibiao_label,1)==1zhibiao_label1=repmat(zhibiao_label,3,1);elsezhibiao_label1=zhibiao_label;endfor i=1:length(zhibiao_label1(j,:))if (zhibiao_label(i)==1)data1{j}(:,i)=zheng1(data2(:,i));elseif (zhibiao_label(i)==2)data1{j}(:,i)=zheng2(data2(:,i));elseif (zhibiao_label(i)==3)data1{j}(:,i)=fu3(data2(:,i));elseif (zhibiao_label(i)==4)data1{j}(:,i)=fu4(data2(:,i));elseif (zhibiao_label(i)==5)data1{j}(:,i)=fu5(data2(:,i));elseif (zhibiao_label(i)==6)prompt = '这是单点最优,请输入单点最优值 ';a = input(prompt);data1{j}(:,i)=qu6(data2(:,i),a);elseif (zhibiao_label(i)==7)prompt = '这是区间最优,请输入单点最区间如[5,10] ';aa=input(prompt);data1{j}(:,i)=qu7(data2(:,i),aa(1),aa(2));endendendendendfunction data=zheng1(data1)%正向指标1% 填1的时候选择data=(data1-min(data1))./(max(data1)-min(data1));endfunction data=zheng2(data1)%正向指标2% 填2的时候选择data=data1;endfunction data=fu3(data1)%负向指标1% 填3的时候选择data=(max(data1)-data1)./(max(data1)-min(data1));endfunction data=fu4(data1)%负向指标2% 填4的时候选择data=(max(data1)-data1);endfunction data=fu5(data1)%负向指标3% 填5的时候选择data=1./(max(abs(data1))+data1);endfunction data=qu6(data1,a)%某点最优% 填6的时候选择data=1./(abs(data1-a)/max(abs(data1-a)));endfunction data=qu7(data1,a,b)%区间指标1% 填7的时候选择for i=1:length(data1)if(data1(i)>a)&&(data1(i)<b)data(i)=1;elseif (data1(i)<a)data(i)=data1(i)/a;elseif (data1(i)>b)data(i)=b/data1(i);endend
end
数据清洗
缺失值处理
对于缺失值的三种处理方法:不处理,删除数据,数据插补。
数据插补的方法:
- 均值/中位数/众数插补
- 使用固定值插补
- 最近邻插补:即在记录中找到与缺失样本最接近的样本的该属性插补,可以通过计算对象间的欧式距离衡量。
- 回归方法插补:根据已有数据和与其有关的其他变量的数据建立拟合模型来预测缺失值
- 插值法插补(推荐):常用的插值法有很多,主要有拉格朗日插值法、牛顿插值法。
对于缺失值处理,我们需要分情况讨论。
如果某个变量或某个样本缺失了 70%以上的数据,那么此时对数据进行填补的话,会引入更多的噪声,反而会降低模型的性能,故此时一般直接将该变量或样本删除;
如果缺失的不多,我们可以考虑对缺失值进行填补。
matlab
API:
- ismissing 或者 isnan :返回一个与输入矩阵同形状的01矩阵,1表示此位置是缺失值。
- rmmissing:直接删除缺失值所在的行列,第二个参数 1 表示行,2表示列。
- fillmissing:填补缺失值。
-
常数填充:constant
- 插值法,常见的插值方法如下:
-
移动窗口填充法:该方法的思想是在缺失值前后开一个“窗口”,用“窗口”内 的数据的均值或中位数进行填充。
-
代码实现:
clc;clear;
% 数据的预处理
load("带缺少数据.mat");data = data_nan;
%% 缺失值处理
% 判断矩阵中是否存在nan值,返回一个同形状的0-1矩阵,1表示此位置是nan
nan_mat = isnan(data);
%% 直接删除空值所在的行:1
data1 = rmmissing(data); %默认为1行
%% 直接删除空值所在的列:2
data2 = rmmissing(data,2);%% 填充缺失值,插值
% 1. 常量填充缺失值
data3 = fillmissing(data,"constant",999);
%% 2. 上一个或者下一个非空值
data4 = fillmissing(data,'previous'); % next 表示以下一个非空值填充
%% 3. 最邻近的非空值
data5 = fillmissing(data,'nearest');
%% 4. 三次样条插值
data6 = fillmissing(data,'spline'); % phcip 保持三次样条插值
%% 5. 窗口填补法
data7 = fillmissing(data,'movmean',8,1); % movean 窗口长度为 window 的移动均值; movmedian:移动中位数
异常值处理
- 正态分布3σ原则:总体符合正态分布,例如人口数据、测量误差、生产加工质量、考试成绩等。
- 计算均值 μ 和标准差 σ 。
- 判断每个数据值是否在(μ-3σ,μ+3σ) 内,不在则为异常值.
- 异常值可以转换为
nan
值,然后再进行上一步的缺失值处理。
- 画箱线图:下四分位数Q1是排第25%的数值,上四分位数Q3是排第75%的数值。四分位距IQR= Q3-Q1,也就是排名第75%的减去第25%的数值正态分布类似,设置个合理区间,在区间外的就是异常值。一般设[Q1−1.5IQR, Q3+1.5IQR]内为正常值。
相关文章:

数学建模:数据的预处理
🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 数据预处理数据变换数据清洗缺失值处理异常值处理 数据预处理 数据变换 常见的数据变换的方式:通过某些简单的函数进行数据变换。 x ′ x 2 x ′ x x ′ log ( x ) ∇ f ( x k )…...

Linux土遁术之监测监测进程打开文件
分析问题过程中,追踪进程打开的文件可以在许多不同情况下有用,体现在以下几个方面: 故障排除和调试: 当程序出现问题、崩溃或异常行为时,追踪进程打开的文件可以帮助您找出问题的根本原因。这有助于快速定位错误&…...

css让多个盒子强制自动等宽
1.width: calc( 100 / n% ) 2.display:flex; flex:1;width:100px; 3.display:grid;grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); 但是其中某一个内容较长的时候 会破坏1:1:1的平衡 这个时候发现附件名字过长导致不等比例,通过查看阮一峰flex文…...

【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)
zhi.oscs1024.com 漏洞类型反序列化发现时间2023-08-29漏洞等级高危MPS编号MPS-qkdx-17bcCVE编号CVE-2023-40195漏洞影响广度广 漏洞危害 OSCS 描述Apache Airflow Spark Provider是Apache Airflow项目的一个插件,用于在Airflow中管理和调度Apache Spar…...

树模型与集成学习:LightGBM
目录 树模型与集成学习 LightGBM 的贡献 LightGBM 的贡献:单边梯度抽样算法 LightGBM 的贡献:直方图算法 LightGBM 的贡献:互斥特征捆绑算法 LightGBM 的贡献:深度限制的 Leaf-wise 算法 树模型与集成学习 树模型是非常好的…...

PHP多语言代入电商平台api接口采集拼多多根据ID获取商品详情原数据示例
拼多多商品详情原数据API接口的作用是获取拼多多电商平台上某一商品的详细信息,包括商品的标题、价格、库存、图片、描述、包邮信息、销量、评价、优惠券等数据。通过该API接口可以获取到商品的原始数据,用于分析、筛选和展示商品信息。 pinduoduo.item…...

数据结构(Java实现)-二叉树(下)
获取二叉树的高度 检测值为value的元素是否存在(前序遍历) 层序遍历 判断一棵树是不是完全二叉树 获取节点的路径 二叉树的最近公共祖先...

如何利用 SmartX 存储性能测试工具 OWL 优化性能管理?
作者:深耕行业的 SmartX 金融团队 张瑞松 运维人员在日常管理集群时,有时难免会产生这样的困惑: 新业务准备上线,在具备多套存储的情况下,应如何选择承载业务的存储环境? 业务虚拟机刚上线时运行速度很快…...

固定资产管理措施怎么写
固定资产管理措施是指企业在进行固定资产管理时所采取的各种措施和方法。以下是一些常见的固定资产管理措施: 建立完善的固定资产管理制度。制定明确的资产采购、使用、维护、报废等流程和标准,确保资产管理的规范性和透明度。 采用先进的资产管理…...

C语言中typedef和const的区别
昨天面试的时候面试官问了这个问题,平时也有见过这两个类型限定词,可能是因为不怎么使用的原因,当问到它们的区别时,我不知道从哪个方面开始回答。 用 typedef 定义新的类型名 类型定义的书写格式为 typedef 类型 被定义的类型名 …...

大数据系列教程之 Kafka基础
kafka概述 一、kafka概述 1.1 定义1.2 消息队列 1.2.1 传统消息队列的应用场景1.2.2 消息队列的两种形式1.3 Kafka 基础架构二、kafka安装部署 2.1安装部署 2.1.1.jar包下载2.1.2.解压到指定的文件夹下2.1.3.创建两个文件夹以供后续使用2.1.4. 修改配置文件 (1&…...

【Go 基础篇】Go语言日期与时间函数详解:时间的掌控与转化
Go语言是一种快速、简洁且高效的编程语言,它在处理日期与时间方面提供了丰富的标准库函数。本文将详细介绍Go语言中处理日期与时间的函数,涵盖常用的日期时间操作、格式化、时区转换等内容,并介绍time.Time结构体中的相关方法。 时间的表示与…...

抽象工厂模式:创建相关对象族
欢迎阅读设计模式系列的第四篇文章!在前面的文章中,我们已经学习了设计模式的基本概念以及工厂方法模式的应用。 今天,我们将继续深入,介绍第三个模式——抽象工厂模式。 抽象工厂模式简介 抽象工厂模式是一种创建型设计模式&a…...

uniapp:安卓permission权限表及setting表
安卓permission权限表 权限名称说明android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词android.permission.WRITE_SYNC_SETTINGS写入 Google 在线同步设置android.permission.WRITE_SOCIAL_STREAM读取用户的社交信息流android.permission.WRITE_SMS允…...

汽车服务门店小程序模板制作指南
在数字化时代,一个小程序的力量不可忽视。它不仅是展示品牌形象和提供用户服务的重要工具,更是扩大客户群体和提高营收的关键手段。对于汽车服务门店来说,拥有一个精美且功能齐全的小程序,更将成为你在竞争激烈的市场中的重要武器…...

Apache SeaTunnel 2.3.3 版本发布,CDC 支持 Schema Evolution!
时隔两个月, Apache SeaTunnel 终于迎来大版本更新。此次发布的 2.3.3 版本在功能和性能上均有较大优化改进,其中大家期待已久的 CDC Schema evolution(DDL 变更同步)、主键 Split 拆分、JDBC Sink 自动建表功能、SeaTunnel Zeta …...

工厂方法模式的概述和使用
目录 一、工厂方法模式概述1. 定义2. 使用动机 二、工厂方法模式结构1. 模式结构2. 时序图 三、工厂方法模式的使用实例四、工厂方法模式的优缺点五、工厂方法模式在Java中应用 原文链接 一、工厂方法模式概述 1. 定义 工厂方法模式(Factory Method Pattern)又称为工厂模式&…...

HP惠普星15青春版/惠普小欧笔记本电脑15s-du1008tx原装出厂Win11系统
适用型号:15s-du1007tx、15s-du1008tx、15s-du1009tx、15s-du1010tx、15s-du1011tx、15s-du1012tx、15s-du1013tx 自带所有驱动、出厂主题壁纸LOGO、Office办公软件、惠普电脑管家等预装程序 所需要工具:32G或以上的U盘 文件格式:ISO 文件大…...

聊聊检索增强,LangChain一把梭能行吗?
背景 ChatGPT诞生之初,大家仿佛从中看到了未来:可以拿着大语言模型(LLM)这把锤子,锤遍业务上的钉子。其中最被看好的场景,莫过于搜索,不仅是微软、谷歌、百度这样的大公司将LLM用到自己的搜索业…...

【力扣】343. 整数拆分 <动态规划、数学>
【力扣】343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。返回可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出:…...

数据结构--5.1图的存储结构(十字链表、邻接多重表、边集数组)
目录 一、十字链表(Orthogonal List) 二、邻接多重表 三、边集数组 四、深度优先遍历 一、十字链表(Orthogonal List) 重新定义顶点表结点结构: datafirstInfirstOut 重新定义边表结构结点: tailV…...

mac上 Kratos 配置 protoc
前言 protoc 是 protobuf 文件(.proto)的编译器,可以借助这个工具把 .proto 文件转译成各种编程语言对应的源码,包含数据类型定义、调用接口等。 protoc 在设计上把 protobuf 和不同的语言解耦了,底层用 c 来实现 protobuf 结构的存储&#x…...

【c++5道练习题】①
目录 一、有限制的累加 二、计算日期到天数转换 三、仅仅反转字母 四、 字符串的第一个唯一字符 五、字符串最后一个单词的长度 一、有限制的累加 题述: 求123...n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句…...

最佳实践:TiDB 业务读变慢分析处理
作者:李文杰 网易游戏计费 TiDB 负责人 在使用或运维管理 TiDB 的过程中,大家几乎都遇到过 SQL 变慢的问题,尤其是查询相关的读变慢问题。读变慢的问题大部分情况下都遵循一定的规律,通过经验的积累可以快速的定位和优化ÿ…...

【ES6】Getter和Setter
JavaScript中的getter和setter方法可以用于访问和修改对象的属性。这些方法可以通过使用对象字面量或Object.defineProperty()方法来定义。 以下是使用getter和setter方法的示例: <!DOCTYPE html> <script>const cart {_wheels: 4,get wheels(){retu…...

3DS Max中绘制圆锥箭头
3DS Max中绘制圆锥箭头 绘制结果绘制过程步骤一:绘制立体圆锥方法1方法2 步骤二:圆锥体调参(模型尺寸设置)1圆锥体参数说明2圆锥体参数调整 步骤三:绘制圆柱体步骤四:圆柱体调参步骤五:圆锥与圆…...

虚拟机Ubuntu20.04 网络连接器图标开机不显示怎么办
执行以下指令: sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start...

你真的知道什么是USB Server吗?一分钟了解
很多公司都在用USB Server,效率大幅提高,但也还有不少人不知道USB Server到底是什么、干嘛用的。 USB Serve是帮助企业远程连接和集中管控USB设备的服务器 它的主要用途就是异地远程连接USB。 如,虚拟化环境的加密狗、前置机连接࿰…...

Node.js 中间件是怎样工作的?
express自带路由功能,可以侦听指定路径的请求,除此之外,express最大的优点就是【中间件】概念的灵活运用,使得各个模块得以解耦,像搭积木一样串起来就可以实现复杂的后端逻辑。除此之外,还可以利用别人写好…...

Spring MVC: 请求参数的获取
Spring MVC 前言通过 RequestParam 注解获取请求参数RequestParam用法 通过 ServletAPI 获取请求参数通过实体类对象获取请求参数附 前言 在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调…...