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

下面内容摘录自《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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据科学和人工智能兴趣组

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值