R语言实现距离判别、Bayes判别和Fisher判别分析
以下是R语言代码实现:
导入数据
data <- read.table('data.txt', header=T)
分割数据集
train <- data[1:8000, ] test <- data[8001:10992, ]
距离判别
library(class) train.dist <- train[,1:16] train.label <- train[,17] test.dist <- test[,1:16] test.label <- test[,17] pred.dist <- knn(train.dist, test.dist, train.label, k=5)
计算误判率
error.dist <- mean(pred.dist != test.label) print(paste('误判率:', error.dist))
Bayes判别
library(e1071) train.bayes <- train[,c(1:16,17)] test.bayes <- test[,c(1:16,17)] model.bayes <- naiveBayes(V17~., data=train.bayes) pred.bayes <- predict(model.bayes, test.bayes[,1:16])
计算误判率
error.bayes <- mean(pred.bayes != test.label) print(paste('误判率:', error.bayes))
Fisher判别
train.fisher <- train[,c(1:16,17)] test.fisher <- test[,c(1:16,17)]
计算均值和协方差矩阵
mean.0 <- colMeans(train.fisher[train.fisher$V17==0, 1:16]) mean.1 <- colMeans(train.fisher[train.fisher$V17==1, 1:16]) cov.0 <- cov(train.fisher[train.fisher$V17==0, 1:16]) cov.1 <- cov(train.fisher[train.fisher$V17==1, 1:16])
计算Fisher判别函数
w <- solve(cov.0+cov.1) %% (mean.0-mean.1) b <- -0.5t(mean.0+mean.1) %% solve(cov.0+cov.1) %% (mean.0-mean.1) + log(nrow(train.fisher[train.fisher$V17==0, ])/nrow(train.fisher[train.fisher$V17==1, ])) pred.fisher <- as.numeric(test.fisher[,1:16] %*% w + b > 0)
计算误判率
error.fisher <- mean(pred.fisher != test.label) print(paste('误判率:', error.fisher))
输出Fisher判别函数
print(paste('Fisher判别函数:')) print(paste('w=', w)) print(paste('b=', b))
原文地址: https://www.cveoy.top/t/topic/okkN 著作权归作者所有。请勿转载和采集!