用R语言进行数据的特征缩放主要方法

news2024/9/21 10:51:32

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容,每篇文章都在 5000 字以上,质量平均分高达 94 分,看全文请点击下面链接

4章11节:用R做数据重塑,数据的特征缩放和特征可视化-CSDN博客文章浏览阅读115次。在数据分析和机器学习中,特征缩放是数据预处理的重要步骤,尤其在处理不同量级的数据时显得尤为重要。特征缩放可以消除不同特征之间的量级差异,使模型能够更好地收敛,并避免因某些特征占主导地位而导致的偏差。https://blog.csdn.net/2301_79425796/article/details/141158247欢迎订阅我们专栏

 由于数据往往复杂多样,其中不同的特征变量可能具有不同的数值范围,这使得特征缩放成为一个必要的步骤。例如,当我们要处理医学数据时,对于同一个患者,肺活量的变化范围可能在1000到5000之间,而体重指数(BMI)的变化范围则可能在10到50之间,其他一些生理指标甚至可能处于-0.1到0.1的微小范围内。由于这些变量具有不同的单位和尺度,在进行距离度量或其他基于数值的计算时(如K近邻算法、支持向量机、聚类分析等),若不进行特征缩放处理,不同尺度的变量可能对计算结果产生不一致甚至误导性的影响。通过特征缩放,所有特征变量被调整到相同的尺度,确保它们在模型训练过程中能够以平等的权重进行比较和使用。这种处理方法不仅能够提高模型的性能,还能减少计算中的误差,从而提升分析结果的准确性和可靠性。

一、特征缩放的主要方法

特征缩放的主要方法包括数据的中心化(Centralization)和标准化(Normalization)。中心化是指将数据集中的每一个数据点减去该数据集的均值,目的在于使数据的分布中心移到原点附近,从而消除数据中的偏移量。标准化则是在数据中心化的基础上,再将数据除以该数据集的标准差,目的是使数据的分布符合标准正态分布(均值为0,标准差为1)。

这两种方法的结合能够有效消除量纲的影响,使得不同尺度的特征能够在同一尺度下进行比较。例如,假设我们有10位患者分别完成了三份不同的问卷调查(Que.1、Que.2和Que.3),我们可以使用R语言的seq()c()data.frame()函数创建一个数据集Data.que,并对其进行中心化和标准化处理。

Patient_id <- seq(1,10)
Que.1 <- c(502,600,582,358,395,512,410,625,555,522)
Que.2 <- c(95,99,80,82,75,85,80,95,89,86)
Que.3 <- c(6,2,8,15,10,9,5,3,7,10)
Data.que <- data.frame(Patient_id, Que.1, Que.2, Que.3)

数据集为:

   Patient_id Que.1 Que.2 Que.3
1           1   502    95     6
2           2   600    99     2
3           3   582    80     8
4           4   358    82    15
5           5   395    75    10
6           6   512    85     9
7           7   410    80     5
8           8   625    95     3
9           9   555    89     7
10         10   522    86    10

通过scale()函数,我们可以轻松地对数据集进行中心化和标准化处理:

Data.que.nor <- scale(Data.que, center = TRUE, scale = TRUE)
Data.que.nor

此时,数据集中每一列的数值都被调整到以均值为中心,标准差为单位的范围内,确保不同特征之间可以公平比较。下面是处理后的数据结果:

      Patient_id       Que.1       Que.2      Que.3
 [1,] -1.4863011 -0.04493635  1.07806562 -0.3939193
 [2,] -1.1560120  1.02915208  1.59143020 -1.4443708
 [3,] -0.8257228  0.83187053 -0.84705156  0.1313064
 [4,] -0.4954337 -1.62318875 -0.59036927  1.9695965
 [5,] -0.1651446 -1.21766556 -1.48875728  0.6565322
 [6,]  0.1651446  0.06466451 -0.20534583  0.3939193
 [7,]  0.4954337 -1.05326427 -0.84705156 -0.6565322
 [8,]  0.8257228  1.30315424  1.07806562 -1.1817579
 [9,]  1.1560120  0.53594821  0.30801875 -0.1313064
[10,]  1.4863011  0.17426537 -0.07700469  0.6565322
attr(,"scaled:center")
Patient_id      Que.1      Que.2      Que.3 
       5.5      506.1       86.6        7.5 
attr(,"scaled:scale")
Patient_id      Que.1      Que.2      Que.3 
  3.027650  91.240159   7.791734   3.807887 

处理后的数据集不仅各个变量均值被调整为0,标准差调整为1,便于模型更为准确地计算和预测。同时,还消除了因数据尺度不同可能带来的误差和不稳定性。

在R语言中,实现特征缩放非常简单。除了前述的scale()函数之外,R还提供了多种其他工具和包(如caret包中的preProcess函数),能够满足各种不同需求的特征缩放操作。

例如,caret包中的preProcess函数提供了更为灵活的特征缩放方式,可以实现数据的标准化、归一化、Z-score转换等多种处理方法。以下是一个简单的示例:

library(caret)
preProc <- preProcess(Data.que, method = c("center", "scale"))
Data.que.scaled <- predict(preProc, Data.que)
Data.que.scaled

在上述代码中,preProcess函数首先对数据进行中心化和标准化处理,然后通过predict函数将处理结果应用到原始数据集上。这种方法不仅简洁易用,还能够适应不同数据集的需求,结果可见:

   Patient_id       Que.1       Que.2      Que.3
1  -1.4863011 -0.04493635  1.07806562 -0.3939193
2  -1.1560120  1.02915208  1.59143020 -1.4443708
3  -0.8257228  0.83187053 -0.84705156  0.1313064
4  -0.4954337 -1.62318875 -0.59036927  1.9695965
5  -0.1651446 -1.21766556 -1.48875728  0.6565322
6   0.1651446  0.06466451 -0.20534583  0.3939193
7   0.4954337 -1.05326427 -0.84705156 -0.6565322
8   0.8257228  1.30315424  1.07806562 -1.1817579
9   1.1560120  0.53594821  0.30801875 -0.1313064
10  1.4863011  0.17426537 -0.07700469  0.6565322

二、其它的特征缩放

1、自定义缩放范围

自定义缩放范围在数据分析中的应用也不少,尤其是在处理特定类型的数据时。例如,在医学影像处理过程中,不同类型的影像数据可能需要不同的缩放范围来优化特征提取的效果。对于MRI(磁共振成像)和CT(计算机断层扫描)图像数据,其像素值范围通常不相同。MRI图像的像素值可能在-1000到1000之间,而CT图像的像素值范围可能在-2048到3071之间。直接将这些数据缩放到统一的[0,1]或[-1,1]范围内可能会丢失部分关键信息或降低图像的对比度。通过自定义缩放范围,可以根据数据的具体特点进行调整,从而更好地保留关键的医学信息。

    .........

欢迎订阅我们专栏,深度系统地学习R语言。 

为帮助大家更出色地掌握临床统计、数据挖掘以及人工智能建模的入门知识和应用,由于众多同学在计算机编程上经验欠缺,特此开设《R 语言与数据科学的终极指南》专栏。该专栏每周至少会定期更新三篇,直到整个专栏更新完成。每篇文章都在 5000 字以上,质量平均分高达 94 分。要提醒大家的是,每结束一个章节,专栏的优惠力度就会减小,当下正是订阅的最佳优惠时段,诚邀各位积极订阅!

专栏《R 语言与数据科学的终极指南》链接:https://blog.csdn.net/2301_79425796/category_12729892.html?spm=1001.2014.3001.5482

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

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

相关文章

第八季完美童模全球冠军·韩嘉滢 破浪扬帆写就传奇

在这个充满奇迹与梦想的舞台上&#xff0c;星光少女韩嘉滢以她独有的光芒&#xff0c;照亮了第八季完美童模的每一个角落。从亚特兰蒂斯的神秘海域到典故里的中国古韵&#xff0c;她以多变的风格与卓越的表现&#xff0c;征服了全球观众的心&#xff0c;最终荣登全球冠军的宝座…

K8S资源之Service

概念 将一组 Pods 公开为网络服务的抽象方法。 ClientIP 模型 集群内访问类型。 命令行 # 暴露端口 kubectl expose deployment my-dep-nginx --port8000 --target-port80Yml文件 apiVersion: v1 kind: Service metadata:labels:app: my-dep-nginxname: my-dep-nginx spe…

中小型企业可用的数据采集监控平台 为生产带来众多改变

中小型企业采用数据采集监控平台可以显著提升生产效率、优化生产流程、增强决策能力&#xff0c;并带来一系列积极的改变。 数据采集监控平台可提供从边缘感知设备到云端的数据采集、存储、分析、可视化等服务&#xff0c;实现生产工艺流程仿真、设备运行状态监控、数据报表、趋…

渗透测试实战-菠菜站渗透测试(Nacos反序列化漏洞利用)

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…

leetcode 103.二叉树的锯齿形层序遍历

1.题目要求: 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。2.做题思路:由题我们可以判断&#xff0c;树中每到偶数…

IV(电流-电压)测试和CV(电容-电压)测试

IV&#xff08;电流-电压&#xff09;测试和CV&#xff08;电容-电压&#xff09;测试是半导体参数表征中非常重要的两种测试方法。 一、IV测试&#xff08;电流-电压测试&#xff09; 1. 定义与目的 IV测试是测量半导体器件在不同电压下的电流响应&#xff0c;以评估其电学…

树莓派智能语音助手之ASR – SpeechRecognition+PocketSphinx

想要让树莓派成为智能语音助手&#xff0c;除了会“说”&#xff0c;也要会“听”。接下来&#xff0c;就要让它实现ASR&#xff08;语音识别&#xff09;功能了。 本来想用sherpa-onnx来实现离线语音识别的&#xff0c;可惜&#xff0c;我的树莓派系统太老了&#xff0c;折腾…

mybatis常见面试问题

0.原生JDBC样例: public class MainClass { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 String url = &q…

视觉SLAM ch3补充——在Linux中配置VScode以及CMakeLists如何添加Eigen库

ch3中的所有代码&#xff0c;除了在kdevelop中运行&#xff0c;还可以在VScode中运行。下面将简要演示配置过程&#xff0c;代码不再做解答&#xff0c;详细内容在下面的文章中。&#xff08;这一节中的pangolin由于安装过程中会出现很多问题&#xff0c;且后续内容用不到该平台…

重磅官宣!追光少年【彭禹锦】荣担任中国美育促进网amp;IPA美育中国行代言人

在美育事业蓬勃发展的今天&#xff0c;一位年仅15岁的少年以其非凡的艺术才华和积极向上的精神风貌&#xff0c;成为了万众瞩目的焦点。中国美育促进网与IPA美育中国行正式宣布&#xff0c;才华横溢、正能量满满的追光少年彭禹锦受邀担任“中国美育促进网&IPA美育中国行”代…

c++中__int128的使用

需要10^30才可以存&#xff0c;我们可以用__int128来算 #include<bits/stdc.h>using namespace std;bool is_sqr(__int128 x) {__int128 l -1, r 1e16;while (r - l > 1) {__int128 m (l r) / 2;__int128 m2 m * m;if (m2 < x) {l m;} else {r m;}}if (l *…

【机器学习】RNN循环神经网络的基本概念、工作原理(含python代码)和应用领域

引言 递归神经网络&#xff08;RNN&#xff09;是一类用于处理序列数据的神经网络。它们在处理如时间序列数据、语音、文本和其他序列格式数据时特别有用 文章目录 引言一、RNN的基本概念1.1 RNN的定义组成1.1.1 单个神经元1.1.2 网络结构 1.2 RNN的工作原理及代码示例1.2.1 循…

8月7日-8日学习

首先是昨天看到的gemma 2 中训练2B模型用了知识蒸馏&#xff0c;找了一下技术报告 结果先找到了一代的半天没有看到知识蒸馏的部分 然后在二代里面找到了 只有很小的一部分 就是用小模型学习大模型的概率预测分布 然后这里的话又找到了华为发布的小模型论文 Rethinking Optim…

Centos7安装Redis(采用docker安装方式)

文章目录 1 拉取Redis镜像2 上传并修改配置文件3 启动Docker容器4 查看Docker是否正常启动 linux系统安装redis可以自己上传程序&#xff0c;手动启动&#xff0c;也可以用docker以容器形式启动。 redis建议可采用docker安装&#xff0c;如果是例如mysql这种追求稳定的关系型数…

mmdeployv0.6 mmdetectionv2.4、mmcv-full1.6安装及环境搭建

一、安装条件 Step 1.创建conda虚拟环境并激活 conda create -n mmdeploy python3.8 -y #创建环境 conda activate mmdeploy #激活环境Step 2.安装 PyTorch #如果网不好&#xff0c;可以这样安装 pip3 install torch1.8.1cu111 torchvision0.9.1cu111 -…

基于python的百度迁徙迁入、迁出数据分析(十)

副标题&#xff1a;从百度迁徙数据看——迁徙数据特征分析 书接上文&#xff0c;我们先回顾一下我们统计的时间口径&#xff1a;2024年2月1日——2024年8月1日&#xff0c;这里包含了春运、清明、五一、端午、四个中大型国定假日&#xff0c;我们详细分析一下在当下的统计周期…

GOIP语音网关对接VOS3000技巧 落地于呼叫配置

GOIP语音网关对接VOS3000技巧 落地和呼叫以鼎信GOIP网关为例 首先登录vos端&#xff0c;添加落地网关和账户 账户添加&#xff1a; 账户管理&#xff0c;先添加账户然后应用&#xff0c;在过滤看看是否添加成功 给账户添加一个费率 双击费率数量添加费率的地区前缀&#xff0…

关于宠物浮毛对身体是否有害?宠物空气净化器选对告别浮毛困扰

说到宠物掉毛&#xff0c;大家是不是都会心里咯噔一下&#xff0c;担心这会不会对身体有啥不好&#xff1f;这确实是很多养宠人&#xff0c;还有那些正打算养宠的朋友心里的一块大石头。而且啊&#xff0c;这浮毛问题还常常成了家庭纷争的源头&#xff0c;特别是那些怀孕了的、…

【约数之和】

题目 TLE代码 #include<bits/stdc.h> using namespace std; typedef long long LL; #define x first #define y secondconst int N 5e710; const int MOD 9901; LL a, b; unordered_map<int, int> cnt; LL res 1; LL fast(int base, int expo) {LL result 1;…

TreeSet的排序方式

一.TreeSet的特点&#xff1a; 二.TreeSet对象排序练习题&#xff1a; 需求&#xff1a;利用TreeSet存储整数并进行排序 package com.itheima.a06mySet; ​ import java.util.TreeSet; ​ public class A05_TreeSetDemo1 {public static void main(String[] args) {//1.创建T…