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

时间:2021-09-08
本文章向大家介绍判别分析--R中的实现、核心函数,主要包括判别分析--R中的实现、核心函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

R中的实现

相关软件包

R中的实现主要涉及4个软件包中的相关函数,它们依次为MASS.klaRclasskknn

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

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

2  核心函数

(1) lda()函数

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

lda (xgrouping, prior = proportionstol = 1.0e-4, methodCV = FALSEnu...)

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

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

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

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

(2) qda()函数

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

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

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

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

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

(3) NaiveBayes()函数

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

NaiveBayes(x,groupingprior,usekernel = FALSE,fL= 0, ...)

当对象为公式时,则取:

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

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

(5) kknn()函数

该函数的基本格式如下。

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

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

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

本文来自博客园,作者:zhang-X,转载请注明原文链接:https://www.cnblogs.com/YY-zhang/p/15244240.html

原文地址:https://www.cnblogs.com/YY-zhang/p/15244240.html