Ik heb geprobeerd de data(bank) te splitsen in trainingsdata en testdata. Maar op de een of andere manier krijg ik hieronder een foutmelding. Hoe kan ik dit probleem oplossen?
train = bank[1:100, ]
test = bank[!train,]
Status.test =Status[!train]
glm.fit=glm(Status~Length+Right+Bottom+Top+Diagonal,data=bank,family=binomial,subset=train)
#Error in xj[i] : invalid subscript type 'list'
glm.probs=predict(glm.fit,test,type="response")
glm.pred=rep("genuine",100)
glm.pred[glm.probs>.5]="counterfeit"
table(glm.pred,test)##classification on training data
#Error in table(glm.pred, test) : all arguments must have the same length
Antwoord 1, autoriteit 100%
Het probleem zit in subset=train
. Volgens de ?glm
. de subset
moet een vector zijn in tegenstelling tot een subset van de originele dataset:
subset een optionele vector die een subset van waarnemingen specificeert die moeten worden
gebruikt in het aanpasproces.
Daarom moet u de code mogelijk wijzigen in:
glm.fit=glm(Status~Length+Right+Bottom+Top+Diagonal,data=train,family=binomial)
of
glm.fit=glm(Status~Length+Right+Bottom+Top+Diagonal,data=bank,family=binomial,subset=1:100)
Antwoord 2
Over het algemeen kun je bereiken wat je hebt gevraagd door zoiets als dit te doen:
Stel dat kolom ‘reactie’ wordt waargenomen kolom:
samples=1:100
train = bank[samples, ]
test = bank[-samples,]
Status.test =bank[samples,'response']
Trouwens, ik zou willen voorstellen om de functie sample()
te gebruiken om willekeurig monsters te nemen voor trein en test. zoals dit:
samples=sample(nrow(bank), 0.8*nrow(bank))
train = bank[samples, ]
test = bank[-samples,]
Status.test =bank[samples,'response']
Antwoord 3
Als je de trainingsgegevens als volgt instelt:
data[1: 100,]
Vervolgens gebruik je in de functie lm()
het argument:
data = bank[train,]
U kunt ook een trein instellen als:
seq(1: 100)
als een reeks indices die u moet gebruiken in de
lm(): data = bank, subset = train