R语言实现logistics分类的代码理解

先讨论二分类的情况:
由原理,要应用logistics分类,考虑sigmoid函数:
R语言实现logistics分类的代码理解_第1张图片
z=ax+b(其中a与b这两个系数待求)
函数值大于0.5则归类为1,函数值小于0.5则归类为0
以如下数据为例:
“value” “class”
2 0
10 1
9 1
4 0
1 0
7 1
6.2 0
4.8 1
8 1
5 0
3 0
运用梯度上升法迭代求a与b的值:

#数据处理
a <- rep(1,11);#形成一个1重复11次的向量
xmat <- cbind(a,data[,1]);#a与data的value列合并
ymat <- data[,2];#class列自成一列

#定义sigmoid函数
sigmoid <- function(wx){
for (i in wx){
i <- 1.0/(1 + exp(i));
}
return (wx)
}

#训练函数,梯度上升法迭代求回归系数
regress <- function(xmat,ymat){
step <- 0.001;#训练的步长
weights <- rep(1,2);#待定的系数有两个
for (i in 1:500){#重复学习500次
h <- sigmoid(xmat%*%weights);#求每一列的预测值
error <- (ymat-h);#导出预测值与实际值的差
turn <- t(xmat);#xmat作转置
turn <- turn%*%error;#两矩阵作乘积
weights <- weights+(step*turn);#更新系数值
}
return (weights)
}

以原数据为测试集尝试分类:

amat <- data[,1];#取出data中的value列
predit <- sapply(amat,try);#对每个值调用预测函数,求出预测值
cbind(data,predit)#原数据与预测值序列合并,对比

结果如下:
R语言实现logistics分类的代码理解_第2张图片
对于多分类的logstic分析:
可以参考下述代码:(下述代码目标是得出某种病毒的宿主)

library(mlogit)
library(nnet)
multiple.dat<-multinom(host~Nc+Gravy+Aroma,data=dat)#调用函数进行分析,其中host一列是病毒的宿主,Nc、Gravy等为病毒的各类特征
step.dat<-step(multiple.dat)#逐步回归选元
dat.predic<-predict(step.dat)#逐个预测
n<-table(dat$host,dat.predic)#将真实值与预测值整合
new_cov_pre <- predict(step.dat,newdata=testdata)#预测待定病毒的宿主
(accurary<-sum(diag(n))/sum(n))#计算准确率,评估模型

你可能感兴趣的:(R语言实现logistics分类的代码理解)