Frage

Ist es im Allgemeinen eine gute Idee, die Dimension des Trainingssatzes zu verringern, bevor es zum Ausbilden von SVM -Klassifizierern die Dimension des Trainings senkt?

Ich habe eine Sammlung von Dokumenten, von denen jeder von einem Vektor mit TF-IDF-Gewicht dargestellt wird, der durch den TFIDF_TRANSFORMENTER von Scikit-Learn berechnet wird. Die Anzahl der Begriffe (Feature?) Liegt bei fast 60 km. Mit meinem Trainingssatz, der aus etwa 2,5 Mio. Dokumenten besteht, ist der Trainingsprozess für immer weitergehen.

Die Klassifizierung dauerte nicht nur ewig, sondern auch nicht genau, sondern auch aufgrund des falschen Modells. Nur um eine Vorstellung davon zu bekommen, was ich zu tun habe, habe ich versucht, einen Weg zu finden, um die Daten irgendwie zu visualisieren. Und ich zersetzte die Dokumentmatrix in eine (m, 2) Matrix mit SVD mit Scikit-Learn (wollte andere Methoden ausprobieren, aber alle stürzten auf halbem Weg ab).

So sieht die Visualisierung also aus

Result of SVD

Ist es also im Allgemeinen eine gute Praxis, die Dimension zu reduzieren und dann nur mit SVM vorzugehen? Was kann ich in diesem Fall tun, um die Genauigkeit des Klassifikators zu verbessern? Ich versuche, sklearn.svm.svc und zu verwenden kernel='poly', und degree=3 Und es dauert sehr lange, bis es fertig ist.

War es hilfreich?

Lösung

Ich würde empfehlen, mehr Zeit zu verbringen, um über die Auswahl und Darstellung von Funktionen für Ihr SVM nachzudenken, als über die Anzahl der Dimensionen in Ihrem Modell zu sorgen. Im Allgemeinen ist SVM tendenziell sehr robust gegenüber uninformativen Merkmalen (z. B. siehe Joachims, 1997, oder Joachims, 1999 für eine schöne Übersicht). Nach meiner Erfahrung profitiert SVM nicht oft so stark von der Zeit mit der Auswahl der Feature wie anderen Algorithmen wie naiven Bayes. Die besten Gewinne, die ich mit SVM gesehen habe, kommen in der Regel aus dem Versuch, Ihr eigenes Expertenwissen über die Klassifizierungsdomäne auf eine Weise zu kodieren, die rechnerisch zugänglich ist. Sagen Sie zum Beispiel, dass Sie Veröffentlichungen darüber klassifizieren, ob sie Informationen zu Protein-Protein-Interaktionen enthalten. Etwas, das in der Tüte mit Wörtern und TFIDF-Vektorisierungsansätzen verloren geht, ist das Konzept der Nähe-zwei proteinbezogene Wörter, die in einem Dokument nahe beieinander auftreten, sind in Dokumenten, die sich mit der Protein-Protein-Interaktion befassen, eher zu finden. Dies kann manchmal mit $ n $ -Gram-Modellierung erreicht werden, aber es gibt bessere Alternativen, die Sie nur verwenden können, wenn Sie über die Eigenschaften der Arten von Dokumenten nachdenken, die Sie identifizieren möchten.

Wenn Sie immer noch versuchen möchten, Feature -Auswahl zu treffen, Ich würde $ chi^{2} $ empfehlen (Chi-Quadrat) Feature-Auswahl. Dazu bewerten Sie Ihre Funktionen in Bezug auf das Ziel

begin {Gleichung} chi^{2} ( textbf {d}, t, c) = sum_ {e_ {t} in {0,1}} sum_ {e_ {c} in {0,, in {0,, 1}} frac {(n_ {e_ {t} e_ {c}}-e_ {e_ {t} e_ {c}})^{2} {e_ {e_ {t} e_ {c}},, end {Gleichung} wobei $ n $ die beobachtete Häufigkeit eines Begriffs in $ textbf {d} $ ist, $ e $ ist seine erwartete Häufigkeit und $ t $ bzw. $ C $ bezeichnen Term bzw. Klasse. Du kannst Berechnen Sie dies einfach in Sklearn, es sei denn, Sie möchten die Bildungserfahrung, sie selbst zu codieren $ ddot Smile $

Andere Tipps

Während Sie PCA auf Ihren TFIDF -Vektoren durchführen oder Stamm oder die Beseitigung seltener Wörter kann die Dimensionalität erheblich verringern. Vielleicht möchten Sie es versuchen Themenmodellierung.

Während Ihr anfängliches Problem beim Erstellen von Themen und die Zuweisung von Themen an Dokumente im hochdimenonischen Raum bleibt, befindet sich der überwachte Teil im Themenraum.

Es gibt viele schnelle Implementierungen von LDA und ähnliche Themenmodelle da draußen.

SVM bei so vielen Trainingsvektoren dauert sehr lange und viel Gedächtnis [O (n^3) Zeit und o (n^2) Raum, n ist das no. des Trainingsvektors]. Sie könnten eine SVM -Bibliothek mit GPU -Geschwindigkeit verwenden, die ein wenig hilfreich sein könnte. Wie in früheren Beiträgen erwähnt, sind Funktionen für SVMs nicht viel wichtig.

Was ist Ihr C -Wert? Für einige Werte von C dauert es besonders lange. Sie könnten versuchen, es mit ein paar Vektoren und einer Gittersuche abzustimmen.

Neuronale Netze lernen gut aus solch riesigen Datensätzen, gepaart mit RBM, es sollte gute Ergebnisse erzielen. Oder Sie können zufällige Wälder/Entscheidungsbäume mit Sacking/Xgboost oder anderen ausprobieren Ensemble -Methoden. Sie sind überraschend gut und können super schnell sein (im Vergleich zu SVM).

Außerdem mag dies unwichtig sein, aber ich habe nicht genug Ruf, um zu kommentieren. Welche Art von Visualisierung ist das PCA? Wenn Ihnen dies keine gute Idee gibt, könnten Sie es versuchen Mds, kann sein?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top