为了使用R函数nnet将神经网络拟合到数据集,我了解到当案例在不同类中分布不均时,我应该正确地对每个案例进行加权(http://cowlet.org/2014/01/12/understanding-data-science-classification-with-neural-networks-in-r.html)。
R function nnet有一个"权重"输入,我想知道这是怎么做的。帮助文件仅为每个示例说明"(大小写)权重 - 如果缺少默认值为1",这对我来说不是那么清楚。我原本以为权重影响阈值的确定但不影响反向传播算法。但是,我天真的猜测似乎不正确。为了看到这个,我生成了非常简单的不均匀分布的两个类:
library(nnet)
p1 <- 0.05
p2 <- 1 - p1
Ntot <- 2000
class <- sample(1:2,Ntot,prob=c(p1,p2),replace=TRUE)
dat <- scale(cbind(f1=rnorm(Ntot,mean=class), f2=rnorm(Ntot,mean=class,sd=0.01)))
然后用两个nnet拟合模型:一个具有与其类别成比例的案例权重,另一个具有所有权重1。
myWeight <- rep(NA,length(class))
myWeight[class==1] <- p1
myWeight[class==2] <- p2
set.seed(1)
fitw <- nnet(class~.,data=dat,weights=myWeight,size=3,decay=0.1)
set.seed(1)
fit0 <- nnet(class~.,data=dat,size=3,decay=0.1)
现在我估计响应值(介于0和1之间)。
pred.raw.w <- predict(fitw,type="raw")
pred.raw0 <- predict(fit0,type="raw")
head(pred.raw.w)
head(pred.raw0)
如果我的天真猜测是真的,我会看到相同的原始响应估计。我看到两个响应值不同!这意味着权重必须对反向传播方程(而不仅仅是阈值)的计算起作用。任何人都可以告诉我究竟什么是重量或指导我参考?
答案 0 :(得分:1)
&#39;案例权重&#39;指每个观察的重要性加权。权重可用于定制ML算法以关注数据的某些方面。
例如,预测商店销售的问题。在周末和假日期间预测销售可能更为重要,因为在这段时间内购买了大部分商店的销量。然后,您可以指定一个工作日权重列为&#39; 1&#39;和周末/假期为&#39; 2&#39;。