R语言之数据处理(二)

数据属性变换是数据预处理的一种重要方法。接下来介绍几种无量纲化数据预处理的方法。

1.1 数据中心化

数据中心化,是指变量减去它的平均值,即
x'=x-\overline x

data("iris")
a <- iris[,1:4]
# scale函数进行中心化
irisc <- scale(a,center = TRUE,scale = FALSE)
head(irisc)
# 对列执行操作,得到取值范围
apply(irisc, 2, range)
数据中心化

1.2 数据标准化

数据标准化,是指变量减去它的平均值再除以它的标准差,即
x'= \frac{x-\overline x}\sigma

iriss <- scale(a,center = TRUE,scale = FALSE)
head(iriss)
数据标准化

1.3 min-max标准化

数据0-1标准化,是指变量减去它的最小值再除以它的最大值和最小值的差,该方法是对原始数据进行线性变化,使其映射到[0,1]之间,即
x'=\frac{x-x_\min}{x_\max -x_\min}

minmax <- function(x){
  x <- (x-min(x))/(max(x)-min(x))
} #定义函数
iris01 <- apply(a, 2, minmax) #将函数作用于每一列
head(iris01)
apply(iris01, 2, range)
0-1标准化

1.4 利用caret包处理

# 加载包
library(ggplot2)
library(caret)

# 数据中心化处理
## 使用preProcess函数得到center对象
center <- preProcess(a,method="center")
## 使用predict函数将center作用到数据集上
irisc <- predict(center, a)
head(irisc,3)
apply(irisc,2,range)

# 数据标准化处理
scal <- preProcess(a,method = c("center","scale"))
iriss <- predict(scal,a)
head(iriss,3)
apply(iriss,2,range)

# 数据0-1标准化处理
minmax01 <- preProcess(a,method = "range",rangeBounds = c(0,1))
## 利用preProcess函数进行数据0-1标准化无须自定义新的函数
iris01 <- predict(minmax01,a)
head(iris01,3)
apply(iris01,2,range)

机器学习建模经常需要将数据切分为训练集和测试集,训练集用于建立模型,测试集用于验证模型的泛化能力,在不同的场景下需要不同的数据切分方法。

2.1 通过随机数进行切分

# 使用sample函数生成num个整型随机数作为训练集的索引
num <- round(nrow(iris)*0.7)
index <- sample(nrow(iris),size = num)
# 提取训练集,并删除随机数所在行得到测试集
iris_train <- iris[index,]
iris_test <- iris[-index,]
dim(iris_train)
dim(iris_test)

# 105 5
# 45 5

2.2 使用caret包按比例切分数据

index <- createDataPartition(iris$Species,p = 0.7)
str(index)
## Resample1为训练集的索引
iris_train <- iris[index$Resample1,]
iris_test <- iris[-index$Resample1,]
dim(iris_train)
dim(iris_test)

# List of 1
# $ Resample1: int [1:105] 1 2 3 4 5 6 9 11 15 16 ...
# 105 5
# 45 5

2.3 K折交叉验证进行随机划分

# 每次使用其中1份作为训练集,剩下k-1份作为测试集,总共需要训练k次。
index <- createFolds(iris$Species,k = 3)
index
K折交叉验证结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容