判别分析--R中的实现、核心函数

R中的实现

1 相关软件包

R中的实现主要涉及4个软件包中的相关函数,它们依次为MASS.klaR、class和 kknn。

其中,MASS包的名称为Modern Applied Statistics with S的缩写,即S语言的现代应用统计,

该包中含有大量实用而先进的统计技术函数及适用数据集;klaR 与class 都主要用于分类技术,其中 klaR还含有若干用于可视化技术的函数;而kknn中则是基于有权重K最邻近原理的分类、回归及聚类技术的相关函数。

 判别分析--R中的实现、核心函数

2  核心函数

(1) lda()函数

我们从上表知道,lda()函数是实现线性判别的核心函数,该函数有三种使用格式,在默认情况下,即使用对象为数据框data.frame时,其基本格式为:

lda (x,grouping, prior = proportions,tol = 1.0e-4, method,CV = FALSE,nu,...)

另有分别适用于公式formula形式及矩阵matrix形式的两种格式:

lda (formula, data, .. ., subset, na.action)

lda (x,grouping, .. ., subset,na.action)

其中,x为该函数将要处理的数据框 data.frame或数据矩阵 matrix;;formula则放置用于生成判别规则的公式,以y~x1+x2+x3格式呈现;;data和 subset都用于以formula为对象的函数格式中,分别用于指明该formula 中变量所来自的数据集名称及所纳入规则建立过程的样本;grouping 则指明每个观测样本所属类别;;prior可设置各类别的先验概率,在无设置情况下,R默认取训练集中各类别样本的比例;tol用于保证判别效果,可通过设置筛选变量,默认取0.0001;na.action用于选择对于缺失值的处理,默认情况下,若有缺失值,则该函数无法运行,当更改设置为na.omit时,则自动删除在用于判别的特征变量中含有缺失值的观测样本。

(2) qda()函数

该函数同lda()一样,也有着三种分别用于数据框、公式和矩阵对象的函数格式,默认(数据框为对象)格式为:

qda(x,grouping,prior = proportions, method,CV = FALSE,nu,...)

适用于公式及矩阵形式的两种格式分别为:

qda (formula, data, ..., subset,na.action)

qda (x, grouping, ..., subset, na.action)

(3) NaiveBayes()函数

该函数有两种使用格式,一种为默认情况:

NaiveBayes(x,grouping,prior,usekernel = FALSE,fL= 0, ...)

当对象为公式时,则取:

NaiveBayes(formula,data,..., subset,na.action = na.pass)

其中的x、grouping、prior、formula、data 及 subset参数不再赘述。需要注意的是,虽该函数中也有na.action参数,但与lda()和qda()中的不同,此处在默认情况下为na.pass,表示不将缺失值纳入计算,并不会导致函数无法运行,当取值为na.omit时则与lda()函数相同,表示删除相应的含有缺失值的观测样本。

另外,usekernel参数用于选择函数计算过程中,密度估计所采用的算法,默认时取FALSE,表示使用标准密度估计,也可通过取值为TRUE,选择使用核密度估计法。

fL用于设置进行拉普拉斯修正(Laplace Correction)的参数值,默认取0,即不进行修正,该修正过程在数据量较小的情况下十分必要。这是因为朴素贝叶斯方法的一个致命缺点在于对稀疏数据问题过于敏感,它以各特征变量条件独立为前提,因此使用相乘的方式来计算所需结果,若其中任一项由于数据集中不存在满足条件的样本,使得该项等于0,都会导致整体乘积结果为0,得到无效判别结果。因此,为了解决这个问题,拉普拉斯修正就可以给未出现的特征值,赋予一个“小”的值而不是0。

(4) knn(函数

该函数的基本格式如下:

knn (train,test,cl, k = 1, 1 = 0, prob = FALSE,use.all = TRUE)

首knn()函数默认选择欧氏距离来寻找所需的K的最近样本,在可变参数中,train和 test参数分别代表训练集和测试集; cl用于放置训练集中各已知类别样本的类别取值;k为控制最近邻域大小的参数,1设置得到确切判别结果所需满足的最少票数。prob控制输出“胜出”类别的得票比例,比如 k=10时,若其中有8个属于类别1,2个属于类别2,类别1则为“胜出”类别,且 prob取TRUE时,可输出该待判样本所对应的 prob值为8/10=0.8; use.all用于选择再出现“结点”时的处理方式,所谓结点即指距离待判样本第K近的已知样本不止一个,比如,已知样本i和j与待判样本n的距离相等,都刚好第K近,那么当use.all 默认取TRUE时就将i和j都纳入判别过程,这时n的K近邻就有K+1个样本,若use.all取FALSE,则R软件会在i与j中随机选出一个以保证K近邻中刚好有K个样本。

(5) kknn()函数

该函数的基本格式如下。

kknn (formula = formula(train), train,test,na.action = na.omit(),k = 7,distance "2, kernel = "optimal", ykernel = NOLL,scale=TRUE, contrasts = c('unordered’=

"contr.dummy" , ordered = "contr.ordinal"))

其中 formula、train、test等主要参数在之前的各函数中都已说明。distance参数用于设定选择计算样本间距离的具体方法,通过设定明氏距离(Minkowski Distance)中的参数来实现,取1或2时的明氏距离是最为常用的,参数取⒉即为欧氏距离,而取1时则为曼哈顿距离,当取无穷时的极限情况下,可以得到切比雪夫距离。

上一篇:【雷达通信】基于matlab Omiga-K算法SAR回波生成和成像【含Matlab源码 1184期】


下一篇:EUV极紫外光刻技术