1.包和数据
rm(list = ls())
#install.packages("faraway")
library(faraway)
library(nnet)
data(ozone, package="faraway")
head(ozone)
O3 vh wind humidity temp ibh dpg ibt vis doy
1 3 5710 4 28 40 2693 -25 87 250 33
2 5 5700 3 37 45 590 -24 128 100 34
3 5 5760 3 51 54 1450 25 139 60 35
4 6 5720 4 69 35 1568 15 121 60 36
5 4 5790 6 19 45 2631 -33 123 100 37
6 4 5790 3 25 55 554 -28 182 250 38
rescaled.ozone <- scale(ozone)
其中,O3是结果,需要预测的列。其他的是自变量。该算法要求输入scale后的数据
2.建模
构建100个模型,找到其中RSS最小的。RSS 表示残差平方和。它是训练数据中预测值与实际值之间差异的度量。
set.seed(25374)
best.rss=NULL
bestrss <- 10000
for(i in 1:100){
nnmdl <- nnet(O3 ~ temp + ibh + ibt,
data=rescaled.ozone, size=2, linout=T, trace=F)
best.rss[i]=nnmdl$value
if(nnmdl$value < bestrss){
bestnn <- nnmdl
bestrss <- nnmdl$value
}
}
min(best.rss)
[1] 88.14799
3.预测与打分
p = predict(bestnn,rescaled.ozone[,c(5,6,8)])
library(Hmisc)
options(scipen = 100)
rcorr.cens(p,rescaled.ozone[,1])
C Index Dxy S.D. n
0.84081133 0.68162265 0.01770884 330.00000000
missing uncensored Relevant Pairs Concordant
0.00000000 330.00000000 103682.00000000 87177.00000000
Uncertain
0.00000000
参考:
https://www.stat.colostate.edu/~jah/talks_public_html/isec2020/nnet.html
网友评论