原文链接: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 elsetrain <- grepl("^train", df$speaker)# remove non-feature columnsto.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)$gtest.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 alpharda.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是一种正则化判别分析技术,对大量特色特地有用。

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