2014-04-22 7 views
0

J'applique AdaBoost sur Matlab. Cet algorithme requiert qu'à chaque itération, les poids de chaque point de données dans l'ensemble d'apprentissage totalisent un.Normaliser dans Adaboost sans erreur numérique - Matlab

Si j'utilise simplement la normalisation suivante v = v/sum(v) je reçois un vecteur dont la norme 1 est 1 sauf une erreur numérique qui conduit plus tard à l'échec de l'algorithme.

Existe-t-il une fonction matlab pour normaliser un vecteur afin que sa norme 1 soit EXACTLY 1?

+0

Comment cela conduirait-il à une défaillance de l'algorithme? J'utilise AdaBoost avec la même normalisation et c'est assez ok –

Répondre

2

En supposant que vous souhaitez normaliser des valeurs identiques avec le même facteur, cela n'est pas possible. contre-exemple simple:

v=ones(21,1); 
v = v/sum(v); 
sum(v)-1 

Une façon courante de traiter avec elle, est appliquer la somme des valeurs (v)> = 1 ou somme (v) < = 1 si votre algorithme peut traiter une dérivation d'un côté:

if sum(v)>1 
    v=v-eps(v) 
end 

Vous pouvez également essayer d'utiliser vpa, mais cela augmentera considérablement votre temps de calcul.

+0

Merci pour la réponse. Considérant que je vais devoir faire cette chose une seule fois pour T itérations (T peut varier jusqu'à 1 000 cependant) quel est votre conseil? – Matteo

+0

Je n'ai pas assez de connaissances sur l'algorithme ou votre code pour donner des conseils utiles. – Daniel

+2

En ce qui concerne Adaboost, cette erreur numérique ne fera aucune différence et il vaut mieux ne pas y consacrer de temps. –

Questions connexes