您的位置:首页 > 其它

基于鸢尾花数据的分类分析

2017-07-18 15:20 483 查看

Bayes classification in IRIS

1,加载包

library(ggplot2)

library(readr)

2,把IRIS数据放在”../input..”路径中并读取。

system(“ls../input”)

3,整理数据便于后期分析

class1<-subset(iris,Species==”setosa”)

class2<-subset(iris,Species==”versicolor”)

class3<-subset(iris,Species==”virginica”)

head(class3)

c1<-class1[,1:4]

c2<-class2[,1:4]

c3<-class3[,1:4]

meansc1<-colMeans(c1)

meansc2<-colMeans(c2)

meansc3<-colMeans(c3)

varc1<-var(c1)

varc2<-var(c2)

varc3<-var(c3)

M<-rbind(c1,c2,c3)

p<-matrix(nrow=150,ncol=3)

4,Bayes 分类

for(i in 1:150){

p[i,1]=exp(-1*(sum(solve(varc1)%%t(M[i,]-meansc1)(M[i,]-meansc1))*0.5))

p[i,2]=exp(-1*(sum(solve(varc2)%%t(M[i,]-meansc2)(M[i,]-meansc2))*0.5))

p[i,3]=exp(-1*(sum(solve(varc3)%%t(M[i,]-meansc3)(M[i,]-meansc3))*0.5))

}##最大的P值决定了记录的分类。

KNN(最近邻分类) classification in iris

1,加载包

library(ggplot2)

library(class)

library(caTools)

help(package=”class”)

2,整理数据,便于后期分析

data<-iris

var(data[,1])

var(data[,2])

var(data[,3])

var(data[,4])##求出各特征的方差值

scaledata<-scale(data[,-5])#标准化前四列数据

head(scaledata)

var(scaledata[,1])

var(scaledata[,2])

var(scaledata[,3])

var(scaledata[,4])##求出标准化后各特征的方差值

newdata<-cbind(scaledata,data[5])

3,训练集和测试集

set.seed(1234)

sample<-sample.split(newdata$Species,SplitRatio = 0.7)#把数据分为测试集和训练集两部分

newdatatrain<-subset(newdata,sample=TRUE)

newdatatest<-subset(newdata,sample=FALSE)

4,最近邻算法

predicted_Species<-knn(newdatatrain[,-5],newdatatest[,-5],newdatatrain$Species,k=1)

5,检验准确性

accuracy<-mean(newdatatrain$Species==predicted_Species)

accuracy

6,找到最优的K值

predicted_Species<-NULL

k_value<-1:15

accurary<-NULL

for(i in k_value){

set.seed(1234)

predicted_Species<-

knn(newdatatrain[,-5],newdatatest[,-5],newdatatrainSpecies,k=i)accuracy[i]<−mean(newdatatrainSpecies==predicted_Species)

}

accurary_df<-data.frame(accuracy,k_value)

ggplot(accurary_df,aes(x=k_value,y=accuracy))+

geom_point()+

geom_line()#通过观察图可以得出使准确率最高的K值

random forest classification in iris

library(readr)

library(caret)

train_index<-createDataPartition(iris$Species,p=0.8,list=FALSE)

train<-iris[train_index,]

control<-trainControl(method=”cv”,number = 10)

metric<-“Accuracy”

set.seed(33)

fit.rf <- train(Species~., data=train, method=”rf”, metric=metric, trControl=control)##要换其他方法只需换“method”参数就行。

随机森林的参数估计技巧

validation<-iris[-train_index,]#测试集

head(validation)

predictions.rf<-predict(fit.rf,validation)

head(predictions.rf)

confusionMatrix(predictions.rf,validation$Species)

SVM classification

set.seed(33)

fit.SVM<- train(Species~., data=train, method=”svmRadial”, metric=metric, trControl=control)##要换其他方法只需换“method”参数就行。

predictions.SVM<-predict(fit.SVM,validation)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: