R语言 如何对数据进行标准化和规范化
在这篇文章中,我们将研究在R编程语言中对数据进行标准化、最小-最大标准化、Z-分数标准化和对数转换的各种技术。
加载所需的软件包和数据集
让我们安装并加载所需的软件包。同时创建一个数据帧作为样本数据集。
输出 :
数据摘要
让我们看看缩放之前的数据摘要。从输出中我们可以看到,每个变量/特征都有不同的取值范围(可以从最小值和最大值中推断出来),因此需要进行缩放以使数值在一个固定范围内。
输出:
归一化
方法1:最小-最大归一化
这种技术将数值重新划分为0和1之间的范围。同时,数据最终具有较小的标准偏差,这可以抑制异常值的影响。
示例 :让我们写一个自定义函数来实现最小-最大归一化。
最小-最大归一化
这就是最小-最大归一化的公式。让我们使用这个公式并创建一个自定义的用户定义的函数,minMax,它一次接收一个值并计算缩放值,使其位于0和1之间。这里new_max(A)是1,new_min(A)是0,因为我们试图在[0,1]范围内缩小/增加值。
这有助于很好地处理异常值,并在整体上抑制它们。
输出:
现在让我们用数据的摘要来检查4列的值是否在0和1之间进行了重新调整(最小和最大分别为0和1)。
输出:
例子: 使用内置函数和caret包来执行最小-最大归一化
在这里,preProcess( )方法取一个值为 “range “的元组来实现最小-最大缩放,这个预处理过的数据被发送到predict( )函数,使用最小-最大缩放方法得到最终的规范化数据。
语法
preProcess(x, method = c(“center”, “scale”), … na.remove = TRUE )
参数
- x – 一个矩阵或数据框
- method – 一个字符向量,指定处理的类型
- na.remove – true/false,用于指定去除缺失的值
输出:
这种技术倾向于将重新缩放的数据集中在平均值周围,但它不能很好地处理异常值。因此,为了解决这个问题,我们要进行标准化处理。
方法2:对数转换
并非所有的现实生活中的数据都遵循高斯分布,也并非倾斜度较小。所以可以使用对数转换技术来解决这个问题。
例子 :使用log( )函数
让我们对数据中的某一列var2进行对数转换并查看它的摘要。
语法
参数
- x – 一个数字或复数向量
- base- 一个正数或复数
Log( )函数接收数字向量或复数向量的数据并执行对数转换。
输出:
对数转换
标准化
标准化是一种技术,在这种技术中,所有的特征都有一个在零左右的平均值,并且有大致的单位方差(平均值=0,标准差=1)。而且还能确保异常值比其他值得到更多的权重。
例子 :使用Standard scale( )函数
函数
参数
- x – 一个数字矩阵(类似对象)
- center – 一个逻辑值或长度等于x的列数的类似数字的向量
- scale – 一个逻辑值或一个长度等于x的列数的类似数字的向量
scale() 函数(R中caret包的一部分)接收一个矩阵或数据帧对象,并对数据点进行缩放,使其平均值和标准偏差分别为0和1。
输出:
例子 :使用caret库中的一个内置函数对数据进行预处理,然后进行标准化。
在这里,preProcess( )方法将接受一个带有 “中心 “和 “尺度 “值的元组来实现标准化。这个预处理过的数据被发送到predict( ),以实现数据的标准化,使其平均值为0,标准差为1。
输出: