【统计分析数学模型】判别分析(一):距离判别法

2024-02-23 00:04

本文主要是介绍【统计分析数学模型】判别分析(一):距离判别法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

【统计分析数学模型】判别分析(一):距离判别法

  • 一、判别分析
    • 1. 概述
    • 2. 判别分析的目标
    • 3. 分类
    • 4. 步骤
  • 二、距离判别法
  • 三、R语言实现距离判别法
    • 1. 加载数据集
    • 2. 计算相关系数矩阵
    • 3. 计算中心点
    • 4. Box M检验
    • 5. 计算协方差矩阵
    • 6. 计算马氏距离
    • 7. 混淆矩阵
    • 8. 判断正确率


一、判别分析

1. 概述

判别分析(discriminant analysis) 是研究样品所属类别的一种统计分析方法。

判别分析与聚类分析都是研究分类问题,不同的是,在聚类分析中,所有样品事先都不知道属于哪一类,也不知道一共有多少类;而在判别分析中,用于建立判别准则的样品的分类是已知的,判别的目的是根据建立的分类准则判断新的样品的分类。

在机器学习中,聚类分析属于无监督学习(unsupervised learning),判别分析属于有监督学习(supervised learning)。

2. 判别分析的目标

在医学研究和临床实践中,经常需要根据观察资料对所研究的对象进行判别归类。判别分析的目标有两类:

  1. 目标1(预测方面):分类(或分配)
    在已知历史上用某些方法已把研究对象分成若干组(亦称类或总体)的情况下,来判定新的观测样品应归属的组别。
  2. 目标2(描述方面)分离
    就是用图形(通常二维,有时三维或一维,一般通过降维实现)方法或代数方法描述来自各组的样品之间的差异性,最大限度地分离各组。

例如:
判别分类的例子:非溃疡胃病组(胃功能紊乱者)与控制组(“正常”者).
测量变量:焦虑、依赖性、罪恶感、完美主义的量度

3. 分类

根据建立的判别准则的不同,判别分析可分为:

  • 距离判别
  • Fisher判别
  • Bayes判别
  • 机器学习的各种分类算法
  • ……

其中,距离判别和Bayes判别只能用于分类。Fisher判别即可用于分类,也可用于分离,且更多地用于后者。
这些都是基于判别变量为定量变量的。

4. 步骤

  1. 收集训练样本数据(training dataset)和测试样本数据(testing dataset):收集一批分类明确的训练样品和测试样品,根据专业知识测量每个样品的分类指标。
  2. 建立判别准则:根据专业问题的特点和资料的性质选择判别方法,使用训练样本建立判别函数。
  3. 考核判别效果:用回代法和前瞻法考核所建立函数的判别效果。

回代法又叫内部验证,它是将训练样本中每个样品的各项指标回代入所建立的判别函数中得到判定类别,并将此分类与原类别进行比较,计算判断正确率(符合率)。

前瞻法也叫外部验证,它是将所建立的判别准则用于测试样本集,得到测试样本的分类,并与测试样本的原始分类作比较计算正确率。

只有当回判正确率和前瞻正确率都比较高时,才可以认为所建立的判别准则是合适的。前者衡量的是判别模型的拟合优度,后者衡量的是判别模型的预测准确度

二、距离判别法

距离判别法的原理简单而朴素,即根据样品到各类中心点(均值向量)的距离,按距离最近准则进行判别归类。

因为马氏距离不受指标的量纲和指标之间多重相关性的影响,所以在距离判别中最为常用。

三、R语言实现距离判别法

以mclust包里的数据集thyroid为例说明距离判别法的原理和应用。

1. 加载数据集

将其中的分类变量Diagnosis的3个水平重新按照在数据集里出现的顺序排序。

data(thyroid,package="mclust")
thyroid$Diagnosis<-factor(thyroid$Diagnosis, levels=c("Normal","Hyper","Hypo"))

2. 计算相关系数矩阵

通过相关系数矩阵探索5项检测指标之间的相关性:

cor(thyroid[,2:6])

运行结果如下:

> cor(thyroid[,2:6])RT3U         T4         T3        TSH       DTSH
RT3U  1.0000000 -0.4941624 -0.5369712  0.2903679  0.2963267
T4   -0.4941624  1.0000000  0.7186816 -0.4228445 -0.4099646
T3   -0.5369712  0.7186816  1.0000000 -0.2416412 -0.2273919
TSH   0.2903679 -0.4228445 -0.2416412  1.0000000  0.4975449
DTSH  0.2963267 -0.4099646 -0.2273919  0.4975449  1.0000000

5项检测指标之间存在较强的相关关系。
因此,需要用马氏距离计算各对象之间的距离。

3. 计算中心点

分别计算3组患者的5项检测指标的均值,作为各个类别的中心点:

m.Normal<-colMeans(thyroid[1:150,2:6])
m.Normalm.Hyper<-colMeans(thyroid[151:185,2:6])
m.Hyperm.Hypo<-colMeans(thyroid[186:215,2:6])
m.Hypo

运行结果如下:

> m.NormalRT3U         T4         T3        TSH       DTSH 
110.513333   9.192667   1.731333   1.316667   2.516667 > m.HyperRT3U         T4         T3        TSH       DTSH 
95.2857143 17.7457143  4.2628571  0.9742857 -0.0200000 > m.HypoRT3U         T4         T3        TSH       DTSH 
121.700000   3.600000   1.063333  12.920000  17.533333 

4. Box M检验

biotools包里的 boxM() 函数可以实现 Box M检验:

Box M检验要求变量服从多元正态分布,其零假设是各协方差矩阵相等。如果该检验结果不显著,则认为各类总体的协方差矩阵相同,此时可以用所有对象计算的协方差矩阵作为总体协方差矩阵的估计值。

library(biotools)
boxM(thyroid[,-1],thyroid[,1])

运行结果如下:

> boxM(thyroid[,-1],thyroid[,1])Box's M-test for Homogeneity of Covariance Matricesdata:  thyroid[, -1]
Chi-Sq (approx.) = 1512.6, df = 30, p-value < 2.2e-16

检验结果表明,3组患者的5项检测指标协方差矩阵之间的差异有统计学意义(P <0.001)。因此,分别计算3组的协方差矩阵。

5. 计算协方差矩阵

v.Normal<-cov(thyroid[1:150,2:6])
v.Normalv.Hyper<-cov(thyroid[151:185,2:6])
v.Hyperv.Hypo<-cov(thyroid[186:215,2:6])
v.Hypo

结果如下:

> v.NormalRT3U           T4          T3          TSH        DTSH
RT3U 65.6072036  4.843387025 1.138841163 -0.186465324  3.06252796
T4    4.8433870  4.198804922 0.252781655 -0.009340045 -0.62256152
T3    1.1388412  0.252781655 0.225924385  0.002158837  0.06262864
TSH  -0.1864653 -0.009340045 0.002158837  0.247572707  0.08227069
DTSH  3.0625280 -0.622561521 0.062628635  0.082270694  3.90247204> v.HyperRT3U            T4           T3         TSH          DTSH
RT3U 352.0336134 -2.157815e+01 -22.72731092 -0.79537815  1.4205882353
T4   -21.5781513  1.731314e+01   4.21174790  0.32709244  0.0009411765
T3   -22.7273109  4.211748e+00   5.08122689  0.07401681 -0.0284117647
TSH   -0.7953782  3.270924e-01   0.07401681  0.16020168 -0.0252352941
DTSH   1.4205882  9.411765e-04  -0.02841176 -0.02523529  0.0728235294 > v.HypoRT3U          T4         T3        TSH       DTSH
RT3U 122.286207  -7.0137931 -1.0596552  23.006207 -17.262069
T4    -7.013793   3.0848276  0.5755172 -12.250000   9.207241
T3    -1.059655   0.5755172  0.3086092  -2.823034   2.593333
TSH   23.006207 -12.2500000 -2.8230345 153.447862  19.091034
DTSH -17.262069   9.2072414  2.5933333  19.091034 240.445057

6. 计算马氏距离

用函数mahalanobis()计算每个对象与3组患者中心点的距离。例如,计算第1个对象与3组患者中心点的马氏距离:

mahalanobis(thyroid[1,2:6],m.Normal,v.Normal)
mahalanobis(thyroid[1,2:6],m.Hyper,v.Hyper)
mahalanobis(thyroid[1,2:6],m.Hypo,v.Hypo)

运行结果:

> mahalanobis(thyroid[1,2:6],m.Normal,v.Normal)1 
2.601487 
> 
> mahalanobis(thyroid[1,2:6],m.Hyper,v.Hyper)1 
122.2996 
> 
> mahalanobis(thyroid[1,2:6],m.Hypo,v.Hypo)1 
25.30864 

结果表明,第1个对象与甲状腺正常组的中心点距离最近,因此将其判为“Normal”。类似地,我们可以用这种方法对其余所有对象做出判断。

计算所有对象与3个中心点的距离:

d.Normal<-mahalanobis(thyroid[,2:6],m.Normal,v.Normal)
d.Hyper<-mahalanobis(thyroid[,2:6],m.Hyper,v.Hyper)
d.Hypo<-mahalanobis(thyroid[,2:6],m.Hypo,v.Hypo)
d<-data.frame(d.Normal,d.Hyper,d.Hypo)
head(d)
> head(d)d.Normal    d.Hyper    d.Hypo
1  2.601487 122.299578 25.308641
2 12.722546 599.864349 30.202970
3  7.619211  10.949499 60.943138
4  4.747232  54.121522  4.266343
5  3.300288   9.766824 10.065090
6  8.572603 826.207585  7.183526

将3个向量放入一个数据框中,找出数据框d的每一行中哪一个最小:

index<-apply(d,MARGIN=1,FUN=which.min)
index
type<-factor(index,labels=c("Normal","Hyper","Hypo"))
type
> index[1] 1 1 1 3 1 3 1 1 1 1 3 1 1 3 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1[38] 1 1 1 1 1 1 1 1 1 1 1 2 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1[75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1
[112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1
[149] 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[186] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3> type[1] Normal Normal Normal Hypo   Normal Hypo   Normal Normal Normal Normal[11] Hypo   Normal Normal Hypo   Normal Normal Normal Normal Normal Normal[21] Normal Hyper  Hyper  Normal Normal Normal Normal Normal Normal Normal[31] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal[41] Normal Normal Normal Normal Normal Normal Normal Normal Hyper  Hypo  [51] Hyper  Normal Normal Normal Normal Normal Normal Normal Normal Normal[61] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal[71] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal[81] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal[91] Normal Hypo   Normal Normal Normal Normal Normal Normal Normal Normal
[101] Normal Normal Normal Hypo   Normal Normal Normal Normal Normal Normal
[111] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[121] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[131] Normal Hyper  Normal Normal Normal Normal Normal Normal Normal Normal
[141] Hypo   Normal Normal Normal Normal Normal Normal Normal Normal Normal
[151] Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper 
[161] Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper 
[171] Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper 
[181] Hyper  Hyper  Hyper  Hyper  Hyper  Hypo   Hypo   Hypo   Hypo   Hypo  
[191] Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo  
[201] Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo  
[211] Hypo   Hypo   Hypo   Hypo   Hypo  
Levels: Normal Hyper Hypo

7. 混淆矩阵

借助判定类别与真实类别构成的列联表查看判别效果,即构建分类结果的混淆矩阵:

confusion.matrix<-table(type,thyroid$Diagnosis)
confusion.matrix

结果如下:

> confusion.matrixtype     Normal Hyper HypoNormal    137     0    0Hyper       5    35    0Hypo        8     0   30

结果表明,有5个Normal被错判为Hyper,8个Normal被错判为Hypo。

被错判的对象所处的行号:

which(type=="Hyper"&thyroid$Diagnosis=="Normal")
which(type=="Hypo"&thyroid$Diagnosis=="Normal")

8. 判断正确率

混淆矩阵对角线上的数字代表判断正确的数目,判断正确的总数为(202):

sum(diag(confusion.matrix))

因此,本示例回代法的判断正确率为202/215 ≈ 94%。

这篇关于【统计分析数学模型】判别分析(一):距离判别法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736932

相关文章

R语言统计分析——重复测量方差分析

参考资料:R语言实战【第2版】         所谓重复测量方差分析,即受试者被测量不止一次。本例使用数据集市co2数据集:因变量是二氧化碳吸收量(uptake),自变量是植物类型(Type)和七种水平的二氧化碳浓度(conc)。Type是组间因子,conc是组内因子。Type已经被存储为一个因子变量,还需要将conc转换为因子变量。分析过程如下: # 将conc变量转化为因子变量CO2$c

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

GraphPad Prism 10 for Mac/Win:高效统计分析与精美绘图的科学利器

GraphPad Prism 10 是一款专为科研工作者设计的强大统计分析与绘图软件,无论是Mac还是Windows用户,都能享受到其带来的便捷与高效。该软件广泛应用于生物医学研究、实验设计和数据分析领域,以其直观的操作界面、丰富的统计方法和多样化的图表样式,成为科学研究的得力助手。 数据处理与整理 GraphPad Prism 10 支持从多种数据源导入数据,如Excel、CSV文件及数据库

模拟退火求n个点到某点距离和最短

/*找出一个点使得这个店到n个点的最长距离最短,即求最小覆盖圆的半径用一个点往各个方向扩展,如果结果更优,则继续以当前步长扩展,否则缩小步长*/#include<stdio.h>#include<math.h>#include<string.h>const double pi = acos(-1.0);struct point {double x,y;}p[1010];int

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

(感知机-Perceptron)—有监督学习方法、非概率模型、判别模型、线性模型、参数化模型、批量学习、核方法

定义 假设输入空间(特征空间)是 χ \chi χ ⊆ R n \subseteq R^n ⊆Rn,输出空间是y = { + 1 , − 1 } =\{+1,-1 \} ={+1,−1} 。输入 x ∈ χ x \in \chi x∈χ表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ∈ y \in y∈y表示实例的类别。由输入空间到输出空间的如下函数: f ( x ) = s

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界框的敏感性以增加正样本数量上,并且需要设置一些固定的超参数。然而,更多的正样本并不一定会带来更好的检测结果,事实上,过多的正样本

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS

C/C++两点坐标求距离以及C++保留两位小数输出,秒了

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 3. 备注 1. 前言 依旧是带来一个练手的题目,目的就一个,方法千千万,通向终点的方式有很多种,没有谁与谁,我们都是为了成为更好的自己。 2. 正文 2.1 问题 题目描述: 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。 输入格式:

mysql5.6根据经纬度查询距离二

在MySQL 5.6中,您可以使用Haversine公式来根据经纬度查询距离。以下是一个示例SQL查询,它计算出所有点与给定点(经度lon和纬度lat)的距离,并按距离排序: SELECT id, (2 * 6378.137 * ASIN(SQRT(POW( SIN( PI( ) * ( $lng- `long` ) / 360 ), 2 ) + COS( PI( ) * $lat / 180