算法
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、knn
代码如下(示例):
# KNN近邻分类
# 随机抽取1/2的样本作为训练集,另外一半的样本作为测试集来验证模型的效果
iris1<-iris
set.seed(1234)
# 利用caret包的createDataPartition函数按不同类别等比例抽取50%
library(caret)
ind <- createDataPartition(iris1$Species,times=1,p=0.5,list=F)
traindata <-iris1[ind,] #构建训练集
testdata <- iris1[-ind,] #构建测试集
# 利用class包中的knn函数对测试集的分类进行预测。
library(class)
a=knn(traindata[,1:4],testdata[,1:4],traindata[,5],k=3) #指定k值为3
a[1];a[75] # 查看第一条和最后一条测试数据的预测结果
# KNN算法流程验证:
ceshi <- function(n=1,k=3){
# 计算第n个测试集样本与训练集样本的距离
x <- (traindata[,1:4]-testdata[rep(n,75),1:4])^2
traindata$dist1 <- apply(x,1,function(x) sqrt(sum(x)))
# 对距离进行升序排序,选择最近的K个邻居
mydata <- traindata[order(traindata$dist1)[1:k],5:6]
# 统计不同类别的频数
result <- data.frame(sort(table(mydata$Species),decreasing = T))
# 给出最后的预测结果
return(result[1,1])
}
ceshi() # 第一个样本的预测结果
ceshi(n=75) # 最后一个样本的预测结果
二、朴素贝叶斯
代码如下(示例):
# 朴素贝叶斯分类
# 导入car数据集
car <- read.table("car.data",sep = ",")
# 对变量重命名
colnames(car) <- c("buy","main","doors","capacity",
"lug_boot","safety","accept")
str(car)
# 随机选取75%的数据作为训练集建立模型,25%的数据作为测试集用来验证模型
library(caret)
# 构建训练集的下标集
ind <- createDataPartition(car$accept,times=1,p=0.75,list=FALSE)
# 构建测试集数据好训练集数据
carTR <- car[ind,]
carTE <- car[-ind,]
# 使用naiveBayes函数建立朴素贝叶斯分类器
install.packages("e1071")
library(e1071)
naiveBayes.model <- naiveBayes(accept~.,data=carTR)
# 预测结果
carTR_predict <- predict(naiveBayes.model,newdata=carTR) # 训练集数据
carTE_predict <- predict(naiveBayes.model,newdata=carTE) # 测试集数据
# 构建混淆矩阵
tableTR <- table(actual=carTR$accept,predict=carTR_predict)
tableTE <- table(actual=carTE$accept,predict=carTE_predict)
# 计算误差率
errTR <- paste0(round((sum(tableTR)-sum(diag(tableTR)))*100/sum(tableTR),
2),"%")
errTE <- paste0(round((sum(tableTE)-sum(diag(tableTE)))*100/sum(tableTE),
2),"%")
errTR;errTE
二、图
代码如下(示例):
install.packages("rpart")
library(rpart)
install.packages("rpart.plot")
library(rpart.plot)
fit<-rpart(Species~.,method="class",iris)
rpart.plot(fit)