关于数据挖掘:拓端tecdatR语言线性判别分析LDA二次判别分析QDA和正则判别分析RDA

10次阅读

共计 3831 个字符,预计需要花费 10 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=5689

原文出处:拓端数据部落公众号

判别分析包含可用于分类和降维的办法。线性判别分析(LDA)特地受欢迎,因为它既是分类器又是降维技术。二次判别分析(QDA)是 LDA 的变体,容许数据的非线性拆散。最初,正则化判别分析(RDA)是 LDA 和 QDA 之间的折衷。

本文次要关注 LDA,并探讨其在实践和实际中作为分类和可视化技术的用处。因为 QDA 和 RDA 是相干技术,我不久将形容它们的次要属性以及如何在 R 中应用它们。

线性判别分析

LDA 是一种分类和降维技术,能够从两个角度进行解释。第一个是解释是概率性的,第二个是更多的程序解释,归功于费舍尔。第一种解释对于了解 LDA 的假如是有用的。第二种解释能够更好地了解 LDA 如何升高维数。

Fisher 的 LDA 优化规范

Fisher 的 LDA 优化标准规定组的质心应尽可能扩散。这相当于找到一个线性组合ž= aŤX,使得 aT 绝对于类内方差的类间方差最大化。

LDA 模型的复杂性

LDA 的无效参数的数量能够通过以下形式导出。协方差矩阵不须要额定的参数,因为它曾经由质心定义。因为咱们须要预计 K 判别函数(以取得断定边界),这就产生了波及_p 个_元素的 KK 计算。因而,无效 LDA 参数的数量是_K__p_+(_K_-1)。

LDA 摘要

在这里,我总结了 LDA 的两个观点,并总结了该模型的次要个性。

概率论

LDA 应用贝叶斯规定来确定察看样本属于 k 类的后验概率。因为 LDA 的失常假如,后验由多元高斯定义,其协方差矩阵假设对于所有类是雷同的。新的点通过计算判别函数分类 δk(后验概率的枚举器)并返回类 k 具备最大概率 δk。判断变量能够通过类内和类间方差的特色合成来取得。

费舍尔的观点

依据 Fisher,LDA 能够了解为降维技术,其中每个间断变换是正交的并且绝对于类内方差最大化类间方差。此过程将特色空间转换为具备 K−1 维度的投射空间。在对输出数据进行扩大之后,能够通过在思考类先验的状况下确定投射空间中的最靠近的质心来对新点进行分类。

LDA 的个性

LDA 具备以下属性:

  • LDA 假如数据是高斯数据。更具体地说,它假设所有类共享雷同的协方差矩阵。
  • LDA 在 K−1 维子空间中找到线性决策边界。因而,如果自变量之间存在高阶相互作用,则不适宜。
  • LDA 非常适合于多类问题,然而当类散布不均衡时应该小心应用,因为依据察看到的计数来预计先验。因而,察看很少被分类为不常见的类别。
  • 与 PCA 相似,LDA 可用作降维技术。请留神,LDA 的转换实质上与 PCA 不同,因为 LDA 是一种思考后果的监督办法。

数据集

为了举例说明线性判别分析,咱们将应用语音辨认数据集。该数据集对于展现判别分析很有用,因为它波及五种不同的后果。

library(RCurl)
f <- getURL('phoneme.csv')
df <- read.csv(textConnection(f), header=T)
print(dim(df))
## \[1\] 4509  259

为了当前评估模型,咱们将每个样本调配到训练或测试集中:

#logical vector: TRUE if entry belongs to train set, FALSE else
train <- grepl("^train", df$speaker)
# remove non-feature columns
to.exclude <- c("row.names", "speaker""g")
feature.df <- df\[, !colnames(df) %<strong>in</strong>% to.exclude\]
test.set <- subset(feature.df, !train)
train.set <- subset(feature.df, train)
train.responses <- subset(df, train)$g
test.responses <- subset(df, !train)$g

在 R 中拟合 LDA 模型

咱们能够通过以下形式拟合 LDA 模型:

library(MASS)
lda.model <- lda(train.set, grouping = train.responses)

LDA 作为可视化技术

咱们能够通过在缩放数据上利用变换矩阵将训练数据转换为标准坐标。要取得与 predict.lda 函数返回的后果雷同的后果,咱们须要首先围绕加权均匀数据居中:

## \[1\] TRUE

咱们能够应用前两个判断变量来可视化数据:

绘制两个 LDA 维度中的数据显示三个集群:

  • 群集 1(左)由_aa_和_ao_音素组成
  • 群集 2(右下角)由_dcl_和_iy_音素组成
  • 群集 3(右上角)由_sh_音素组成

这表明两个维度不足以辨别所有 5 个类别。然而,聚类表明能够十分好地区分彼此充沛不同的音素。

咱们还能够应用 plot.lda 函数绘制训练数据到所有判断变量对的映射,其中_dimen_参数可用于指定所思考的维数:

为了可视化组的质心,咱们能够创立自定义图:

解释后验概率

除了将数据转换为由重量_x_提供的判断变量之外,预测函数还给出后验概率,其能够用于分类器的进一步解释。例如:

## \[1\] "Posterior of predicted class'sh'is: 1"
##        aa    ao   dcl    iy    sh
## aa  0.797 0.203 0.000 0.000 0.000
## ao  0.123 0.877 0.000 0.000 0.000
## dcl 0.000 0.000 0.985 0.014 0.002
## iy  0.000 0.000 0.001 0.999 0.000
## sh  0.000 0.000 0.000 0.000 1.000

各个班级的后验表格表明该模型对音素_aa_和_ao_最不确定,这与咱们对可视化的冀望统一。

LDA 作为分类器

如前所述,LDA 的益处是咱们能够抉择用于分类的标准变量的数量。在这里,咱们仍将通过应用多达四个标准变量进行分类来展现降级 LDA 的应用。

##   Rank Accuracy
## 1    1     0.51
## 2    2     0.71
## 3    3     0.86
## 4    4     0.92

正如从变换空间的视觉摸索所预期的那样,测试精度随着每个附加维度而减少。因为具备四维的 LDA 取得最大精度,咱们将决定应用所有判断坐标进行分类。

为了解释模型,咱们能够可视化 分类器的性能:

在图中,预期的音素以不同的色彩显示,而模型预测通过不同的符号显示。具备 100%准确度的模型将为每种色彩调配单个符号。

二次判别分析

QDA 是 LDA 的变体,其中针对每类察看预计单个协方差矩阵。如果当时晓得个别类别体现出不同的协方差,则 QDA 特地有用。QDA 的毛病是它不能用作降维技术。

因为 QDA 预计每个类的协方差矩阵,因而它具备比 LDA 更多的无效参数。咱们能够通过以下形式得出参数的数量。

因而,QDA 参数的无效数量是ķ- 1 + K.p + K.p(p + 1)2K−1+Kp+Kp(p+1)2。

因为 QDA 参数的数量在 pp 是二次的,因而当特色空间很大时,应小心应用 QDA。

QDA 在 R

咱们能够通过以下形式执行 QDA:

的 QDA 和 LDA 对象之间的次要区别是,QDA 具备 p×pp×p 的变换矩阵对于每个类 k∈{1,…,K}k∈{1,…,K}。这些矩阵确保组内协方差矩阵是球形的,但不会导致子空间减小。因而,QDA 不能用作可视化技术。

让咱们确定 QDA 在音素数据集上是否优于 LDA:

## \[1\] "Accuracy of QDA is: 0.84"
QDA 的准确度略低于全级 LDA 的准确度。这可能表明独特协方差的假如适宜于该数据集。

标准的判别分析

因为 RDA 是一种正则化技术,因而当存在许多潜在相干的特色时。当初让咱们评估音素数据集上的 RDA。

R 中的 RDA

rda.preds <- predict(rda.model, t(train.set), train.responses, t(test.set))

# determine performance for each alpha
rda.perf <- vector(, dim(rda.preds)\[1\])
for(i in seq(dim(rda.preds)\[1\])) {
    <span style="color:#888888"># performance for each gamma</span>
    res <- apply(rda.preds\[i,,\], 1, function(x) length(which(x == as.numeric(test.responses))) / length(test.responses))
    rda.perf\[\[i\]\] <- res
}
rda.perf <- do.call(rbind, rda.perf)
rownames(rda.perf) <- alphas

论断

判别分析对于多类问题特地有用。LDA 十分易于了解,因为它能够缩小维数。应用 QDA,能够建模非线性关系。RDA 是一种正则化判别分析技术,对大量特色特地有用。

 如果您有任何疑难,请在上面发表评论。

正文完
 0