# Porównanie regresji liniowej z regresją nieliniowąo za pomocą sieci neuronowej # dla danych iris w eksperymencie weryfikacji krzyżowej (cross validation). # Przygotowanie danych: usuwamy kolumnę oznaczającą klasę, następnie znajdujemy # kolumnę, która najsłabiej ( 0.12 - 0.43) koreluje z pozostałymi kolumnami # i oznaczamy ją przez y. Predykcja yPred koreluje z y na ok 0.7. library(nnet); data(iris); X=as.matrix(iris[,-5]); #print(cor(X)) y=X[,2]; X=X[,-2]; n=nrow(X); n02=n/5 perm=sample(1:n,n); ccLin=rep(NA,5); ccNet=rep(NA,5) for(i in 1:5){ ind=((i-1)*n02+1):(i*n02) test=perm[ind]; train=perm[-ind] beta=lm(y[train]~X[train,])$coeff yPredLin=cbind(1,X[test,])%*%beta ccLin[i]=cor(y[test],yPredLin) S=nnet(X[train,],y[train],size=2,linout=TRUE, trace=FALSE) yPredNet=predict(S,X[test,]) ccNet[i]=cor(y[test],yPredNet) } options(digits=2) cat("\nKorelacja(y, yPred) dla regresji lin\n",ccLin,"\n") cat("Korelacja(y, PPred) dla regresji siecią neuronową\n",ccNet,"\n")