tidyverse数据特征学习

news2024/11/26 19:25:32

目录

特征缩放

1,标准化-scale

2,归一化-rescale

3,行规范化

4,数据平滑

特征变换

1. 非线性特征

2. 正态性变换

3. 连续变量离散

特征降维


特征缩放

不同数值型特征的数据量纲可能相差多个数量级,这对很多数据模型会有很大 影响,所以有必要做归一化处理,就是将列或行对齐并转化为一致。

1,标准化-scale

标准化也称为 Z 标准化,将数据变成均值为 0, 标准差为 1。(标准差:离均差平方的算数平均数(即:方差)的算数平方根)。所以这里缩放的是数据的标准差,而不是数据的范围。

R里常用scale函数:

scale(x) # 标准化

scale(x, scale = FALSE) # 中心化: 减去均值(中心化后,0 就代表均值,更方便模型解释)

示例:

rm(list = ls())
#生成随机数
set.seed(123)
data <- runif(100, 1, 1000)#在1-1000中间生成100个随机数
data[1:10]
[1] 288.28994 788.51683 409.56794 883.13439 940.52682  46.51094 528.57738
[8] 892.52663 551.88358 457.15812

#标准化
a <- scale(data)
a[1:10]
[1] -0.7402982  1.0166700 -0.3143283  1.3489993  1.5505811 -1.5895088
[7]  0.1036736  1.3819880  0.1855330 -0.1471753
#中心化: 减去均值
b <- scale(data, scale = FALSE) 
b[1:10]
[1] -210.77049  289.45640  -89.49249  384.07395  441.46638 -452.54949
[7]   29.51695  393.46619   52.82314  -41.90231

data[1]-mean(data)#减去均值
[1] -210.7705
2,归一化-rescale

归一化是将数据线性放缩到 [0, 1], 一般还同时考虑指标一致化,将正向指标 (值越大越好)和负向指标(值越小越好)都变成正向。同时还涉及数据缩放。R语言数据缩放-1到1-CSDN博客

rescale = function(x, type = "pos", a = 0, b = 1) {
rng = range(x, na.rm = TRUE)
switch (type,
"pos" = (b - a) * (x - rng[1]) / (rng[2] - rng[1]) + a,
"neg" = (b - a) * (rng[2] - x) / (rng[2] - rng[1]) + a)
}

探索:

rm(list = ls())
library(dplyr)
library(scales)
#生成随机数
set.seed(123)
data <- runif(100, 1, 1000)#在1-1000中间生成100个随机数
data[1:5]
[1] 288.2899 788.5168 409.5679 883.1344 940.5268

#缩放到-1到1之间
a <- rescale(data,to = c(-1, 1))
a[1:5]
[1] -0.4224240  0.5854362 -0.1780724  0.7760722  0.8917068

注意:标准化和归一化是两种不同数据缩放的方法:归一化(Normalization)是指将数据缩放到[0,1]的范围内,公式为:(x - min)/(max - min),其中x为原始数据,min和max分别为数据集中的最小值和最大值。归一化后的数据分布在[0,1]之间,适用于数据分布有明显边界的情况。

标准化(Standardization)是指将数据按照均值为0,标准差为1的方式进行缩放,公式为:(x - mean)/std,其中x为原始数据,mean和std分别为数据集的均值和标准差。标准化后的数据分布在均值附近,标准差为1,适用于数据分布没有明显边界的情况。

区分规范化,归一化,标准化,正则化 - 知乎 (zhihu.com)

3,行规范化

行规范化,常用于文本数据或聚类算法,是保证每行具有单位范数,即每行的 向量” 长度” 相同。想象一下,𝑚 个特征下,每行数据都是 𝑚 维空间中的一 个点,做行规范化能让这些点都落在单位球面上(到原点的距离均为 1)。行规范化,一般采用 𝐿2 范数什么是范数(norm)?以及L1,L2范数的简单介绍-CSDN博客

library(tidyverse)
data <- iris
#前三行 行规范化(去除第5列的物种)
data1 <- iris[1:3,-5] %>%
  pmap_dfr(~ c(...) / norm(c(...), "2"))
# A tibble: 3 × 4
  Sepal.Length Sepal.Width Petal.Length Petal.Width
         <dbl>       <dbl>        <dbl>       <dbl>
1        0.804       0.552        0.221      0.0315
2        0.828       0.507        0.237      0.0338
3        0.805       0.548        0.223      0.0343
4,数据平滑

若数据噪声太多的问题,通常就需要做数据平滑。 最简单的数据平滑方法是移动平均,即用一定宽度的小窗口1滑过曲线,会把 曲线的毛刺尖峰抹掉,能一定程度上去掉噪声还原原本曲线。 窗口宽度越大,平滑的效果越明显。(理解就是使用 平均值代替波动值)

比如五点平滑,用前两点/自身/后两点,共五点平均值代替自身因变量值

rm(list = ls())
library(slider)
library(patchwork)
p1 = economics %>%
  ggplot(aes(date, uempmed)) +
  geom_line()
p2 = economics %>% # 做五点移动平均
  mutate(uempmed = slide_dbl(uempmed, mean,
                             .before = 2, .after = 2)) %>%
  ggplot(aes(date, uempmed)) +
  geom_line()
p1 | p2

特征变换

1. 非线性特征
library(tidymodels)
recipe(hwy ~ displ + cty, data = mpg) %>%
step_poly(all_predictors(), degree = 2,
options = list(raw = TRUE)) %>%
prep() %>%
bake(new_data = NULL)
2. 正态性变换

对数变换或幂变换:对于方差逐渐变大的异方差的时间序列数据,或右偏分布的数据,可以尝试做 对数变换或开根号变换,以稳定方差和变成正态分布。

rm(list = ls())
df = mlr3data::kc_housing
p1 = ggplot(df, aes(price)) +
  geom_histogram()
p2 = ggplot(df, aes(log10(price))) +
  geom_histogram()
p1 | p2

对数变换特别有用,因为具有可解释性:对数值的变化是原始尺度上的相对 (百分比)变化。若使用以 10 为底的对数,则对数刻度上每增加 1 对应原始 刻度上的乘以 10。

3. 连续变量离散

在统计和机器学习中,有时需要将连续变量转化为离散变量,称为连续变量离 散化或分箱,常用于银行风控建模,特别是线性回归或 Logistic 回归模型

例子:使得结果更便于分析和解释。比如,年龄从中年到老年,患高血压比例 增加 25%,而年龄每增加一岁,患高血压比例不一定有显著变化

rbin 包提供了简单的分箱方法:

• rbin_manual(): 自定义分箱,手动指定切分点(左闭右开)

• rbin_equal_length(): 等宽分箱

• rbin_equal_freq(): 等频分箱

• rbin_quantiles(): 分位数分箱

• rbin_winsorize(): 缩尾分箱,不受异常值影响

特征降维

特征降维(主要是PCA的补充)-CSDN博客

PCA利用的是协方差矩阵的特征值分解原理,实现多个特征向少量综合特征(主成分)的转化,每个成分都是多个原始特征的线性组合,且各个成分互补相关,第一主成分用于解释数据变异(
方差)最大的,第二主成分次之,以此类推。

#鸢尾花主成分降维
rm(list = ls())
data <- iris
 
library(recipes)
recipe(~.,data=iris) %>%
  step_normalize(all_numeric()) %>%
  step_pca(all_numeric(),threshold = 0.85)%>%##设置阈值
  prep()%>%
  bake(new_data=NULL)
————————————————
版权声明:本文为CSDN博主「hx2024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hx2024/article/details/134402726

结果:

# A tibble: 150 × 3
   Species   PC1     PC2
   <fct>   <dbl>   <dbl>
 1 setosa  -2.26 -0.478 
 2 setosa  -2.07  0.672 
 3 setosa  -2.36  0.341 
 4 setosa  -2.29  0.595 
 5 setosa  -2.38 -0.645 
 6 setosa  -2.07 -1.48  
 7 setosa  -2.44 -0.0475
 8 setosa  -2.23 -0.222 
 9 setosa  -2.33  1.11  
10 setosa  -2.18  0.467 
# ℹ 140 more rows
# ℹ Use `print(n = ...)` to see more rows

感谢张敬信老师的书籍!!!

参考:

张敬信 老师的《R语言编程:基于tidyverse》

为R语言正名之书《R语言编程:基于tidyverse》正式上市! - 知乎 (zhihu.com)

张敬信老师投稿视频-张敬信老师视频分享-哔哩哔哩视频 (bilibili.com)

资源获取introR: 这是一本中文 R 语言入门书,基于最新 tidyverse 包。 (gitee.com)

张敬信-1393页-R语言编程:基于tidyverse-完整课件(带书签).pdf (gitee.com)

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

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

相关文章

ZGC 垃圾回收过程

ZGC&#xff08;Z Garbage Collector&#xff09;是Java平台上的一种垃圾收集器&#xff0c;它是由Oracle开发的&#xff0c;旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器&#xff0c;它主要针对具有大内存需求和低停顿时间要求的应用程序 ZGC的核心概念及…

人力资源管理后台 === 首页+部署

目录 1.首页-echarts图表的应用 2.首页-echarts图表的按需导入 3.路由模式-将路由改成history模式 4. 打包分析-分析 5.CDN加速 6.项目打包-安装nginx 7.mac/windows环境下nginx部署启动项目 8.nginx解决history的404问题 9.nginx配置代理解决生产环境跨域问题 1.首页-…

复数的几何意义

1、复平面&#xff0c;复数的其它表示法 (1)几何表示法 直角平面坐标&#xff1a; 复平面 实轴&#xff0c;虚轴 (2)向量表示法 向量 模&#xff1a; 复数加减法可用向量的三角形法则或者平行四边形法则 (3)结论 (两边之和大于第三边) ((两边之差大于第三边)) *辐角&am…

「Verilog学习笔记」非整数倍数据位宽转换24to128

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 要实现24bit数据至128bit数据的位宽转换&#xff0c;必须要用寄存器将先到达的数据进行缓存。24bit数据至128bit数据&#xff0c;相当于5个输入数据第6个输入数据的拼接成一…

Educational Codeforces Round 158 [Rated for Div. 2]

A. Line Trip 还算比较简单的&#xff0c;不过本蒟蒻一开始以为是二分答案&#xff0c;二分写到一半突然想到油量直接取两个加油站之间的最大距离就好了。 最大距离能过&#xff0c;剩下必然都能过&#xff0c;要特判a[n]~x距离是两倍&#xff0c;因为x没有加油站&#xff0c…

【Python百宝箱】Python项目生态圈:虚拟环境全指南

项目管理达人&#xff1a;Python虚拟环境的智慧选择 前言 在Python开发领域&#xff0c;创建虚拟环境是一项至关重要的任务&#xff0c;它有助于项目之间的依赖隔离&#xff0c;确保每个项目都能独立运行且使用特定的库和工具。本文将介绍多种创建Python虚拟环境的方法&#…

C语言线性表的实现(详解)

数据结构之线性表 ​ 线性表的基本概念&#xff1a;线性表是由0个或者多个数据元素的有限序列 ​ 特性是&#xff1a; ​ 1&#xff1a;数据元素之间都是有顺序的 ​ 2&#xff1a;数据元素的个数是有限的&#xff0c; ​ 3&#xff1a;数据元素的类型是相同的 ​ 性质是&…

二进制编辑器hexedit的安装及使用

Hexedit 同时以 ASCII 和十六进制显示文件 安装 终端输入hexedit回车&#xff0c;如果没安装&#xff0c;会提示让输入 sudo apt-get install hexedit 照着输入命令&#xff0c;安装。安装完成后&#xff0c;cd到一个有二进制文件的目录下&#xff0c;输入hexedit命令回车 再…

激光雷达SLAM(一)------初始激光雷达SLAM

专栏目的及认识激光雷达SLAM 一、专栏目的二、初始激光雷达SLAM1、激光雷达SLAM算法相关知识点2、SLAM常见问题[^2]3、激光雷达SLAM的需求点4、RTK在SLAM中的作用5、激光雷达视觉紧耦合图优化滤波紧耦合 一、专栏目的 大家好&#xff01;介绍一下博主自己&#xff0c;感知算法工…

在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT

原创/朱季谦 本文分成两部分&#xff0c;包括【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】。 无论是在【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】&#xff0c;两个方式都需要魔法访问&#xff0c;否则是无法正常使用的&#xff0c;即…

Java Flight Record 详解

核心概念 Java Flight Record 提供一个低开销的数据收集框架&#xff0c;用于对 Java 应用程序和 HotSpot JVM 进行故障排除。Flight Recorder 记录源自应用程序、JVM和操作系统的事件 Flight Record&#xff0c;顾名思义&#xff0c;相当于飞机黑匣子里保存的飞行记录 事件 …

vue3+ts mitt的使用

安装mitt :npm i mitt -Smain.ts: import mitt from mittconst Mit mitt();declare module vue {export interface ComponentCustomProperties{$Bus:typeof Mit} } app.config.globalProperties.$BusMit在A组件中使用 <template><div><h1>我是A<…

Leetcode—160.相交链表【简单】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—160.相交链表 算法思想 两个链表的节点之和是相等的 如果两个链表相交&#xff0c;那么相交点之后的长度是相同的 我们需要做的事情是&#xff0c;让两个链表从同距离末尾同等距离的位置开始遍历。这个位置只能是较短…

【高可用架构】Haproxy 和 Keepalived 的区别

Haproxy 和 Keepalived 的区别 1.负载均衡器介绍2.Haproxy 和 Keepalived 的基本概念和特点2.1 Haproxy2.2 Keepalived 3.Haproxy 和 Keepalived 的区别3.1 功能上的区别3.2 架构上的区别3.3 配置上的区别 4.总结 1.负载均衡器介绍 负载均衡器是一种解决高并发和高可用的常用的…

【JavaSE】:数据类型

数据类型 一.总体概论二.java里与c的区别1.float2.char3.boolen 三.类型转换四.String类型 一.总体概论 在Java中数据类型主要分为两类&#xff1a;基本数据类型和引用数据类型。 不论是在16位系统还是32位系统&#xff0c;int都占用4个字节&#xff0c;long都占8个字节 。 整…

NAS非接入层协议学习(二)

在无线通信网络中 NAS (Non-Access Stratum)做为非接入层是演进分组系统(或5G核心网)中的一组协议。NAS用于在用户设备(UE)和移动管理实体(MME/AMF)之间传送非无线电信令&#xff0c;以实现NR/LTE/E-UTRAN接入。 NAS在协议栈中是控制面的最高层。 NAS协议分组中可以将其分为两…

3款免费的语音视频转文本AI神器

最近有很多粉丝让我出一期关于语音转文本的免费AI神器&#xff0c;毕竟这类工具在学习和工作中经常会用到&#xff0c;那今天就给大家安排。 我亲测了好几款软件之后&#xff0c;最终评选留下了三款 剪映hugging face飞书妙记 接下来一一给大家讲解 1.剪映 剪映其实是一款视…

因式分解的几何意义

本来准备和女儿一起玩一道几何题&#xff0c;想想还是算了&#xff0c;不如讲点更有趣的。 任何因式分解都是在堆积木&#xff0c;不信你看&#xff1a; 二项式定理&#xff0c;洋灰三角&#xff0c;都是面积&#xff0c;体积&#xff0c;超维体积的拼接&#xff0c;一个大超…

Python | CAP - 累积精度曲线分析案例

CAP通常被称为“累积精度曲线”&#xff0c;用于分类模型的性能评估。它有助于我们理解和总结分类模型的鲁棒性。为了直观地显示这一点&#xff0c;我们在图中绘制了三条不同的曲线&#xff1a; 一个随机的曲线&#xff08;random&#xff09;通过使用随机森林分类器获得的曲线…

leetcode_828_统计子串中的唯一字符

题意&#xff1a;所有子串中单个字符出现的次数和 问题转化&#xff1a;对于串中的每个字符&#xff0c;只包含其一次的所有子串的个数和 关于求只包含某位置字符一次的子串个数 class Solution { public:int uniqueLetterString(string s) {/* ...A...A...A...*/int n s.size…