2010-02-17 7 views
4

J'essaye de construire une application pour détecter les images qui sont des publicités à partir des pages Web. Une fois que je les détecterai, je ne permettrai pas que ceux-ci soient affichés côté client. De l'aide que j'ai eu sur this Stackoverflow question, je pensais que SVM est la meilleure approche de mon objectif. J'ai donc codé SVM et SMO moi-même. L'ensemble de données que j'ai reçu du référentiel de données UCI a 3280 instances (Link to Dataset) où environ 400 d'entre elles sont de classe représentant des images de publicité et le reste d'entre elles représentant des images non-publicitaires.SVM Classification - nombre minimum d'ensembles d'entrée pour chaque classe

En ce moment, je prends les premiers 2800 jeux d'entrée et la formation du SVM. Mais après avoir regardé le taux de précision, j'ai réalisé que la plupart de ces 2800 ensembles d'entrée proviennent d'une classe d'image non-publicitaire. Donc, je reçois une très bonne précision pour cette classe.

Alors, que puis-je faire ici? À propos du nombre d'entrées que je dois donner à SVM pour m'entraîner et combien d'entre elles pour chaque classe?

Merci. À votre santé. (Au fond fait une nouvelle question parce que le contexte était différent de ma question précédente. Optimization of Neural Network input data)


Merci pour la réponse. Je veux vérifier si je dérive correctement ou non les valeurs C de la classe ad et non-ad. S'il vous plaît donnez-moi vos commentaires à ce sujet.

enter image description here

Ou vous u pouvez voir la version doc here.

Vous pouvez voir le graphique de y1 eqaul à y2 ici enter image description here

et y1 pas égal à y2 ici enter image description here

Répondre

4

La taille requise de votre ensemble de la formation dépend de la faible densité de l'espace de représentation. Autant que je puisse voir, vous ne discutez pas quelles caractéristiques de l'image que vous avez choisi d'utiliser. Avant de pouvoir vous entraîner, vous devez convertir chaque image en un vecteur de nombres (caractéristiques) qui décrivent l'image, en espérant capturer les aspects qui vous intéressent.

Oh, et à moins que vous Réimplémenter pour le sport SVM, je voudrais recomment juste en utilisant libsvm,

+0

Je n'ai pas compris ce que vous vouliez dire par la rareté de l'espace caractéristique et par la façon dont il décidera de la taille de mon ensemble d'entraînement. Laissez-moi me rendre un peu clair ici. 1. Oui, je ne fais que de l'analyse de texte pour prédire l'image comme image publicitaire/non publicitaire. 2. Je suis obligé de ne pas utiliser ces librairies sur Internet et de mettre en œuvre SVM par nos propres moyens. J'ai déjà codé la plupart des SVM et je peux tester la précision de sa sortie. Merci. - –

+1

Laissez-moi essayer d'être plus clair. Comment obtenez-vous d'une image au vecteur de nombre que vous entrez dans votre SVM pour cette image? Sûrement vous ne lui donnez pas juste la couleur rouge, verte et bleue de chaque pixel dans l'image? –

+0

Je suis en train de faire une analyse de texte pour obtenir différents attributs de cette image. En utilisant cela comme un ensemble d'entraînement (qui est déjà là dans le référentiel UCI), j'entraîne mon svm. Maintenant, le problème est que le nombre d'ensembles de formation à la publicité n'est que de 400 par rapport au nombre d'ensembles de formation non publicitaire qui est d'environ 2800. Alors maintenant, que puis-je faire ici? À propos du nombre d'entrées que je dois donner à SVM pour m'entraîner et combien d'entre elles pour chaque classe? Merci. –

6

Il y a deux façons d'aller à ce sujet. L'un serait de équilibrer les données d'apprentissage afin qu'il comprenne un nombre égal d'images publicitaires et non publicitaires. Cela pourrait être fait en suréchantillonnant les 400 images publicitaires ou en sous-échantillonnant les milliers d'images non publicitaires. Comme le temps de formation peut augmenter considérablement avec le nombre de points de données utilisés, vous devriez probablement commencer par sous-échantillonner les images non-publicitaires et créer un ensemble d'entraînement avec 400 images publicitaires et 400 non-publicités sélectionnées au hasard.

L'autre solution serait d'utiliser un pondéré SVM afin que les erreurs de marge pour les images publicitaires sont plus fortement pondérés que ceux pour les non-annonces, pour le paquet libsvm cela se fait avec le drapeau -wi. À partir de votre description des données, vous pouvez essayer de peser les images d'annonce environ 7 fois plus que les non-annonces.

+0

Pourriez-vous expliquer pourquoi vous équilibreriez les données d'entraînement? Je pensais que les SVM choisissaient la surface de décision avec la distance maximale des schémas d'entraînement. Pourquoi est-ce important combien d'autres modèles d'entraînement se cachent derrière cette surface de décision? Et comment les modèles de suréchantillonnage pourraient-ils aider? (J'ai toujours pensé que les SVM pondérés étaient destinés à modéliser différents coûts de classification erronée à différentes classes et/ou probabilités a priori - mais le PO ne dit rien sur les coûts ou les probabilités a priori) – Niki

+1

@nikie - Les SVM durs choisissent la surface de décision avec la séparation maximale des modèles d'entraînement. Mais, une fois que vous autorisez les erreurs de marge et de classification (c.-à-d. Lorsque vous introduisez C), les SVM compensent la taille de la marge en permettant à certains points d'être dans la marge ou même mal classés. Avec des données déséquilibrées, une grande partie des points de données de la classe inférieure peut finir dans la marge ou pire. Le fait de les pondérer ou d'équilibrer l'ensemble de données résout essentiellement cela. – dmcer

+0

@dmcer: Merci pour l'explication. J'ai essayé de réduire la non-publicité à environ 600. Mais la précision était très mauvaise. Et quand je me suis entraîné en utilisant 400 annonce et 2400 non-annonce. Oui, le temps de formation a été très long, mais j'ai obtenu 95% de précision dans la classification des annonces non publicitaires et la précision de la classification des publicités est tombée à très très bas. Je suppose que l'effet était dû à un ensemble non-publicitaire dominant sur l'ensemble de publicités. Est-ce que ce SVM pondéré fonctionnera dans ce cas? et est-ce que je fais quelque chose de mal ici puisque la précision non-annonce est très bonne quand je prends 2800 échantillons d'entraînement? –

Questions connexes