r - R中的感知器算法,该过程卡在第一个时期
问题描述
我一直在尝试制作自己的感知器算法。但是,似乎算法在第一个时期就停止了,因此没有正确的分类。以下是我在 R 中对感知器算法的实现。
x1 <- runif(30,-1,1)
x2 <- runif(30,-1,1)
x <- cbind(x1,x2)
w = matrix(0,3,1) # initialize weights for x1, x2, bias
b <- c(0,0) # bias = 0
xb<- cbind(x,b) # importing bias (x1,x2,b)
y <- ifelse(x2>0.5+x1,+1,-1) #y target
perceptron = function(xb,y,w, learning.rate=0.5){
k = 1000 # count epochs
error <- matrix(, nrow = nrow(xb), ncol = k, byrow = TRUE)
#xb[,3] is the col of biases
for (j in 1:k) {
for (i in 1:nrow(x)) {
yc <- sum(xb[i,] * w) #ycomputed
error[i,k] <- y[i] - yc
if (y[i] != yc) {
w <- w + learning.rate * error[i,k] * x[i,]
xb[i,3] <- xb[i,3] + learning.rate * error[i,k] #b <- b + learning.rate * (y[i]-yc)
}
else {
w <- w
xb[i,3] <- xb[i,3]
}
}
return(list(w,xb[,3],error[,k]))
if (w[k] == w[k-1]){
break
}
}
}
另外,我这边似乎有一个计算错误,开始于:
w <- w + learning.rate * error[i,k] * x[i,]
对于上述情况,控制台上出现了这条注释:"Error in cat("1: In w + learning.rate * error * x[i, ] :\n 更长的对象长度不是更短的对象长度的倍数", :参数 2(类型 'list')不能被 'cat' 处理另外:有 30 个警告(使用 warnings() 来查看它们)”。我无法理解这一点,因为在我看来似乎没有成为一个问题,因为它是一个向量(w)乘以一个数字(learning.rate * error * x[i, ])。感谢您花时间阅读并希望回答我的问题。
解决方案
推荐阅读
- python - 如何获取 Keras 模型中包含的 TensorFlow 操作
- python - 熊猫选择与多列中可变数量的值匹配的行
- flutter - googleMap构建完成后颤振showInfoWindow
- pyspark - 从 Lag 函数到 pyspark 流 Dstream 中的 updateStateByKey
- android - onDestroy 之后的 Android ViewBinding 句柄片段 null
- excel - VBA Outlook 邮件正文不显示(可能是由于表格通过 vba excel 粘贴到邮件正文中)
- flutter - Flutter:[Cloud_firestore] 发布模式下没有数据
- android - 关于APK安装后生成的文件的权限问题
- macos - Minikube 访问使用注册表插件添加的图像
- mediawiki - MediaWiki:导入的模板返回许多错误