Ich habe ein kleines Korpus und ich möchte die Genauigkeit der naiven Bayes Klassifikator mit 10-fach-Kreuzvalidierung zu berechnen, wie es geht.Wie man die a k-falten Kreuzvalidierung in Scikit mit Naive Bayes Klassifikator und NLTK
Antwort
Ihre Optionen sind, entweder dies selbst einzurichten oder etwas wie NLTK-Trainer seit NLTK doesn't directly support cross-validation for machine learning algorithms zu verwenden.
Ich würde wahrscheinlich empfehlen, nur ein anderes Modul, um dies für Sie tun, aber wenn Sie wirklich Ihren eigenen Code schreiben möchten, könnten Sie etwas wie folgt tun.
Angenommen, Sie wollen 10fach, würden Sie haben Ihre Ausbildung für jede Kombination von Untergruppen in 10
Subsets Zug auf 9/10
, Test auf dem verbleibenden 1/10
, und tun dies auf partitionieren (10
).
Ihre Trainingssatz ist in einer Liste training
, eine einfache Möglichkeit, dies sein,
num_folds = 10
subset_size = len(training)/num_folds
for i in range(num_folds):
testing_this_round = training[i*subset_size:][:subset_size]
training_this_round = training[:i*subset_size] + training[(i+1)*subset_size:]
# train using training_this_round
# evaluate against testing_this_round
# save accuracy
# find mean accuracy over all rounds
danke Jared für deine Antwort, aber was kann ich mit der Bibliothek scikit cross_validation.KFold-lernen mit dem naiven Bayes-Klassifikator von NLTK? – user2284345
Dieser scheint besser zu sein als sklearns cross_validation. –
Warum denkst du, das ist besser als das von Sklearn? – 12MonthsASlav
ich verwendet habe, beide Bibliotheken und NLTK für Kreuzvalidierung für naivebayes sklearn würde zu erreichen genannt Unter der Annahme:
import nltk
from sklearn import cross_validation
training_set = nltk.classify.apply_features(extract_features, documents)
cv = cross_validation.KFold(len(training_set), n_folds=10, indices=True, shuffle=False, random_state=None, k=None)
for traincv, testcv in cv:
classifier = nltk.NaiveBayesClassifier.train(training_set[traincv[0]:traincv[len(traincv)-1]])
print 'accuracy:', nltk.classify.util.accuracy(classifier, training_set[testcv[0]:testcv[len(testcv)-1]])
und am Ende berechnet ich die durchschnittliche Genauigkeit
die zweite Antwort Modifiziert:
cv = cross_validation.KFold(len(training_set), n_folds=10, shuffle=True, random_state=None)
von Jared's answer inspiriert, hier ist eine Version mit einem Generator:
def k_fold_generator(X, y, k_fold):
subset_size = len(X)/k_fold # Cast to int if using Python 3
for k in range(k_fold):
X_train = X[:k * subset_size] + X[(k + 1) * subset_size:]
X_valid = X[k * subset_size:][:subset_size]
y_train = y[:k * subset_size] + y[(k + 1) * subset_size:]
y_valid = y[k * subset_size:][:subset_size]
yield X_train, y_train, X_valid, y_valid
Ich gehe davon aus, dass Ihre Daten gesetzt X
N Datenpunkte (= 4 im Beispiel) hat und D-Funktionen (= 2 im Beispiel). Die zugehörigen N-Etiketten sind in y
gespeichert.
X = [[ 1, 2], [3, 4], [5, 6], [7, 8]]
y = [0, 0, 1, 1]
k_fold = 2
for X_train, y_train, X_valid, y_valid in k_fold_generator(X, y, k_fold):
# Train using X_train and y_train
# Evaluate using X_valid and y_valid
Eigentlich sind keine langen Schleifeniterationen erforderlich, die in der am häufigsten aufgewerteten Antwort enthalten sind. Auch die Wahl des Klassifikators ist irrelevant (es kann jeder Klassifikator sein).
Scikit bietet cross_val_score, die alle Schleifen unter der Haube macht.
- 1. N-Gramm mit Naive Bayes Klassifikator
- 2. Entscheidungsbaum vs. Naive Bayes Klassifikator
- 3. Naive Bayes Klassifikator mit binären Daten
- 4. interpretieren Naive Bayes Ergebnisse
- 5. Speichern Sie Naive Bayes Trained Classifier in NLTK
- 6. Naive Bayes Classifier Fehler
- 7. Naive Bayes unsichtbare Funktionen Handhabung scikit lernen
- 8. TextBlob Naive Bayes Textklassifikation
- 9. Mit scikit-lernen Klassifikator in Nltk, Multiklassen-Fall
- 10. Mit Naive Bayes neuen Werte
- 11. Naive Bayes Klassifikator: Muss die Korpusgröße für jede Kategorie gleich sein?
- 12. Implement Gaussian Naive Bayes
- 13. Machine Learning Naive Bayes Klassifizierer in Python
- 14. Algorithmus verstehen - multinomiale naive Bayes
- 15. Komplikation mit Log-Wahrscheinlichkeiten - Naive Bayes Textklassifizierer
- 16. Beispielgewichte in scikit-learn gebrochene Kreuzvalidierung
- 17. Wie kombiniere ich K-Means-Clustering mit Naive Bayes
- 18. Hashingvectorizer und Multinomial naive Bayes arbeiten nicht zusammen
- 19. Multinomiale Naive Bayes in bnlearn, Vorhersage Klärung
- 20. Implementieren Naive Bayes für die Textklassifizierung mit Quanteda
- 21. Naive Bayes Classifier Mathematik - Mangel an Präzision in Computing
- 22. Was ist "naiv" in einem naiven Bayes Klassifikator?
- 23. Einfaches Beispiel mit BernoulliNB (Bayes-Klassifikator) Scikit-Learn in Python - erklären kann nicht Klassifizierung
- 24. Text Klassifizierung in Python - (NLTK Satz basiert)
- 25. spark-ml naive bayes Speichern auf hdfs
- 26. Normale Bayes Implementierung in OpenCV
- 27. Was sind die besten Ressourcen, um zu lernen, wie man Naive Bayes-Klassifikatoren in SSAS implementiert?
- 28. Kombinieren von Grid-Suche und Kreuzvalidierung in scikit lernen
- 29. scikit-learn Unterabtastung von unsymmetrischen Daten für die Kreuzvalidierung
- 30. wie überprüft man, welche Version von Nltk, Scikit lernen installiert?
Keine Notwendigkeit für Schleifen, [scikit bietet eine Hilfsfunktion] (http://stackoverflow.com/a/38711253/1090562), die alles für Sie erledigt. –