R函数,nnet:究竟“权重”输入究竟是什么?

时间:2014-05-12 17:29:46

标签: r algorithm neural-network

为了使用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)

如果我的天真猜测是真的,我会看到相同的原始响应估计。我看到两个响应值不同!这意味着权重必须对反向传播方程(而不仅仅是阈值)的计算起作用。任何人都可以告诉我究竟什么是重量或指导我参考?

1 个答案:

答案 0 :(得分:1)

&#39;案例权重&#39;指每个观察的重要性加权。权重可用于定制ML算法以关注数据的某些方面。

例如,预测商店销售的问题。在周末和假日期间预测销售可能更为重要,因为在这段时间内购买了大部分商店的销量。然后,您可以指定一个工作日权重列为&#39; 1&#39;和周末/假期为&#39; 2&#39;。