Wir laden die Irisdaten und fügen eine sechste Variable namens “setosa” hinzu, die mit dem Wert TRUE (entspricht 1) belegt ist, wenn ein Iris-setosa-Exemplar vorliegt, andernfalls mit dem Wert FALSE (entspricht 0).

iris <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",header=F)
iris.local <- iris
iris.local <- cbind(iris.local, iris.local$V5 == 'Iris-setosa') # 6. Spalte
names(iris.local)[6] <- 'setosa'

Nun lassen wir ein neuronales Netz ohne hidden layer und der logistischen Funktion als Aktivierungsfunktion berechnen.

require(neuralnet)
## Loading required package: neuralnet
set.seed(2701)
model.nn <- neuralnet(setosa ~ V1+V2+V3+V4,
                data=iris.local, 
                hidden=c(0),
                act.fct = "logistic")

Vom Ergebnis können wir die Gewichte ablesen.

plot(model.nn, rep="best")

So bekommt man die Gewichte explizit:

model.nn$weights
## [[1]]
## [[1]][[1]]
##                [,1]
## [1,]  0.12495206280
## [2,]  0.06378653926
## [3,]  0.24386776784
## [4,] -0.22103575803
## [5,] -0.06532482378

Wir testen, ob der Gewichtsvektor fehlerfrei klassifiziert.

classification <- compute(model.nn,iris.local[,1:4])
table(round(classification$net.result),iris.local$setosa)
##    
##     FALSE TRUE
##   0   100    0
##   1     0   50

Wie man sieht, ist dies der Fall.