0

Ich klassifiziere kleine Texte (Tweets) mit Naive Bayes (MultinominalNB) in Scikit-lernen. Meine Zugdaten haben 1000 Features und meine Testdaten haben 1200 Features. Angenommen 500 Funktionen sind sowohl für Zug- als auch für Testdaten üblich.Naive Bayes unsichtbare Funktionen Handhabung scikit lernen

Ich frage mich, warum MultinominalNB in ​​scikit lernen nicht ungesehen Funktionen handhaben, und gibt mir eine Fehlermeldung:

Traceback (most recent call last): 
    File "/Users/osopova/Documents/00_KSU_Masters/01_2016_Spring/Twitter_project/mda_project_1/step_4.py", line 60, in <module> 
    predict_Y = classifiers[i].predict(test_X) 
    File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 65, in predict 
    jll = self._joint_log_likelihood(X) 
    File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 672, in _joint_log_likelihood 
    return (safe_sparse_dot(X, self.feature_log_prob_.T) 
    File "/Library/Python/2.7/site-packages/sklearn/utils/extmath.py", line 184, in safe_sparse_dot 
    return fast_dot(a, b) 
ValueError: matrices are not aligned 

Antwort

2

Es behandelt nicht ungesehen Funktionen, weil Sie keinen Hinweis Benennung Funktionen geben sie. Warum haben Sie 1200 Funktionen in einem Fall und 1000 in einem anderen? Wahrscheinlich weil in der Testumgebung Objekte vorhanden waren, die im Training nicht vorhanden waren - aber wie soll Naive Bayes herausfinden, welche dieser 1200 in 1000 fehlen? In dieser Implementierung (was nur möglich ist, wenn Sie Arrays als Eingabe annehmen) ist es Ihre Pflicht, alle Spalten zu entfernen, die nicht mit denen im Trainingssatz übereinstimmen. Fügen Sie Spalten von Nullen (in gültigen Punkten) hinzu, wenn es sich um die andersherum, und am wichtigsten - stellen Sie sicher, dass "ith" Spalte in einem Satz der gleiche ist (erfasst das Auftreten des gleichen Wortes/Objekts) als "ith" Spalte in der zweiten. Folglich gibt es in Ihrem Fall nur 500 Spalten, die tatsächlich verwendet werden können, und Naive Bayes hat keine Informationen, wie Sie diese finden können. Sie müssen im Test-Szenario die gleichen 1000 Merkmale bereitstellen, die im Zug verwendet wurden. In Ihrem Fall bedeutet das, dass Sie 700 während des Zuges nicht gesehene Spalten entfernen und (in gültigen Punkten!) 500 Spalten mit Nullen hinzufügen.

Insbesondere bietet Ihnen scikit-learn viele Datenvorverarbeitungsprogramme, die das für Sie erledigen (wie CountVectorizer etc.).

Verwandte Themen