R语言——线性判别分析(LDA)
R语言——线性判别分析*
线性判别分析是一种经典的线性学习方法,在二分类问题上最早由Fisher在1936年提出,亦称Fisher线性判别。线性判别的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异样样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的直线上,再根据投影点的位置来确定新样本的类别 。
LDA与方差分析(ANOVA)和回归分析紧密相关,这两种分析方法也试图通过一些特征或测量值的线性组合来表示一个因变量。然而,方差分析使用类别自变量和连续数因变量,而判别分析连续自变量和类别因变量(即类标签)。逻辑回归和概率回归比方差分析更类似于LDA,因为他们也是用连续自变量来解释类别因变量的。LDA的基本假设是自变量是正态分布的,当这一假设无法满足时,在实际应用中更倾向于用上述的其他方法。LDA也与主成分分析(PCA)和因子分析紧密相关,它们都在寻找最佳解释数据的变量线性组合。LDA明确的尝试为数据类之间不同建立模型。 另一方面,PCA不考虑类的任何不同,因子分析是根据不同点而不是相同点来建立特征组合。判别的分析不同因子分析还在于,它不是一个相互依存技术:即必须区分出自变量和因变量(也称为准则变量)的不同。在对自变量每一次观察测量值都是连续量的时候,LDA能有效的起作用。当处理类别自变量时,与LDA相对应的技术称为判别反应分析。
下面对R语言实现过程详细介绍
1.导入数据并做初步处理
mydata <- read.csv("tongji.csv")
mydatamydata$Group <- as.factor(mydata$Group) #将Grop中的1,2转换成因子变量
attach(mydata)
2.观察数据分布情况
library(ggplot2) #导入包ggplot
ggplot(data = mydata , aes(x = height , y = weight , shape = Group ,color = Group)) 1. geom_point() + geom_text(aes(label = 性别) , vjust = -0.8) #画出散点图,初步观察数据分布情况
3. 建立判别函数
library(MASS) #导入包MASS
sexyLd <- lda(Group ~ height + weight , data = mydata) #建立判别函数1
sexyLd1 <- lda(Group ~ height + weight + Vital.capacity + sprint + Endurance.running
+ Sitting.body.flexion + jump + Sit.ups +point , data = mydata) #建立判别函数2
sexyLd #查看函数1结果
sexyLd1 #查看函数2结果> sexyLd
Call:
lda(Group ~ height + weight, data = mydata)Prior probabilities of groups:1 2
0.537415 0.462585 Group means:height weight
1 161.4253 52.95823
2 172.9287 66.36993Coefficients of linear discriminants:LD1
height 0.15748938
weight 0.02471315# 判别函数为y = 0.1575x1 + 0.02471x2> sexyLd1
Call:
lda(Group ~ height + weight + Vital.capacity + sprint + Endurance.running + Sitting.body.flexion + jump + Sit.ups + point, data = mydata)Prior probabilities of groups:1 2
0.537415 0.462585 Group means:height weight Vital.capacity sprint Endurance.running Sitting.body.flexion jump Sit.ups point
1 161.4253 52.95823 2756.569 8.898101 3.782278 18.22215 171.0633 39.556962 77.58165
2 172.9287 66.36993 4054.000 7.370588 4.044044 12.01985 226.2721 4.227941 69.18750Coefficients of linear discriminants:LD1
height 0.0326378585
weight -0.0121919891
Vital.capacity 0.0003658433
sprint -0.9165278712
Endurance.running -0.4659634284
Sitting.body.flexion -0.0017160164
jump 0.0297380110
Sit.ups -0.0724816461
point -0.1259426473# 判别函数为y = 0.0326x1 - 0.0122x2 + 0.0004x3 - 0.9165x4 - 0.4660x5 - 0.0017x6 + 0.0297x7 - 0.0725x8 - 0.1259x9
4.预测并原数据进行比较
sexyPredict <- predict(sexyLd) #根据线性函数模型预测所属类别
newGroup <- sexyPredict$class #预测的所属类的结果
cbind(mydata$Group , sexyPredict$x , newGroup) #显示预测前后分组结果 sexyPredict1 <- predict(sexyLd1) #根据线性函数模型预测所属类别
newGroup1 <- sexyPredict1$class #预测的所属类的结果
cbind(mydata$Group , sexyPredict1$x , newGroup1) #显示预测前后分组结果
5.对模型进行评价
tab <- table(mydata$Group , newGroup) #绘制混淆矩阵
tab
erro <- 1-sum(diag(prop.table(tab))) #计算误判率
erro
plot(tab) #可视化tab1 <- table(mydata$Group , newGroup1) #绘制混淆矩阵
tab1
erro1 <- 1-sum(diag(prop.table(tab1))) #计算误判率
erro1
plot(tab1) #可视化> tabnewGroup1 21 137 212 27 109> erro
[1] 0.1632653> tab1newGroup11 21 158 02 2 134
> erro1
[1] 0.006802721 #显然考虑的因素多了,判断率正确率明显提高
6.给定数字进行判别分类
predict(sexyLd , newdata = data.frame(height = 171 , weight = 50)) #预测1predict(sexyLd1 , newdata = data.frame(height = 168, weight = 60 , Vital.capacity = 3500 , sprint = 7.1 , Endurance.running = 4.20 , Sitting.body.flexion = 10.3, jump = 2.29, Sit.ups = 25 , point = 80)) #预测2> predict(sexyLd , newdata = data.frame(height = 171 , weight = 50)) #预测1$class
[1] 2> predict(sexyLd1 , newdata = data.frame(height = 168, weight = 60 , Vital.capacity = 3500 , sprint = 7.1 , Endurance.running = 4.20 , Sitting.body.flexion = 10.3, jump = 2.29, Sit.ups = 25 , point = 80))$class
[1] 1
# 1代表女性 2代表男性
`
R语言——线性判别分析(LDA)相关推荐
- R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
判别分析包括可用于分类和降维的方法.线性判别分析(LDA)特别受欢迎,因为它既是分类器又是降维技术.二次判别分析(QDA)是LDA的变体,允许数据的非线性分离.最后,正则化判别分析(RDA)是LDA和 ...
- 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...
全文链接:http://tecdat.cn/?p=27384 在本文中,数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息(点击文末"阅读原文"获取完整代 ...
- lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...
本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...
- 基于R语言的判别分析
本文主要介绍了基于R语言实现距离判别.Bayes判别.Fisher判别的基本思路以及给出了具体的操作过程. 1.数据 这里总共有个20个电视品牌的数据,销售状态G1中的1表示畅销,2表示滞销:销售状态 ...
- 07_数据降维,降维算法,主成分分析PCA,NMF,线性判别分析LDA
1.降维介绍 保证数据所具有的代表性特性或分布的情况下,将高维数据转化为低维数据. 聚类和分类都是无监督学习的典型任务,任务之间存在关联,比如某些高维数据的分类可以通过降维处理更好的获得. 降维过程可 ...
- sklearn实现lda模型_运用sklearn进行线性判别分析(LDA)代码实现
基于sklearn的线性判别分析(LDA)代码实现 一.前言及回顾 本文记录使用sklearn库实现有监督的数据降维技术--线性判别分析(LDA).在上一篇LDA线性判别分析原理及python应用(葡 ...
- 线性分类(二)-- 线性判别分析 LDA
在机器学习领域,LDA是两个常用模型的简称:线性判别分析(Linear Discriminant Analysis) 和隐含狄利克雷分布(Latent Dirichlet Allocation).在自 ...
- 线性判别分析LDA—西瓜书课后题3.5—MATLAB代码
题目:编程实现线性判别分析LDA,给出西瓜数据集 3.0a上的结果 简单说就是找一个分离度最大的投影方向,把数据投射上去. clc clear all [num,txt]=xlsread('D:\机器 ...
- 机器学习 周志华 课后习题3.5 线性判别分析LDA
机器学习 周志华 课后习题3.5 线性判别分析LDA 照着书上敲了敲啥都不会,雀食折磨 python代码 # coding=UTF-8 from numpy import * # 我安装numpy的时 ...
最新文章
- css3 点击爆炸下落
- 自动执行任务_中小企业如何做运维自动化?
- python实现将将输入的可约分数化简为不可约分数
- memcache源码编译安装
- 【等保知识】等保三级要求多少分?几分能过?
- OpenCV计算图像PSNR峰值信噪比
- java毕业设计德云社票务系统Mybatis+系统+数据库+调试部署
- python dxf_使用Python读取AutoCAD DXF文档
- 蓝字冲销是什么意思_会计上的红字蓝字是什么意思?正常记录是什么...
- TestCenter测试管理工具功能详解二(G)
- 笔记本实现wifi热点
- shell中sudo和su命令
- 第1章第2节:PowerPoint的选项卡 [PowerPoint精美幻灯片实战教程]
- ie8上传图片获取文件大小
- 怎么从 Java8 升到 Java11?
- 古老的视频去噪算法(FLT_GradualNoise)解析并优化,可实现1920*1080 YUV数据400fps的处理能力
- ThinkPad笔记本电脑海淘简单教程及注意事项
- java基于springboot的火车高铁购票系统
- 视频会议常用术语——转自华为TE40帮助文档
- Unity3d游戏引擎Windy系列教程:地形的创建
热门文章
- EGNet: Edge Guidance Network for Salient Object Detection
- 交流电机数字控制系统_考虑故障特性模拟的虚拟电机系统及其控制
- 电商项目总结java_Vue 电商后台管理项目阶段性总结(推荐)
- 211高校一29岁寒门博士生跳楼自杀,多方各执一词!
- Ubuntu20.04中chrome显示异常问题
- 百度云管家4.6.2 – 最后一个不限速的版本
- TOEFL OG 解读(一)
- mysql删除数据后多久释放空间
- 在Windows上用virtualbox虚拟机安装mac苹果系统
- 正离子计算机扫描检测,NanoSIMS 50L 高分辨二次离子质谱仪CAMECA