2017-10-07 8 views
0

Je suis en train d'utiliser la fonction crossval intégrée dans Matlab. J'ai une fonction de régression logistique configurée et prête à partir, mais le comportement que j'obtiens n'est pas ce que j'attendrais de la documentation.crossval dans Matlab- Predfun ne s'exécute que s'il n'a aucun argument?

De l'Crossval documentation page, la surcharge:

mse = crossval('mse',X,y,'Predfun',predfun) 

semblait ce que je devais mieux. Le doocumentation dit

mse = crossval ('mse', X, Y, 'Predfun', predfun) renvoie mse, un scalaire contenant une estimation de la validation croisée de 10 fois de l'erreur quadratique moyenne pour la fonction predfun. X peut être un vecteur de colonne, une matrice ou un tableau de prédicteurs. y est un vecteur colonne de valeurs de réponse. X et y doivent avoir le même nombre de lignes.

predfun est une poignée de fonction appelée avec le sous-ensemble d'entraînement de X, le sous-ensemble d'entraînement de y, et le sous-ensemble d'essai de X comme suit:

yfit = predfun (XTRAIN, ytrain, XTEST)

Chaque fois qu'il est appelé, predfun doit utiliser XTRAIN et ytrain pour ajuster un modèle de régression puis retourner les valeurs ajustées dans un vecteur de colonne yfit. Chaque ligne de yfit contient les valeurs prédites pour la ligne correspondante de XTEST . crossval calcule les erreurs au carré entre yfit et l'ensemble de test de réponse correspondant, et renvoie la moyenne globale dans tous les jeux de tests.

I donc défini une fonction dans un autre fichier dans le même répertoire, avec la signature:

function ytest = logRegTester(XTRAIN, ytrain, XTEST) 

Matlab me donnait l'erreur

erreur à l'aide logRegTester (ligne 11) Pas assez d'arguments d'entrée.

Pour expérimenter, j'ai essayé de réduire le nombre d'arguments logRegTester attendus, et trouvé crossval ne ferait que appeler ma fonction si elle avait des arguments zéro. Ce qui semble contredire la documentation, qui veut une fonction avec trois arguments.

+2

Est-il possible que vous n'utilisez pas une poignée de fonction au besoin, mais utilisez directement logRegTester? Pour obtenir une utilisation de la poignée de la fonction @logRegTester à la place (https://de.mathworks.com/help/matlab/ref/functions.html) – Marcus

Répondre

0

S'il vous plaît utiliser function handle @logRegTester tel que requis par predfun() au lieu d'utiliser logRegTester directement.