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

先讨论二分类的情况:
由原理,要应用logistics分类,考虑sigmoid函数:
sigmoid函数
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)#原数据与预测值序列合并,对比

结果如下:
结果
对于多分类的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))#计算准确率,评估模型
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

today__present

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值