R 实例 判别分析LDA 聚类分析 因子分析

一、判别分析

1.读取数据
setwd("C:\\Users\\91333\\Documents\\semiester5\\MultivariateStatisticalAnalysis\\DiscriminantAnalysis")
rain_data <- read.table(file = "HW1.csv", sep = ",", header = TRUE)
rain_data$Rain <- ifelse(rain_data$Rain == "yes", 1, 0)
2.线性判别
  • 交叉验证:由于数据量为20,较小,故选择lda函数的"CV = T",用留一法交叉验证。
  • prior参数:为了使得模型的错判率尽量低,建立循环,使参数"prior"遍历不同的值。
error_rate1 <- rep(NA,9)
for (i in 1:9){
 rain_modle1 <- lda(formula = Rain ~ ., 
                   data = rain_data, 
                   prior = c(i, 10-i) / 10,
                   CV = T)
error_rate1[i] <- sum(rain_modle1$class != rain_data$Rain)/nrow(rain_data)
}

error_rate1
[1] 0.55 0.65 0.40 0.40 0.30 0.35 0.50 0.45 0.45

which.min(error_rate1)
[1] 5

由运行结果可以看出,错判率随着i的增大呈二次变化,并且使得错判率最小的i为5,即prior = c(1, 1) / 2

3.二次判别
error_rate2 <- rep(NA,49)
for (i in 1:49){
 rain_modle2 <- qda(formula = Rain ~ ., 
                   data = rain_data, 
                   prior = c(i, 50-i) / 50,
                   CV = T)
error_rate2[i] <- sum(rain_modle2$class != rain_data$Rain)/nrow(rain_data)
}

error_rate2
 [1] 0.50 0.50 0.50 0.50 0.50 0.50 0.50 0.45 0.40 0.25 0.25 0.25 0.25 0.25 
 [15] 0.30 0.30 0.30 0.25 0.20 0.25 0.25 0.35 0.35 0.35 0.35 0.35 0.35 0.35 
 [29] 0.35 0.35 0.35 0.30 0.30 0.30 0.30 0.30 0.30 0.25 0.30 0.30 0.40 0.35 
 [43] 0.35 0.40 0.40 0.40 0.40 0.40 0.45
 
which(error_rate2 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值