数理统计:鸢尾花数据的聚类分析和判别分析

鸢尾花数据的聚类分析和判别分析


摘要:本文基于鸢尾花数据的公开数据集,根据鸢尾花的萼片长度和宽度,花瓣的长度和宽度,对鸢尾花的类别归属进行聚类分析和判别分析。本文使用 R 语言,对鸢尾花的种类进行了聚类分析,并分别使用三种判别分析方法,距离判别法、Bayes 判别法和 Fisher 判别法对鸢尾花的种类归属进行了判别分析。在讨论中,对三个判别模型的判别效果进行了评价,最后使用三个判别模型根据鸢尾花的属性对其类别归属进行了预测。

关键字:聚类分析,距离判别,Bayes 判别,Fisher 判别,分类


引言

鸢尾花有很多种类,有时肉眼也难以辨别,需要专业的知识才能对其所属的种类进行判断。因此研究鸢尾花的分类,根据鸢尾花的某些属性,建立有效的数学模型,对鸢尾花的种类进行分类就显得十分重要。

本文使用鸢尾花的公开数据集,其使用了鸢尾花的萼片长度和宽度,花瓣的长度和宽度等属性,作为鸢尾花种类归属的判别依据。在数据集中,共包含三个种类的鸢尾花,其中每个种类的鸢尾花包含50条数据。在本文的研究和分析中,从各个种类的鸢尾花中选取150条数据进行模型的建立和分析,并使用全部的训练数据进行鸢尾花的种类的分类预测,从而对模型的正确性进行分析。

在现实问题中,对分类问题的分析可以大致分为两类:聚类分析和判别分析。这两者有一个明显的区别,那就是聚类分析是无监督分类,而判别分析是监督分类。判别分析的前提是类别已确定,由已确定的类别及相关数据来拟合模型,从而用模型去预测某一样本点所属的类别。但是聚类分析是对样本进行分类,在聚类分析之前是不知道关于类别的相关信息的,通过模型的拟合去给数据分类,这样我们会对数据有一个整体的印象。当然可以根据聚类的结果来预测新样本点所属的类别,但是判别分析往往可以得到比聚类分析更加精细的分类结果。

在本文的研究中,首先使用聚类分析对数据的整体分类情况有一个大致的了解,后使用三种判别分析方法对数据的分类进行分析。

另外,根据判别总体的数目,判别分析可以分为两个总体的判别分析,和多个总体的判别分析。在本文的研究中,共有三个鸢尾花的类别,所以属于多个总体的判别分析。

聚类分析

对研究对象进行适当的分类,进而发现其规律性,是人们认识世界的一种基本方法。研究怎样对事物进行合理分类的统计方法称为聚类分析。依据分类对象的不同,可以把聚类分析分为Q型聚类和R型聚类。其中Q型聚类是指对样本进行聚类,R型聚类是指对变量进行聚类。

聚类分析的基本原理是将某种性质相似的对象归于同一类,而不同的类之间则存在较大的差异。为此,首先需要能刻画各个变量之间或者各个样本之间的相似性,Q型聚类一般使用"距离"度量样本点之间的相似性,R型聚类一般使用"相似系数"作为变量相似性的度量。而定义样本点之间的距离可以采用欧式距离、Minkowski 距离、马氏距离、Lance 距离等测度,定义各变量之间的相似系数则可以采用样本相关系数、夹角余弦等测度。

系统聚类法是最常用的一种聚类方法。初始时先把要归类的n个对象各自视为一类,然后逐渐把关系最密切的两个类合并成一个新类,直到最后把n个对象都归为一类时停止。

在本文的聚类分析中,使用系统聚类方法进行聚类分析。

判别分析

设样本x可能来自于m个总体,根据样本x的观察值判定其归属,这种统计方法称为判别分析。

距离判别法

距离判别的基本原理是:首先对样本到总体之间的距离进行合理规定,然后依据就近的原则判定样本的归属。为此,首先需要定义合理的距离概念。

最简单的距离定义欧氏距离,其定义如下:

d ( x , y ) = ∑ i = 1 n ( x i − y y ) 2 (1) d(x, y) = \sqrt{\sum^n_{i=1}(x_i-y_y)^2} \tag{1} d(x,y)=i=1n(xiyy)2 (1)

但是欧式距离有两个缺点:

(1)各项指标的量纲不同时,其平方和的意义不明。

(2)x与y之间的距离会因各项指标标度单位的变化而变化。

为了克服欧式距离的上述缺陷,可进行无量纲化,由此引入马氏距离,其定义如下:

d ( x , y ) = ( x − y ) ′ Σ − 1 ( x − y ) (2) d(x, y) = \sqrt{(x-y)^{'}Σ^{-1}(x-y)} \tag{2} d(x,y)=(xy)Σ1(xy) (2)

马氏距离有以下三个特点:

(1)当 Σ = I p Σ=I_p Σ=Ip,即总体x的各项指标相互独立且方差相同时,马氏距离即为欧氏距离。

(2)马氏距离是将x和y经过标准化后的欧式距离。

(3)马氏距离不受变量的量纲的影响,是一个无量纲的量。

在实际应用中,总体均值及协方差矩阵一般都是未知的,可以使用样本均值和样本协方差矩阵作为其估计。样本均值和样本协方差矩阵的无偏估计为:

μ ^ j = 1 n j ∑ i = 1 n x i j , Σ ^ j = 1 n j − 1 ∑ i = 1 n ( x i j − x ‾ ) ( x i j − x ‾ ) ′ (3) \hat μ_j = \frac{1}{n_j} \sum^n_{i=1}x_{ij}, \hat Σ_j = \frac{1}{n_j-1} \sum^n_{i=1}(x_{ij}-\overline x)(x_{ij}-\overline x)^{'} \tag{3} μ^j=nj1i=1nxij,Σ^j=nj11i=1n(xijx)(xijx)(3)

Bayes 判别法

距离判别法易于理解,计算简单,且可以不涉及总体的分布类型,因此适用面很广。但是这种方法的不足,在于未考虑各个总体各自出现概率的大小,同时也未涉及错判所造成损失的影响。

在实际情况中,在判断一个样品的归属时,既要考虑各个总体出现的概率大小,还需考虑错判所造成的损失影响。基于以上考虑,提出了一种使用先验概率和损失函数的判别方法,即 Bayes 判别法。

设有m个总体 G 1 , G 2 , … … , G m G_1, G_2, ……, G_m G1,G2,,Gm,他们的密度函数 f 1 ( x ) , f 2 ( x ) , … … , f m ( x ) f_1(x), f_2(x), ……, f_m(x) f1(x),f2(x),,fm(x)是互不相同的。并且,假设m个总体各自发生的概率分别为 q 1 , q 2 , … … , q m q_1, q_2, ……, q_m q1,q2,,qm,称其为先验概率。

用 C(j|i) 表示将本来属于总体 G i G_i Gi的样品x错判为属于总体 G j G_j Gj造成的损失,且由于正确判断时无损失,即 C(i|i)=0。

对于判别规则,可以看做是对欧式空间的一个划分,即为 R 1 , R 2 , … … , R m R_1, R_2, ……, R_m R1,R2,,Rm,且满足任意两个划分的交集为空集,所有划分的并集为全集,将判别规则简记为 R = ( R 1 , R 2 , … … , R m ) R=(R_1, R_2, ……, R_m) R=(R1,R2,,Rm)

错判概率可表示为:

P ( j ∣ i , R ) = ∫ R j f i ( x ) d x , i ≠ j , i , j = 1 , 2 , … … , m (4) P(j|i, R) = \int_{R_j}f_i(x)dx, i ≠ j, i,j = 1,2,……,m \tag{4} P(ji,R)=Rjfi(x)dx,i=j,i,j=1,2,,m(4)

由m个总体的先验概率,通过判别规则R进行判别可能造成的总平均错判损失为:

E C M ( R ) = ∑ i = 1 m q i ∑ j = 1 m C ( j ∣ i ) P ( j ∣ i , R ) (5) ECM(R) = \sum^m_{i=1}q_i \sum^m_{j=1} C(j|i) P(j|i, R) \tag{5} ECM(R)=i=1mqij=1mC(ji)P(ji,R)(5)

其中 ECM 为 Expected Cost of Misclassification,平均判别代价的缩写。

使 ECM 损失最小的判别规则,即为 Bayes 判别规则。

Fisher 判别法

在距离判别分析和 Bayes 判别分析中,若两个总体服从协方差阵相同的正态分布,则可以导出线性判别函数。对一般的总体,也可以导出类似的线性判别函数,Fisher 判别分析就是这样一种利用投影,借助方差分析思想来导出判别函数的方法。Fisher 判别实际上也是一种降维处理方法。

设有m个总体 G 1 , G 2 , … … , G m G_1, G_2, ……, G_m G1,G2,,Gm,其相应的总体均值和协方差阵分别为 μ 1 , μ 2 , … … , μ m μ_1, μ_2, ……, μ_m μ1,μ2,,μm Σ 1 , Σ 2 , … … , Σ m Σ_1, Σ_2, ……, Σ_m Σ1,Σ2,,Σm。考虑x的线性函数 y = a ′ x y=a^{'}x y=ax,其中a是待定向量。在几何上,可以将y看成是x在向量a方向上的投影,通过对y的判别,即可实现对x的分类。

在方差分析中,其基本思想是将所有数据的总离差平方和分解成组内平方和和组间平方和,使用两者的比值大小来衡量总体间的差异大小。令:

B 0 = a ′ [ ∑ i = 1 m ( μ i − μ ‾ ) ( μ i − μ ‾ ) ′ ] a = a ′ B a (6) B_0 = a^{'}[\sum^m_{i=1} (μ_i-\overline μ) (μ_i-\overline μ)^{'}]a = a^{'}Ba \tag{6} B0=a[i=1m(μiμ)(μiμ)]a=aBa(6)

E 0 = a ′ ( ∑ i = 1 m Σ i ) a = a ′ E a (7) E_0 = a^{'}(\sum^m_{i=1} Σ_i)a = a^{'}Ea \tag{7} E0=a(i=1mΣi)a=aEa(7)

其中 B 0 B_0 B0为组间平方和, E 0 E_0 E0为组内平方和。为了使判别函数 y = a ′ x y=a^{'}x y=ax能较好地判别样品x归属,应选择a尽可能地将各个总体区分开来,使组间平方和尽可能地大,组内平方和尽可能地小,即选取a使两者的比值达到极大。

φ ( a ) = B 0 E 0 = a ′ B a a ′ E a (8) φ(a) = \frac{B_0}{E_0} = \frac{a^{'}Ba}{a^{'}Ea} \tag{8} φ(a)=E0B0=aEaaBa(8)

由于使式(8)达到极大的a值不唯一,可加约束条件 a ′ E a = 1 a^{'}Ea=1 aEa=1,即转化为在约束条件 a ′ E a = 1 a^{'}Ea=1 aEa=1下,求a使 φ ( a ) = a ′ B a φ(a) = a^{'}Ba φ(a)=aBa,达到极大,求解带约束条件极值问题常用的是 Lagrange 乘数法。

求得,λ是 E − 1 B E^{-1}B E1B的最大特征值,所对应的特征向量为α,则 α ′ E α = 1 α^{'}Eα = 1 αEα=1,且 m a x α ′ E α = 1 a ′ B a = α ′ B α = λ max_{α^{'}Eα = 1} a^{'}Ba = α^{'}Bα = λ maxαEα=1aBa=αBα=λ,则判别函数为 y = α ′ x y = α^{'}x y=αx.

其中最大特征值的判别函数为第一判别函数,如果只使用第一判别函数还不能很好地区分各个总体,还可以使用第二大特征值建立第二判别函数,依次类推。

此时,使用r个非零特征值,将原始数据x映射到互不相关的变量 y 1 , y 2 , … … , y r y_1, y_2, ……,y_r y1,y2,,yr来进行判别分析,即相当于把原始数据x的指标压缩成r维指标来进行判别。

逐步判别法

在实际问题中,很难确定哪些指标对于判别分析是主要的,哪些是次要的。考虑的指标过多,会引起计算量过大,而且很多对判别作用较小的指标会干扰视线、模糊认识。而考虑的指标过少,会使判别效果不好。因此,对有关指标变量进行适当筛选是一种很好的处理方法。

具有筛选变量能力的判别法统称为逐步判别法,在本文的实验和分析中未曾实验,故不再赘述。

判别效果的评价

一旦建立了判别法,就要对判别效果进行合理评价。一个好的判别方法,其错判概率应当很小,因此可以用错判概率作为衡量判别法优劣性的标准。以下介绍三种基于错判概率的判别方法,这些方法既不依赖于总体分布,又适合于任何判别法。

方法一:回报法。首先根据两个训练样本建立判别规则,然后对两个训练样本集中的样本逐个进行回报判别。回报法直观且容易计算,但是它往往低估错判概率,除非样本量很大。其根本原因是建立判别法和评价判别法使用的是同一样本。

方法二:交叉验证法。为了克服建立和评价判别法使用同一样本的缺陷,可将样本分成训练样本和验证样本。训练样本用于建立判别法,验证样本用于评价判别法。交叉验证法优于回报法,但是仍存在三个缺陷:(1)要求样本容量很大;(2)训练样本和验证样本的选择有很大的不确定性;(3)因为建立判别规则只使用了部分样本信息,所以有可能漏掉重要信息。

方法三:刀切法。每次剔除一个训练样本进行判别模型的建立,之后使用建立的判别规则对剔除的样本进行判别,重复上述过程直到对每个样本都进行了判别。这个方法优于回报法和交叉验证法,但是运算量较大。

在本文的研究和分析中,使用刀切法,最每个样本的正确性都进行了分类判别和预测。

判别法的优劣除了用错判概率来衡量外,在相当程度上还依赖于所考虑的两个总体之间的分离程度。直观上,两个总体离得越远,就越有可能建立有效的判别法。其中 Fisher 判别法就是基于最大分离原则的一种判别分析方法。


解决问题的方法和计算结果

聚类分析

在对鸢尾花数据集进行判别分析之前,先对数据集的整体进行聚类分析,对数据有一个整体的印象,首先加载 iris 数据集,观察数据集的结构,代码如下:

> # 导入数据
> attach(iris)
> # 查看数据结构
> str(iris)
'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
> 

可以看到,鸢尾花数据集中共包含150个样本数据,每条样本包含5个数据,分别为鸢尾花的萼片长度和宽度,花瓣的长度和宽度,和鸢尾花的种类。

首先对数据进行简单的分析,计算均值和标准差,而聚类分析为无监督分类,所以需要事先剔除分类属性,其代码如下:

> # 首先剔除标签数据
> data <- iris[, -5]
> # 然后计算均值和标准差
> mean <- sapply(data, mean)
> sd <- sapply(data, sd)
> mean
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 
> sd
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   0.8280661    0.4358663    1.7652982    0.7622377 
> 

之后使用层次聚类方法,对鸢尾花数据集进行聚类分析,由于欧式距离的量纲影响,需要先使用均值和方差对数据进行标准化,其代码如下:

# 将数据进行标准化
scaledata <- scale(data, center=mean, scale=sd)
# 计算欧式距离
dist <- dist(scaledata, method="euclidean")
# 使用 Ward 方法层次聚类
clustemodel <- hclust(dist, method='ward.D')
# 绘制层次聚类图
plot(clustemodel)

绘制出的层次聚类图如下:

在这里插入图片描述

在上图的层次聚类图中可以看出,鸢尾花的种类可以大致分为三部分。

判别分析和预测验证

下面使用三种判别分析方法,分别对鸢尾花的种类进行判别分析。

距离判别法

距离判别法需要使用 R 语言的 wmd() 函数,首先需要加载 WMDB 库,其代码如下:

> install.packages("WMDB")
试开URL’https://cran.rstudio.com/bin/macosx/contrib/4.0/WMDB_1.0.tgz'
Content type 'application/x-gzip' length 25581 bytes (24 KB)
==================================================
downloaded 24 KB


The downloaded binary packages are in
	/var/folders/hh/4qjnrh952nxd77kzd0b4dv2m0000gn/T//RtmpmztD7B/downloaded_packages
> 
> library(WMDB)
> 

将 iris 数据集分为数据和标签两部分,调用 wmd() 函数进行距离判别分析,其代码如下:

> data = iris[, 1:4]
> data_label = gl(3, 50)
> wmd(data, data_label)
      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
blong 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
      35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
blong  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2
      66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
blong  2  2  2  3  2  2  2  3  2  2  2  2  3  2  2  2  2  2  3  2  2  2  2  2  2  2  2  2  2  2  2
      97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
blong  2  2  2   2   3   3   3   3   3   3   2   3   3   3   3   3   3   3   3   3   3   3   3   3
      121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
blong   3   3   3   3   3   3   3   3   3   2   3   3   3   2   2   3   3   3   3   3   3   3   3
      144 145 146 147 148 149 150
blong   3   3   3   3   3   3   3
[1] "num of wrong judgement"
[1]  69  73  78  84 107 130 134 135
[1] "samples divided to"
[1] 3 3 3 3 2 2 2 2
[1] "samples actually belongs to"
[1] 2 2 2 2 3 3 3 3
Levels: 1 2 3
[1] "percent of right judgement"
[1] 0.9466667
> 

Bayes 判别法

Bayes 判别法需要使用 R 语言的 NaiveBayes() 函数,首先需要加载 klaR 库,其代码如下:

> install.packages("klaR")
also installing the dependencies ‘clipr’, ‘Rcpp’, ‘BH’, ‘assertthat’, ‘fansi’, ‘R.methodsS3’, ‘R.oo’, ‘R.utils’, ‘ellipsis’, ‘pkgconfig’, ‘forcats’, ‘hms’, ‘readr’, ‘tidyselect’, ‘generics’, ‘utf8’, ‘cpp11’, ‘httpuv’, ‘mime’, ‘jsonlite’, ‘xtable’, ‘digest’, ‘R6’, ‘sourcetools’, ‘later’, ‘promises’, ‘crayon’, ‘rlang’, ‘fastmap’, ‘withr’, ‘commonmark’, ‘glue’, ‘backports’, ‘cli’, ‘magrittr’, ‘purrr’, ‘R.cache’, ‘rematch2’, ‘rprojroot’, ‘tibble’, ‘xfun’, ‘e1071’, ‘base64enc’, ‘haven’, ‘dplyr’, ‘lifecycle’, ‘vctrs’, ‘pillar’, ‘tidyr’, ‘shiny’, ‘miniUI’, ‘rstudioapi’, ‘highr’, ‘styler’, ‘classInt’, ‘htmltools’, ‘labelled’, ‘combinat’, ‘questionr’


  There is a binary version available but the source version is later:
      binary source needs_compilation
vctrs  0.3.5  0.3.6              TRUE

Do you want to install from sources the package which needs compilation? (Yes/no/cancel) yes

> library("klaR")
载入需要的程辑包:MASS
> 

将 iris 数据集分为数据和标签两部分,调用 NaiveBayes() 函数进行距离判别分析,其代码如下:

> data = iris[, 1:4]
> data_label = gl(3, 50)
> bayes <- NaiveBayes(data, data_label)
> predict(bayes)
$class
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [48] 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [95] 2 2 2 2 2 2 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3
[142] 3 3 3 3 3 3 3 3 3
Levels: 1 2 3

Fisher 判别法

Fisher 判别法需要使用 R 语言的 lda() 函数,首先需要加载 MASS 库,其代码如下:

> library(MASS)
> 

调用 lda() 函数建立统计模型,其代码如下:

> fisher.mode <- lda(as.formula("Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width"), data=iris)
> fisher.mode
Call:
lda(as.formula("Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width"), 
    data = iris)

Prior probabilities of groups:
    setosa versicolor  virginica 
 0.3333333  0.3333333  0.3333333 

Group means:
           Sepal.Length Sepal.Width Petal.Length Petal.Width
setosa            5.006       3.428        1.462       0.246
versicolor        5.936       2.770        4.260       1.326
virginica         6.588       2.974        5.552       2.026

Coefficients of linear discriminants:
                    LD1         LD2
Sepal.Length  0.8293776  0.02410215
Sepal.Width   1.5344731  2.16452123
Petal.Length -2.2012117 -0.93192121
Petal.Width  -2.8104603  2.83918785

Proportion of trace:
   LD1    LD2 
0.9912 0.0088 
> 

使用 Fisher 模型进行分类标签的预测和验证,其代码如下:

> pre <- predict(fisher.mode, iris[, -5])
> 
> t <- table(pre$class, iris[, 5])
> sum(diag(t)) / sum(t)
[1] 0.98
>
> pre$class
  [1] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
  [9] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
 [17] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
 [25] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
 [33] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
 [41] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
 [49] setosa     setosa     versicolor versicolor versicolor versicolor versicolor versicolor
 [57] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
 [65] versicolor versicolor versicolor versicolor versicolor versicolor virginica  versicolor
 [73] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
 [81] versicolor versicolor versicolor virginica  versicolor versicolor versicolor versicolor
 [89] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
 [97] versicolor versicolor versicolor versicolor virginica  virginica  virginica  virginica 
[105] virginica  virginica  virginica  virginica  virginica  virginica  virginica  virginica 
[113] virginica  virginica  virginica  virginica  virginica  virginica  virginica  virginica 
[121] virginica  virginica  virginica  virginica  virginica  virginica  virginica  virginica 
[129] virginica  virginica  virginica  virginica  virginica  versicolor virginica  virginica 
[137] virginica  virginica  virginica  virginica  virginica  virginica  virginica  virginica 
[145] virginica  virginica  virginica  virginica  virginica  virginica 
Levels: setosa versicolor virginica
> t
            
             setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48         1
  virginica       0          2        49
> 

讨论

综上所述,使用以上的三种判别分析方法,其对鸢尾花的种类的预测分类结果的正确率均在 95% 以上。其中误判的样本主要分布在 versicolor 和 virginica 这两类,而对 setosa 种类的预测准确率接近 100%。

由聚类分析的数据也可以得出,将鸢尾花种类的变量剔除掉之后,整体数据聚成两类更好。这主要是因为 versicolor 和 virginica 这两类很难用花瓣和花萼来区分。而在判别分析中,我们在已知三类的情况下拟合模型来预测新样本所属的类别,其反映就是在判别分析中就是这两类的误判率较高,而聚类分析中就是这两个被聚成一个大类。

在这里插入图片描述


参考文献

[1] 鸢尾花数据集官网. https://archive.ics.uci.edu/ml/datasets/Iris
[2] 鸢尾花数据集. https://gist.github.com/curran/a08a1080b88344b0c8a7
[3] 孙海燕,周梦,李卫国,冯伟. 数理统计[M]. 北京:北京航空航天大学出版社, 2016.
[4] 方小敏,齐德胜,张文霖,冯伟. 谁说菜鸟不会数据分析(R 语言篇)[M]. 电子工 业出版社, 2020.

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页