1 数据变换
在数据变换中,数据被变换成适应于数据挖掘需求的形式,数据变换策略主要包括以下几种。
1.光滑:去掉数据中的噪声,可以通过分箱、回归和聚类等技术实现。
2.属性构造:由给定的属性构造出新属性并添加到数据集中。例如,通过“销售额”和“成本”构造出“利润”,只需要对相应属性数据进行简单变换即可。
3.聚集:对数据进行汇总。如,可以通过日销售数据,计算月和年的销售数据。
4.规范化:把数据单按比例缩放,使之落入一个特定的小区间,如-1.0~1.0或0.0~1.0。标唯化是比较常用的一种规范化方法。
set.seed(1234)
a<-rnorm(5)
b<-scale(a) #标准化
b
结果分析:此矩阵为标准化后的数据,attr(,"scaled:center")是原数据的均值,attr(,"scaled:scale")是原数据的标准差。
5.离散化:数值属性(例如,年龄)的原始值用区间标签(例如,0~~10、11~20等)或概念标签(例如,youth、adult、senior)替换。可以实现将定量数据向定性数据转化,将连续型数据离散化。
离散化多根据数据情况和分析需求的不同采用不同的划分方式,假设a是一组Logistic回归的预测值,是取值在0~1之间的连续性数据,需要将a转换成取值为0或1的离散型数据。
a<-c(0.706,0.751,0.662,0.601,0.231,0.606,0.345)
n<-length(a)
la<-rep(0,n)
la[which(a>0.5)]=1
6.由标称数据产生概念分层:属性,如 street,可以泛化到较高的概念层,如city或country.许多标称属性的概念分层都蕴含在数据库的模式中,可以在模式定义级自动定义。
数据泛化可以理解为数据合并,以城市为例,1表示沈阳、2表示大连、3表示盘锦、4表示抚顺、5表示广州、6表示深圳、7表示珠海、8表示佛山,可以通过数据合并,将1、2、3、4合并为辽宁省,5、6、7、8合并为广东省。
city<-c(6,7,6,2,2,6,2,1,5,7,2,1,1,6,1,3,8,8,1,1)
province<-rep(0,20) #把0重复20遍
province[which(city>4)]=1
province
2 数据归约
数据归约主要是为了压缩数据量,原数据可以用来得到数据集的归约表示,它接近于保持原数据的完整性,但数据量比原数据小得多,与非归约数据相比,在归约的数据上进行挖掘,所需的时间和内存资源更少,挖掘将更有效,并产生相同或几乎相同的分析结果。常用维归约、数值归约等方法实现。
维归约指通过减少属性的方式压缩数据量,通过移除不相关的属性,可以提高模型效率。维归约的方法很多,其中:AIC 准则可以通过选择最优模型来选择属性;LASSO通过一定约束条件选择变量;分类树、随机森林通过对分类效果的影响大小筛选属性;小波变换、主成分分析通过把原数据变换或投影到较小的空间来降低维数。
AIC准则是赤池信息准则的简称,通常用来评价模型的复杂度和拟合效果,其计算公式为:
其中L为似然函数,代表模型的精确度,k为参数的数量,意味着模型的准确性。当L越大时,模型拟合效果越精确,当k越小时,模型越简洁,因此AIC兼顾了模型的精确度和简洁性,适合用来对模型进行选择。
使用AIC准则进行模型变量选择时,AIC最小的模型即为最优。
以 LASSO为例对其维归约进行阐述。
在R中可以使用glmnet程序包中的glmnet()函数实现对不同分布数据进行LASSO变量选择:
install.packages("glmnet")
library("glmnet")
x<-matrix(rnorm(100*20),100,20) #生成自变量,为20列正态随机数
y<-rnorm(100) #生成一列随机数作为因变量
fit1<-glmnet(x,y) #广义线性回归,自变量未分组的,默认未LASSO
b<-coef(fit1,s=0.01) # s代表λ值,随着λ减小,约束放宽,筛选的变量越多
b
predict(fit1,newx<-x[1:10,],s<-c(0.01,0.005)) # λ分别未0.01和0.005情况下的预测值
对于LASSO方法,随着入的减小,约束放松,进入模型的变量增多,当模型拟合值与惩罚函数之和最小时对应的入选择的变量即为最能代表数据集的变量。