训练一个机器学习模型,其实大量的时间是花在资料的预处理和探索性资料分析上。尤其是实际中遇到的data都不会太干净,所以花较长的时间来做数据的预处理是很有必要的。
首先来建立一个简单的数据集
1 | library(mice) |
查找NA
存在NA的rows
1
2complete.cases(data) # 当一笔资料是完整的,回传TRUE;当一笔资料有遗漏值,回传FALSE
#[1] TRUE FALSE FALSE TRUE TRUE FALSE查找缺失值的位置
1
which(is.na(data)) #返回缺失值的位置
计算数据集中有缺失的资料笔数所占比例
1
2
3loss = sum(is.na(data)) #计算资料集中的缺失值总数
have = sum(complete.cases(data)) #统计资料集中完整样本的个数
ratio = loss/(loss+have) #计算缺失值资料的比重
填补NA
na.omit() 可以删除所有含有缺失资料的row
1
2
3
4
5
6data1 = na.omit(data)
data1
# name country gender age income
# 1 Andy UK male 22 12
# 4 Ketay US female 31 77
# 5 Wang CH male 45 32最高频率来填补缺失值.尝试找到这些缺失值最可能的值。
对于变数分布近似正态分布时可以选用平均值;偏态分布一般采用中位数代表资料中心趋势的指标。
1 | # mean_income = mean(data$income) |
函式centralImputation()可以用资料的中心趋势值来填补资料集的所有缺失值
1
2data3 = data
data3$income <- centralImputation(data3$income)通过变数的相关关系填补缺失值
1
2
3
4
5
6
7
8#函式cor()的功能是产生变数之间的相关值矩阵,引数use = "complete.obs"可以忽略含有NA的记录
cor(data[,c("age","income")],use = "complete.obs") # =cor(data[,4:5],use = "complete.obs")
# age income
# age 1.00000000 0.07670152
# income 0.07670152 1.00000000
lm(age~income,data = data)
#函式lm()可以用来获取线性模型
#可以使用上述线性关系计算变数的缺失值用K-Nearest Neighbours填补遗漏值
1
2require(DMwR)
imputeData <- knnImputation(data)